0

特定のモード/バッファに対してのみdefadviceを使用して関数の動作を変更することは可能ですか?mouse-yank-primaryに余分なテキストを挿入したいのですが、特定のモードの場合のみです。mouse-yank-primaryに対して「defadviceafter」を試しましたが、一度アクティブ化すると、他のすべてのバッファでも機能します。

モードフックでマウスボタンを自分の関数に再バインドすることで解決できると思いますが、elispマニュアルにはdefadviceを使用する方が良いと書かれています。

4

2 に答える 2

5

マウスボタンを別の機能に再バインドすることは、私にとって好ましいようです。そのためのモードフックは必要ありません。通常は、モードのキーマップを変更するだけです。

(eval-after-load '<mode>
  '(define-key <mode>-map [mouse-2] 'my-mouse-yank-primary))

アドバイスをメジャーモードにローカライズするのは少し難しいです。これを行うために渡すことができる引数はありませんがdefadvice、モードフックで変数のbuffer-local値を設定し、アドバイスコードでこの値を確認することができます。設定されている場合は、何か特別なことをしてください。そうでない場合は、評価してad-do-itください。

于 2012-12-28T22:35:33.267 に答える
2

アドバイスをメジャーモードにローカライズするのは簡単です。

(defadvice foo (after bar activate)
  (when (derived-mode-p 'python-mode)
    (do (something) now)))
于 2013-01-07T13:51:05.733 に答える