2012-03-29 10 views
4

Ich möchte mark-paragraph (auch für die Bewegung mit Vorwärts/Rückwärts-Absatz) in org-Modus Puffer auf die gleiche Weise wie in anderen Hauptmodi, dh zu Markieren Sie einen durch Leerzeilen begrenzten fortlaufenden Bereich. Dies sollte auch für Überschriften, Listenelemente, Zeilen, die mit '#' beginnen, usw. gelten. Das heißt, ich möchte für die Zwecke der Absatzbearbeitung alles als normalen Text behandeln.Ändern Sie die Definition von Absatz (zB im org-Modus)

Ist das möglich?

+0

Ich kann durch Absätze mit 'M- {' oder 'M-}' bewegen. Bedeutet das nicht schon, dass es so funktioniert (außer dem Hinzufügen eines Listenelements, das als Absatz behandelt wird)? – suvayu

+0

Richtig - was ich halte, sind Kopfzeilen, Listenelemente und Kommentarzeilen, die genauso behandelt werden wie normaler Text. Ich habe die Frage entsprechend bearbeitet. – user673592

Antwort

4

Siehe die Variablen paragraph-start und paragraph-separate und möglicherweise auch die use-hard-newlines Funktion, die verwandt ist (aber wahrscheinlich nicht wirklich relevant in diesem Fall).

(defun use-default-paragraph-delimiters() 
    (setq paragraph-start (default-value 'paragraph-start) 
     paragraph-separate (default-value 'paragraph-separate))) 

(add-hook 'org-mode-hook 'use-default-paragraph-delimiters) 

Edit: Zugegeben, org-Modus könnte für mehr auf seinen Absatz Definitionen abhängen nur interaktiv als Markierung und bewegend, hier also ein gezielter Ansatz die Absatz Definitionen für diese Befehle nur für die Anpassung, wenn interaktiv aufgerufen Verwenden ihrer Tastenbelegungen.

(defmacro with-default-paragraph-definition (&rest body) 
    "Evaluate body forms using the default definition of a paragraph." 
    `(let ((paragraph-start (default-value 'paragraph-start)) 
     (paragraph-separate (default-value 'paragraph-separate))) 
    ,@body)) 

(defalias 'my-org-mark-paragraph 'mark-paragraph) 
(defadvice my-org-mark-paragraph 
    (around my-org-mark-paragraph-advice activate) 
    (with-default-paragraph-definition ad-do-it)) 

(defalias 'my-org-forward-paragraph 'forward-paragraph) 
(defadvice my-org-forward-paragraph 
    (around my-org-forward-paragraph-advice activate) 
    (with-default-paragraph-definition ad-do-it)) 

(defalias 'my-org-backward-paragraph 'backward-paragraph) 
(defadvice my-org-backward-paragraph 
    (around my-org-backward-paragraph-advice activate) 
    (with-default-paragraph-definition ad-do-it)) 

(defun my-org-paragraph-overrides() 
    "Use the default paragraph definitions in org-mode 
     when marking or moving by paragraph." 
    (local-set-key [remap mark-paragraph] 'my-org-mark-paragraph) 
    (local-set-key [remap forward-paragraph] 'my-org-forward-paragraph) 
    (local-set-key [remap backward-paragraph] 'my-org-backward-paragraph)) 

(add-hook 'org-mode-hook 'my-org-paragraph-overrides) 
+0

Es tut mir leid, dass ich so lange gebraucht habe, dass ich mit viel Arbeit verfolgt wurde. Das ist fantastisch! Danke für die Lösung und die Sorgfalt, die Sie für diese Antwort verwendet haben! – user673592

1

Sie können versuchen, die Variable paragraph-start anzupassen. Ich bin mir nicht sicher, was hier angebracht wäre, Org setzt es zu etwas ziemlich aufwendigen , wie Sie in der zitierten Docstring unten sehen. Setzen Sie es auf den Standard könnte funktionieren, oder Sie könnten versuchen use-hard-newlines wie im folgenden Zitat erwähnt.

paragraph-start ist eine Variable, die in `paragles.el 'definiert ist.

Sein Wert ist „\ f \ | [] $ \ | \ + \ | [] # \ | \ ([] \ ([- +] \ | \ (\ ([0- 9] + \) [.)] \) \) \ | [] + \ * \) \ ([] + \ | $ \) \ | [] * [: |] \ | \ $ \ $ \ | \ \\ (beginnen \ | Ende \ | [] [] \)“

Original-Wert war "\ f \ | [] * $"

Lokale in Puffer coding.org; globaler Wert ist "\ f \ | [] * $"

Diese Variable ist sicher als lokale Dateivariable, wenn ihr Wert das Prädikat `stringp 'erfüllt.

Dokumentation: Regexp für den Anfang einer Zeile, die beginnt ODER Absätze trennt. Diese Regexp sollte mit Zeilen übereinstimmen, die die Absätze trennen, und sollte auch Zeilen enthalten, die einen Absatz (und sind Teil dieses Absatzes) beginnen.

Dies wird mit dem Text am linken Rand verglichen, der nicht unbedingt der Anfang der Zeile ist, so sollte es nie "^" als Anker verwenden. Diese stellt sicher, dass die Absatzfunktionen innerhalb einer Region des durch eine Randeinstellung eingerückten Texts gleich gut funktionieren.

Die Variable 'paragraph-separate' gibt an, wie Zeilen unterschieden werden, die Absätze von Zeilen beginnen, die sie trennen.

Wenn die Variable `use-hard-newlines 'nicht-nil ist, werden nur Zeilen berücksichtigt, die einem harten Zeilenumbruch entsprechen.

+0

Vielen Dank! Das war die richtige Idee. Ich habe die phils-Lösung akzeptiert, nur weil ich expliziter bin. – user673592

Verwandte Themen