【发布时间】:2012-08-11 18:19:21
【问题描述】:
在haskell-mode的emacs中,我想改变命令
- “C-x C-s”
到
- “C-x C-s”后跟“C-c C-l”。
从Haskell.org : Emacs/Keybindings and simple usage 得到提示我尝试将以下变体插入到 .emacs 文件中,但它们不起作用。任何关于我如何实现上述功能的建议都将受到欢迎!谢谢。
变体 1
(defun haskell-hook ()
(define-key haskell-mode-map (kbd "C-x C-s") (kbd "C-x C-s C-c C-l"))
(add-hook 'haskell-mode-hook 'haskell-hook)
变体 2
(defun haskell-hook ()
(define-key haskell-mode-map (kbd "C-x C-s") 'my-haskell-mode-save-buffer)
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro [?\C-s ?\C-x ?\C-c ?\C-l return]))
(add-hook 'haskell-mode-hook 'haskell-hook)
[EDIT 1] @Tikhon Jelvis:这绝对是一个很好的学习练习!谢谢。使用您帖子中概述的方法,我将您的功能更改为:
(defun my-haskell-mode-save-buffer ()
(interactive)
(save-buffer)
(inferior-haskell-load-file)
(other-window 1))
最后一行以编程方式将光标切换到交互式窗口。谢谢。
[EDIT2] 其他变体包括:
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro (read-kbd-macro "C-c C-l"))
(other-window 1))
和:
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro [?\C-c ?\C-l])
(other-window 1))
【问题讨论】:
-
您可以将键盘序列绑定到命令,而不是另一个键盘序列。你想完成什么?
-
基本上我希望“C-s C-x”先保存文件,然后在启动器中自动加载文件,而不仅仅是保存文件。谢谢
-
寻找
haskell-mode-after-save-hook或创建一个执行此操作的函数。(defun my-haskell-save-buffer (buf) (interactive ...) (save-buffer buf) (haskell-launch buf) )... 概念证明,查看如何使用interactive和“启动器”的确切命令传递当前缓冲区。 -
绑定保存文件然后加载到
C-c C-l可能比每次保存时都加载文件更有意义。 -
@vivian :这只是我学习 emacs 的一个实验。正如 Tikhon Jelvis 指出的那样,“C-c C-l”已经保存了(除了在缓冲区之间移动光标)上面的功能并没有真正增加任何价值!谢谢
标签: haskell emacs macros elisp haskell-mode