Późno na imprezę (a przy okazji mój pierwszy post tutaj), ale myślę, że może to być przydatne również dla innych. Akceptowana odpowiedź działa idealnie, gdy ponownie szarpniesz wewnątrz emacsa, ale tekst skopiowany do schowka systemowego jest nadal pełną składnią trybu org. Chciałem czegoś, co mogłoby skopiować link zarówno z trybu org, jak i emacsa. Przypadki użycia: Ostatnio robiłem dużo web dev i często używam wielu przeglądarek. Tylko jeden z nich może być domyślnym C-c c-o
skrótem, a czasami chcę otworzyć link w innym niż domyślny. Wklejanie linków do współpracowników na Slacku i tak dalej.
Krótko mówiąc, wymyśliłem to rozwiązanie, mieszając i dopasowując przyjętą odpowiedź :
(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))))))
Spowoduje to skopiowanie do schowka łącza tylko części łącza w trybie organizacji.
W rzeczywistości zintegrowałem w sobie zarówno rozwiązanie z poprzedniej odpowiedzi, jak i tę nową funkcję .emacs
, każde z własnym skrótem klawiszowym. Pełny kod tutaj:
(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)
Wybrałem skróty klawiszowe C-c e
i, C-c c
ponieważ są dobrym mnemonikiem dla e
xport i c
opy i nie są używane w trybie org. W jakiś sposób pasują również do już istniejącego skrótu klawiszowego C-c C-o
dla o
linków pening.
if
, ponieważ podczas korzystania z GUI Emacs zawsze kopiował cały link ([[a]][b]]
) zamiast części URL (a
)