สร้างคำย่อสำหรับฟังก์ชันที่มีข้อโต้แย้ง

เมื่อฉันกำหนดฟังก์ชันโดยใช้define-skeleton ฉันสามารถสร้างคำย่อในตารางตัวย่อของฉันได้

("abbrev_name" "" function_name nil)

อย่างไรก็ตาม หากฉันใช้ defun (ซึ่งต้องมีการโต้แย้ง) เช่น

(defun function_name (arg)
   ""
   (interactive "sThe argument is")
   (insert arg)
 )

จากนั้นฉันยังสามารถเรียกมันได้โดยใช้ "Mx function_name" แต่ฉันไม่สามารถเรียกมันโดยใช้ตัวย่อได้ (ฉันได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับจำนวนอาร์กิวเมนต์ที่ไม่ถูกต้อง) มีวิธีแก้ไขปัญหาที่ฉันสามารถใช้ได้ที่นี่หรือไม่


person JeffDror    schedule 26.08.2014    source แหล่งที่มา
comment
@Dan ฉันพยายามชี้แจงเล็กน้อย โปรดแจ้งให้เราทราบหากยังไม่ชัดเจน   -  person JeffDror    schedule 26.08.2014
comment
บางทีนี่อาจสมควรได้รับ M-x report-emacs-bug ที่ขอให้ใช้คำย่อ call-interactively เมื่อ hook ของ abbrev เป็นคำสั่งแทนที่จะเป็นเพียงฟังก์ชัน   -  person Stefan    schedule 27.08.2014


คำตอบ (2)


Emacs กำลังเรียกใช้ฟังก์ชันของคุณด้วย 0 อาร์กิวเมนต์

แทน

("abbrev_name" "" function_name nil)

ใช้สิ่งนี้:

("abbrev_name" "" (lambda () (call-interactively 'function_name)) nil)

ด้วยวิธีนี้ emacs จะแจ้งให้คุณใส่สตริงที่มินิบัฟเฟอร์

person ale    schedule 26.08.2014

ให้เราเริ่มต้นด้วยคำถามที่แท้จริงของคุณ:

(defun function-name ()
   (let ((arg (read-from-minibuffer ....)))
     ...))

ตอนนี้ ฉันคิดว่าสิ่งที่คุณกำลังมองหาคือโครงกระดูก

person sds    schedule 26.08.2014