(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-framesEdebugのは、あなたが期待するものを表示されていない場合は、全体コールスタックのビューを取得します。
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>、文字を入力します。