[英]Emacs : Redefining command in Haskell-mode (haskell-mode-hook)
在haskell模式的emacs中,我想更改命令
到
從以下提示中獲取: Haskell.org:Emacs/Keybindings 和簡單用法我嘗試將以下變體插入到 .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))
您想要做的是運行Cx Cs
運行的函數,然后運行Cc Cl
執行的函數。 您可以通過Ch k
找出某個鍵綁定運行的功能。 也就是說,首先輸入Ch k
然后輸入您感興趣的鍵盤命令。
這為我們提供了Cx Cs
(save-buffer &optional ARGS)
和Cc Cl
(inferior-haskell-load-file &optional RELOAD)
。 &optional
意思正是你認為它所做的——這個參數是可選的,所以我們不關心它。
現在編寫執行它們的函數:
(defun my-haskell-mode-save-buffer ()
(interactive)
(save-buffer)
(inferior-haskell-load-file))
現在你可以在 haskell 模式下把這個函數綁定到Cx Cs
,就像你一直在做的那樣:
(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'my-haskell-mode-save-buffer)))
編輯:似乎Cc Cl
在加載之前默認保存您的文件。 這意味着你可以只寫
(add-hook 'haskell-mode-hook (lambda ()
(local-set-key (kbd "C-x C-s") 'inferior-haskell-load-file)))
並且無需編寫自己的函數即可獲得完全相同的效果。 但是,我認為以我的方式編寫它是一種很好的學習練習:P。 每當您想將多個不同的鍵綁定組合成一個時,這種方法都有效。
接受的答案在 2020 年不起作用。要修復它,您必須將(inferior-haskell-load-file)
替換為(haskell-process-load-file)
。
所以固定后的功能是
(defun haskell-mode-save-load-buffer ()
(interactive)
(save-buffer)
(haskell-process-load-file))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.