개요 경로 완성을 통해 지점에 조직 ID 링크 삽입


11

현재 내부 조직 모드 org-id 링크를 삽입하려면 제목으로 이동하거나 의제보기 (Ca s heading test search RET)로 가져 와서 Cl (org-store-link)로 링크를 저장하고 어디로 돌아갑니다. 링크를 삽입하고 Cc Cl (org-insert-link)로 링크를 삽입하고 싶습니다.

대신, org-refile (Cc Cw)과 비슷한 탭 완성을 사용하여 현재 지점에 링크를 삽입 할 수있는 키를 매핑하고 싶습니다. 의도 된 결과는 다음과 같은 형식의 조직 ID 내부 링크입니다.

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

org-id.el을 살펴보면 org-id-get-with-outline-path-completion 이이 목적을 위해 설계된 것처럼 보입니다. 나는 시도했다 :

(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

나는 이것이 오래된 조직 버전으로 인한 것이라고 생각했지만 Emacs 24.5에서 가장 최근에 시도 했으므로 내 구성에 무언가 있어야합니다. 누구든지 위의 코드가 실제로 링크를 삽입하는지 확인할 수 있습니까?
sk8ingdom

답변:


6

나는 org-mode 소스를 둘러보고 최소한의 문서화 된 기능을 발견했습니다 . 함수를 정의하면 함수 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에서 위와 같이 함수를 정의하면 더 이상 작동하지 않습니다 ( ref ). 대신에 당신은에 완성 기능을 추가해야 org-link-parameters사용

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

이것은 우수하며 의도 한대로 작동합니다! 내가 한 유일한 수정은 org-id-get-with-outline-path-completion의 인수로 org-refile-targets를 추가하는 것이 었습니다. 그렇게하면 모든 조직 파일에서 링크를 얻을 수 있습니다. 당신의 도움을 주셔서 감사합니다!
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당신이 재 파일 할 때 수행합니다. 모든 것에 대한 도움말을 참조하십시오. 그러나 일반적인 설정은 ((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))아젠다 파일에서 3 레벨, 현재 버퍼에서 2 레벨로 제한됩니다.
erikstokes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.