Emacs:在Haskell模式下重新定义命令(Haskell模式挂钩)
在haskell模式下的emacs中,我想更改命令Emacs:在Haskell模式下重新定义命令(Haskell模式挂钩),haskell,emacs,macros,elisp,haskell-mode,Haskell,Emacs,Macros,Elisp,Haskell Mode,在haskell模式下的emacs中,我想更改命令 “C-x C-s” 到 “C-x C-s”后接“C-C-l” 借鉴:我尝试将以下变体插入到.emacs文件中,但它们不起作用。任何关于如何实现上述功能的建议都将受到欢迎!谢谢 变体1 变体2 [EDIT 1]@Tikhon Jelvis:这绝对是一个很好的学习练习!谢谢使用您文章中概述的方法,我将您的功能更改为: (defun my-haskell-mode-save-buffer () (interactive) (sav
- “C-x C-s”
- “C-x C-s”后接“C-C-l”李>
[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))
以及:
您要做的是运行
C-x C-s
运行的函数,然后运行C-C-l
执行的函数。您可以通过C-hk
找到某个键绑定运行的函数。也就是说,首先键入C-hk
,然后键入您感兴趣的键命令
这为C-x C-s
和提供了(保存缓冲区和可选参数)
(低级haskell加载文件和可选重新加载)
用于C-C-l
。&optional
的意思就是你认为它可以做什么——这个参数是可选的,所以我们不关心它
现在编写执行这两项操作的函数:
(defun my-haskell-mode-save-buffer ()
(interactive)
(save-buffer)
(inferior-haskell-load-file))
现在,您可以在haskell模式下将此函数绑定到C-x C-s
,具体操作方式如下:
(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'my-haskell-mode-save-buffer)))
编辑:似乎C-C-l
会在加载文件之前默认保存文件。这意味着你可以直接写
(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'inferior-haskell-load-file)))
并且在不编写自己的函数的情况下具有完全相同的效果。然而,我认为以我的方式编写它是一个很好的学习练习:P。每当你想将多个不同的键绑定组合成一个键绑定时,这种方法就会起作用。
公认的答案在2020年不起作用。要修复它,您必须将
(劣质haskell加载文件)
替换为(haskell进程加载文件)
因此,修复后的功能是
(defun haskell-mode-save-load-buffer ()
(interactive)
(save-buffer)
(haskell-process-load-file))
可以将键盘序列绑定到命令,而不是其他键盘序列。你想完成什么?基本上我希望“C-s C-x”先保存文件,然后在启动器中自动加载文件,而不仅仅是保存文件。感谢您在保存hook后查看
haskell模式,或者创建一个执行此操作的函数<代码>(取消我的haskell保存缓冲区(buf)(交互式…(保存缓冲区buf)(haskell启动buf))
。。。概念验证,查看如何使用interactive
传递当前缓冲区以及“启动器”的确切命令。绑定保存文件然后加载到C-C-l
可能更有意义,而不是每次保存时都加载文件。@vivian:这只是我学习emacs的一个实验。正如Tikhon Jelvis所指出的,“C-C-l”已经保存了,因此(除了在缓冲区之间移动光标之外),上面的功能实际上没有增加任何价值!谢谢,这样我一天可以节省1小时。非常感谢。
(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'my-haskell-mode-save-buffer)))
(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'inferior-haskell-load-file)))
(defun haskell-mode-save-load-buffer ()
(interactive)
(save-buffer)
(haskell-process-load-file))