far distinguere org-blank-before-new-entry tra un elenco TODO e un contorno di testo?


10

Come molti di noi, utilizzo la modalità org per due cose diverse:

  1. Come gestore di elenchi TODO
  2. Come testo outliner

Vorrei che le mie righe vuote funzionassero diversamente in base al contesto.

  1. Elenco TODO: nessuna riga vuota
  2. struttura del testo: inserisce automaticamente 1 riga vuota quando il testo senza titolo precede un'intestazione

In altre parole, quando sto facendo un elenco TODO quando ho molte intestazioni di fila, non voglio interruzioni di linee vaganti tra di loro.

Modalità elenco TODO, nessuna interruzione di riga:

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

Tuttavia, quando scrivo testo, voglio interruzioni di riga per motivi di spazio bianco visivo / facilità di lettura.

modalità struttura, riga vuota prima dell'intestazione:

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

Ho già impostato org-blank-before-new-entry su auto:

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

Ma penso che org-blank-before-new-entry funzioni rilevando altre righe vuote nell'area. Voglio che rilevi se la riga di testo precedente è un'intestazione o una non-intestazione.

Come posso modificare org-blank-before-new-entry in modo che quando mi trovo in un elenco TODO composto solo da intestazioni, org-meta-returnnon aggiunga un'interruzione di riga? ma dopo un blocco di testo, lo fa?


Hai trovato una soluzione per questo? Ho provato a fare la stessa domanda su emacs subreddit qualche tempo fa, ma senza risultati.
MajorBriggs,

Sì, tramite una funzione personalizzata. Posterò.
incandescentman,

Risposte:


5

Questo può essere fatto creando una funzione personalizzata che controlla se si trova su un'intestazione dell'organizzazione.

(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
Come potrei farlo funzionare anche per gli altri tre modi per inserire titoli: C-ret(org-insert-header-rispetto-contenuto), M-S-return(org-insert-todo-header) e C-S-return(org-insert-todo-header-rispetto -soddisfare)?
MajorBriggs,

Per chiarire: org-insert-todo-headingnon funziona anche se lo associo a una chiave come questa: (define-key org-mode-map (kbd "MS- <return>") 'smart-org-insert-todo-header-dwim)
MajorBriggs,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.