org-blank-before-new-entry zwischen einer TODO-Liste und einer Textkontur unterscheiden lassen?


10

Wie viele von uns benutze ich den Org-Modus für zwei verschiedene Dinge:

  1. Als TODO-Listenmanager
  2. Als Text-Outliner

Ich möchte, dass meine Leerzeilen je nach Kontext unterschiedlich funktionieren.

  1. TODO-Liste: keine Leerzeilen
  2. Textumriss: Fügt automatisch 1 leere Zeile ein, wenn vor einer Überschrift Text ohne Überschrift steht

Mit anderen Worten, wenn ich eine TODO-Liste mache, wenn ich viele Überschriften hintereinander habe, möchte ich keine Zeilenumbrüche zwischen ihnen.

TODO-Listenmodus, keine Zeilenumbrüche:

* Organize Party [33%]
 ** TODO Call people [1/2]
 *** TODO Peter
 *** DONE Sarah
 ** TODO Buy food
 ** DONE Talk to neighbor 

Wenn ich jedoch Text schreibe, möchte ich Zeilenumbrüche, um visuelle Leerzeichen und eine bessere Lesbarkeit zu gewährleisten.

Umrissmodus, leere Zeile vor Überschrift:

* Heading 
This is a document that has a heading, and a body. The body will consist of two paragraphs with sub-headings.

* Body  
This is an introduction to the body. The body has two sub-headings, each of which have their own paragraph.  

** The First Paragraph  
This is the first of two paragraphs. 

** The Second Paragraph
This is the second of two paragraphs.  

Ich habe org-blank-before-new-entry bereits auf auto gesetzt:

 ((heading . auto)
 (plain-list-item . auto))

Aber ich denke, org-blank-before-new-entry funktioniert, indem andere leere Zeilen in der Umgebung erkannt werden. Ich möchte, dass es erkennt, ob die vorhergehende Textzeile eine Überschrift oder eine Nichtüberschrift ist.

Wie kann ich org-blank-before-new-entry so ändern, dass in einer TODO-Liste, die nur aus Überschriften besteht, org-meta-returnkein Zeilenumbruch hinzugefügt wird? aber nach einem Textblock, tut es?


Haben Sie eine Lösung dafür gefunden? Ich habe vor einiger Zeit versucht, die gleiche Frage auf dem Emacs-Subreddit zu stellen, aber ohne Erfolg.
MajorBriggs

Ja, über eine benutzerdefinierte Funktion. Ich werde posten.
Glühlampen

Antworten:


5

Dies kann durch Erstellen einer benutzerdefinierten Funktion erfolgen, die prüft, ob sie sich in einer Organisationsüberschrift befindet.

(setq org-blank-before-new-entry
      '((heading . always)
       (plain-list-item . nil)))

(defun call-rebinding-org-blank-behaviour (fn)
  (let ((org-blank-before-new-entry
         (copy-tree org-blank-before-new-entry)))
    (when (org-at-heading-p)
      (rplacd (assoc 'heading org-blank-before-new-entry) nil))
    (call-interactively fn)))

(defun smart-org-meta-return-dwim ()
  (interactive)
  (call-rebinding-org-blank-behaviour 'org-meta-return))

(defun smart-org-insert-todo-heading-dwim ()
  (interactive)
  (call-rebinding-org-blank-behaviour 'org-insert-todo-heading))

(define-key org-mode-map (kbd "M-<return>") 'smart-org-meta-return-dwim) 

1
Wie könnte ich dies auch für die drei anderen Möglichkeiten zum Einfügen von Überschriften zum Laufen bringen: C-ret(org-insert-Heading-Respekt-Inhalt), M-S-return(org-Insert-Todo-Überschrift) und C-S-return(org-Insert-Todo-Überschrift-Respekt) -Inhalt)?
MajorBriggs

Zur Verdeutlichung: Funktioniert org-insert-todo-headingnicht, selbst wenn ich es an einen Schlüssel wie diesen binde: (Definiere-Schlüssel-Org-Modus-Map (kbd "MS- <Rückgabe>") 'Smart-Org-Insert-ToDo-Heading-Dwim)
MajorBriggs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.