In ritardo alla festa (e il mio primo post qui, comunque), ma penso che questo potrebbe essere utile anche agli altri. La risposta accettata funziona perfettamente quando si strattona nuovamente all'interno di emacs, ma il testo effettivo copiato negli Appunti di sistema è ancora la sintassi completa della modalità org. Volevo qualcosa che potesse copiare un link sia in modalità org che in emacs. Casi d'uso: ultimamente ho fatto molti web dev e spesso utilizzo più browser. Solo uno di essi può essere il predefinito per il C-c c-o
collegamento, e talvolta desidero aprire un collegamento in uno non predefinito. Inoltre, incollando i collegamenti ai colleghi su Slack, eccetera.
Per farla breve, ho trovato questa soluzione mescolando e abbinando la risposta accettata :
(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))))))
Questo copierà negli appunti il collegamento solo una parte di un collegamento in modalità org.
In effetti, ho integrato sia la soluzione della risposta precedente sia questa nuova funzione all'interno della mia .emacs
, ognuna con la propria combinazione di tasti. Codice completo qui:
(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)
Ho scelto le combinazioni di tasti C-c e
e C-c c
perché sono buoni mnemonici per e
xport e c
opy e non sono utilizzati in modalità org. Si adattano anche in qualche modo al già esistente collegamento a tasti C-c C-o
per o
collegamenti a penna.
if
, perché quando si utilizza la GUI Emacs ha sempre copiato l'intero link ([[a]][b]]
) invece della parte URL (a
)