Tarde a la fiesta (y mi primera publicación aquí, por cierto), pero creo que esto también podría ser útil para otros. La respuesta aceptada funciona perfectamente cuando se tira de nuevo dentro de emacs, pero el texto real copiado al portapapeles del sistema sigue siendo la sintaxis completa del modo org. Quería algo que pudiera copiar un enlace tanto del modo org como de emacs. Casos de uso: últimamente he estado haciendo un montón de desarrollo web, y a menudo uso varios navegadores. Solo uno de ellos puede ser el predeterminado para el C-c c-o
acceso directo, y a veces quiero abrir un enlace en uno no predeterminado. Además, pegar enlaces a compañeros de trabajo en Slack, etc.
En pocas palabras, he encontrado esta solución mezclando y combinando la respuesta aceptada :
(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))))))
Esto copiará en el portapapeles el enlace solo como parte de un enlace de modo org.
De hecho, he integrado tanto la solución de la respuesta anterior como esta nueva función dentro de mi .emacs
, cada una con su propia combinación de teclas. Código completo aquí:
(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)
Elegí las combinaciones de teclas C-c e
y C-c c
porque son buenas mnemotecnias para e
xport y c
opy y no se usan en modo org. También encajan de alguna manera con la combinación C-c C-o
de teclas ya existente para los o
enlaces de escritura .
if
, porque cuando usaba la GUI Emacs siempre copiaba todo el enlace ([[a]][b]]
) en lugar de la parte URL (a
)