Org modundan OUT bağlantıları nasıl kopyalanır?


16

Kuruluş modu bağlantılarını ekleme veya depolama hakkında çok sayıda belge var, ancak görünüşe göre bunları diğer biçimlerde tamponlara kopyalamakla ilgili değil.

Bir kuruluş modu bağlantısının URL'sini bir kuruluş dosyasından mümkün olduğunca az sayıda tuşa basarak panoya / öldürme halkasına nasıl kopyalarsınız? Denedim org-store-linkve org-insert-link, ancak tüm org modu sözdizimini açık olan diğer arabelleklere döker.

Örnek: buffer 1 org-mode, buffer 2 Markdown.

  1. Tampon 1'i ziyaret edin, C-sbağlantı arayın.
  2. Büyü olur , URL panodadır
  3. C-yURL'yi arabelleğe almak için buffer 2.'i ziyaret edin .

Yanıtlar:


10

İşte metin özelliklerini kullanarak istediğinizi elde etmenin bir yolu.

Kopyalamak istediğiniz kuruluş dosyasındaki bağlantıya gidebilir ve my-org-retrieve-url-from-pointşu anki noktadaki kuruluş bağlantısını panoya kopyalayacak olan komutu yürütebilirsiniz . Bağlantıyı panoya eklemeden önce, bağlantı my-yank-org-linkyapıştırılırken çağrılan bir yank-handler ( ) kaydedilir. Yank-işleyici, geçerli arabelleğin org modunda mı yoksa org modundan türetilen bir modda olup olmadığını kontrol eder, eğer öyleyse bağlantıyı olduğu gibi ekler (bir org-link), aksi takdirde URL'yi bağlantıdan çıkarır ve ekler

(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))))

Burada, bölgenin etkin olup olmadığını kill-ring-savekullanan kill-ring-saveveya org bağlantısını noktadan kopyalayan bir DWIM sürümü

(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))))

Not : Bu şu anda bir URL bağlantısı ile dahili bağlantılar arasında ayrım yapmamaktadır.


1
Ben kaldırıldı ifGUI Emacs kullanırken her zaman Bağlantının tamamını (kopyalanan çünkü [[a]][b]]yerine URL kısmının) ( a)
Nitz

3

Başka bir olasılık: İmleç bağlantıdayken, yürütün org-insert-link. Bu normalde C-c C-l. Kötü mod ile (veya belki sadece Spacemacs ile) , i lde çalışır. Bu, bağlantı ekleme akışına önceden doldurulmuş bağlantı değeri ile girer. Daha sonra M-x evil-yank-lineminibuffer bağlantı adresinin içeriğine sahipken yapabilirsiniz .


Bu yöntem temelde kullandığım yöntem, özellikle de gidiyorum C-c C-l M-S-<backspace> C-g.
Omar

Çalışıyor ama çok verimli değil.
itirazimvar

2

Partiye geç (ve buradaki ilk yazım), ancak bunun başkaları için de yararlı olabileceğini düşünüyorum. Kabul edilen cevap tekrar emac'ların içine girerken mükemmel çalışır, ancak sistem panosuna kopyalanan gerçek metin hala tam org modu sözdizimidir. Ben org-mod ikisinin bir bağlantıyı kopyalayabilirsiniz şey istedim ve emacs. Kullanım örnekleri: Son zamanlarda çok fazla web geliştirdim ve sık sık birden çok tarayıcı kullanıyorum. Bunlardan yalnızca biri C-c c-okısayol için varsayılan olabilir ve bazen varsayılan olmayan bir bağlantıda bir bağlantı açmak istiyorum. Ayrıca, Slack, et cetera'daki çalışma arkadaşlarına bağlantılar yapıştırmak.

Uzun lafın kısası, kabul edilen cevabı karıştırarak ve eşleştirerek bu çözümü buldum :

(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))))))

Bu, panoya bir kuruluş modu bağlantısının yalnızca bir bölümünü kopyalar.

Aslında, hem önceki yanıtlayıcının çözümünü hem de bu yeni işlevi içimde birleştirdim .emacs, her birinin kendi tuş bağlantısı var. Tam kodu burada:

(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)

Benim seçimim C-c eve C-c conlar için iyi kısaltmalar çünkü keybinding eDışa Aktar ve copyala ve org modunda kullanılmayan bulunmaktadır. Ayrıca, bağlantı bağlantıları C-c C-oiçin zaten var olan tuş obağlama ile bir şekilde uyuyorlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.