7

emacs で、誤って call-last-kbd-macro を呼び出すことがあります。元に戻すとき、元に戻すとキーボード マクロの効果全体がアトミックに元に戻されると思っていましたが、そうはなりません。代わりに、マクロの各ステップを一度に 1 つずつ元に戻さなければならないことに気づきました。マクロの実行前に emacs をバッファ状態に戻すにはどうすればよいですか?

4

2 に答える 2

3

組み込みの'undoメカニズムだけではそれができないのではないかと思います。Emacsのマクロシステムは、ユーザーが実際にキーストローク(またはマウスイベント)を入力しているかのように実際に再生するため、元に戻す履歴buffer-undo-list)は通常どおり更新されます。

undoこれは、現在のメカニズムを拡張して、必要なことを実行する方法の提案です。

  1. 'undo元にできるリストの新しいエントリ、macro-beginマーカー、macro-end要素を理解するために拡張する

  2. マクロ再生の開始/終了時にマーカーを挿入するようにマクロ再生をアドバイス/変更します

  3. コードにundo2つのマーカー間のすべての取り消しイベントを1つの単位として処理させ、それらをすべて取り消します(そして、取り消し履歴の最後に適切なマーカーを追加して、処理するときにredo、それらが1つのブロックとして扱われるようにします)

警告:

  • これは、単一のバッファーで動作するマクロに対してのみ機能します。マクロがバッファーを切り替えた場合(または他のバッファーに副作用があった場合)、これらの変更はブロックとして扱われません。
  • マクロが開始時とは異なるバッファで終了した場合は、それをきれいに処理する必要があります。元にできるリストに「不均衡」なmacro-beginマーカーmacro-endは必要ありません。

言うまでもなく、これは複雑な取り組みです。私はあなたの幸運を祈ります。

于 2010-10-28T03:54:14.960 に答える