जैसा कि पहले ही टिप्पणियों में उत्तर दिया गया है, लंबी रेखाओं के लिए रेडिसप्ले में बहुत धीमी गति से बनने वाले एमएसीएस एक प्रसिद्ध मुद्दा है । इसे ठीक करना बहुत अच्छा होगा, लेकिन सही तरीके से खींचे जाने के लिए बहुत सारे विचारों की आवश्यकता होती है। मुझे इस बात का अंदाजा है कि इस दस्तावेज़ के खंड 6.3 के आधार पर इसे कैसे पूरा किया जा सकता है
(मूल रूप से, वर्तमान बफर में विज़ुअल लाइन की जानकारी संग्रहीत करें और इसे व्हॉट्सएप, प्रदर्शन गुण, विंडो परिवर्तन आदि के सम्मिलन पर अपडेट करें, फिर उस जानकारी का उपयोग करें) redisplay कोड हर समय इसके लिए स्कैनिंग से बचने के लिए), लेकिन सी इंटर्नल्स के साथ इसे खींचने के लिए पर्याप्त परिचित नहीं है।
हालांकि वर्कअराउंड हैं। सबसे अधिक स्पष्ट प्रदर्शन-संबंधी मापदंडों को ट्यूनिंग करना होगा (जैसे, चित्रमय Emacs उदाहरण में विज़ुअल लाइन ट्रंकेशन को सक्षम करना, गैर-ग्राफ़िकल Emacs का उपयोग करना जो स्वचालित रूप से किया गया है, बीड़ी सुविधाओं को अक्षम करना, आदि) और फ़ाइल सामग्री को पूर्व-निर्धारित करना ' फिर से पढ़ना। एक कम स्पष्ट रूप से फ़ाइलों को स्वचालित रूप से पोस्ट-प्रोसेसिंग किया जाता है, यह वास्तव में उनकी पंक्तियों को छोटा करने या पाठ गुणों को जोड़ने से हो सकता है जो लाइनों को वास्तव में की तुलना में कम दिखाई देते हैं। इसे और अधिक दिलचस्प जवाब में बदलने के लिए, मैं पूर्व विकल्प का एक बहुत ही बदसूरत हैक पेश करूंगा जो केवल- comint
मोड वाले मोड के लिए काम करेगा :
(defun my-comint-shorten-long-lines (text)
(let* ((regexp "^\\(.\\{80\\}\\).*?$")
(shortened-text (replace-regexp-in-string regexp "\\1" text)))
(if (string= shortened-text text)
text
(propertize shortened-text 'help-echo text))))
(add-hook 'comint-preoutput-filter-functions 'my-comint-shorten-long-lines)
यह परिभाषित करता है my-comint-shorten-long-lines
, एक फ़ंक्शन जो संभवतः एक स्ट्रिंग लेता है जिसमें कई लाइनें शामिल होती हैं और 80 रेखाओं की लंबाई के साथ या उससे अधिक छोटे संस्करण के साथ नियमित रूप से अभिव्यक्ति की शक्ति का उपयोग करता है जो मूल पाठ को प्रदर्शित करता है जब इसके ऊपर मंडराता है। जब comint-preoutput-filter-functions
इसे हुक के रूप में उपयोग किया जाता है
तो comint
यह प्रदर्शित होने से पहले सभी आउटपुट को फ़िल्टर कर देगा ।
हालांकि, हैक के इस प्रतिपादन में काफी गंभीर कमजोरी है। उन मोड्स में, जिनमें बुनियादी फॉन्टिफिकेशन चल रहा है (जैसे M-x ielm
), यह उन लाइनों को ख़ुशी से काट देगा जो एक स्ट्रिंग का हिस्सा हैं और इस तरह से सब कुछ फॉन्ट करेंगी जब तक कि अगली बोली स्ट्रिंग के रूप में न हो जाए! यह वह नहीं है जो हम चाहते हैं और थोड़ा और रेगेक्स महारत के साथ तय किया जा सकता है (लेकिन संभवतः पायथन जैसी भाषा के लिए एक आरईपीएल के अंदर टूट जाएगा)। जब हम इस पर होते हैं, तो आइए संक्षिप्त आउटपुट को उजागर करें:
(defun my-comint-shorten-long-lines (text)
(let* ((regexp "^\\(.\\{80\\}\\).*?\\(\"?\\)$")
(shortened-text (replace-regexp-in-string regexp "\\1\\2" text)))
(if (string= shortened-text text)
text
(propertize shortened-text 'font-lock-face 'shadow 'help-echo text))))
(add-hook 'comint-preoutput-filter-functions 'my-comint-shorten-long-lines)
यह थोड़ा बेहतर है, लेकिन फिर भी बदसूरत है। की तरह कुछ के उत्पादन पर मँडरा find /
में M-x shell
अपील नहीं कर रहा है (हम आदर्श केवल unshortened लाइन, सभी उत्पादन प्रदर्शित करना चाहते हैं चाहते हैं), स्ट्रिंग का पता लगाने सबसे अच्छे रूप में अल्पविकसित है और काट-छांट के बजाय सब कुछ fontifying के अनेक बिंदुओं के साथ बेहतर संकेत दिया जा सकता है। उसके ऊपर, यह भी गारंटी नहीं है कि आने वाला पाठ बैचों में बदल नहीं गया है। यह सब एक अस्थायी बफर में प्रसंस्करण कदम करने के लिए चिल्लाता है, लेकिन पाठक को व्यायाम (या संभावित ब्लॉग लेखक के रूप में) के लिए छोड़ दिया जाएगा।