ইমাসের * বার্তাগুলি * বাফারে প্রতিটি প্রবেশে কীভাবে টাইমস্ট্যাম্প যুক্ত করবেন?


11

আমি *Messages*অনেকটা বাফারের উপর নির্ভর করি , তবে এন্ট্রিগুলি টাইমস্ট্যাম্প করা হয় না।

ইমাসের বার্তাগুলির বাফারে প্রতিটি প্রবেশে কীভাবে একজন টাইমস্ট্যাম্প যুক্ত করতে পারে ?

যাতে এই মত কিছু:

Loading /Users/gsl/lisp.d/init.el (source)...
No outline structure detected
For information about GNU Emacs and the GNU system, type C-h C-a.
Loading /Users/gsl/lisp.d/var/recentf...done
Error running timer: (wrong-number-of-arguments (lambda nil (setq gc-cons-threshold (* 64 1024 1024)) (message "WARNING: gc-cons-threshold restored to %S")) 1)
[yas] Prepared just-in-time loading of snippets successfully.
M-] is undefined
CHILDREN [2 times]
‘show-all’ is an obsolete command (as of 25.1); use ‘outline-show-all’ instead.
Invalid face reference: nil [33 times]
Auto-saving...done
Saving file /Users/gsl/lisp.d/init.el...
Wrote /Users/gsl/lisp.d/init.el
mwheel-scroll: Beginning of buffer [5 times]
Mark set
previous-line: Beginning of buffer [10 times]
Quit [4 times]

এইরকম কিছু হয়ে উঠবে:

2017-02-14-18:50:01 Loading /Users/gsl/lisp.d/init.el (source)...
2017-02-14-18:50:02 No outline structure detected
2017-02-14-18:50:03 For information about GNU Emacs and the GNU system, type C-h C-a.
2017-02-14-18:50:05 Loading /Users/gsl/lisp.d/var/recentf...done
2017-02-14-18:50:10 Error running timer: (wrong-number-of-arguments (lambda nil (setq gc-cons-threshold (* 64 1024 1024)) (message "WARNING: gc-cons-threshold restored     to %S")) 1)
2017-02-14-18:50:12 [yas] Prepared just-in-time loading of snippets successfully.
2017-02-14-18:50:40 M-] is undefined
2017-02-14-18:50:41 CHILDREN [2 times]
2017-02-14-18:50:00 ‘show-all’ is an obsolete command (as of 25.1); use ‘outline-show-all’ instead.
2017-02-14-18:50:01 Invalid face reference: nil [33 times]
2017-02-14-18:51:01 Auto-saving...done
2017-02-14-18:51:03 Saving file /Users/gsl/lisp.d/init.el...
2017-02-14-18:51:06 Wrote /Users/gsl/lisp.d/init.el
2017-02-14-18:51:09 mwheel-scroll: Beginning of buffer [5 times]
2017-02-14-18:51:11 Mark set
2017-02-14-18:51:21 previous-line: Beginning of buffer [10 times]

আমি অবশ্যই ইমাসকুইকি, রেডডিট এবং ইমাস.এসএক্সে অনুসন্ধান করেছিলাম, কোনও লাভ হয়নি।

আমি সচেতন command-log-mode, যা টাইমস্ট্যাম্পগুলিতে লগ করার জন্য সামঞ্জস্য করা যেতে পারে তবে এটি কেবল ইন্টারেক্টিভ কমান্ডের জন্যই কার্যকর, ইমেক্সের "সিস্টেম" এর সাথে সমস্ত বার্তা নয়।

পরিবর্তে, বার্তাগুলির বাফারে লগ করা প্রতিটি বার্তা টাইমস্ট্যাম্প করা উচিত।

ইমাসের বার্তাগুলির বাফারে প্রতিটি প্রবেশের জন্য কীভাবে একজন টাইমস্ট্যাম্প যুক্ত করতে পারে , এর উত্সটি বিবেচনা করেই?


2
এটি ইমাক্সের জন্য কোনও বৈশিষ্ট্যের অনুরোধের মতো শোনাচ্ছে। messageকমান্ড সি বাস্তবায়িত হয় এবং সম্ভবত, সরাসরি কলারের হয়েছে, সুতরাং প্রতিবার লগ বার্তা গিয়ে Emacs নিজের নির্মাণের ছাড়া একটি টাইমস্ট্যাম্প পায় তা নিশ্চিত করতে সক্ষম হবে না। এটি বলেছিল, messageএলিস্প থেকে ডাকার সময় আপনি কমান্ডকে টাইম স্ট্যাম্প চালু করার পরামর্শ দিতে সক্ষম হতে পারেন । কিছু সাবধান থাকতে হবেঃ messageকোন args, একটি খালি ফরম্যাট স্ট্রিং, ইত্যাদি এছাড়াও আপনি একটি recursive লুপ আপনার টাইমস্ট্যাম্প পরামর্শ নিজেই কল করা উচিত এড়াতে চান সঙ্গে বলা যেতে পারে messageকিছু কোড পথে।
গ্লুকাস

1
আমি এটা চেষ্টা করিনি কিন্তু মনে হচ্ছে আপনার মত সম্মুখের বার্তা পরামর্শ করতে সক্ষম হওয়া উচিত emacswiki.org/emacs/AdvisingFunctions stackoverflow.com/questions/21524488/... superuser.com/questions/669701/...
eflanigan00

1
আমি after-change-functionsএটি প্রয়োগ করতে (বার্তাগুলির বাফারে) ব্যবহার করতে আগ্রহী হব । বাফারের শেষে যখনই কিছু sertedোকানো হয় তখন এটির জন্য একটি টাইমস্ট্যাম্প উপসর্গ করুন।
ফিল্ডগুলি

1
@ ফাইলগুলি gnu.org/software/emacs/manual/html_node/elisp/Change-Hooks.html বার্তাগুলির বাফারে বার্তাগুলির আউটপুট এই ফাংশনগুলিকে কল করে না, এবং কিছু নির্দিষ্ট অভ্যন্তরীণ বাফার পরিবর্তনও করে না যেমন তৈরি বাফারগুলির পরিবর্তনগুলি as অভ্যন্তরীণভাবে ইম্যাকস দ্বারা নির্দিষ্ট কাজের জন্য, এটি লিস্প প্রোগ্রামগুলিতে দৃশ্যমান হওয়া উচিত নয়।
xinfa তাং

উত্তর:


7

আমার আর.আই.এল-এর নীচে আমার স্নিপেট রয়েছে, যা নীচের রেডডিট থ্রেডে পাওয়া একটি মূল থেকে অভিযোজিত হয়েছিল: http://www.reddit.com/r/emacs/comments/16tzu9/anyone_know_of_a_reasonable_way_to_ টাইম স্ট্যাম্প /

(সম্পাদনা: পরামর্শ-সংযোজনে আধুনিকীকরণ এবং @ ব্লুজেয়ের পরামর্শে আনাড়ি-পঠনযোগ্য কেবল-বাফার হ্যান্ডলিংটি মুছে ফেলা হয়েছে)

(defun sh/current-time-microseconds ()
  "Return the current time formatted to include microseconds."
  (let* ((nowtime (current-time))
         (now-ms (nth 2 nowtime)))
    (concat (format-time-string "[%Y-%m-%dT%T" nowtime) (format ".%d]" now-ms))))

(defun sh/ad-timestamp-message (FORMAT-STRING &rest args)
  "Advice to run before `message' that prepends a timestamp to each message.

Activate this advice with:
(advice-add 'message :before 'sh/ad-timestamp-message)"
  (unless (string-equal FORMAT-STRING "%s%s")
    (let ((deactivate-mark nil)
          (inhibit-read-only t))
      (with-current-buffer "*Messages*"
        (goto-char (point-max))
        (if (not (bolp))
          (newline))
        (insert (sh/current-time-microseconds) " ")))))

(advice-add 'message :before 'sh/ad-timestamp-message)

এর ফলে ফলাফল * বার্তা * বাফার সাজানোর ফলে:

[2017-06-13T07:21:13.270070] Turning on magit-auto-revert-mode...
[2017-06-13T07:21:13.467317] Turning on magit-auto-revert-mode...done
[2017-06-13T07:21:13.557918] For information about GNU Emacs and the GNU system, type C-h C-a.

3
আমি অবাক হয়েছি কেন এটি ডিফল্টরূপে বিকল্প হিসাবে সরবরাহ করা হয় না।
বার্টফ্রেড

1
উজ্জ্বল, আমি ঠিক এটিই খুঁজছিলাম। ধন্যবাদ.
জিএসএল

2
@ বার্টফ্রেড কারন কেউই তা ঘটেনি। সম্ভবত, আপনি?
ফিল লর্ড

2
আপনি কি পরামর্শ ব্যবহার করে আবার লিখতে পারেন advice-add? এটি এখন পছন্দসই পদ্ধতি, এটি কীভাবে যে পরিস্থিতিগুলি পরিচালনা defadviceকরতে পারে না তা পরিচালনা করতে জানে । এছাড়াও, আপনার সম্ভবত করা উচিত নয় (read-only-mode 0), কারণ এটি সম্ভবত স্থায়ী। আপনি বাফারকে সংশোধনকারী কোডের আশেপাশে আবদ্ধ inhibit-read-onlyকরতে পারেন t
blujay

2
আমি আপনার কোড ব্যবহার করি, তবে কেবলমাত্র একটি টাইমস্ট্যাম্পে অনেকগুলি বার্তা প্রদর্শন করি
xinfa tang

5

ফাংশনটির advice-addচারপাশে মোড়ক হিসাবে নতুন সিনট্যাক্সের @ xinfatang এর সহজ সমাধানটির অনুবাদটি messageহ'ল:

(defun my-message-with-timestamp (old-func fmt-string &rest args)
   "Prepend current timestamp (with microsecond precision) to a message"
   (apply old-func
          (concat (format-time-string "[%F %T.%3N %Z] ")
                   fmt-string)
          args))

ফলাফলগুলি *Messages*:

[2018-02-25 10:13:45.442 PST] Mark set

যোগ করতে:

 (advice-add 'message :around #'my-message-with-timestamp)

মুছে ফেলার জন্য:

 (advice-remove 'message #'my-message-with-timestamp)

3
আপনি পরামর্শগুলি ব্যবহার না করে কেবল (advice-add 'message :filter-args 'with-timestamp)(defun with-timestamp (args) (push (concat (format-time-string "[%F %T.%3N] ") (car args)) (cdr args)))
আরগগুলি

1
@glucas নিস! আমি টাইমস্ট্যাম্পগুলি ডাব্লু / ও বার্তাটি পাই যদিও আমি মিনিবাসার উপর দিয়ে মাউসটি ঘুরিয়ে দিই। এড়াতে কি উপায় আছে?
এস্ট্রোফ্লয়েড

3

Https://www.emacswiki.org/emacs/DebugMessages থেকে দেখুন :

(defadvice message (before when-was-that activate)
  "Add timestamps to `message' output."
  (ad-set-arg 0 (concat (format-time-string "[%Y-%m-%d %T %Z] ") 
                        (ad-get-arg 0)) ))

অবশেষে আমি এখনও মত স্টুয়ার্ট Hickinbottom এর উত্তর, কারণ এটি minibuffer শো টাইমস্ট্যাম্প এড়াতে, নিম্নলিখিত একটি পরিবর্তিত সংস্করণ যা আমি ব্যবহার করেন, তা উপেক্ষা বার্তাগুলি কেবলমাত্র (দ্বারা প্রতিধ্বনি এলাকায় দেন হয় let message-log-maxকরার nilআগে বার্তা ফাংশন কল):

 (defun my/ad-timestamp-message (FORMAT-STRING &rest args)
   "Advice to run before `message' that prepends a timestamp to each message.
    Activate this advice with:
      (advice-add 'message :before 'my/ad-timestamp-message)
    Deactivate this advice with:
      (advice-remove 'message 'my/ad-timestamp-message)"
       (if message-log-max
           (let ((deactivate-mark nil)
                 (inhibit-read-only t))
             (with-current-buffer "*Messages*"
               (goto-char (point-max))
               (if (not (bolp))
                   (newline))
               (insert (format-time-string "[%F %T.%3N] "))))))
 (advice-add 'message :before 'my/ad-timestamp-message)

2
%F %T.%3Nমাইক্রোসেকেন্ডগুলি প্রদর্শনের জন্য টাইমস্ট্যাম্প ফর্ম্যাটটি পরিবর্তন করুন
xinfa tang
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.