Используйте это вместо:
(define-key helm-map (kbd "<C-tab>") #'helm-toggle-visible-mark-forward)
Передайте форму, которую справка Emacs возвращает для последовательности клавиш, которую вы нажимаете, на kbd
. C-h k
с последующим Control
с Tab
говорит вам:
<C-tab>
запускает команду ...
См. Инструкция Elisp, узел Функциональные клавиши , в которых говорится следующее:
backspace
, tab
, newline
, return
, delete
Эти клавиши соответствуют общим управляющим символам ASCII, которые имеют специальные клавиши на большинстве клавиатур.
В ASCII C-i
и <TAB>
- это один и тот же символ. Если терминал может различать guish между ними, Emacs передает различие программам на Лиспе, представляя первые как целое число 9, а последние как символ tab
.
В большинстве случаев бесполезно различать guish два. Таким образом, обычно local-function-key-map
(* note Примечание Keymaps перевода: :) устанавливается на отображение tab
в 9. Таким образом, привязка клавиш для кода символа 9 (символа C-i
) также применяется к tab
. Аналогично для других символов в этой группе. Функция read-char
также преобразует эти события в символы.
Но вы говорите, что вы уже пробовали
(define-key helm-map (kbd "<C-tab>") #'helm-toggle-visible-mark-forward)
, и Emacs сказал вам об этом - и сказал То же самое, когда вы пытались связать его с M-TAB
(что совпадает с C-M-i
):
-- wrong type argument, commandp
Это означает, что helm-toggle-visible-mark-forward
не определен как команда. Вы загрузили файл, который определяет эту функцию? И имеет ли определение этой функции interactive
spe c (так что на самом деле это команда )?
И эта попытка также предполагает, что вы не загрузили файл, который определяет функция:
(define-key helm-map (kbd "M-TAB") (lambda () (interactive) (helm-toggle-visible-mark-forward)))
-- symbol's function definition is void: helm-toggle-visible-mark-forward
(Другая возможность состоит в том, что вы загрузили файл, имеющий команду с почти таким же именем, и вы ошиблись именем команды.)