Anahat Yolu Tamamlama ile Noktaya Kuruluş Kimliği Bağlantısı Ekleme


12

Şu anda dahili kuruluş modu kuruluş kimliği bağlantıları eklemek için bir başlığa gidiyorum veya gündem görünümünde (Ca'nın başlık testi arama RET) yukarı çekiyorum, bağlantıyı Cl (org-store-link) ile saklayıp, Bağlantıyı eklemek istiyorum, daha sonra bağlantıyı Cc Cl (org-insert-link) ile eklemek istiyorum.

Bunun yerine, org-refile (Cc Cw) benzeri sekme tamamlama kullanarak geçerli noktaya bir bağlantı eklememe izin veren bir anahtarı eşlemeyi tercih ederim. Amaçlanan sonuç şu biçimdeki bir kuruluş kimliği dahili bağlantısı olacaktır:

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

Org-id.el'den bakıldığında, bu amaç için org-id-get-anahat-yolu-tamamlama ile tasarlanmış gibi görünüyor. Denedim:

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

ama amaçlandığı gibi çalışmadı.

İnit.el dosyamda aşağıdakiler var:

;; 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)

Konumunda "-" eksik org-id-get-with outline-path-completion. Sorun bu mu?
erikstokes

Ne yazık ki hayır - sadece tipografik bir hataydı. Soruyu güncelledim.
sk8ingdom

Çok kötü. Nasıl başarısız oluyor? Denediğimde işe yarıyor.
erikstokes

Bu fonksiyon kesinlikle çağrılır. Giriş için beni soruyor, sekme tamamlama yoluyla gezinmeme izin veriyor (harika ve amaçlandığı gibi çalışıyor), ancak enter tuşuna bastığımda, bağlantıyı yapıştırmak yerine imleci Cc'ye benzer şekilde geçerli başlığa taşır Cu (anahat yukarı gitme).
sk8ingdom

Bunun eski bir kuruluş sürümünden kaynaklanmış olabileceğini düşündüm, ancak en son Emacs 24.5'te denedim, bu yüzden yapılandırmamda bir şey olmalı. Yukarıdaki kodumun kendileri için bir bağlantı eklediğini onaylayan var mı?
sk8ingdom

Yanıtlar:


6

Kuruluş modu kaynağında dolaştım ve minimal olarak belgelenmiş bir özellik buldum . Bir işlev tanımlarsanız org-TYPE-complete-link, tür bağlantılarına tamamlama sağlamak için kullanılır TYPE. Bu nedenle org-id-complete-link, tamamlama işlemini yapan ve bağlantıyı döndüren bir işlev tanımlamamız gerekiyor ("id:" öneki dahil).

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

Bağlantıyı normal şekilde ekleyin (ile C-c C-l), tür ve tamamlama işlevi etkinleşeceğinden "id:" öğesini seçin.

DÜZENLEME: org-mode9.0 sürümünden itibaren yukarıdaki işlevi tanımlamak artık işe yaramıyor ( ref ). Bunun yerine size tamamlama fonksiyonu eklemek zorunda org-link-parameterskullanarak

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

Bu mükemmel ve amaçlandığı gibi çalışıyor! Yaptığım tek değişiklik, org-id-get-with-anahat-yol-tamamlama için bir argüman olarak org-refile-targets eklemekti. Bu şekilde, kuruluş dosyalarımın HERHANGİ bağlantılarını alabilirim. Yardımın için teşekkürler!
sk8ingdom

@ sk8ingdom Sorunu nihai çözümünüzü içerecek şekilde güncelleyebilir misiniz? TARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
Doktorun

Son çözüm, yukarıdaki işlevi tanımlamak ve 9 org-link-set-parameterskullanıyorsanız da çağırmaktır org-mode. Ek argüman , yeniden doldururken yaptığınız org-id-get-with-outline-path-completiongibi seçtiğiniz başlıkları sınırlamanıza izin org-refile-targetsverir. Her şey için yardıma bakın, ancak ortak bir ayar, ((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))gündem dosyalarında 3 düzey derinliğinde ve mevcut arabellekte 2 düzey ile sınırlıdır.
erikstokes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.