簡體   English   中英

Emacs : 在 Haskell 模式下重新定義命令 (haskell-mode-hook)

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

在haskell模式的emacs中,我想更改命令

  • “Cx C”

  • “Cx Cs”后跟“Cc Cl”。

從以下提示中獲取: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM