Emacs 相同的键盘映射不同的命令

标签 emacs lisp

我想知道是否有办法说 map

s-Y 到两个不同的命令。

我想我想让 s-Y 在一个较低的分割窗口中打开终端, 然后启动 bash 然后将焦点更改到新窗口

(defun bash-window ()
  (interactive)  
  (split-window-below)
  (other-window 1)
  (shell)
  )

然后使用相同的命令终止 shell 进程并取消拆分下部窗口,有没有一种方法可以使用 lisp 来做到这一点,看起来 lisp 不会在 emacs lisp 编程中保持状态....除非我对此不正确.

最佳答案

为什么不编写一个同时执行这两项操作的新函数,然后绑定(bind)它?

Emacs Lisp(以及大多数 Lisp)确实有状态,您只需要知道在哪里寻找它即可。 (这是 CLisp 与纯函数式最大的区别。)

例如,

(setq bash-window-active nil)

(defun bash-window nil
    (interactive)
    (if bash-window-active
        (function-to-reverse-those-performed-below)
      (progn
        (split-window-below)
        (other-window 1)
        (shell)
        (setq bash-window-active t)))

(global-set-key "\C-cb" 'bash-window)

关于Emacs 相同的键盘映射不同的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14781325/

相关文章:

lisp - 在没有明确提及的情况下永久改变变量?

lisp - 未理解的常见 Lisp 错误

search - 在 emacs lisp 中,有没有办法搜索与当前点重叠的字符串相匹配的文本?

emacs - 在 OSX 的 Emacs 上,如何将杀戮环和剪贴板分开?

emacs - 在 Agda emacs 中运行 'Hello World' 应用程序

windows - 为什么我无法安装 quicklisp? ("Package QUICKLISP-QUICKSTART does not exist")

list - 返回没有最后一个元素的列表

stream - 写入后读取 *standard-input* Common Lisp

emacs - 在 EVIL 中进行增量搜索时使用默认输入法?

python - 在 Emacs 中更改 python 函数参数格式