8

haskellモードのemacsで、コマンドを変更したかった

  • 「CxCs」

  • 「CxCs」の後に「CcCl」が続きます。

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] @TikhonJelvis:それは間違いなく良い学習演習でした!ありがとう。あなたの投稿で概説されている方法を使用して、私はあなたの関数を次のように変更しました:

(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))
4

2 に答える 2

6

あなたがしたいことは、実行される関数を実行してから、関数を実行することC-x C-sですC-c C-l。を介して、何らかのキーバインディングによって実行される機能を見つけることができますC-h k。つまり、最初に入力C-h kしてから、関心のあるキー コマンドを入力します。

これにより(save-buffer &optional ARGS)、 forC-x C-s(inferior-haskell-load-file &optional RELOAD)forが得られC-c C-lます。は、&optionalまさにあなたが思っていることを意味します。その引数はオプションであるため、気にしません。

次に、両方を実行する関数を記述します。

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

これで、この関数をC-x C-shaskell モードでバインドすることができます:

(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. このアプローチは、複数の異なるキー バインディングを 1 つに結合する場合に有効です。

于 2012-08-11T20:38:13.540 に答える