Wstaw punkt Org-id w punkcie poprzez zakończenie ścieżki konspektu


11

Obecnie, aby wstawić wewnętrzne linki org-id org-mode, nawiguję do nagłówka lub podciągam go w widoku planu (wyszukiwanie testu nagłówka Ca RET), przechowuję link za pomocą Cl (org-store-link), wracając do miejsca Chcę wstawić link, a następnie wstawić link za pomocą Cc Cl (org-insert-link).

Zamiast tego wolę zmapować klucz, który pozwala mi wstawić łącze w bieżącym punkcie, używając uzupełniania tabulacji podobnego do org-refile (Cc Cw). Zamierzonym rezultatem byłby wewnętrzny link org-id w postaci:

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

Przeglądając org-id.el, wygląda na to, że org-id-get-with-outline-path-complete został zaprojektowany w tym celu. Próbowałem:

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

ale to nie działało zgodnie z przeznaczeniem.

W moim pliku init.el mam następujące elementy:

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

Brakuje „-” w org-id-get-with outline-path-completion. Czy to jest problem?
erikstokes

Niestety nie - był to tylko błąd typograficzny. Zaktualizowałem pytanie.
sk8ingdom

Szkoda Jak to się nie udaje? Działa, kiedy próbuję.
erikstokes

Funkcja jest zdecydowanie nazywana. Monituje mnie o wpis, pozwala mi nawigować poprzez uzupełnianie tabulatorów (co jest świetne i działa zgodnie z przeznaczeniem), ale kiedy nacisnę Enter, zamiast wkleić link, po prostu przesuwa kursor do bieżącego nagłówka, podobnie jak DW Cu (nagłówek do góry).
sk8ingdom

Myślałem, że mogło to być spowodowane nieaktualną wersją org, ale wypróbowałem najnowszą wersję Emacsa 24.5, więc musi to być coś w mojej konfiguracji. Czy ktoś może potwierdzić, że mój powyższy kod faktycznie wstawia dla nich link?
sk8ingdom

Odpowiedzi:


6

Przeszukałem źródło w trybie org i znalazłem minimalnie udokumentowaną funkcję. Jeśli zdefiniujesz funkcję org-TYPE-complete-link, zostanie ona użyta do uzupełnienia linków typu TYPE. Musimy więc zdefiniować funkcję, org-id-complete-linkktóra wykona nasze zakończenie i zwróci link (w tym przedrostek „id:”).

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

Wstaw link w normalny sposób (za pomocą C-c C-l), wybierz „id:” jako typ, a uruchomi się funkcja uzupełniania.

EDYCJA: Od org-modewersji 9.0 samo zdefiniowanie powyższej funkcji nie działa ( ref ). Zamiast tego musisz dodać funkcję uzupełniania do org-link-parametersużywania

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

To jest doskonałe i działa zgodnie z przeznaczeniem! Jedyną modyfikacją, którą wprowadziłem, było dodanie celów org-refile-target jako argumentu do org-id-get-with-outline-path-complete. W ten sposób mogę pobierać linki z DOWOLNEGO z moich plików org. Dzięki za pomoc!
sk8ingdom

@ sk8ingdom Czy możesz zaktualizować pytanie, aby uwzględnić ostateczne rozwiązanie? Nie jestem pewien, co doktor rozumie przezTARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
kshenoy

Ostatnim rozwiązaniem jest zdefiniowanie powyższej funkcji, a także wywołanie, org-link-set-parametersjeśli używasz org-mode9. Dodatkowy argument, który org-id-get-with-outline-path-completionpozwala ci ograniczyć nagłówki, które wybrałeś, podobnie jak org-refile-targetspodczas refile. Zobacz pomoc na wszystko, ale częstym ustawieniem jest ((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))ograniczenie do 3 poziomów głęboko w plikach programu i 2 w bieżącym buforze.
erikstokes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.