ইতিমধ্যে মন্তব্যে উত্তর হিসাবে, ইমাকগুলি দীর্ঘ লাইনের জন্য এর পুনরায় প্রদর্শনে খুব ধীর হয়ে উঠা একটি সুপরিচিত সমস্যা । এটি ঠিক করা খুব সুন্দর হবে তবে সঠিকভাবে টানতে প্রচুর চিন্তাভাবনা করা দরকার। আমার এই ধারণাটি কীভাবে এই নথির 6.3 অনুচ্ছেদের উপর ভিত্তি করে সম্পন্ন করা যায়
(মূলত বর্তমান বাফারে ভিজ্যুয়াল লাইনের তথ্য সংরক্ষণ করুন এবং এটি হোয়াইটস্পেস, প্রদর্শন বৈশিষ্ট্য, উইন্ডো পরিবর্তন ইত্যাদির সন্নিবেশ সম্পর্কিত আপডেট করুন, তারপরে সেই তথ্যটি ব্যবহার করুন এটির জন্য সর্বদা স্ক্যান এড়াতে পুনর্নির্ধারণের কোড) তবে সি ইন্টার্নালগুলি এটিকে সরাতে যথেষ্ট পরিচিত নয়।
যদিও কর্মক্ষেত্র আছে। সর্বাধিক সুস্পষ্ট বিষয়গুলি হ'ল ডিসপ্লে-সম্পর্কিত প্যারামিটারগুলি টিউন করা হবে (যেমন, গ্রাফিকাল ইম্যাক্স উদাহরণগুলিতে ভিজ্যুয়াল লাইন কাটাকে সক্ষম করা, কোনও গ্রাফিকাল ইমাক ব্যবহার না করে স্বয়ংক্রিয়ভাবে সম্পন্ন করা, বিড়ি বৈশিষ্ট্যগুলি অক্ষম করা ইত্যাদি) এবং আপনি ফাইলের বিষয়বস্তুগুলিকে প্রিক্রোসোসিং করে ' পুনরায় পড়ছে A কম স্পষ্টতই স্বয়ংক্রিয়ভাবে ফাইলগুলি পোস্ট-প্রসেসিং করা হয়, এটি তাদের লাইনগুলি কেটে ফেলা বা পাঠ্য বৈশিষ্ট্য যুক্ত করে লাইনগুলি প্রকৃতপক্ষে তার চেয়ে ছোট দেখায়। এটিকে আরও আকর্ষণীয় উত্তরে রূপান্তরিত করার জন্য, আমি পূর্ববর্তী বিকল্পটির একটি সুন্দর কুৎসিত হ্যাক উপস্থাপন করব যা কেবলমাত্র- 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 এর উপবৃত্ত সাথে উন্নত নির্দেশিত যেতে পারে। সর্বোপরি, এটি এমনকি গ্যারান্টিযুক্তও নয় যে পাঠ্যটি আসবে তা ব্যাচগুলিতে পরিণত হয়নি। অস্থায়ী বাফারে প্রসেসিং স্টেপটি করার জন্য এই সমস্ত চিৎকার করে, তবে অনুশীলন হিসাবে পাঠকের জন্য ছেড়ে দেওয়া হবে (বা সম্ভাব্য ব্লগ পোস্ট হিসাবে লেখক)।