làm cho org-blank-before-new-entry phân biệt giữa danh sách TODO và phác thảo văn bản?


10

Giống như nhiều người trong chúng ta, tôi sử dụng chế độ org cho hai thứ khác nhau:

  1. Là người quản lý danh sách TODO
  2. Là một người viết văn bản

Tôi muốn các dòng trống của tôi hoạt động khác nhau dựa trên ngữ cảnh.

  1. Danh sách TODO: không có dòng trống
  2. phác thảo văn bản: tự động chèn 1 dòng trống khi văn bản không có tiêu đề đi trước một tiêu đề

Nói cách khác, khi tôi thực hiện một danh sách TODO khi tôi có nhiều tiêu đề liên tiếp, tôi không muốn ngắt dòng giữa chúng.

Chế độ danh sách TODO, không ngắt dòng:

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

Tuy nhiên, khi tôi viết văn bản, tôi muốn ngắt dòng vì mục đích của khoảng trắng trực quan / dễ đọc.

chế độ phác thảo, dòng trống trước khi tiêu đề:

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

Tôi đã đặt org-blank-before-new-entry thành auto:

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

Nhưng tôi nghĩ org-blank-before-new-entry hoạt động bằng cách phát hiện các dòng trống khác trong khu vực. Tôi muốn nó phát hiện xem dòng văn bản trước là tiêu đề hay không tiêu đề.

Làm cách nào tôi có thể sửa đổi org-blank-before-new-entry để khi tôi trong danh sách TODO chỉ bao gồm các tiêu đề, org-meta-returnkhông thêm dấu ngắt dòng? Nhưng sau một khối văn bản, nó làm gì?


Bạn đã tìm thấy một sửa chữa cho điều này? Tôi đã thử hỏi cùng một câu hỏi trên subacdit một lúc trước nhưng không có kết quả.
MajorBriggs

Vâng, thông qua một chức năng tùy chỉnh. Tôi sẽ đăng.
sợi đốt

Câu trả lời:


5

Điều này có thể được thực hiện bằng cách tạo một chức năng tùy chỉnh để kiểm tra xem liệu nó có trên tiêu đề org hay không.

(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
Làm cách nào tôi có thể làm việc này với ba cách khác để chèn tiêu đề: C-ret(org-insert-title-resp-content), M-S-return(org-insert-todo-title) và C-S-return(org-insert-todo-title-resp -Nội dung)?
MajorBriggs

Để làm rõ: org-insert-todo-headingkhông hoạt động ngay cả khi tôi liên kết nó với một khóa như thế này: (xác định khóa org-mode-map (kbd "MS- <return>") 'smart-org-insert-todo-title-dwim)
MajorBriggs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.