Bagaimana cara menyalin tautan KELUAR dari mode-org?

16

Ada banyak dokumentasi tentang menyisipkan atau menyimpan tautan mode-org, tetapi tampaknya tidak ada tentang menyalinnya ke buffer dalam format lain.

Bagaimana Anda menyalin URL tautan mode-org dari file org ke clipboard / cincin pembunuhan dengan sesedikit mungkin penekanan tombol? Saya sudah mencoba org-store-linkdan org-insert-link, tetapi ia mencampakkan seluruh sintaks mode-org ke dalam buffer apa pun yang telah Anda buka.

Contoh: mode buffer 1 org, buffer 2 Markdown.

  1. Kunjungi buffer 1, C-scari tautan.
  2. Ajaibnya , URL ada di clipboard
  3. Kunjungi buffer 2. C-yuntuk menarik URL ke buffer.
bintang yang terang
sumber

Jawaban:

10

Berikut adalah salah satu cara untuk mencapai apa yang Anda inginkan, menggunakan properti teks.

Anda dapat pergi ke tautan dalam file org yang ingin Anda salin dan menjalankan perintah my-org-retrieve-url-from-pointini akan menyalin tautan org pada titik saat ini ke clipboard. Sebelum menambahkan tautan ke clipboard, sebuah yank-handler ( my-yank-org-link) terdaftar yang dipanggil saat menempelkan tautan. Penarik-penarik memeriksa apakah buffer saat ini berada dalam mode-org atau mode yang berasal dari mode-org, jika demikian ia memasukkan tautan apa adanya (tautan-org), jika tidak maka akan mengekstrak URL dari tautan dan memasukkannya

(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-retrieve-url-from-point ()
  (interactive)
  (let* ((link-info (assoc :link (org-context)))
         (text (when link-info
                 ;; org-context seems to return nil if the current element
                 ;; starts at buffer-start or ends at buffer-end
                 (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))))

Ini adalah versi DWIM kill-ring-save, yang menggunakan kill-ring-savejika wilayah aktif atau menyalin tautan org di titik

(defun my-smarter-kill-ring-save ()
  (interactive)
  (if (region-active-p)
      (call-interactively #'kill-ring-save)
    (when (eq major-mode 'org-mode)
      (call-interactively #'my-org-retrieve-url-from-point))))

Catatan : Saat ini tidak membedakan antara tautan URL dan tautan internal.

Iqbal Ansari
sumber
1
Saya menghapus if, karena ketika menggunakan GUI Emacs selalu menyalin seluruh tautan ( [[a]][b]]) alih-alih bagian URL ( a)
Nitz
2

Kemungkinan lain: Dengan kursor pada tautan, jalankan org-insert-link. Ini biasanya C-c C-l. Dengan mode jahat (atau mungkin hanya dengan Spacemacs) , i ljuga berfungsi. Ini memasuki aliran sisipan tautan dengan nilai tautan yang sudah diisi sebelumnya. Anda kemudian dapat melakukannya M-x evil-yank-lineketika minibuffer memiliki isi alamat tautan.

mowwwalker
sumber
Metode ini pada dasarnya adalah apa yang saya gunakan, khususnya yang saya gunakan C-c C-l M-S-<backspace> C-g.
Omar
Ini bekerja tetapi tidak begitu efisien.
itirazimvar
2

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-opintasan, 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 edan C-c ckeybindings karena mereka mnemonik yang baik untuk export dan copy dan mereka tidak digunakan dalam mode org. Mereka juga entah bagaimana cocok dengan pengikat kunci yang sudah ada C-c C-ountuk otautan pening.

ggrocca
sumber