Atrasado para a festa (e meu primeiro post aqui, a propósito), mas acho que isso pode ser útil para outras pessoas também. A resposta aceita funciona perfeitamente ao puxar o emacs novamente, mas o texto real copiado para a área de transferência do sistema ainda é a sintaxe completa do modo organizacional. Eu queria algo que pudesse copiar um link do org-mode e do emacs. Casos de uso: venho desenvolvendo muitos desenvolvedores da Web ultimamente e frequentemente uso vários navegadores. Apenas um deles pode ser o padrão para o C-c c-o
atalho e, às vezes, desejo abrir um link em um não padrão. Além disso, colando links para colegas de trabalho no Slack, etc.
Para encurtar a história, criei esta solução misturando e combinando a resposta aceita :
(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))))))
Isso copiará para a área de transferência o link apenas parte de um link de modo organizacional.
De fato, integrei a solução da resposta anterior e essa nova função dentro da minha .emacs
, cada uma com sua própria combinação de teclas. Código completo aqui:
(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)
Eu escolhi as combinações de teclas C-c e
e C-c c
porque são boas mnemônicas para e
xport e c
opy e não são usadas no modo organizacional. De alguma forma, eles também se encaixam na vinculação C-c C-o
de teclas já existente para o
links com caneta.
if
, porque ao usar a GUI Emacs sempre copiado todo o link ([[a]][b]]
) em vez da parte URL (a
)