Пізно на вечірку (і до речі, моя перша публікація тут, але я думаю, це може бути корисно і іншим). Прийнята відповідь чудово працює, коли знову забирається всередину emacs, але власне текст, скопійований у буфер обміну системи, все ще є повним синтаксисом org-mode. Я хотів щось, що могло б скопіювати посилання з обох org-режимів і з emacs. Приклади використання: останнім часом я багато займаюся веб-розробниками, і часто використовую кілька браузерів. Тільки один із них може бути типовим для C-c c-o
ярлика, а іноді я хочу відкрити посилання в не за замовчуванням. Крім того, вставляти посилання на колег на Slack, et cetera.
Коротше кажучи, я придумав це рішення, змішуючи та узгоджуючи прийняту відповідь :
(defun my-org-export-url ()
(interactive)
(let* ((link-info (assoc :link (org-context)))
(text (when link-info
(buffer-substring-no-properties (or (cadr link-info) (point-min))
(or (caddr link-info) (point-max))))))
(if (not text)
(error "Not in org link")
(string-match org-bracket-link-regexp text)
(kill-new (substring text (match-beginning 1) (match-end 1))))))
Це скопіює у буфер обміну посилання лише частину посилання в органічному режимі.
Насправді я інтегрував і рішення попередньої відповіді, і цю нову функцію всередині моєї .emacs
, кожна зі своїм власним прив'язкою клавіш. Повний код тут:
(defun my-yank-org-link (text)
(if (derived-mode-p 'org-mode)
(insert text)
(string-match org-bracket-link-regexp text)
(insert (substring text (match-beginning 1) (match-end 1)))))
(defun my-org-copy-smart-url ()
(interactive)
(let* ((link-info (assoc :link (org-context)))
(text (when link-info
(buffer-substring-no-properties (or (cadr link-info) (point-min))
(or (caddr link-info) (point-max))))))
(if (not text)
(error "Not in org link")
(add-text-properties 0 (length text) '(yank-handler (my-yank-org-link)) text)
(kill-new text))))
(global-set-key (kbd "C-c c") 'my-org-copy-smart-url)
(defun my-org-export-url ()
(interactive)
(let* ((link-info (assoc :link (org-context)))
(text (when link-info
(buffer-substring-no-properties (or (cadr link-info) (point-min))
(or (caddr link-info) (point-max))))))
(if (not text)
(error "Not in org link")
(string-match org-bracket-link-regexp text)
(kill-new (substring text (match-beginning 1) (match-end 1))))))
(global-set-key (kbd "C-c e") 'my-org-export-url)
Я вибрав C-c e
і C-c c
зв'язки клавіш, оскільки вони хороші мнемоніки для e
xport та c
opy, і вони не використовуються в org-режимі. Вони так чи інакше вписуються у вже існуючу палітурку клавіш C-c C-o
для o
перенаправлення посилань.
if
, оскільки при використанні GUI Emacs завжди копіював усе посилання ([[a]][b]]
) замість частини URL (a
)