* বার্তা * বাফারে প্রসেস আউটপুট প্রেরণ করুন, তবে প্রতিধ্বনির ক্ষেত্রটি বাইপাস করুন


9

কোনও প্রসেস-ফিল্টার থেকে *Messages*বাফারে আউটপুট প্রেরণ করা এবং প্রতিধ্বনির প্রতিধ্বনিটি প্রতিধ্বনি অঞ্চলে উপস্থিত হওয়া থেকে দমন করা সম্ভব যেমন আমি minibuffer-promptচলমান সাবপ্রেস ফিল্টার আউটপুটটি মুছে না ফেলে একই সাথে ইন্টারেক্টিভ কমান্ড ব্যবহার করতে সক্ষম হয়েছি ?

(defun rsync-process-filter (proc string)
  (when (not (or
      (string-match "files...\r" string)
      (string-match "files to consider\n" string)))
    (message "%s" string)))

সম্পাদনা (জানুয়ারী 3, 2015): নিম্নলিখিতটি একটি অনুরূপ প্রশ্নের লিঙ্ক, তবে, আমি এখনও এটির প্রক্রিয়া স্ট্রিংয়ের সাথে কাজ করতে সক্ষম হইনি যেখানে সঠিক স্ট্রিংটি অজানা - থ্রেডের শিরোনাম হ'ল: ইম্যাক্স - কিছু মিনিবুফার বার্তা অক্ষম করুন :

/superuser/669701/emacs-disable-some-minibuffer-messages


আমি মনে করি না যে আপনি পারবেন। কেন কেবল অন্য একটি বাফারে লগইন করবেন না? প্রক্রিয়াগুলির সাথে মোকাবিলা করা বেশিরভাগ মোডগুলি সেটাই করে ...
চন্দ্রালম্বি

@ লুনারিওর্ন - এই পরামর্শের জন্য আপনাকে ধন্যবাদ - সমস্যা সমাধানের জন্য একটি উত্সর্গীকৃত বাফার একটি বৈধ বিকল্প। কয়েকটি প্রক্রিয়া আউটপুট রয়েছে যে *Messages*বাফারে প্রেরণের জন্য আমার ব্যক্তিগত পছন্দ রয়েছে - সিঙ্ক্রোনাইজেশন সম্পর্কিত প্রকল্পগুলির মধ্যে একটি। এখনও আমি বেশ কয়েকটি জিনিস চেষ্টা করে দেখিনি ( কারণ আমি ভেবেছিলাম সেখানে কোনও অন্তর্নির্মিত সমাধান থাকতে পারে ) যেমন *Messages*বাফারকে অস্থায়ীভাবে লেখার যোগ্য করে তোলা inhibit-read-onlyএবং ব্যবহার insertকরা point-max- আমি জানি না যে এটিতে প্রদর্শিত হবে কিনা প্রতিধ্বনির ক্ষেত্রও আমি এই সন্ধ্যায় আবার কাজ করব। । ।
আইনজীবি

আগ্রহের একটি নোট মেসেজিংয়ের জন্য সি ফাংশনগুলি অনেকগুলি "প্রতিধ্বনি" এবং "লগিং" উদ্বেগের দ্বারা পৃথক করা হয়, তবে এই পার্থক্যটি এলিস্পের সাথে প্রকাশিত হয় না। সম্ভবত আপনি M-x report-emacs-bugএবং একটি বৈশিষ্ট্য হিসাবে এটি অনুরোধ করতে পারে ?
ফিল্ডস

@ ফিলস | @ লুনারিয়রন: আমি ব্যবহার করে কাঙ্ক্ষিত প্রভাব অর্জন করতে সক্ষম (let ((inhibit-read-only t)) (with-current-buffer (get-buffer-create "*Messages*") (goto-char (point-max)) (insert string)))হয়েছি এবং আমি একটি খসড়া উত্তর পোস্ট করেছি, যা কোনও ব্যবহারকারীর নিজস্ব প্রশ্নে বাধ্যতামূলক অপেক্ষার সময়সীমাটি শেষ হয়ে যাওয়ার পরে গ্রহণযোগ্যতার জন্য যোগ্য হবে। আমি এইটির সাথে একটি বৈশিষ্ট্য অনুরোধ দায়ের করেছি report-emacs-bug: debbugs.gnu.org/cgi/bugreport.cgi?bug=19495
আইনজীবি

আইনজীবি তালিকা: আমি সেই পদ্ধতির পরামর্শ দিচ্ছিলাম না কারণ আপনি নকল বার্তা ইত্যাদির জন্য লজিকের অনেকগুলি চালনা করতে পারেন (তবে এটি ভালও হতে পারে; আমি আসলে জানি না)) সম্ভবত আপনি (messages-buffer)বাফারটি ব্যবহার করতে পারেন , যদি আপনি এই পদ্ধতির সাথে আটকে থাকেন এবং নোট করুন যে (point-max)সর্বদা একটি নতুন লাইনের সূচনা হবে না (যেমন ব্যবহার C-g)।
ফিল্ডস

উত্তর:


3

আপনি minibuffer-message-timeout0 এ সেট করে মিনিবাসে প্রদর্শন দমন করতে পারেন ।

উদাহরণস্বরূপ, আমি কয়েকটি স্থানে এরকম কিছু ব্যবহার করি যেখানে আমি একটি মিনি মোফার প্রম্পটে (ইডো ফাইন্ড-ফাইলের মতো) কোনও 'মোড সক্ষম' বার্তাটি ব্যাহত না করেই একটি ছোট মোড টগল করতে চাই:

(let ((minibuffer-message-timeout 0))
    (toggle-some-mode))

আপনার পরামর্শের জন্য ধন্যবাদ; তবে এটি পছন্দসই প্রভাব অর্জন করতে পারেনি। (let ((minibuffer-message-timeout 0)) (message "%s" string))ইকো-এরিয়া / মিনিবুফারের সাথে চলমান প্রক্রিয়া আউটপুট প্রিন্টিং এখনও execute-extended-commandবা switch-to-buffer-other-windowযেমন - যেমন ইন্টারেক্টিভ ফাংশনগুলি টাইপ করার সময় প্রম্পট এবং প্রস্তাবিত সম্পূর্ণকরণগুলি প্রক্রিয়া আউটপুট বার্তাগুলি দ্বারা মুছে যায়।
আইনজীবি

3

প্রথম রুফ ড্রাফ্ট (জানুয়ারী 3, 2015): messages-bufferউপযুক্ত বাফারটি সনাক্ত করতে বা তৈরি করতে ফাংশনটি ব্যবহার করার বিষয়ে @ ফিল্সের সহায়ক মন্তব্যের উপর ভিত্তি করে সংশোধিত প্রাথমিক খসড়া (এবং এটিতে রেখে দেওয়া messages-buffer-mode); এবং, point-maxলাইনের শুরুতে রয়েছে কিনা তা পরীক্ষা করে যুক্ত করেছে (যদি না হয় তবে বার্তাটির স্ট্রিং inোকানোর আগে একটি নতুন লাইন ইনসেট করুন)।

সম্পাদনা (জানুয়ারী 4, 2015): এমন পরিস্থিতি রয়েছে যেখানে stringোকানো স্ট্রিং অগত্যা কোনও নতুন লাইনে শেষ না হতে পারে এবং নতুন লাইনের messageশুরুতে এটি নিশ্চিত করার জন্য ফাংশনটির কোনও চেক নেই, তাই আমরা তার যত্ন নিই এই ফাংশনে। সুতরাং, যে কোনও সময়ে যখন messageএকটি নতুন লাইন সন্নিবেশ করানো হয়, লাইনটি বাফারের বামদিকে ফ্লাশ-বামে শুরু হবে।

(defun rsync-process-filter (proc string)
  (let ((inhibit-read-only t))
    (when (not (or
        (string-match "files...\r" string)
        (string-match "files to consider\n" string)))
      (with-current-buffer (messages-buffer)
        (goto-char (point-max))
        (when (not (bolp))
          (insert "\n"))
        (insert string)
        (when (not (bolp))
          (insert "\n"))))))

2

এর ডক্ট্রাস্টিংয়ের মধ্য দিয়ে যাওয়া দেখে messageমনে হচ্ছে আপনার কাঙ্ক্ষিত সামগ্রীটি nilকল করার messageসাথে সাথে যুক্তির মাধ্যমে বার্তা কল করে আপনি যা চান তা অর্জন করা উচিত । এর ডক্ট্রিং থেকেmessage

যদি প্রথম যুক্তিটি শূন্য হয় বা খালি স্ট্রিং থাকে তবে ফাংশনটি কোনও বিদ্যমান বার্তা সাফ করে; এটি মিনিবুফার সামগ্রীগুলি প্রদর্শন করতে দেয়।

সুতরাং আপনার ফাংশনটিকে নিম্নের মতো কিছুতে সংশোধন করে কাজ করা উচিত

(defun rsync-process-filter (proc string)
  (when (not (or
      (string-match "files...\r" string)
      (string-match "files to consider\n" string)))
    (message "%s" string)
    (message nil)))

আমি নিম্নলিখিতটি পরীক্ষা করে এটি পরীক্ষা করেছি

(defun test ()
  (message "%s" "Test")
  (message nil))

(run-at-time 5 5 #'test)

এবং এটা কাজ মনে হয়


আপনার পরামর্শের জন্য ধন্যবাদ। এই ধারণাটি যখন *Messages*বাফারে একটি চলমান প্রক্রিয়া আউটপুট পরীক্ষা করে এবং তারপরে ইন্টারেক্টিভ কমান্ড কল করে execute-extended-command, নিম্নলিখিতটি দেখায়: ইন্টারেক্টিভ প্রম্পট (যেমন, M-xএবং কোনও আংশিক পরিপূর্ণতা) এবং প্রক্রিয়াটি থেকে আউটপুট - অর্থাৎ দুটি স্যুইচ ফিরে আসে এবং সামান্য গতিতে এগিয়ে, তবে দুজনের মধ্যে ঝাঁকুনি বোঝা যায়। এটি কেস হিসাবে দেখা যাচ্ছে কারণ ইস্যুতে নির্দিষ্ট প্রক্রিয়া ক্রমাগতভাবে নতুন বার্তাগুলি ছড়িয়ে দিচ্ছে, এবং সেই নতুন বার্তা প্রতিধ্বনি অঞ্চলে একটি সেকেন্ডের ভগ্নাংশের জন্য প্রদর্শিত হচ্ছে।
আইনজীবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.