2009-05-11 17 views
16

यह परिदृश्य है कि मैं कुछ बार भाग गया:विंडोज पर Emacs में क्लिपबोर्ड सामग्री को कैसे संरक्षित करें?

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

किल-लाइन इत्यादि ऐसे बुनियादी आदेश हैं (जैसे कि डिलीट कुंजी को मारना, लगभग), और जब मुझे कोई फर्क नहीं पड़ता कि हत्यारे की अंगूठी उन कमांड का उपयोग करके थोड़ी सी अव्यवस्थित हो जाती है, तो मुझे उम्मीद है कि मेरा मूल टेक्स्ट मार-रिंग में कहीं भी रहता है ताकि मैं अंततः इसे कुछ बार टाइप करके ढूंढ सकूं। क्लिपबोर्ड सामग्री को ओवरराइड करने से पहले मैं Emacs को स्वचालित क्लिपबोर्ड सामग्री को स्वचालित रूप से हत्या-अंगूठी में कैसे सुरक्षित रख सकता हूं?

उत्तर

12

यह कोड स्वचालित रूप से चयन (एमाक्स से बाहर) को मारने पर किसी भी समय मार-रिंग पर डाल देना चाहिए जब भी आप Emacs में एक हत्या करते हैं। यह लिनक्स पर परीक्षण किया गया है, लेकिन लिनक्स तक ही सीमित नहीं होना चाहिए।

(defadvice kill-new (before kill-new-push-xselection-on-kill-ring activate) 
    "Before putting new kill onto the kill-ring, add the clipboard/external selection to the kill ring" 
    (let ((have-paste (and interprogram-paste-function 
         (funcall interprogram-paste-function)))) 
    (when have-paste (push have-paste kill-ring)))) 

यदि आप पाते हैं अपने आप को इस एक बहुत कर रही है, यह पैकेज browse-kill-ring पर एक नज़र लेने के लिए है, जो आप को मारने की अंगूठी का एक अच्छा दृश्य देता है (जैसा कि बार-बार M-y टाइपिंग के खिलाफ) उपयोगी हो सकता है।

+0

सरल, आसान, सही। मैंने आज इसका इस्तेमाल किया। ब्राउज़र से कुछ पाठ कॉपी किया था, और फिर इसे एक नई फ़ाइल में पेस्ट करने के लिए emacs में चला गया। महसूस किए बिना, मैंने फ़ाइल पथनाम पर कुछ हत्या आदेशों का उपयोग किया था क्योंकि मैं नई फ़ाइल खोल रहा था। इस स्क्रिप्ट के बिना क्लिपबोर्ड सामग्री चली जाएगी। लेकिन इस बार यह उम्मीद के रूप में काम किया! – Cheeso

2

मुझे लगता है कि समस्या यह है कि जब आप emacs के बाहर क्लिपबोर्ड से yank करते हैं, तो आप हत्या की अंगूठी को नहीं बचा रहे हैं।

इस क्षेत्र को सम्मिलित करने के लिए फ़ंक्शन क्लिपबोर्ड-यांक का उपयोग करने के लिए आपको क्या चाहिए, फिर किसी भी तरह इसे चुनें और इसे मारने की अंगूठी में सहेजें, जैसे फ़ंक्शन मार-रिंग-सेव करता है।

या यहां तक ​​कि बेहतर फ़ंक्शन क्लिपबोर्ड-सेव-टू-मार-रिंग-एंड-यंक लिखना बेहतर है जो क्लिपबोड को मारने की अंगूठी में सहेजता है और फिर इसे यंक करता है।

संपादित करें: कोड के माध्यम से थोड़ा सा ट्रैकिंग, यह वही है जो आप चाहते हैं; आप इसे एक कुंजी पर लगा सकते हैं। यह मारने की अंगूठी के लिए विंडोज क्लिपबोर्ड सामग्री बचाता है।

(defun clipboard-to-kill-ring() 
    "save the external clipboard contents to the kill ring" 
    (interactive) 
    (let ((clip (funcall interprogram-paste-function))) 
     (when clip 
     (kill-new clip))) 

(defadvice yank (before maybe-copy-windows-clipboard (arg)) 
    (clipboard-to-kill-ring)) 

(ad-activate 'yank) 
+0

यह अच्छा है, लेकिन मुझे कुछ स्वचालित की आवश्यकता है (अगर मैं भूल जाता हूं!) ताकि जब भी मैं कुछ मारूं, क्लिपबोर्ड पर जो भी हो, उसे मारने के लिए संरक्षित किया जाता है यदि यह पहले से मौजूद नहीं है। – polyglot

+0

मुझे लगता है कि मेरा संपादन काम करता है। पहले की सलाह Yank कमांड को स्वचालित रूप से विंडोज़ क्लिपबोर्ड को मारने की अंगूठी में सहेजती है। – justinhj

+0

मैं अपने कोड परिदृश्य में काम करने के लिए विफल रहता है लगता है: एक गैर Emacs विंडो में चयन पाठ (कहते हैं कि "XYZ") अब Emacs में कुछ पाठ को मारने (कहते हैं कि "एबीसी") Cy मेरे मेरे .. XYZ नहीं पाया जाना चाहिए बी/सी पहली हत्या पर चयन खो गया है, इससे पहले कि पहले यंक इसे मारने की अंगूठी में जोड़ सके। –

0

मुझे लगता है कि चाहते हैं आप हैक कर सकता है विभिन्न मार आदेश क्लिपबोर्ड में पाठ नहीं डाल करने के लिए, और उसके बाद है क्लिपबोर्ड-झटका एक अलग कुंजी के लिए बाध्य, पता नहीं है कि काम करेगा।

0

मैं इस बात को फिर से मारने के बाद इस तरह के काम को फिर से मार रहा हूं, जब मैं एक प्रतिलिपि बनाने या किसी अन्य विंडोज ऐप में कटौती करने के बाद emacs में पॉप करता हूं।

एक बेहतर दृष्टिकोण Emacs हैक करने होगा ताकि जब आप कुछ को मारने के लिए, यह मार रिंग में सर्वोच्च प्रविष्टि के लिए मौजूदा क्लिपबोर्ड तुलना, और अलग अलग हैं, तो यह मार अंगूठी को क्लिपबोर्ड सामग्री को धक्का, ऐसा करने से पहले आपको स्पष्ट रूप से अनुरोध करने के लिए मार डालो।

+0

आपको मेरे समाधान के साथ हत्या की अंगूठी पर क्या जांचने की आवश्यकता नहीं है क्योंकि जब आप क्लिपबोर्ड लेते हैं तो यह साफ़ हो जाता है, इसलिए बाद में कॉल केवल शून्य हो जाती है और वे इसे जोड़ नहीं देते हत्या की अंगूठी। – justinhj

3

ध्यान दें कि नवीनतम Emacs सीवीएस संस्करण वेरिएबल को बचाने-interprogram-पेस्ट पहले मारने जो वास्तव में इस सीएफ करता है: etc/NEWS फ़ाइल से:

** जब उत्तरार्द्ध से पहले save-interprogram-paste-before-kill' is non-nil, emacs will not clobber the the interprogram paste when something is killed in it by saving the former in the मार-रिंग ' ।

+0

ओह मीठा! (15 वर्ण) – polyglot

संबंधित मुद्दे