(transient-mark-modeで)リージョンが非アクティブ化されるという問題に遭遇しました。関数deactivate-mark
が呼び出され、それがどこから(なぜ)呼び出されたかを知りたい。
試しましM-x debug-on-entry RET deactivate-mark
たが止まりましたが、発信者を見つける方法がありませんでした。表示される全体のスタックトレースは次のとおりです。
Debugger entered--entering a function:
* deactivate-mark()
私は試しましたM-x edebug-eval-defun
が、Edebugは発信者も表示しません。
なぜ(どこから)deactivate-mark
呼び出されているのかを知る方法は?私はバックトレースまたはスタックトレース機能を探しています。
編集:
advice-add
トリック:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
で生成さnil
れ*Messages*
ます。
編集:詳細deactivate-mark
:http : //emacshorrors.com/posts/deactivate-mark.html
あなたは助言ができ
—
Jordon Biondo
deactiveate-mark
、あなたのアドバイス機能の使用中のbacktrace-frames
Edebugのは、あなたが期待するものを表示されていない場合は、全体コールスタックのビューを取得します。
advice-add
およびに関する編集を追加しましたbacktrace-frame
。それは助けにはならなかった。
@AndrewSwannからの複製については、通常、文字を入力する
—
Joe Corneli、2015年
self-insert-command
と実行され、「自己挿入コマンドは「Cソースコード」のインタラクティブな組み込み関数です」と指摘する価値があります。これは、これまでに述べた他の動作と合わせて、でデバッグする必要があることを示唆していgdb
ます。
質問を読むと、マークが予期せず無効化されているように思えました。一方、@ AndrewSwannによって記述された動作は完全に予想されます(何かを入力すると、領域は非アクティブになります)。取得した動作がアンドリューの動作と一致する場合は、何をしたいかを明確にしてください。
—
マラバルバ2015年
emacs -Q
し、デバッグをオンにし、M-x debug-on-entry deactivate-mark
マークをアクティブにしC-<SPC>
、文字を入力します。