Emacs से OS X क्लिपबोर्ड पर टेक्स्ट कॉपी करें


25

जब मैं सामान्य GUI मोड के बजाय एक पाठ टर्मिनल में Emacs चलाता हूं, तो मैं Emacs में एक क्षेत्र की शुरुआत को सक्रिय करके कॉपी कर सकता हूं C-SPC, और फिर जो मैं चाहता हूं उसका चयन करें और फिर करें M-w

क्या किसी क्षेत्र को इस तरह से कॉपी करने का कोई तरीका है जो OSX क्लिपबोर्ड में उपलब्ध है इसे एक वेब पेज में कहने के लिए (अपने GUI मोड में, Emacs चलाकर के अलावा) जाहिर है?

मुझे ऐसा करने के लिए एक अलग शॉर्टकट बनाने में कोई दिलचस्पी नहीं है, और आदर्श रूप से इसे किसी भी मॉड्यूल को स्थापित करने की आवश्यकता नहीं होनी चाहिए।

मैंने इस पोस्ट को देखा है और स्वीकृत उत्तर की कोशिश की है, लेकिन यह काम नहीं करता है जिस तरह से मैं ऊपर की अपेक्षा करता हूं।

कोई अन्य विचार?


यार, सवाल लगभग 3 साल पुराना है और इसका जवाब दिया गया है
गेलर ज़मर्रेनो

जवाबों:


33

कॉपी Emacs से ओएस एक्स क्लिपबोर्ड:

क्षेत्र का चयन करें M-| pbcopy RET

OS X क्लिपबोर्ड से Emacs में चिपकाएँ :

C-u M-| pbpaste RET (वर्तमान क्षेत्र की जगह अगर यह मौजूद है)


स्पष्टीकरण:

M-|चलाता है shell-command-on-region, जैसा कि नाम से तात्पर्य है कि वर्तमान क्षेत्र को एक शेल कमांड में पाइप करता है। C-u M-|एक ही बात करता है, लेकिन वर्तमान क्षेत्र stdoutको कमांड चलाने के साथ बदल देता है ।

pbcopyऔर pbpasteसिस्टम क्लिपबोर्ड तक पहुँचने के लिए OS X उपयोगिताओं हैं।


1
प्रश्न का उत्तर देने के अलावा, आपके उत्तर ने मुझे सिखाया कि कैसे emacs से शेल कमांड चलाना है, अमेजिंग।
andreskwan

20

निम्नलिखित सिर्फ काम करता है, यहाँ से कॉपी किया गया है

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

यहाँ की क्रिया पीछे की ओर लगती है
जोर्डन बियोडो

1
बुराई-विधा के साथ, यह विम-पेस्टिंग व्यवहार को तोड़ता है
फेलिक्स डी।

@ फेलिक्स डी .: xclip-modeएक ही समस्या से ग्रस्त है?
स्टीफन

में वर्णित के रूप यह Emacs26 में टूट लगता है की प्रतिलिपि बनाते और multibyte वर्ण चिपकाने emacs.stackexchange.com/questions/50485/...
silencej

9

यदि आप Emacs का "सामान्य तरीका" (यानी GUI एप्लिकेशन के रूप में) उपयोग करते हैं, तो यह पहले से ही डिफ़ॉल्ट रूप से करना चाहिए। यदि आप एक टर्मिनल एमुलेटर के अंदर Emacs का उपयोग करते हैं, तो वास्तव में यह नहीं जानता कि डिफ़ॉल्ट रूप से कैसे करें, लेकिन आप xclipGNU ELPA से पैकेज स्थापित कर सकते हैं और फिर सक्षम करें xclip-modeजो Emacs को सिखाता है कि GNU / Linux और Linux दोनों के लिए कैसे करें OSX।


xclipOSX के साथ काम करता है ? मैंने वहां जो देखा है, उससे यह X11 के साथ काम करने के लिए डिज़ाइन किया गया लगता है, देखें पोस्ट
Galder Zamarreño

1
xclip.elपैकेज का उपयोग करने के लिए बढ़ा दिया गया है pbpaste
स्टेफन

जब मैं किसी कारणवश macOS के तहत xclip का उपयोग करता हूं तो टर्मिनल मोड सर्वर मोड (नियमित रूप से नहीं) के रूप में निकलता है।
rien333

क्या आप इसे बग के रूप में रिपोर्ट कर सकते हैं (या तो सीधे या मेरे माध्यम से M-x report-emacs-bug?
स्टीफन

3

जैसा कि स्टीफन ने कहा, चित्रमय Emacs अनुप्रयोगों को डिफ़ॉल्ट रूप से ऐसा करना चाहिए।

एक पाठ टर्मिनल में, इस तरह के कार्यों का उपयोग करने के लिए एक और विकल्प है:

(defun pbcopy ()
  (interactive)
  (let ((deactivate-mark t))
    (call-process-region (point) (mark) "pbcopy")))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

सिवाय इसके कि कब नहीं। 20 साल बाद, emacs में एक ही pb .... मैं वास्तव में चाहता हूँ कि कुछ सामान्य और समझदार जमीन थी, पत्थर में कहीं सेट
निकोलस

1

यहां एक सरल एलीफ़ फ़ंक्शन है जिसे आप अपनी .emacs फ़ाइल में रख सकते हैं जो क्लिपबोर्ड में मौजूद बफर की सामग्री को कॉपी करता है। आपको कुछ भी चयन करने की आवश्यकता नहीं है, यह सभी को कॉपी करता है। कोड छोटा और सुंदर आत्म-व्याख्यात्मक है।

(defun xclip ()
(interactive)
(shell-command (concat "cat " (buffer-file-name (window-buffer (minibuffer-selected-window))) " | pbcopy")))

लोड करने या पुनः लोड करने के बाद एमएसीएक्स एक्लिप्स के साथ इसे फिर से लोड करें।
जुमार

ओपी ने पूरे बफर को क्लिपबोर्ड पर कॉपी करने के लिए नहीं कहा, इसलिए यह वह नहीं करता है जो पूछा गया था। बाकी के लिए, यह सिर्फ नकल करने के लिए लगता है कि दूसरों ने पहले से ही क्या कहा है।
स्टीफन

अगर यह विषय लगता है तो मैं माफी चाहता हूं। मैंने Google से इस पृष्ठ पर नेविगेट किया, जहां यह "क्लिपबोर्ड ईमेक की कॉपी पाठ" के लिए पहला परिणाम था। प्रश्न का शीर्षक "नकल पाठ से एमएसीएस से ओएस एक्स क्लिपबोर्ड" है, इसलिए यह देखना आसान है कि आप उस खोज परिणाम के लिए यहां कैसे समाप्त हो सकते हैं। मुझे लगता है कि यह उनके प्रश्न के पोस्ट किए गए वाक्यांश के तरीके पर लागू होता है। मैंने पहले भी StackExchange उत्तरों का दौरा किया है और जब कोई सरल उत्तर उपलब्ध नहीं था, तो निराश हो गया था, खासकर जब मुझे पता था कि हजारों लोग सवाल पूछ रहे थे, तो मैंने सोचा कि मैं उन लोगों के लिए अपना नाम जोड़ूंगा जो लाभान्वित हो सकते हैं।
जुमार १

0

बाहर की जाँच करें clipboard-kill-regionऔर clipboard-yank। ये आते हैं menu-bar.el

एक बार जब किसी क्षेत्र पर प्रकाश डाला जाता है, तो आप अपने पेस्ट बफर और सिस्टम क्लिपबोर्ड दोनों को क्षेत्र को मारने के लिए क्लिपबोर्ड-किल-क्षेत्र का उपयोग कर सकते हैं। क्लिपबोर्ड-यैंक "पेस्टेस" जो कि वर्तमान में सिस्टम क्लिपबोर्ड पर है।


कृपया अपने उत्तर पर विस्तार करें।
दान

मैंने उन आदेशों का उपयोग करके emacs से कुछ कॉपी करने की कोशिश की है, और बाहरी रूप से Emacs के बाहर कहीं और कॉपी करने के लिए उपलब्ध नहीं था।
गेल्डर ज़मर्रेनो

@ GalderZamarreño यह Emacs में मेरे लिए काम करता है और मैं OSX पर हूं।
बिट्स

0

गेलर ज़ामरेनो का जवाब बहुत अच्छा है, हालांकि, यह putबुराई-मोड में बुराई जैसे व्यवहार को तोड़ता है। इसलिए मैंने इसे थोड़ा नीचे अनुकूलित किया है - मुझे यकीन है कि यह बेहतर हो सकता है, लेकिन यह मेरे लिए काम करता है। सुधार का सुझाव देने के लिए स्वतंत्र महसूस करें:

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

----> नया कोड

  (defun clipboard-on ()
    (interactive)
    (setq interprogram-cut-function 'paste-to-osx)
    (setq interprogram-paste-function 'copy-from-osx))
  (defun clipboard-off ()
    (interactive)
    (setq interprogram-cut-function 'gui-select-text)
    (setq interprogram-paste-function 'gui-selection-value))
  (global-set-key (kbd "C-c C-p") 'clipboard-on)
  (global-set-key (kbd "C-c C-y") 'clipboard-off))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.