Emacs相同的keymap不同的命令



我想知道是否有一种方法可以说映射

s-Y转换为两个不同的命令。

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

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

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

为什么不写一个同时做这两件事的新函数,然后绑定它呢?

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)

最新更新