Buat singkatan untuk fungsi yang berisi argumen

Ketika saya mendefinisikan suatu fungsi menggunakan kerangka definisi, saya dapat membuat singkatannya di tabel singkatan saya melalui,

("abbrev_name" "" function_name nil)

Namun, jika saya menggunakan defun (yang memerlukan argumen), misalnya,

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

maka saya masih bisa memanggilnya menggunakan "Mx function_name" tapi saya tidak bisa memanggilnya menggunakan singkatan (saya mendapat pesan kesalahan terkait jumlah argumen yang salah). Apakah ada solusi yang bisa saya gunakan di sini?


person JeffDror    schedule 26.08.2014    source sumber
comment
@Dan saya mencoba menjelaskannya sedikit. Tolong beri tahu saya jika masih belum jelas.   -  person JeffDror    schedule 26.08.2014
comment
Mungkin ini layak untuk M-x report-emacs-bug meminta singkatan untuk digunakan call-interactively ketika kait singkatan adalah sebuah perintah dan bukan hanya sebuah fungsi.   -  person Stefan    schedule 27.08.2014


Jawaban (2)


Emacs memanggil fungsi Anda dengan 0 argumen

Alih-alih

("abbrev_name" "" function_name nil)

Gunakan ini:

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

Dengan cara ini, emacs akan meminta Anda memasukkan string di minibuffer.

person ale    schedule 26.08.2014

Mari kita mulai dengan pertanyaan Anda yang sebenarnya:

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

Sekarang, menurut saya yang Anda cari adalah kerangka.

person sds    schedule 26.08.2014