#debugging #emacs #key-bindings
#отладка #emacs #привязки клавиш
Вопрос:
Это может выглядеть как дубликат, но я безуспешно пробовал все другие решения.
У меня есть функция в моем инициализационном файле, начинающаяся следующим образом:
(defun my/function ()
"Comment or uncomment the current line or text selection."
(interactive)
(let (p1 p2)
(if (use-region-p)
Когда я устанавливаю привязку ключа:
(global-set-key (kbd "C-x C-.") 'my/function)
Я получаю следующую ошибку:
wrong type of argument: commandp, my/function
Когда я поворачиваюсь debug-on-error
, это то, что я получаю:
call-interactively(my/function nil nil)
command-execute(my/function)
Что я делаю не так?
Комментарии:
1. Ваше определение команды неполное — скобки не сбалансированы и т.д. Пока у вас есть
interactive
спецификация, если вы завершите свое определение (закройте скобки), у вас будет команда.2. Я упомянул в своем описании, что функция запускается так (я не включил все это). Когда я вызываю его, используя его имя M-x function, он работает отлично, но не тогда, когда я привязываю его к ключу. В этом и заключается проблема.
3. Работает для меня. Я могу только догадываться, что каким-то образом в вашем init-файле оценка выполняется не так, как вы думаете. Может быть, из-за неправильных круглых скобок или около того?
4. Если вы не показываете весь соответствующий код, трудно догадаться. Вы видите ту же проблему, если запускаете Emacs с помощью
emacs -Q
(без файла инициализации)? Если нет, то разделите файл инициализации пополам, чтобы найти виновника.5. Я попробую это. Однако, как я уже упоминал, это не проблема или неправильный синтаксис, потому что, когда я вызываю функцию, она использует свое имя «M-x function», она работает отлично. Сбой происходит только тогда, когда я вызываю его с помощью привязки клавиш.
Ответ №1:
Функция, которую вы привязываете, должна быть командой, то есть: она должна иметь (interactive)
в ней. Запуск (commandp 'my/function)
должен сообщить вам, так ли это.
(В вашем вопросе у вас действительно есть (interactive)
в определении, но, должно быть, что-то пошло не так, возможно, переоценка определения функции исправит это)