gpt4 book ai didi

haskell - Emacs : Redefining command in Haskell-mode (haskell-mode-hook)

转载 作者:行者123 更新时间:2023-12-02 02:06:30 24 4
gpt4 key购买 nike

在 haskell 模式下的 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)
<小时/><小时/>

[编辑 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-x C-s 运行的函数,然后运行 ​​C-c C-l 执行的函数。您可以通过 C-h k 找出某个按键绑定(bind)运行的功能。也就是说,首先键入 C-h k,然后键入您感兴趣的键盘命令。

这为我们提供了用于 C-x C-s(save-buffer 和可选 ARGS) 和用于 (inferior-haskell-load-file 和可选 RELOAD) C-c C-l&Optional 的含义与您所想的完全一样——该参数是可选的,因此我们不关心它。

现在编写执行这两个操作的函数:

(defun my-haskell-mode-save-buffer ()
(interactive)
(save-buffer)
(inferior-haskell-load-file))

现在您可以在 haskell 模式下将此函数绑定(bind)到 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 C-l 在加载文件之前默认保存文件。这意味着你可以直接写

(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'inferior-haskell-load-file)))

并且无需编写自己的函数即可获得完全相同的效果。然而,我认为以我的方式编写它是一个很好的学习练习:P。每当您想要将多个不同的键绑定(bind)组合成一个时,这种方法就有效。

关于haskell - Emacs : Redefining command in Haskell-mode (haskell-mode-hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com