将 "helm-toggle-visible-mark-forward "与 "helm-map "中的一个键绑定。

问题描述 投票:1回答:1

设置

我有这些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时,我得到了错误信息。<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

使用lambda

(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? 如果是,我做错了什么?

emacs key-bindings emacs-helm
1个回答
1
投票

用这个来代替。

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

将Emacs帮助返回的你按下的键序的形式传递给... kbd. C-h k 随后是 ControlTab 告诉你。

<C-tab> 运行命令...

参见Elisp手册,节点 功能键这上面写着:

backspace, tab, newline, return, delete

这些键对应于常见的ASCII控制字符,这些字符在大多数键盘上有特殊的键。

在ASCII码中。C-i<TAB> 是同一个字符。 如果终端能够区分它们,Emacs就会将这种区别传达给Lisp程序,将前者表示为整数9,而后者表示为 后者 tab.

大多数情况下,区分两者是没有用的。 所以通常 local-function-key-map (*注翻译关键词::)设置为映射 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 规格(所以它实际上是一个 指挥)?

而这个尝试也说明你没有加载定义该函数的文件。

(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

(另一种可能是你加载了一个文件,里面有一个名称几乎相同的命令,而你拼错了命令名。)


0
投票

helm-toggle-visible-mark-forwardhelm-toggle-visible-mark-backward 增加了 v3.6.1中。 中的 最新版本 (截至2020-04-25)是v3.6.0。因此,如果你想使用这些功能,你需要从源头安装。 否则,它们将是 未定义.

作为一个变通的办法,你可以直接将它们添加到你的配置中,在你的键绑定之前,就像这样。

  ;; 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)
© www.soinside.com 2019 - 2024. All rights reserved.