Вставте Org-id-посилання в пункті через контур контуру


12

В даний час, щоб вставити внутрішні посилання org-id org-id, я переходжу до заголовка або підтягую його у вікні порядку денного (Ca s заголовок тестового пошуку 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-завершення контуру було розроблено для цієї мети. Я намагався:

(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-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:", оскільки тип і функція завершення запуститься.

EDIT: З 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. Таким чином, я можу взяти посилання з будь-яких моїх файлів org. Спасибі за вашу допомогу!
sk8ingdom

@ sk8ingdom Чи можете ви оновити питання, щоб включити своє остаточне рішення? Я не впевнений, що означає docTARGETS 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.