แทรก Org-id Link ที่จุดผ่านการเสร็จสิ้นเส้นทางของ Outline


12

ขณะนี้การแทรกลิงก์ org-id โหมดองค์กรภายในฉันไปที่ส่วนหัวหรือดึงขึ้นในมุมมองกำหนดการ (การทดสอบการทดสอบส่วนหัวของ RET), จัดเก็บลิงก์ด้วย Cl (org-store-link) กลับไปยังตำแหน่ง ฉันต้องการแทรกลิงค์จากนั้นใส่ลิงค์ด้วย Cc Cl (org-insert-link)

ฉันต้องการแมปคีย์ที่ให้ฉันแทรกลิงค์ที่จุดปัจจุบันโดยใช้การเติมเต็มของแท็บที่คล้ายกับ org-refile (Cc Cw) แทน ผลลัพธ์ที่ตั้งใจไว้จะเป็นลิงค์ภายใน org-id ในรูปแบบ:

[[id:d7534b2f-c221-4dea-8566-d5ce3e4e1b78][Example Link]]

เมื่อมองผ่าน org-id.el ดูเหมือนว่า org-id-get-with-outline-path-complete ถูกออกแบบมาเพื่อจุดประสงค์นี้ ฉันเหนื่อย:

(global-set-key "\C-ci" (lambda () (interactive) (org-id-get-with-outline-path-completion)))

แต่มันไม่ทำงานตามที่ตั้งใจไว้

ฉันมีสิ่งต่อไปนี้ในไฟล์ init.el ของฉัน:

;; Use global IDs
(require 'org-id)
(setq org-id-link-to-org-use-id t)

;; Update ID file .org-id-locations on startup
(org-id-update-id-locations)

;; Refile options
(setq org-refile-targets (quote ((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))))
(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps t)
(setq org-refile-allow-creating-parent-nodes t)

คุณกำลังหายไป "-" org-id-get-with outline-path-completionใน นั่นเป็นปัญหาหรือไม่
erikstokes

น่าเสียดายที่ไม่ใช่ - มันเป็นเพียงข้อผิดพลาดในการพิมพ์ ฉันได้อัปเดตคำถามแล้ว
sk8ingdom

เลวมาก. มันล้มเหลวได้อย่างไร? มันทำงานได้เมื่อฉันลอง
erikstokes

ฟังก์ชั่นนี้เรียกว่าแน่นอน มันแจ้งให้ฉันสำหรับรายการที่ช่วยให้ฉันนำทางผ่านแท็บเสร็จสมบูรณ์ (ซึ่งเป็นสิ่งที่ดีและทำงานได้ตามที่ตั้งใจ) แต่เมื่อฉันกด Enter แทนที่จะวางลิงค์ก็แค่ย้ายเคอร์เซอร์ไปที่พาดหัวปัจจุบันคล้ายกับ Cc Cu (โครงร่างหัวเรื่อง)
sk8ingdom

ฉันคิดว่าสิ่งนี้อาจเกิดจากรุ่น org เก่า แต่ลองใช้งานล่าสุดใน Emacs 24.5 ดังนั้นจึงต้องเป็นสิ่งที่อยู่ในการกำหนดค่าของฉัน ทุกคนสามารถยืนยันได้ว่ารหัสของฉันด้านบนแทรกลิงค์สำหรับพวกเขาหรือไม่
sk8ingdom

คำตอบ:


6

ฉันแหย่ไปรอบ ๆ ในแหล่งที่มาของโหมด org และพบคุณลักษณะที่มีเอกสารน้อยที่สุด หากคุณกำหนดฟังก์ชั่นก็จะถูกนำมาใช้เพื่อให้เสร็จสิ้นสำหรับการเชื่อมโยงจากประเภทorg-TYPE-complete-link TYPEดังนั้นเราเพียงแค่ต้องกำหนดฟังก์ชั่นorg-id-complete-linkที่จะทำให้เสร็จสมบูรณ์และส่งคืนลิงก์ (รวมถึงคำนำหน้า "id:")

(defun org-id-complete-link (&optional arg)
  "Create an id: link using completion"
  (concat "id:"
          (org-id-get-with-outline-path-completion)))

แทรกลิงก์ตามปกติ (พร้อมC-c C-l) เลือก "id:" เนื่องจากประเภทและฟังก์ชั่นเสร็จสิ้นจะเริ่มทำงาน

แก้ไข: ในฐานะของorg-modeรุ่น 9.0 เพียงกำหนดฟังก์ชั่นดังกล่าวข้างต้นไม่ทำงาน ( อ้างอิง ) แต่คุณต้องเพิ่มฟังก์ชั่นเสร็จสิ้นการorg-link-parametersใช้

(org-link-set-parameters "id"
                         :complete 'org-id-complete-link)

นี่ยอดเยี่ยมและทำงานตามที่ตั้งใจ! การแก้ไขเพียงอย่างเดียวที่ฉันทำคือการเพิ่ม org-refile-target เป็นอาร์กิวเมนต์สำหรับ org-id-get-with-outline-path-complete ด้วยวิธีนี้ฉันสามารถคว้าลิงก์จากไฟล์ org ของฉันได้ ขอบคุณสำหรับความช่วยเหลือของคุณ!
sk8ingdom

@ sk8ingdom คุณสามารถอัปเดตคำถามเพื่อรวมคำตอบสุดท้ายได้หรือไม่? ฉันไม่แน่ใจว่าเอกสารหมายถึงอะไรTARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
kshenoy

ทางออกสุดท้ายคือเพียงแค่กำหนดฟังก์ชั่นด้านบนและเรียกใช้org-link-set-parametersถ้าคุณกำลังใช้org-mode9. อาร์กิวเมนต์พิเศษที่org-id-get-with-outline-path-completionให้คุณ จำกัด หัวข้อที่คุณเลือกเช่นเดียวกับorg-refile-targetsเมื่อคุณ refile ดูความช่วยเหลือสำหรับทุกสิ่ง แต่การตั้งค่าทั่วไปนั้น((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))จำกัด ไว้ที่ 3 ระดับลึกในไฟล์วาระและ 2 ในบัฟเฟอร์ปัจจุบัน
erikstokes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.