Создать аббревиатуру для функции, содержащей аргументы

Когда я определяю функцию с помощью define-skeleton, я могу создать для нее аббревиатуру в своей таблице сокращений с помощью

("abbrev_name" "" function_name nil)

Однако, если я использую defun (для чего нужны аргументы), например,

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

тогда я все еще могу вызвать его, используя «M-x имя_функции», но я не могу вызвать его, используя аббревиатуру (я получаю сообщение об ошибке, касающееся неправильного количества аргументов). Есть ли обходной путь, который я могу использовать здесь?


person JeffDror    schedule 26.08.2014    source источник
comment
@ Дэн, я попытался немного прояснить это. Пожалуйста, дайте мне знать, если это все еще неясно.   -  person JeffDror    schedule 26.08.2014
comment
Возможно, это заслуживает M-x report-emacs-bug запроса на использование аббревиатуры call-interactively, когда хук аббревиатуры является командой, а не просто функцией.   -  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