2012-06-27 16 views
5

私はC-jからeval-last-sexpを使用するのが好きですが、paredit-mode(これは他にはそうですが)はこれをparedit-newlineに置き換えます。 pareditモードのドキュメントを見ると、paredit-mode-hookのようなものは表示されません。ここではとlocal-set-keyなどの機能を呼び出すことができます。Emacsのpareditフックがあるので、C-jを再定義できますか?

誰かが提案していますか?

更新 は、以下の2つの答えを試すと、多くの成功を持っていないの後、私はこの問題は、pareditは、いくつかの異なるコンテキストでロードされつつあるという事実に関係することができると思いますか?私は、Common Lisp、Clojure、Emacs Lispの両方のファイルをオープンしています。これらのファイルはすべてpareditを使用できます。悲しいことに、さまざまな形式のeval-last-sexpでは、それぞれのモードでわずかに異なる名前が付けられています。したがって、すべてについて一度キーを定義することはできません。むしろ、私は私がいる主要なモードに基づいてキーをバインドする必要があります。うまくいけば、それは別の有用なデータポイントを追加することを望みます

答えて

10

フックを使用する必要はありません、以下のようなものが動作するはずです:動作しない、または何らかの理由であなたは、単にフックの使用を好む場合

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

あるいは、あなたは上記を追加することができますdefine-keypareditがアクティブになっている主要モードのフックへの呼び出し。

+0

ありがとうございます!これは魅力的に機能しました。 – bitops

6

define-*-modeマクロのいずれかで定義されたすべてのモードは、対応するMODE-hookを自動的に実行します。

paredit-modeが(define-minor-mode paredit-mode ...)で定義されたマイナーモードであることがわかります。したがって、paredit-mode-hookを実行します。

あなたはM-Xfind-functionRETdefine-minor-modeRETを入力し、この動作が定義されている場所を確認するためにrun-hooksを検索することができます。

編集(さらには疑問視するに基づく):

は、それらすべてが万が一、モード固有のeval-最後のS式の機能のためのデフォルトのバインディングとして C-x C-eを使用していますか?それは彼らが行うための一貫性のあることのように思われる、とそう、あなたは、次のアプローチを使用することができる場合:

+1

+1。フック変数が問題のモードで明示的に定義されていなくても、Emacsがこの動作を自動化したことは決してありません。 –

2

はpareditモードフックがあります。あなたは何かを追加するまでそれを見ることはありません。奇妙ですが、これはフックの振る舞いです。

しかし、あなたの場合には、最善のアプローチは、C-jに対して結合pareditをクリアすることがあります、その後

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

とは、すべての主要なモードのフックでローカル設定キーで独自に設定します。

関連する問題