ポイント移動時に関数を実行するために使用できるフックがありますか?

私はいくつかのナビゲーションコンテキストをモデルラインに追加したいと思う。私はどこにいるのか分かり、機能の名前をつけることができますが、ポイント移動ごとにこれを実行する方法はわかりません。

post-command-hook is the only thing I've found, but it sounds like it's overkill. Is there anything more appropriate?

4
@ハラルド私はそれがないかもしれないと思います。このフックがいつ実行されたか(すなわち、何がコマンドを構成しているか)についてのドキュメントはあまり明確ではない。記録のために、私は答えとして「それは実際に正しいことです」を受け入れることを100%喜んでいます。
追加された 著者 pelms,
M-x elisp-index-search RETコマンド。コマンドは、対話式の形式の関数、またはキーボードマクロ(文字列またはベクトル形式)です。
追加された 著者 Mark Ireland,
なぜ post-command-hook が過剰なのでしょうか?いくつかのelispコードによって行われた場合、あなたのフックがポイント移動ごとに実行されることを望まないかもしれません。ものをするためにポイントを動かす多くのコードがあります。これは通常、 save-excursion 内で実行されますが、( save-excursion が有効かどうかをコードが判断できるかどうかはわかりません)。
追加された 著者 AttackingHobo,

1 答え

post-command-hook はあなたが使いたいものだと思います。

コマンドが実行されるたびに実行されます。コマンドは基本的に、マウスボタンのクリック、文字入力( self-insert-command を実行する)、または M-x を使用してコマンドを実行するなどのインタラクティブアクションです。

ミニバッファに入力中にフックが実行されていないことを確認したい場合があります。私はbodyをにラップすると思います((window-minibuffer-p)...)がそれを気にしない限りです。

また、特定のファイルを編集しているときにフックだけをアクティブにしたい場合もあります。その場合は、 post-command-hook バッファをローカルにすることを検討してください。

(add-hook 'post-command-hook #'your-hook nil :local)

あなたのためにそれを世話します。この最後のポイントを追加するには編集してください。

7
追加された
明示的にフック変数をバッファローカルにしないでください。代わりに、 add-hook を呼び出すときに LOCAL 引数を使用します。
追加された 著者 Mark Ireland,
@phils優れた点。私は答えを更新します。
追加された 著者 AttackingHobo,