रिंग को मारने के लिए ऑपरेटिंग सिस्टम क्लिपबोर्ड जोड़ें


25

अक्सर मैं खुद को इंटरनेट से अपने ऑपरेटिंग सिस्टम के क्लिपबोर्ड में एक कोड स्निपेट की नकल करते हुए पाता हूं। फिर, मैं निम्नलिखित सरल कदम उठाता हूं:

  1. मेरी Emacs विंडो पर स्विच करें
  2. वह स्थान ढूंढें जहाँ मुझे कोड चिपकाना है
  3. कॉपी किए गए टेक्स्ट को डालने के लिए C-y( yank) का उपयोग करें ।

हालाँकि, कभी-कभी मुझे (मेरी बड़ी निराशा के लिए) पता चलता है कि मैंने अनजाने में मार कमांड (जैसे kill-wordया kill-lineकदम) के कुछ रूप का इस्तेमाल किया था जब मैं 2 कदम पर था। ऐसे मामलों में, "क्लिपबोर्ड" से कॉपी किया गया पाठ कभी भी इसे मारने में नहीं बनाता है। अंगूठी।

क्या यह सुनिश्चित करने का एक तरीका है कि अन्य एप्लिकेशन से कॉपी किए गए पाठ हमेशा इसे मेरी हत्या की अंगूठी में बनाते हैं?

मैं लिनक्स में सबसे अधिक बार काम करता हूं, लेकिन मैं विंडोज और मैक ओएस एक्स पर नियमित रूप से एमएसीएस का उपयोग करता हूं, इसलिए ओएस-एग्नॉस्टिक जवाब पसंद किया जाता है।


क्या मैं इस लिंक का सुझाव दे सकता हूं ? पूरे पृष्ठ को ब्राउज़ करने पर, आपको कॉपी / पेस्ट से लेकर क्लिपबोर्ड तक के कई अलग-अलग तरीके दिखाई देंगे
Nsukami _

@Nsukami_ धन्यवाद। मैं इसे पचाने की कोशिश करूंगा, लेकिन जुड़ा हुआ पेज इस बात का एक प्रमुख उदाहरण है कि मैं EmacsWiki पर उत्तरों की तलाश में क्यों थक गया। वहाँ के बहुत से हैकरों को लगता है कि elisp कोड स्व-दस्तावेजीकरण है और इसमें कोई टिप्पणी नहीं है, और फ़ंक्शन या उपयोग के बारे में कोई स्पष्टीकरण नहीं है। मेरे पास आमतौर पर कोड को रिवर्स-इंजीनियर करने का समय नहीं है, यह तय करने के लिए कि यह वही करता है जो मैं इसे चाहता हूं या नहीं।
nispio

हाहा, मैं समझता हूँ;)
नस्सकामी _

जवाबों:


31

आप अनुकूलित करने के लिए की जरूरत save-interprogram-paste-before-killके लिए t। यदि आप क्लिपबोर्ड को चिपकाने से पहले emacs में कुछ मारते हैं तो यह आपके क्लिपबोर्ड को हत्या पर धकेल देगा। एक संबंधित अनुकूलन, yank-pop-change-selectionजो क्लिपबोर्ड पर आपके वर्तमान यान को emacs में धकेलता है। इन दोनों को काम करने के लिए, आपको x-select-enable-clipboard( gui-select-enable-clipboardemacs 25.1 द्वारा प्रतिस्थापित ) की आवश्यकता है tजो डिफ़ॉल्ट है।

डिफ़ॉल्ट रूप से इसे बंद करने का कारण यह है कि हत्या पर भारी मात्रा में डेटा को अनजाने में रोकने के लिए जो क्लिपबोर्ड के विपरीत सत्र के माध्यम से जारी रहता है जो आसानी से बदल दिया जाता है।


1
यहां तक ​​कि क्लीनर और आसान से मुझे उम्मीद थी। save-interprogram-paste-before-killलगता है कि वास्तव में मैं क्या चाहता हूँ!
nispio

मैं 26 emacs पर हूँ, और gui-select-enable-clipboardबस कहा जाता है select-enable-clipboard
रूण कागार्ड

3

यदि संभव हो तो एक और समाधान है, केवल cli टूल का उपयोग करें,

  • मैक पर pbcopy / pbpaste

  • Cygwin पर getclip / putclip

  • लिनक्स पर xsel
  • GUI Emacs में x- क्लिपबोर्ड (जैसा कि अन्य उल्लेख किया गया है, आपको ध्वज x- चयन-सक्षम-क्लिपबोर्ड चालू करना होगा)।

इस समाधान का लाभ यह है कि क्लिपबोर्ड हमेशा प्रयोग करने योग्य होता है (उदाहरण के लिए, जब आप दूरस्थ ssh)।

मेरे उत्तर के दो भाग हैं। भाग एक क्लिपबोर्ड में हेरफेर करने के लिए कुछ उपयोगी उपकरण पेश करता है। भाग दो आपके मूल प्रश्न का उत्तर देंगे (क्लिपबोर्ड को किल रिंग में स्टोर करें)।

भाग एक

अपने ~ / .emacs में नीचे कोड डालें:

(setq *is-a-mac* (eq system-type 'darwin))
(setq *cygwin* (eq system-type 'cygwin) )
(setq *linux* (or (eq system-type 'gnu/linux) (eq system-type 'linux)) )
(defun copy-to-x-clipboard ()
  (interactive)
  (if (region-active-p)
      (progn
        (cond
         ((and (display-graphic-p) x-select-enable-clipboard)
          (x-set-selection 'CLIPBOARD (buffer-substring (region-beginning) (region-end))))
         (t (shell-command-on-region (region-beginning) (region-end)
                                     (cond
                                      (*cygwin* "putclip")
                                      (*is-a-mac* "pbcopy")
                                      (*linux* "xsel -ib")))
            ))
        (message "Yanked region to clipboard!")
        (deactivate-mark))
        (message "No region active; can't yank to clipboard!")))

(defun paste-from-x-clipboard()
  (interactive)
  (cond
   ((and (display-graphic-p) x-select-enable-clipboard)
    (insert (x-selection 'CLIPBOARD)))
   (t (shell-command
       (cond
        (*cygwin* "getclip")
        (*is-a-mac* "pbpaste")
        (t "xsel -ob"))
       1))
   ))

(defun my/paste-in-minibuffer ()
  (local-set-key (kbd "M-y") 'paste-from-x-clipboard)
  )

(add-hook 'minibuffer-setup-hook 'my/paste-in-minibuffer)

भाग दो

अपने ~ / .emacs में कोड नीचे डालें, और अब से, पेस्ट करने के लिए "Mx पेस्ट-से-क्लिपबोर्ड-एंड-सीसी-किल-रिंग" का उपयोग करें:

(defun paste-from-clipboard-and-cc-kill-ring ()
  "paste from clipboard and cc the content into kill ring"
  (interactive)
  (let (str)
    (with-temp-buffer
      (paste-from-x-clipboard)
      (setq str (buffer-string)))
    ;; finish the paste
    (insert str)
    ;; cc the content into kill ring at the same time
    (kill-new str)
    ))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.