लिनक्स पर Emacs से दूसरे एप्लिकेशन पर टेक्स्ट कॉपी कैसे करें


113

जब मैं Emacs में 22.1.1 (KDE में, KDE पर, KDE में अपनी खिड़की पर) में टेक्स्ट को काटता हूं (मारता हूं), तो मैं इसे किसी अन्य एप्लिकेशन में पेस्ट (यैंक) नहीं कर सकता।


मेरा सुझाव है कि आप इसे पढ़ें: CopyAndPaste-Emacs Wiki । यह बहुत अच्छी तरह से दौरे की समस्या की व्याख्या करता है।
एल बोरिटो

जवाबों:


122

यहां हमारी परिभाषाओं के साथ सावधान रहें

  • एक Emacs प्रतिलिपि कमांड kill-ring-save(आमतौर पर बाध्य है M-w)।
  • एक सिस्टम कॉपी वह है जो आप आमतौर पर C-cएक एप्लीकेशन विंडो में "एडिट-> कॉपी" को दबाने (या चुनने) से प्राप्त करते हैं।
  • एक एक्स कॉपी माउस कर्सर के साथ "शारीरिक रूप से" हाइलाइटिंग टेक्स्ट है।
  • एक Emacs पेस्ट कमांड yank(आमतौर पर बाध्य है C-y)।
  • एक सिस्टम पेस्ट वह है जो आप आमतौर पर C-vएक एप्लिकेशन विंडो में "एडिट-पेस्ट" को दबाने (या चुनने) से प्राप्त करते हैं।
  • एक एक्स पेस्ट "सेंटर माउस बटन" दबा रहा है (बाएं और दाएं माउस बटन को एक साथ दबाकर सिम्युलेटेड)।

मेरे मामले में (GNOME पर):

  • एमएसीएस और सिस्टम कॉपी दोनों आमतौर पर एक्स पेस्ट के साथ काम करते हैं।
  • X कॉपी आमतौर पर Emacs पेस्ट के साथ काम करती है।
  • Emacs पेस्ट के साथ सिस्टम कॉपी वर्क करने के लिए और Emacs कॉपी पेस्ट सिस्टम पेस्ट के साथ काम करने के लिए, आपको (setq x-select-enable-clipboard t)इसे अपने साथ जोड़ना होगा .emacs। या कोशिश करें

    META-X set-variable RET x-select-enable-clipboard RET t

मुझे लगता है कि यह बहुत मानक आधुनिक यूनिक्स व्यवहार है।

यह नोट करना भी महत्वपूर्ण है (हालांकि आप कहते हैं कि आप एक अलग विंडो में Emacs का उपयोग कर रहे हैं) जब Emacs कंसोल में चल रहा होता है, तो यह सिस्टम और X क्लिपबोर्ड से पूरी तरह से तलाक हो जाता है: उस स्थिति में कट और पेस्ट टर्मिनल द्वारा मध्यस्थता करता है । उदाहरण के लिए, अपनी टर्मिनल विंडो में "एडिट-> पेस्ट" ठीक उसी तरह से कार्य करना चाहिए जैसे कि आपने क्लिपबोर्ड से टेक्स्ट को एमएसीएस बफर में टाइप किया हो।


7
यह भ्रामक शब्दावली है । मानक, और कम भ्रमित नाम, जिसे आप "एक्स कॉपी / पेस्ट" कहते हैं, वह एक्स प्राथमिक चयन है। जिसे आप "सिस्टम कॉपी / पेस्ट" कहते हैं, वह एक्स क्लिपबोर्ड है।
गिल्स एसओ- बुराई पर रोक '22

धन्यवाद ... ऐसा लगता है कि चर का नाम बदल दिया गया है क्योंकि यह लिखा गया था। META-X set-variable RET select-enable-clipboard RET tया(setq select-enable-clipboard t)
डेविड मैकोर्री

95

अपनी .emacsफ़ाइल में निम्नलिखित डालें :

(setq x-select-enable-clipboard t)

3
चिंता नहीं, आपको बताता है कि आपको क्या जानना चाहिए। बहुत बढ़िया जवाब।
जेसनफ्रूट

पूरी तरह से काम करता है, मैं Ubuntu 12.04 का उपयोग करता हूं। धन्यवाद
१२:०२ पर झिहंग

7
अच्छा और सरल है, लेकिन यह टर्मिनल में काम नहीं करता है। ऐसा कोई कारण नहीं है कि एक ही शॉर्टकट टर्मिनल और निशुल्क विंडो दोनों में काम नहीं करना चाहिए, और नीचे दिए गए कुछ उत्तर दोनों को एक साथ संबोधित करते हैं।
रसेलस्टार्ट 20

1
जब मैं दौड़ता हूं emacs -nw, तो मैं टर्मिनल के स्वयं के शॉर्टकट का उपयोग करता हूं; कॉपी करने (मारने) के लिए Shift-Ctrl-X, और कॉपी करने के लिए Shift-Ctrl-C।
21

4
जब आप emacs -nwक्षैतिज रूप से विभाजित tmux windows के अंदर चलाते हैं तो यह काम नहीं होने वाला है ।
श्रीधर रत्नाकुमार

11

मैं इसे अपने .emacs में चिपका देता हूं:

(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)

बाद में मुझे मूल रूप से Emacs में किसी भी अन्य X11 या Gnome एप्लिकेशन से कुछ भी काटने और चिपकाने में कोई समस्या नहीं है।

बोनस: अपने पूरे .emacs को फिर से लोड किए बिना Emacs में होने वाली इन चीजों को प्राप्त करने के लिए, .emacs बफर में से प्रत्येक के करीब भाव के ठीक बाद कर्सर के साथ Cx Ce करें।

सौभाग्य!


3
यह सॉल्यूशन X विंडो में
एमएसीएस के लिए काम करता है। इमैक

Symbol’s function definition is void: x-cut-buffer-or-selection-value
alper

10

Emacs में कॉपी और पेस्ट करने में कठिनाई यह है कि आप इसे आंतरिक मार / यान से स्वतंत्र रूप से काम करना चाहते हैं, और आप चाहते हैं कि यह टर्मिनल और गुई दोनों में काम करे। टर्मिनल या गुई के लिए मौजूदा मजबूत समाधान हैं, लेकिन दोनों नहीं। Xsel (जैसे sudo apt-get install xsel) स्थापित करने के बाद , यहाँ मैं उन्हें कॉपी और पेस्ट करने के लिए क्या कर रहा हूँ:

(defun copy-to-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (message "Yanked region to x-clipboard!")
        (call-interactively 'clipboard-kill-ring-save)
        )
    (if (region-active-p)
        (progn
          (shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
          (message "Yanked region to clipboard!")
          (deactivate-mark))
      (message "No region active; can't yank to clipboard!")))
  )

(defun paste-from-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (clipboard-yank)
        (message "graphics active")
        )
    (insert (shell-command-to-string "xsel -o -b"))
    )
  )

(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)

क्योंकि मुझे परमेस नहीं हैं, इसलिए मैं त्रुटि प्राप्त कर रहा हूं। मुझे पहली पंक्ति को बदलने की आवश्यकता है "(डिफॉन कॉपी-टू-क्लिपबोर्ड ()" से "(डिफुन कॉपी-से-ubuntu (पाठ और वैकल्पिक धक्का)")। यह मेरे लिए काम करता है: डी
रेनाटो कैसिनो

यह काम करता है लेकिन पेस्ट ऑपरेशन बहुत धीमी गति से होता है, क्या इसे नेटवर्क से जोड़ा जा सकता है?
alper

7

मुझे लगता है कि आप एक्स (एक टर्मिनल विंडो के अंदर नहीं) के तहत Emacs अर्थ हैं, जो emacs के द्वारा होता है।

इसके दो तरीके हैं:

  1. (केवल ओएस को यूनिक्स करने के लिए लागू होता है) अपने माउस के साथ वांछित पाठ को हाइलाइट करें (यह इसे एक्स क्लिपबोर्ड पर कॉपी करता है) और फिर पेस्ट करने के लिए मध्य क्लिक करें।
  2. वांछित टेक्स्ट को हाइलाइट करें और फिर "Mx क्लिपबोर्ड-किल-रिंग-सेव" (ध्यान दें कि आप इसे एक आसान कुंजी से बांध सकते हैं)। फिर अपने पसंदीदा ऐप में बस "एडिट-> पेस्ट" करें।

क्लिपबोर्ड संचालन उपलब्ध:

  • क्लिपबोर्ड-किल-रिंग-सेव - इमैक से क्लिपबोर्ड में कॉपी चयन
  • क्लिपबोर्ड-मार-क्षेत्र - Emacs से क्लिपबोर्ड में चयन का चयन करें
  • क्लिपबोर्ड-यैंक - क्लिपबोर्ड से एमएसीएस तक पेस्ट करें

7

नहीं है एक EmacsWiki लेख कि एक्स के तहत प्रति और चिपकाने और कैसे काम करने के लिए यह कॉन्फ़िगर करने के लिए के साथ कुछ मुद्दों बताते हैं।


नकल और पेस्ट करने के लिए एक emacs विकि प्रविष्टि है। वह कितना बुरा है।
निकोलस

4

यह M-wमैक OSX पर काम करता है । बस अपने .emacs फ़ाइल में जोड़ें ।

(defun copy-from-osx ()
   (shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
   (let ((process-connection-type nil))
      (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
         (process-send-string proc text)
         (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

स्रोत https://gist.github.com/the-kenny/267162


1

नीचे दिए गए कोड, @ ऊपर RussellStewart के जवाब से प्रेरित, के लिए समर्थन जोड़ता एक्स प्राथमिक और एक्स-माध्यमिक बदलता है, region-active-pके साथ use-region-pएक खाली क्षेत्र के मामले को कवर करने, चुपचाप वापस नहीं करता है, तो xsel (रिटर्न एक त्रुटि संदेश) नहीं स्थापित किया गया है, और "कट" फ़ंक्शन (इमेक साइ, विंडोज़ सीएक्स) शामिल है।

(defun my-copy-to-xclipboard(arg)
  (interactive "P")
  (cond
    ((not (use-region-p))
      (message "Nothing to yank to X-clipboard"))
    ((and (not (display-graphic-p))
         (/= 0 (shell-command-on-region
                 (region-beginning) (region-end) "xsel -i -b")))
      (error "Is program `xsel' installed?"))
    (t
      (when (display-graphic-p)
        (call-interactively 'clipboard-kill-ring-save))
      (message "Yanked region to X-clipboard")
      (when arg
        (kill-region  (region-beginning) (region-end)))
      (deactivate-mark))))

(defun my-cut-to-xclipboard()
  (interactive)
  (my-copy-to-xclipboard t))

(defun my-paste-from-xclipboard()
  "Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
  (interactive)
  (if (display-graphic-p)
    (clipboard-yank)
   (let*
     ((opt (prefix-numeric-value current-prefix-arg))
      (opt (cond
       ((=  1 opt) "b")
       ((=  4 opt) "p")
       ((= 16 opt) "s"))))
    (insert (shell-command-to-string (concat "xsel -o -" opt))))))

(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)

क्या मानक कीबाइंडिंग को अधिलेखित करने के लिए कोई कारण नहीं हैं?
पॉल ब्रोडसेन

@Paul: 'मानक कीबाइंडिंग' 'एमएसीएस इंटरनल क्लिपबोर्ड' के लिए हैं, जो एक्स-क्लिपबोर्ड से अलग है। मैंने 'ईमैक इंटरनल क्लिपबोर्ड' शब्द उद्धृत किया क्योंकि एमएसीएस शब्दावली अलग है - क्रिस कॉनवे की उत्कृष्ट व्याख्या, ऊपर।
user1404316

1

मैं निम्नलिखित, अन्य उत्तर यहाँ के आधार पर उपयोग करते हैं, बनाने के लिए C-x C-wऔर C-x C-yहो कॉपी और पर दोनों मैक और लिनक्स पेस्ट (किसी Windows के लिए संस्करण जानता है इसे जोड़ने के लिए स्वतंत्र लग रहा है)। ध्यान दें कि लिनक्स पर आपको अपने पैकेज मैनेजर के साथ xsel और xclip स्थापित करना होगा।

;; Commands to interact with the clipboard

(defun osx-copy (beg end)
  (interactive "r")
  (call-process-region beg end  "pbcopy"))

(defun osx-paste ()
  (interactive)
  (if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
  (call-process "pbpaste" nil t nil))

(defun linux-copy (beg end)
  (interactive "r")
  (call-process-region beg end  "xclip" nil nil nil "-selection" "c"))

(defun linux-paste ()
  (interactive)
  (if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
  (call-process "xsel" nil t nil "-b"))

(cond
 ((string-equal system-type "darwin") ; Mac OS X
  (define-key global-map (kbd "C-x C-w") 'osx-copy)
  (define-key global-map (kbd "C-x C-y") 'osx-paste))
 ((string-equal system-type "gnu/linux") ; linux
  (define-key global-map (kbd "C-x C-w") 'linux-copy)
  (define-key global-map (kbd "C-x C-y") 'linux-paste)))

1
वास्तव में, आप उपयोग कर सकते हैं xclip क्लिपबोर्ड सामग्री को चिपकाने के लिएxclip -o । यह उन लोगों के लिए उपयोगी हो सकता है जो पहले से ही हैं xclipऔर कॉपी और पेस्टिंग दोनों करने के लिए एक और प्रोग्राम इंस्टॉल नहीं करना चाहते हैं।
अमीन NAIRI

0

हम्म, आप किस प्लेटफॉर्म और किस संस्करण का उपयोग कर रहे हैं? Windows Vista पर GNU Emacs 22.1.1 के साथ, यह मेरे लिए ठीक काम करता है।

अगर, किसी भी संयोग से, आप एक RealVNC दर्शक के माध्यम से विंडोज़ से लिनक्स पर कर रहे हैं, तो सुनिश्चित करें कि आप पहले लिनक्स बॉक्स पर "vncconfig -iconic" चला रहे हैं ....।


0

मैं हमेशा त्वरित पेस्ट का उपयोग करता हूं - ईमेक में चयन खींचें, लक्ष्य विंडो में मध्य माउस बटन दबाएं।

(केट के संदर्भ से, मुझे लगता है कि आप linux या इसी तरह के हैं और शायद X एक तरह से या किसी अन्य तरीके से emacs का उपयोग कर रहे हैं।)


0

आप यह निर्दिष्ट करना चाह सकते हैं कि आप किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं। क्या यह linux, unix, macosx, windows, ms-dos पर है?

मेरा मानना ​​है कि खिड़कियों के लिए यह काम करना चाहिए। MacOSX के लिए इसे x-windows क्लिपबोर्ड में जोड़ा जाएगा, जो कि macosx क्लिपबोर्ड के समान नहीं है। लिनक्स के लिए, यह विंडो मैनेजर के आपके स्वाद पर निर्भर करता है, लेकिन मेरा मानना ​​है कि एक्स-विंडो इसे उनमें से अधिकांश पर एक अच्छे तरीके से संभालती है।

तो, कृपया निर्दिष्ट करें।


-1

मैं एक अच्छे टर्मिनल टूल का उपयोग करना चाहता हूं (विंडोज पर PuTTY, लिनक्स पर लिनक्स या टर्मिनल) जिसमें अंतर्निहित सुविधाओं की प्रतिलिपि है।

PuTTY में, आप उस पाठ को हाइलाइट करते हैं जिसे आप माउस से चाहते हैं और फिर उसे कहीं और चिपकाएँ। एक PuTTY विंडो में राइट-क्लिक करने से विंडोज कॉपी / पेस्ट बफर की सामग्री चिपक जाती है।

लिनक्स पर कोनोलास या टर्मिनल में, आप जो चाहते हैं उसे हाइलाइट करें और फिर कॉपी के लिए Shift + Ctrl + C दबाएं और पेस्ट के लिए Shift + Ctrl + V दबाएं।

Emacs के win32 संकलन में, पाठ को कॉपी / पेस्ट बफर पर रखा जाता है .. अधिकांश समय।

मैक ओएस एक्स पर, ऐप्पल-की-चॉर्टकट ठीक काम करते हैं, क्योंकि टर्मिनल उन्हें फंसाता है।

कमांडलाइन पर इसे करने का कोई सीधा तरीका नहीं है क्योंकि शेल प्रत्येक एप्लिकेशन के लिए कॉपी / पेस्ट बफर को बनाए नहीं रखता है। बैश अपने लिए कॉपी / पेस्ट बफर रखता है, और डिफ़ॉल्ट रूप से, emacs ^ k / ^ y शॉर्टकट काम करता है।

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