Orgmode вставить ссылку из буфера обмена?

9

Есть ли простой способ вставить ссылку в режиме org прямо из системного буфера обмена? Я думаю о выборе URL в Safari и вставке этой ссылки непосредственно в документ в режиме org.

Alain
источник
1
Также очень удобно настроить букмарклет для автоматической вставки ссылки с помощью захвата. Смотрите здесь: orgmode.org/worg/org-contrib/org-protocol.html
mbork,

Ответы:

12

Ваш вопрос не очень конкретен в отношении того, какой тип ссылки вы хотите и что вы считаете "простым". Предполагая, что вы имеете в виду ссылку следующей формы:

[[target][description]]

рабочий процесс по умолчанию (после помещения URL в буфер обмена):

C-c C-l C-y RET description RET

Ввод descriptionнеобязательно; если вы не укажете один, ссылка будет иметь вид

[[target]]
itsjeyd
источник
Достаточно просто. Он работает, как и ожидалось, на компьютере с Windows, но по какой-то причине не может скопировать / вставить URL из Firefox или Safari в Emacs на MacOS с Emacs 25.0.50
Ален
@ Ален Я не на MacOS, поэтому я не могу проверить это, но вы можете попробовать использовать x-clipboard-yankвместо того, yankчтобы вставить содержимое буфера обмена. Эта команда не привязана к ключу по умолчанию, поэтому вам придется вызывать ее, используя M-x. Если это решит проблему, вы, конечно, можете установить для нее удобную привязку клавиш (через (global-set-key (kbd "C-c y") 'x-clipboard-yank)).
itjeyd
3

В зависимости от того, какой из двух вариантов вы предпочитаете, вот две функции, которые проверяют, есть ли URL в буфере обмена, и, если да, вставляют его в виде org-modeссылки. Первый делает это в форме [[url]], а второй - в форме [[url][description]]и оставляет вас в descriptionполе.

(defun insert-url-as-org-link-sparse ()
  "If there's a URL on the clipboard, insert it as an org-mode
link in the form of [[url]]."
  (interactive)
  (let ((link (substring-no-properties (x-get-selection 'CLIPBOARD)))
        (url  "\\(http[s]?://\\|www\\.\\)"))
    (save-match-data
      (if (string-match url link)
          (insert (concat "[[" link "]]"))
        (error "No URL on the clipboard")))))

(defun insert-url-as-org-link-fancy ()
  "If there's a URL on the clipboard, insert it as an org-mode
link in the form of [[url][*]], and leave point at *."
  (interactive)
  (let ((link (substring-no-properties (x-get-selection 'CLIPBOARD)))
        (url  "\\(http[s]?://\\|www\\.\\)"))
    (save-match-data
      (if (string-match url link)
          (progn
            (insert (concat "[[" link "][]]"))
            (backward-char 2))
        (error "No URL on the clipboard")))))
Дэн
источник
3

Я создал пакет emacs, который может помочь вам вставить ссылки в режиме org из буфера обмена:

  • org-cliplink (также доступно через Melpa)

Это делает запрос HTTP на URL из буфера обмена и , если ответ содержит HTML он пытается извлечь название и вставляет ссылку орг-режим в следующем формате: [[URL][extracted-title]].


Например, после копирования на этот вопрос по ссылке , делая M-x org-cliplinkв буфере орг-режиме вставит:

[[https://emacs.stackexchange.com/q/3280][org mode - Orgmode insert link from clipboard? - Emacs Stack Exchange]]

и ссылка будет выглядеть как ссылка в режиме org - Orgmode вставить ссылку из буфера обмена? - Emacs Stack Exchange в этом буфере.

rexim
источник