czy chcesz, aby org-blank-before-new-entry odróżniał listę rzeczy do zrobienia od konturu tekstu?

10

Jak wielu z nas, używam trybu org do dwóch różnych rzeczy:

  1. Jako menedżer listy TODO
  2. Jako konspektu tekstu

Chciałbym, aby moje puste wiersze działały inaczej w zależności od kontekstu.

  1. Lista rzeczy do zrobienia: brak pustych linii
  2. kontur tekstu: automatycznie wstaw 1 pustą linię, gdy tekst bez nagłówka poprzedza nagłówek

Innymi słowy, kiedy robię listę rzeczy do zrobienia, gdy mam wiele nagłówków z rzędu, nie chcę między nimi przerywanych podziałów linii.

Tryb listy rzeczy do zrobienia, bez podziału linii:

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

Jednak gdy piszę tekst, chcę łamać wiersze ze względu na wizualne białe znaki / łatwość czytania.

tryb konspektu, pusta linia przed nagłówkiem:

* 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.  

Ustawiłem już org-blank-before-new-entry na auto:

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

Ale myślę, że org-blank-before-new-entry działa, wykrywając inne puste linie w okolicy. Chcę, aby wykrył, czy poprzedni wiersz tekstu jest nagłówkiem, czy nie nagłówkiem.

Jak mogę zmodyfikować pozycję org-blank-before-new-entry, aby na liście rzeczy do zrobienia składającej się tylko z nagłówków org-meta-returnnie dodawać podziału wiersza? ale po bloku tekstu tak się dzieje?

żarnik
źródło
Czy znalazłeś rozwiązanie tego problemu? Próbowałem zadać to samo pytanie subreddit emacsa jakiś czas temu, ale bezskutecznie.
MajorBriggs
Tak, dzięki funkcji niestandardowej. Opublikuję
incandescentman

Odpowiedzi:

5

Można to zrobić, tworząc niestandardową funkcję, która sprawdza, czy znajduje się w nagłówku organizacji.

(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) 
żarnik
źródło
1
Jak mogę sprawić, by działało to również w przypadku trzech innych sposobów wstawiania nagłówków: C-ret(org-insert-head-szacunek-treść), M-S-return(org-insert-todo-header) i C-S-return(org-insert-todo-header-respekt -zadowolony)?
MajorBriggs,
Wyjaśnienie: org-insert-todo-headingnie działa, nawet jeśli powiążę go z takim kluczem: (zdefiniuj klucz org-mode-map (kbd „MS- <powrót>”) 'smart-org-insert-todo-header-dwim)
MajorBriggs,