มีวิธีพิมพ์คำจำกัดความของฟังก์ชันที่มีอยู่ใน Emacs หรือไม่?


10

ฉันต้องการดูนิยามของฟังก์ชันที่มีอยู่ใน Emacs เป็นไปได้ไหม

ฉันลองC-h d function-name RETแล้ว แต่มันจะคืนค่าสตริงเอกสารสำหรับฟังก์ชั่นไม่ใช่ฟังก์ชั่นจริงเท่านั้น

ฉันกำลังคิดบางอย่างที่คล้ายกับtypeคำสั่งของ bash ซึ่งจะคืนค่านิยามทั้งหมดของฟังก์ชัน

(backstory อาย: ผมตั้งใจเขียนมากกว่าฟังก์ชั่นการทำงานในของฉัน.emacsไฟล์ที่มีรุ่นที่ไม่ใช่การทำงานฟังก์ชั่นเดิมยังคงอยู่ในความทรงจำและการทำงาน แต่ฉันไม่สามารถสำหรับ.! ชีวิตของฉันจำได้ว่าฉันไม่ได้.)


1
หากคุณยังคง.emacsเปิดอยู่ในบัฟเฟอร์ลองเลิกทำอย่างบ้าคลั่ง
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


10

หากคุณพิมพ์C-h f function-name RETคุณจะได้รับเอกสารของฟังก์ชันพร้อมลิงก์ไปยังแหล่งฟังก์ชันหากมี

ฉันไม่คิดว่าจะมีฟังก์ชั่นเสียงกระเพื่อมที่ง่ายที่คุณสามารถโทรหาเพื่อดึงตำแหน่งของแหล่งที่มาของฟังก์ชั่น; การค้นหานั้นพันกันเข้ากับระบบช่วยเหลือที่เหลือ find-lisp-object-file-nameเป็นฟังก์ชั่นหลักที่พยายามที่จะหาแหล่งที่มาของฟังก์ชั่น

ยกเว้นfunction-nameว่าเป็นแบบดั้งเดิม (กำหนดไว้ในซอร์ส C ของ Emacs) คุณสามารถดูโค้ดของมัน(symbol-function 'function-name)หรือโดยทั่วไป (ฟังก์ชั่นชื่อฟังก์ชันทางอ้อม) อย่างไรก็ตามถ้าฟังก์ชั่นนั้นได้รับการคอมไพล์ด้วยไบต์สิ่งที่คุณจะได้เห็นก็คือ bytecode


1
ขอบคุณ! (symbol-function 'function-name)เป็นสิ่งที่ฉันกำลังมองหา! นอกจากนี้ดูเหมือนว่าถ้าคุณต้องการแหล่งที่มาถึงฟังก์ชั่น C คุณสามารถรับมันได้โดยใช้ข้อมูลจากคำตอบของ Oleg
คา R Ledbetter

ขอบคุณ! นอกจากนี้หากฟังก์ชั่นถูกโหลดอัตโนมัติคุณจำเป็นต้องเรียกมันหนึ่งครั้งก่อนที่คุณจะได้รับซอร์สโค้ด
Gerhard Burger

3

M-x find-function ส่งคืนนิยามของฟังก์ชันใกล้กับจุด

จากเอกสาร:

ค้นหาไฟล์ต้นฉบับที่มีความหมายของฟังก์ชั่นใกล้กับจุด (เลือกโดย `ฟังก์ชั่นที่เรียกว่าจุดที่ ') ในบัฟเฟอร์และสถานที่จุดก่อนคำนิยาม ตั้งเครื่องหมายก่อนที่จะย้ายถ้ามีบัฟเฟอร์อยู่แล้ว

หากคุณต้องการรวมฟังก์ชั่นที่ใช้งานใน C คุณต้องเพิ่มไฟล์ต่อไปนี้ในไฟล์. emacs ของคุณ:

(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))

อืมมม นี่เป็นเรื่องดีที่จะรู้ แต่ฉันคิดว่ามันใช้ได้กับฟังก์ชั่นในตัวเท่านั้นซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา
คา R Ledbetter

1
มันใช้งานได้กับฟังก์ชั่นที่ผู้ใช้กำหนดเองเช่นกัน
Oleg Pavliv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.