ऑर्गन-मोड के लिंक को कॉपी कैसे करें?


16

ओआरजी-मोड-लिंक्स को सम्मिलित करने या संग्रहीत करने के बारे में बहुत सारे दस्तावेज हैं, लेकिन जाहिरा तौर पर उन्हें अन्य प्रारूपों में बफ़र्स पर कॉपी करने के बारे में कोई नहीं है।

आप ओआरजी-मोड-लिंक के URL को क्लिपबोर्ड / ऑर्गन रिंग में कॉपी करके कुछ कीस्ट्रोक्स के साथ कैसे संभव हो सकता है? मैंने कोशिश की org-store-linkऔर org-insert-link, लेकिन यह पूरे ऑर्ग-मोड सिंटैक्स को डंप करता है जो आपके पास अन्य बफर में खुला है।

उदाहरण: बफर 1 ऑर्ग-मोड, बफर 2 मार्कडाउन।

  1. बफर 1 पर जाएँ, C-sलिंक की खोज करें।
  2. मैजिक होता है , URL क्लिपबोर्ड में होता है
  3. बफ़र पर जाएँ 2. C-yURL को बफ़र में जाने के लिए।

जवाबों:


10

पाठ गुणों का उपयोग करके, आप जो चाहते हैं उसे प्राप्त करने का एक तरीका यहां दिया गया है।

आप उस ओआरजी फ़ाइल में लिंक पर जा सकते हैं जिसे आप कॉपी करना चाहते हैं और कमांड को निष्पादित करना चाहते हैं my-org-retrieve-url-from-pointजो ऑर्ड लिंक को क्लिपबोर्ड पर वर्तमान बिंदु पर कॉपी करेगा। लिंक को क्लिपबोर्ड में जोड़ने से पहले एक यैंक-हैंडलर ( my-yank-org-link) पंजीकृत किया जाता है जिसे लिंक पेस्ट करते समय कहा जाता है। यन-हैंडलर यह जाँचता है कि क्या वर्तमान बफर ऑर्ग-मोड में है या ऑर्ग-मोड से प्राप्त मोड है, यदि ऐसा है तो वह लिंक को सम्मिलित करता है जैसा कि वह है (ऑर्ग-लिंक), अन्यथा यह लिंक से यूआरएल को निकालता है और इसे सम्मिलित करता है।

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

यहाँ का एक DWIM संस्करण है kill-ring-save, जो इस बात का उपयोग करता है kill-ring-saveकि क्षेत्र सक्रिय है या बिंदु पर org-link की प्रतिलिपि बनाता है

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

नोट : यह वर्तमान में URL लिंक और आंतरिक लिंक के बीच अंतर नहीं करता है।


1
मैंने हटा दिया if, क्योंकि GUI Emacs का उपयोग करते समय यह हमेशा [[a]][b]]URL लिंक के बजाय पूरे लिंक ( ) को कॉपी करता थाa
Nitz

3

एक और संभावना: लिंक पर कर्सर के साथ, निष्पादित करें org-insert-link। यह सामान्य रूप से है C-c C-l। बुराई मोड के साथ (या शायद स्पेसमैक्स के साथ) , i lभी काम करता है। यह लिंक डालने के प्रवाह को लिंक मान के साथ पूर्व-आबादी में प्रवेश करता है। आप तब कर सकते हैं M-x evil-yank-lineजब मिनीबफ़र में लिंक पते की सामग्री हो।


यह विधि मूल रूप से है जो मैं उपयोग करता हूं, विशेष रूप से मैं जाता हूं C-c C-l M-S-<backspace> C-g
उमर

यह काम करता है लेकिन इतना कुशल नहीं है।
इटिरजिमवार

2

पार्टी के अंत तक (और मेरी पहली पोस्ट यहाँ, वैसे), लेकिन मुझे लगता है कि यह दूसरों के लिए भी उपयोगी हो सकता है। स्वीकार किए गए उत्तर पूरी तरह से काम करते हैं जब ईमैक फिर से अंदर जाता है, लेकिन सिस्टम क्लिपबोर्ड पर कॉपी किया गया वास्तविक पाठ अभी भी पूर्ण ऑर्ग-मोड सिंटैक्स है। मैं कुछ ऐसा चाहता था जो org-mode और emacs दोनों के लिंक को कॉपी कर सके । मामलों का उपयोग करें: मैं हाल ही में बहुत सारे वेब देव कर रहा हूं, और मैं अक्सर कई ब्राउज़रों का उपयोग करता हूं। उनमें से केवल एक C-c c-oशॉर्टकट के लिए डिफ़ॉल्ट हो सकता है , और कभी-कभी मैं एक गैर-डिफ़ॉल्ट में एक लिंक खोलना चाहता हूं। इसके अलावा, स्लैक, वगैरह पर सहकर्मियों के लिए लिंक चिपकाना।

लंबी कहानी छोटी, मैं स्वीकृत उत्तर को मिलाते और मिलाते हुए इस समाधान के साथ आया हूँ :

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

यह क्लिपबोर्ड लिंक को ऑर्ग-मोड लिंक के केवल भाग पर कॉपी करेगा।

वास्तव में, मैंने पिछले उत्तर के समाधान और मेरे अंदर के इस नए कार्य को एकीकृत किया है .emacs, प्रत्येक की अपनी कीबाइंडिंग के साथ। पूर्ण कोड यहाँ:

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

मैंने C-c eऔर C-c cकीबाइंडिंग को चुना है क्योंकि वे export और copy के लिए अच्छे mnemonics हैं और वे org-mode में अप्रयुक्त हैं। वे भी किसी न किसी तरह पहले से ही मौजूद कीबाइंडिंग के C-c C-oलिए oलिंक के साथ फिट होते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.