6

toを使用C-jするeval-last-sexpのが好きですが、paredit-mode (そうでなければ好きです) はこれを にオーバーライドしますparedit-newline。paredit-mode docs を見ると、呼び出すparedit-mode-hookことができる定義済みの場所や同様の関数のようなものは見当たりません。add-hooklocal-set-key

誰にも提案がありますか?

更新 以下の 2 つの回答を試してみてあまり成功しなかった後、問題は paredit がいくつかの異なるコンテキストで読み込まれているという事実に関連していると思いますか? つまり、Common Lisp、Clojure、および Emacs Lisp ファイルの両方を開いていますが、これらはすべて paredit を使用できます。残念ながら、 のさまざまな形式はeval-last-sexp各モードでわずかに異なる名前を持っているため、すべてのキーを一度に定義することはできません。むしろ、現在のメジャー モードに基づいてキーをバインドする必要があります。うまくいけば、別の有用なデータ ポイントが追加されます。

4

3 に答える 3

12

フックを使用する必要はありません。次のようなものが機能するはずです。

(eval-after-load "paredit"
  #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp))

または、何らかの理由で機能しない場合、または単にフックを使用したい場合は、アクティブdefine-keyになっているメジャーモードのフックに上記の呼び出しを追加できます。paredit

于 2012-06-27T21:16:13.273 に答える
6

define-*-modeマクロの 1 つによって定義されたすべてのモードは、対応する を自動的に実行しますMODE-hook

paredit-mode は で定義されたマイナー モードである(define-minor-mode paredit-mode ...)ため、実行されますparedit-mode-hook

を入力M-x find-function RET define-minor-mode RETして検索するrun-hooksと、この動作が定義されている場所を確認できます。

編集(質問への追加に基づく):

ひょっとして、それらはすべてC-x C-eモード固有の eval-last-sexp 関数のデフォルト バインディングとして使用するのでしょうか? それは彼らが行う一貫したことのように思えます。そうであれば、次のアプローチを使用できます。

(local-set-key (kbd "C-j") (key-binding (kbd "C-x C-e")))
于 2012-06-28T02:05:30.640 に答える
3

paredit-mode-hook があります。何かを追加するまで表示されません。奇妙ですが、これがフックの動作です。

ただし、あなたの場合、最善の方法は、Cj の paredit バインディングをクリアすることです。

(eval-after-load 'paredit
   #'(define-key paredit-mode-map (kbd "C-j") nil))

そして、すべてのメジャーモード フックで local-set-key を介して独自の設定を行います。

于 2012-07-25T20:58:48.760 に答える