对于Emacs,如何仅在某些操作中绑定键?

时间:2013-04-14 04:19:17

标签: emacs key-bindings

具体来说,我想更改Emacs-Helm的键绑定。当我运行helm-find-files时,如果我在目录上点击C-z,您可以跳转到所选目录。我想将此行为更改为Tab。我知道绑定到C-z的操作是helm-execute-persistanet-action。我可以通过执行(global-set-key (kbd "<tab>") 'helm-execute-persistanet-action)来实现此目的,但随后将捕获所有其他tab操作。当我在tab

时,我只希望helm-execute-persistanet-action运行helm-find-files

3 个答案:

答案 0 :(得分:2)

我认为你要找的是define-key。表达式应如下所示: (define-key helm-mode-map [tab]'a-command)

答案 1 :(得分:1)

您可以尝试围绕helm-find-files函数进行建议,以声明变量in-helm-find-files,然后使用define-key绑定helm keymap中的tab键。如果设置了in-helm-find,那么你可以调用你想要的函数,否则使用keymap查找来调用全局映射中的函数。

Advicing http://www.gnu.org/software/emacs/manual/html_node/elisp/Around_002dAdvice.html#Around_002dAdvice 头盔键盘图 https://github.com/emacs-helm/helm/blob/master/helm.el#L101 键映射查找 Given an emacs command name, how would you find key-bindings ? (and vice versa)

答案 2 :(得分:1)

首先,找出要在其中更改密钥绑定的缓冲区中的主要模式。您可以使用C-h v major-mode执行此操作,或查看模式行。

然后,使用local-set-key仅通过在模式挂钩中放入一些代码来为该主要模式创建绑定。我不熟悉helm,但是让我们说主模式叫做helm-mode,它有一个钩子helm-mode-hook,你要绑定的命令叫做helm-do-something

(add-hook 'helm-mode-hook
    (lambda () (local-set-key [tab] 'helm-do-something)))