Fügen Sie den Org-ID-Link am Punkt über die Vervollständigung des Gliederungspfads ein

11

Um interne Org-ID-Links im Organisationsmodus einzufügen, navigiere ich zu einer Überschrift oder rufe sie in der Agenda-Ansicht auf (Ca s Überschriften-Testsuche RET), speichere den Link mit Cl (Org-Store-Link) und gehe zurück zu wo Ich möchte den Link einfügen und dann den Link mit Cc Cl (org-insert-link) einfügen.

Stattdessen würde ich lieber einen Schlüssel zuordnen, mit dem ich am aktuellen Punkt einen Link einfügen kann, indem ich die Tab-Vervollständigung ähnlich wie bei org-refile (Cc Cw) verwende. Das beabsichtigte Ergebnis wäre ein interner Link zur Organisations-ID in der Form:

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

Wenn Sie org-id.el durchsehen, scheint es, als ob org-id-get-with-Outline-Path-Completion für diesen Zweck entwickelt wurde. Ich habe es versucht:

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

aber es hat nicht wie beabsichtigt funktioniert.

Ich habe Folgendes in meiner init.el-Datei:

;; 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)
sk8ingdom
quelle
Ihnen fehlt ein "-" in org-id-get-with outline-path-completion. Ist das das Problem?
Erikstokes
Leider nicht - es war nur ein Tippfehler. Ich habe die Frage aktualisiert.
Sk8ingdom
Schade. Wie scheitert es? Es funktioniert, wenn ich es versuche.
Erikstokes
Die Funktion heißt definitiv. Es fordert mich zur Eingabe auf, ermöglicht mir das Navigieren über die Tab-Vervollständigung (was großartig ist und wie beabsichtigt funktioniert), aber wenn ich die Eingabetaste drücke, anstatt den Link einzufügen, bewegt es den Cursor einfach zur aktuellen Überschrift, ähnlich wie bei Cc Cu (Umriss nach oben).
Sk8ingdom
Ich dachte, dies könnte durch eine veraltete Organisationsversion verursacht worden sein, habe aber die neueste Version in Emacs 24.5 ausprobiert, sodass es etwas in meiner Konfiguration sein muss. Kann jemand bestätigen, dass mein Code oben tatsächlich einen Link für ihn einfügt?
Sk8ingdom

Antworten:

6

Ich stöberte in der Quelle im Organisationsmodus herum und fand eine minimal dokumentierte Funktion. Wenn Sie eine Funktion definieren org-TYPE-complete-link, wird diese verwendet, um Links vom Typ zu vervollständigen TYPE. Wir müssen also nur eine Funktion definieren org-id-complete-link, die unsere Vervollständigung ausführt und den Link zurückgibt (einschließlich des Präfixes "id:").

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

Fügen Sie den Link wie gewohnt ein (mit C-c C-l), wählen Sie "id:" als Typ und die Vervollständigungsfunktion wird ausgelöst.

BEARBEITEN: Ab org-modeVersion 9.0 funktioniert das Definieren der Funktion wie oben nicht mehr ( ref ). Stattdessen müssen Sie die Vervollständigungsfunktion zur org-link-parametersVerwendung hinzufügen

(org-link-set-parameters "id"
                         :complete 'org-id-complete-link)
erikstokes
quelle
Das ist hervorragend und funktioniert wie vorgesehen! Die einzige Änderung, die ich vorgenommen habe, war das Hinzufügen von org-refile-Zielen als Argument für die Vervollständigung von org-id-get-with-Outline-Path. Auf diese Weise kann ich Links aus JEDER meiner Organisationsdateien abrufen. Danke für Ihre Hilfe!
Sk8ingdom
@ sk8ingdom Können Sie die Frage aktualisieren, um Ihre endgültige Lösung aufzunehmen? Ich bin nicht sicher, was der Doc mitTARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
kshenoy
Die endgültige Lösung besteht darin, nur die obige Funktion zu definieren und auch aufzurufen, org-link-set-parameterswenn Sie org-mode9 verwenden. Das zusätzliche Argument, org-id-get-with-outline-path-completionmit dem Sie die Überschriften, aus org-refile-targetsdenen Sie ausgewählt haben, genau wie beim erneuten Abrufen einschränken können. In der Hilfe finden Sie alles, aber eine übliche Einstellung ist ((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))die Beschränkung auf 3 Ebenen in Agenda-Dateien und 2 im aktuellen Puffer.
Erikstokes