ฉันจะบันทึกการใช้งาน Mx ใน emacs ได้อย่างไร


6

ฉันต้องการบันทึกการใช้งาน Mx ของฉันใน emacs ไปยังไฟล์เพื่อที่ฉันจะได้เห็นฟังก์ชั่นที่ฉันควรเรียนรู้ทางลัดเพื่อ / ผูกทางลัดสำหรับ นี่น่าจะเป็นเพียงแค่เพิ่มชื่อของฟังก์ชั่นที่ใช้ไปยังไฟล์ / emacs-buffer อาจจะมีการประทับเวลาเพื่อให้ฉันสามารถมองเห็นในบริบทที่ฉันใช้พวกเขา ไม่มีใครรู้วิธีแก้ปัญหานี้?

คำตอบ:


3

ฉันขอแนะนำให้เพิ่มฟังก์ชั่นที่ปรึกษาให้กับexecute-extended-commandและอีกreadอย่างที่เมื่อรันคำสั่ง execute-Extended-command สิ่งที่อ่านใน minibuffer จะถูกบันทึกไว้ในบัฟเฟอร์ที่คุณกำหนดด้วยการประทับเวลา

ฉันตั้งใจจะเรียนรู้วิธีการใช้คำแนะนำดังนั้นฉันจะแก้ไขความคิดเห็นนี้ในภายหลังด้วยรหัส elisp ที่ทำงานเมื่อฉันมีรหัสที่ทำสิ่งนี้ (ควรน้อยกว่าสิบบรรทัด)

แก้ไข:

จากผลงานที่ยอดเยี่ยมของ Trey Jackson นี่เป็นเวอร์ชั่นเพิ่มเติมของฉัน:

(defvar my-m-x-log-file "~/mx.log")
(defadvice execute-extended-command
  (after log-execute-extended-command activate)
  (let ((logfile (find-file-noselect my-m-x-log-file)))
    (with-current-buffer logfile
      (goto-char (point-max))
      (insert (format "%s --- %s --- "
              (current-time-string)
               this-command))
      (where-is this-command t)
      (insert "\n"))))

สิ่งนี้บันทึกการประทับเวลาคำสั่งและการโยงคีย์และไม่บดบัง echos ใด ๆ จากคำสั่ง mx

คุณจะต้องบันทึกไฟล์บันทึกด้วยตนเองเช่นเดียวกับที่คุณทำกับ emacs buffer อื่น ๆ ซึ่งแตกต่างจากรุ่นของ Trey อาจมีความเป็นไปได้ที่ไฟล์ถูกเขียนลงไป แต่ไม่มีข้อความ echod ไปที่ minibuffer ปิดบังผลลัพธ์ของคำสั่ง


ฉันคิดว่าการให้คำแนะนำในการเอ็กซีคิ้วท์รันคำสั่งควรจะเพียงพอ ... แน่นอนว่าโพสต์แนะนำ ไม่แน่ใจว่าไม่มี Emacs ที่ใช้งานได้สะดวก :(
Jürgen A. Erhard

สิ่งที่ยุ่งยากก็คือคำสั่งแบบขยายที่อ่านจาก minibuffer ไม่ใช่ค่าส่งคืนของ execute-Extended-command - หรือมีวิธีการดึงตัวแปร / ผลลัพธ์ภายในผ่านคำแนะนำหรือไม่?
Justin Smith

ตกลงเด็ด ๆ คิดวิธีการรับคำสั่งจากภายในแนะนำคุณถูก
Justin Smith

หลังจากทำการแก้ไขและสามารถสแกนและดู keybindings สำหรับ mx ที่ฉันทำงานฉันคิดว่ามันยอดเยี่ยมมากและฉันอาจจะเก็บมันไว้ใน. emacs ของฉัน
Justin Smith

5

คุณสามารถเริ่มต้นด้วย elisp นี้ซึ่งจะเพิ่มคำสั่งที่คุณเรียกใช้ลงในไฟล์บันทึกที่กำหนด คุณสามารถได้รับนักเล่นและทำการรับทราบอัตโนมัติหากคุณต้องการ หรือคุณสามารถไปป์ที่ไฟล์ผ่าน a ในบางครั้งsort|uniq -c

(defvar my-m-x-log-file "~/mx.log")
(defadvice execute-extended-command (after log-execute-extended-command activate)
  (let ((logfile (find-file-noselect my-m-x-log-file)))
    (with-current-buffer logfile
      (goto-char (point-max))
      (insert (format "%s\n" this-command))
      (save-buffer))))

เจ๋งนี่อาจเป็นสิ่งที่ฉันจะได้ถ้าฉันรู้แล้วแนะนำ :) ตอนนี้กลับไปหาคำแนะนำสำหรับตัวเอง
Justin Smith

วิธีนี้ใช้งานได้ แต่จะมีข้อความ "Wrote ~ / mx.log" (ชื่อของไฟล์บันทึก) ใน minibuffer หลังจากคำสั่งถูกเรียกใช้เสร็จสิ้น มีวิธีระงับข้อความนี้หรือไม่เพื่อให้ฉันเห็นผลลัพธ์ของคำสั่งใด ๆ ที่ฉันกำลังเรียกใช้อยู่
petergil

วิธีแก้ปัญหาหนึ่งคือการลบ (บันทึกบัฟเฟอร์) จากรหัส - ผลที่ตามมาคือคุณจะได้รับแจ้งให้บันทึกด้วยตนเองเช่นเดียวกับบัฟเฟอร์อื่น ๆ แทนที่จะมีการบันทึกบัฟเฟอร์โดยอัตโนมัติ นอกจากนี้ในการสร้างการประทับเวลาคุณสามารถเปลี่ยน (รูปแบบ "% s \ n" คำสั่งนี้) เป็น (รูปแบบ "% s% s \ n" (สตริงเวลาปัจจุบัน) คำสั่งนี้) อาจมีวิธีพิมพ์การผูกกุญแจบนบรรทัดเดียวกันด้วย ... ฉันกำลังดูอยู่
Justin Smith

ที่ดี! สิ่งนี้จะทำในตอนนี้ .. ฉันวางแผนที่จะเรียนรู้การเขียนโปรแกรมเสียงกระเพื่อมมากขึ้น สำหรับการค้นหาว่าใช้การโยงคีย์ใดควรเป็นไปได้ที่จะแยกวิเคราะห์ผลลัพธ์จากฟังก์ชั่นอธิบายหรือพยายามแยกส่วนที่ต้องการออกจาก หลังจากที่ดูอย่างรวดเร็วก็ดูเหมือนว่าบิตขนแม้ว่า ..
petergil

0

แก้ไข:เมื่ออ่านอีกครั้งฉันเชื่อว่าฉันได้ตอบคำถามที่ผิด คุณน่าจะถามคำถามนี้ใน Stack Overflow ได้ดีกว่าเพราะคำตอบอาจต้องใช้แฮ็คเอลลิส

C-h f function-name

คุณจะได้รับเอกสารประกอบfunction-nameรวมถึงการผูกคีย์ปัจจุบัน

C-h k <key stroke>

จะแสดงฟังก์ชั่นปัจจุบันที่ถูกผูกไว้กับจังหวะที่สำคัญ

C-h b

จะแสดงรายการการโยงคีย์ที่ใช้งานอยู่ทั้งหมด


แต่ฉันคิดว่ามันเป็นของจริงเพราะมันไม่ได้เกี่ยวกับการเขียนโปรแกรม Emacs แต่ใช้มัน (งานน่าจะต้องเขียน Elisp บางตัว แต่คำถามนั้นไม่เกี่ยวกับการเขียน Elisp)
Jürgen A. Erhard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.