Поздно к вечеринке (и, кстати, мой первый пост здесь), но я думаю, что это может быть полезно и другим. Принятый ответ отлично работает при повторном извлечении внутри emacs, но фактический текст, скопированный в системный буфер обмена, по-прежнему имеет полный синтаксис режима орг. Я хотел что-то, что могло бы скопировать ссылку из org-mode и emacs. Примеры использования: в последнее время я много занимался веб-разработкой и часто использую несколько браузеров. Только один из них может быть по умолчанию для C-c c-o
ярлыка, и иногда я хочу открыть ссылку не по умолчанию. Кроме того, вставка ссылок на сотрудников в Slack, и так далее.
Короче говоря, я придумал это решение, смешав и сопоставив принятый ответ :
(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
пировать , и они не используются в орг-режиме. Они также как-то сочетаются с уже существующей связкой клавиш C-c C-o
для написания o
ссылок.
if
, потому что при использовании Emacs с графическим интерфейсом он всегда копировал всю ссылку ([[a]][b]]
) вместо части URL (a
)