зробити org-blank перед новим записом, розрізняти список TODO та контур тексту?


10

Як і багато хто з нас, я використовую org-mode для двох різних речей:

  1. Як менеджер списку TODO
  2. Як контур тексту

Я хотів би, щоб мої порожні рядки працювали по-різному, залежно від контексту.

  1. Список TODO: порожніх рядків немає
  2. контур тексту: автоматично вставити 1 порожній рядок, коли текст без заголовка передує заголовку

Іншими словами, коли я роблю список TODO, коли у мене є багато заголовків поспіль, я не хочу, щоб між ними були розбіжні рядки.

Режим списку TODO, без розривів рядків:

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

Однак, коли я пишу текст, я хочу перервати рядки заради візуального пробілу / простоти читання.

режим контуру, порожній рядок перед заголовком:

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

Я вже встановив org-blank-перед-новим записом для автоматичного:

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

Але я думаю, що org-blank перед новим входом працює, виявляючи інші порожні рядки в цьому районі. Я хочу, щоб він виявив, чи є попередній рядок тексту заголовком чи незаголовком.

Як я можу змінити org-blank перед новим записом, щоб, коли я перебуваю у списку TODO, що складається лише із заголовків, org-meta-returnне додавати розрив рядка? але після блоку тексту це робить?


Ви знайшли виправлення для цього? Я спробував задати той самий питання на emacs subreddit деякий час назад, але безрезультатно.
МайорБріггс

Так, через користувацьку функцію. Я допишу.
розжарювання

Відповіді:


5

Це можна зробити, створивши користувацьку функцію, яка перевіряє, чи знаходиться вона в заголовку org.

(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
Як я міг би зробити це, працюючи над трьома іншими способами вставлення заголовків, а також: C-ret(org-insert-header-respect-content), M-S-return(org-insert-todo-заголовок) та C-S-return(org-insert-todo-заголовок-відношення) -зміст)?
МайорБріггс

Для уточнення: org-insert-todo-headingне працює, навіть якщо я прив’язую його до такого клавіші: (визначити-ключ org-mode-map (kbd "MS- <return>") 'smart-org-insert-todo-header-dwim)
МайорБріггс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.