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?


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) 

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.