Terlambat ke pesta (dan posting pertama saya di sini, ngomong-ngomong), tapi saya pikir ini mungkin berguna untuk orang lain juga. Jawaban yang diterima bekerja dengan sempurna ketika menarik kembali emacs di dalam, tetapi teks yang sebenarnya disalin ke clipboard sistem masih sintaks mode-org penuh. Saya menginginkan sesuatu yang dapat menyalin tautan dari mode-org dan emacs. Use cases: Saya telah melakukan banyak dev web belakangan ini, dan saya sering menggunakan banyak browser. Hanya satu di antaranya yang bisa menjadi default untuk C-c c-o
pintasan, dan kadang-kadang saya ingin membuka tautan dalam non-default. Juga, menempelkan tautan ke rekan kerja di Slack, dan sebagainya.
Singkatnya, saya telah menghasilkan solusi ini dengan mencampur dan mencocokkan jawaban yang diterima :
(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))))))
Ini akan menyalin ke clipboard tautan hanya bagian dari tautan mode-org.
Bahkan, saya telah mengintegrasikan kedua solusi jawaban sebelumnya dan fungsi baru ini di dalam saya .emacs
, masing-masing dengan pengikat kunci sendiri. Kode lengkap di sini:
(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)
Saya telah memilih C-c e
dan C-c c
keybindings karena mereka mnemonik yang baik untuk e
xport dan c
opy dan mereka tidak digunakan dalam mode org. Mereka juga entah bagaimana cocok dengan pengikat kunci yang sudah ada C-c C-o
untuk o
tautan pening.
if
, karena ketika menggunakan GUI Emacs selalu menyalin seluruh tautan ([[a]][b]]
) alih-alih bagian URL (a
)