Привязка `helm-toggle-visible-mark-forward` к ключу в` helm-map` - PullRequest
1 голос
/ 25 апреля 2020

Настройка

У меня есть следующие привязки клавиш команд Helm:

  (define-key helm-map (kbd "C-a")       #'helm-select-action)
  (define-key helm-map (kbd "C-n")       #'helm-next-page)
  (define-key helm-map (kbd "C-p")       #'helm-previous-page)
  (define-key helm-map (kbd "TAB")       #'helm-next-line)
  (define-key helm-map (kbd "<backtab>") #'helm-previous-line)
  (define-key helm-map (kbd "C-TAB")     #'helm-toggle-visible-mark-forward)

Проблема

Все эти операции, кроме последней строки, helm-toggle-visible-mark-forward. Когда я нажимаю C -TAB в окне завершения Helm, я получаю сообщение об ошибке: <C-tab> is undefined.

Что я пробовал

Использование \t

(define-key helm-map (kbd "C-\t")     #'helm-toggle-visible-mark-forward)

- тот же результат, <C-tab> is undefined

Использование <C-tab>

(define-key helm-map (kbd "<C-tab>")     #'helm-toggle-visible-mark-forward)

- wrong type argument, commandp

Удаление #

(define-key helm-map (kbd "C-TAB")     'helm-toggle-visible-mark-forward)

- тот же результат, <C-tab> is undefined

Использование M-TAB

(define-key helm-map (kbd "M-TAB")     #'helm-toggle-visible-mark-forward)

- wrong type argument, commandp

Использование лямбды

(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

Вопрос

Можно ли заново привязать helm-toggle-visible-mark-forward? Если так, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

helm-toggle-visible-mark-forward и helm-toggle-visible-mark-backward были добавлены в версии 3.6.1. Последний выпуск (по состоянию на 2020-04-25) - v3.6.0. Следовательно, вам нужно будет установить из исходного кода, если вы хотите использовать эти функции. В противном случае они будут undefined .

В качестве обходного пути вы можете добавить их непосредственно в свои конфиги до привязки клавиш, например:

  ;; Adding these functions here until they become available in the main source in version 3.6.1
  (defun helm-toggle-visible-mark-forward ()
    (interactive)
    (helm-toggle-visible-mark 1))

  (defun helm-toggle-visible-mark-backward ()
    (interactive)
    (helm-toggle-visible-mark -1))

  (define-key helm-map (kbd "<C-tab>")     #'helm-toggle-visible-mark-forward)
0 голосов
/ 25 апреля 2020

Используйте это вместо:

(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

(Другая возможность состоит в том, что вы загрузили файл, имеющий команду с почти таким же именем, и вы ошиблись именем команды.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...