ทำให้ org-blank-before-new-entry แยกความแตกต่างระหว่างรายการสิ่งที่ต้องทำและเค้าร่างข้อความหรือไม่


10

เช่นเดียวกับพวกเราหลายคนฉันใช้โหมด org สำหรับสองสิ่งที่ต่างกัน:

  1. เป็นผู้จัดการรายการสิ่งที่ต้องทำ
  2. เป็นตัวห้อยข้อความ

ฉันต้องการให้บรรทัดว่างของฉันทำงานแตกต่างกันตามบริบท

  1. รายการสิ่งที่ต้องทำ: ไม่มีบรรทัดว่าง
  2. เค้าร่างข้อความ: แทรก 1 บรรทัดว่างโดยอัตโนมัติเมื่อข้อความที่ไม่ใช่ส่วนหัวนำหน้าหัวเรื่อง

กล่าวอีกนัยหนึ่งเมื่อฉันทำรายการสิ่งที่ต้องทำเมื่อฉันมีหัวเรื่องเป็นจำนวนมากในแถวฉันไม่ต้องการให้ตัวแบ่งบรรทัดหลงทางระหว่างพวกเขา

โหมดรายการสิ่งที่ต้องทำไม่มีการแบ่งบรรทัด:

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

ฉันได้ตั้งค่ารายการว่างไว้ก่อนหน้าใหม่เป็นอัตโนมัติอยู่แล้ว:

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

แต่ฉันคิดว่าผลงาน org-blank-before-new-entry โดยการตรวจจับบรรทัดว่างอื่น ๆ ในพื้นที่ ฉันต้องการตรวจสอบว่าบรรทัดข้อความก่อนหน้าเป็นส่วนหัวหรือไม่ใช่ส่วนหัว

ฉันจะแก้ไข org-blank-before-new-entry เพื่อให้เมื่อฉันอยู่ในรายการสิ่งที่ต้องทำซึ่งประกอบด้วยส่วนหัวเท่านั้นorg-meta-returnไม่เพิ่มตัวแบ่งบรรทัด แต่หลังจากบล็อกข้อความมันจะทำอย่างไร


คุณพบการแก้ไขสำหรับสิ่งนี้หรือไม่? ฉันพยายามถามคำถามเดียวกันกับemacs subredditสักครู่ แต่กลับไม่มีประโยชน์
MajorBriggs

ใช่ผ่านฟังก์ชั่นที่กำหนดเอง ฉันจะโพสต์
หลอดไส้

คำตอบ:


5

สิ่งนี้สามารถทำได้โดยการสร้างฟังก์ชั่นที่กำหนดเองที่ตรวจสอบเพื่อดูว่ามันอยู่ในส่วนหัวขององค์กร

(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-header) และC-S-return(org-insert-todo-header-respect) -เนื้อหา)?
MajorBriggs

ในการชี้แจง: org-insert-todo-headingไม่ทำงานแม้ว่าฉันจะผูกไว้กับคีย์เช่นนี้: (define-key org-mode-map (kbd "MS- <return>") 'smart-org-insert-todo-header-dwim)
MajorBriggs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.