Emacs की कॉपी के बाद, OS-X पेस्ट बफर को LF के बजाय CRs मिलता है


1

जब मैं एक टेक्स्ट फाइल में एमिक्स-कॉपी या -कट को यूनिक्स लाइन एंडिंग (0x0a) के साथ करता हूं, और फिर टर्मिनल में पेस्टबोर्ड को देखता हूं, तो नई लाइनों को लोन कैरिज-रिटर्न के साथ बदल दिया गया है।

फ़ाइल (Emacs के साथ बनाई गई) में नई लाइन-एंडिंग्स हैं:

$ hexdump -C quick.txt
00000000  74 68 65 20 71 75 69 63  6b 0a 62 72 6f 77 6e 20  |the quick.brown |
00000010  66 6f 78 0a                                       |fox.|
00000014

फ़ाइल को (टर्मिनल में) पेस्ट बफर में कॉपी करना, फिर पेस्ट बफर प्रदर्शित करना, हम अभी भी newlines देखते हैं:

$ pbcopy <quick.txt ; pbpaste | hexdump -C
00000000  74 68 65 20 71 75 69 63  6b 0a 62 72 6f 77 6e 20  |the quick.brown |
00000010  66 6f 78 0a                                       |fox.|
00000014

Emacs (विंडो) के साथ फाइल खोलने के बाद, टेक्स्ट का चयन करें और उसके साथ कॉपी करें Cmd-डब्ल्यू (किल-रिंग-सेव के लिए बाध्य), फिर टर्मिनल में पेस्ट बफर प्रदर्शित करना, मुझे मिलता है:

$ pbpaste | hexdump -C
00000000  74 68 65 20 71 75 69 63  6b 0d 62 72 6f 77 6e 20  |the quick.brown |
00000010  66 6f 78 0d                                       |fox.|
00000014

नई सुर्खियों में अब कैरिज-रिटर्न हैं।

उनका अनुवाद क्यों किया जा रहा है, और मैं इसे कैसे रोक सकता हूं?

  • OS-X 10.6.7
  • GUI विंडो में Emacs 22.3.1
  • छिप कर .emacs.el का अनुवाद (मेरे अनुकूलन) पर कोई प्रभाव नहीं है करना चले जाओ)।

जवाबों:


0

मुझे मिला एक धागा कहीं और इस "बग" के बारे में, उद्धरण में एक फिक्स ("बग" सहित) क्योंकि यह Emacs डेवलपर्स द्वारा एक डिजाइन निर्णय की तरह दिखता है, सिर्फ एक जो मेरे लिए काम नहीं करता है)।

सेइजी जेनितानी ने धागा खोला और एक समाधान पोस्ट किया जिसे किसी ने उसे भेजा था (वह यह नहीं कहता कि), जो मैं नीचे पोस्ट करूँगा कि धागा दूर चला जाए। टिप्पणियाँ मेरी हैं; कोड के रूप में वह इसे पोस्ट किया है।

इसका सार यह है कि OS-X पेस्टबोर्ड (\ n - & gt; \ r) से बाहर Emacs-cut या -copy की प्रतिलिपि बनाते समय unix-mode से Mac-mode लाइन अंत तक एक जानबूझकर (जाहिरा तौर पर) अनुवाद होता है बिल्कुल वही जो मैं देख रहा था)। यकीनन, पेस्टबोर्ड्स का उपयोग मैक अनुप्रयोगों में पेस्ट करने के लिए सबसे अधिक बार किया जाता है, इसलिए पेस्टबोर्ड पर मैक-मोड में अनुवाद करना समझ में आता है। समान रूप से तर्क यह है कि Emacs उपयोगकर्ता अंतर्निहित यूनिक्स में काम करने की संभावना रखते हैं, इसलिए यूनिक्स मोड में स्ट्रिंग्स की नकल करना समझ में आता है, और यही वह समाधान है जिसे मैंने चुना। यह मदद करता है कि ज्यादातर मैक एप्लिकेशन यूनिक्स-मोड स्ट्रिंग्स को स्वीकार करते हैं।

जोड़:

;; Bug fix for: "After Emacs copy, OS-X paste buffer gets CRs where LFs used to be", 
;; by redefining .../term/mac-win.el/mac-string-to-utxt.
;; Line 7 changes coding system to unix (was mac)
;; Lines 23,24   delete "-mac" from "utf-16be-mac" and "utf-16le-mac" and appear
;; to apply to Japanese encodings.
;; See: http://old.nabble.com/Fwd%3A-Line-endings-bug-to10657191.html#a10730618

(defun mac-string-to-utxt (string &optional coding-system)
 (or coding-system (setq coding-system mac-system-coding-system))
 (let (data encoding)
   (when (and (fboundp 'mac-code-convert-string)
              (memq (coding-system-base coding-system)
                    (find-coding-systems-string string)))
     (setq coding-system
           (coding-system-change-eol-conversion coding-system 'unix))
     (let ((str string))
       (when (and (eq system-type 'darwin)
                  (eq coding-system 'japanese-shift-jis-mac))
         (setq encoding mac-text-encoding-mac-japanese-basic-variant)
         (setq str (subst-char-in-string ?\\ ?\x80 str))
         (subst-char-in-string ?\\ ?\x5c str t)
         ;; ASCII-only?
         (if (string-match "\\`[\x00-\x7f]*\\'" str)
             (setq str nil)))
       (and str
            (setq data (mac-code-convert-string
                        (encode-coding-string str coding-system)
                        (or encoding coding-system) nil)))))
   (or data (encode-coding-string string (if (eq (byteorder) ?B)
                                             'utf-16be
                                           'utf-16le)))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.