タグ付けされた質問 「undo-tree-mode」

3
元に戻す履歴を折りたたむ方法は?
私は、音声認識でEmacsを制御できるEmacsモードに取り組んでいます。私が遭遇した問題の1つは、Emacsが元に戻す操作を処理する方法が、音声で制御するときの動作の期待と一致しないことです。 ユーザーがいくつかの単語を話してから一時停止すると、それは「発話」と呼ばれます。発話は、Emacsが実行する複数のコマンドで構成される場合があります。多くの場合、認識エンジンが発話内の1つ以上のコマンドを誤って認識します。その時点で、「元に戻す」と言って、発話内の最後のアクションだけでなく、発話によって行われたすべてのアクションをEmacsで元に戻すことができます。言い換えれば、発話が複数のコマンドで構成されている場合でも、アンドゥに関する限り、Emacsが発話を単一のコマンドとして扱うようにします。また、発話前の正確な場所に戻りたいのですが、通常のEmacsの取り消しではこれが行われないことに気付きました。 各発言の最初と最後にコールバックを取得するようにEmacsをセットアップしているので、状況を検出できます。Emacsに何をさせるかを把握する必要があります。理想的には私のような何かを呼びたい(undo-start-collapsing)し、その後(undo-stop-collapsing)、何完了挟んは魔法のように一つのレコードにまとめられます。 ドキュメントをいくつか探して見つけましたundo-boundaryが、それは私が望むものの反対です-発話内のすべてのアクションを、それらを分割せずに1つのアンドゥレコードに折りたたむ必要があります。undo-boundary発話間で使用して、挿入が個別と見なされるようにすることができます(Emacsは、デフォルトでは連続する挿入アクションをある制限までの1つのアクションと見なします)が、それだけです。 その他の合併症: 私の音声認識デーモンは、X11キー押下をシミュレートすることによっていくつかのコマンドをEmacsに送信し、いくつかのコマンドをemacsclient -eそのように送信します(undo-collapse &rest ACTIONS)。 を使用しますがundo-tree、これにより事態がさら​​に複雑になるかどうかはわかりません。理想的には、ソリューションはundo-treeEmacsの通常のアンドゥ動作で動作します。 発話内のコマンドの1つが「元に戻す」または「やり直し」の場合はどうなりますか?コールバックロジックを変更して、これらを常に個別の発話としてEmacsに送信して、物事をよりシンプルに保つことができると考えています。キーボードを使用する場合と同じように処理する必要があります。 ストレッチ目標:発話には、現在アクティブなウィンドウまたはバッファを切り替えるコマンドが含まれる場合があります。この場合、各バッファで個別に「元に戻す」と言う必要がありますが、それほど派手である必要はありません。ただし、単一のバッファー内のすべてのコマンドはグループ化する必要があります。したがって、「do-x do-y do-zスイッチバッファーdo-a do-b do-c」と言うと、x、y、zは1つの取り消しになります。元のバッファのレコードとa、b、cは、バッファに切り替えられた1つのレコードでなければなりません。 これを行う簡単な方法はありますか?AFAICTには何も組み込まれていませんが、Emacsは広大で深い... 更新:少し余分なコードを追加して、以下のjhcのソリューションを使用することになりました。グローバルでbefore-change-hookは、変更されているバッファがこの発言を変更したバッファのグローバルリストにあるかどうかをチェックし、そうでない場合はリストに入れてundo-collapse-begin呼び出されます。次に、発話の最後に、リスト内のすべてのバッファーを反復処理し、呼び出しますundo-collapse-end。次のコード(md-名前空間のために関数名の前に追加): (defvar md-utterance-changed-buffers nil) (defvar-local md-collapse-undo-marker nil) (defun md-undo-collapse-begin (marker) "Mark the beginning of a collapsible undo block. This must be followed with a call to undo-collapse-end with a marker eq to this …

2
Vimに似たEvilのアンドゥ動作を取得するにはどうすればよいですか?
Evilのデフォルトのアンドゥ動作は、挿入モードに入ってからそれを1つの編集操作として終了するまでの間に行われることをすべて考慮しているため、粒度が粗すぎます。1回の挿入中にテキストの段落全体を入力してから元に戻すを実行すると、段落全体が削除されます。それとは対照的に、Vimは、テキストを入力する以外の方法で挿入モードでカーソルを移動するたびに、新しい取り消しユニットを開始します。 Evilには、よりきめ細かい取り消し履歴を取得するために使用できるカスタマイズ変数があります。 (setq evil-want-fine-undo t) この設定では、Vimと同様に、カーソルが挿入モードで移動すると、Evilは新しい取り消しユニットを開始します。ただし、この設定は、置換操作の処理方法も混乱させます。を使用して単語を置換する場合cw、元の単語を復元するために2回元に戻す必要があります。これはVimと矛盾しており、replaceはアトミックでなければならないため、あまり意味がありません。 質問:Vimの取り消し動作を取得するために、どのように悪と取り消しツリーを構成できますか?

1
簡単な履歴ナビゲーションのためにmagitと元に戻すツリーを組み合わせる
私は大好きですundo-tree(下のスクリーンショット)。それは、次のような簡単なキーを持つ別のウィンドウ(下のウィンドウ)で、ファイルの履歴ツリーの周りのユーザーの動きをさせることで、ファイル(上のウィンドウ)の異なるバージョンをナビゲートするために簡単な方法を提供しn、pかつC-bとC-f同じの子孫渡ってスイッチに親。 最も注目すべきundo-treeは、ツリービューでの選択に基づいて、対応するバージョンでファイルを保持しているバッファを自動的に更新することです。 もちろん、magitgit には驚異的であり、同様の機能、つまり、ユーザーがファイルのgit履歴をインタラクティブにナビゲートしながら、同時にファイルを保持しているバッファーを自動的に更新できるようになると驚くでしょう。 これはmagit今日でも可能ですか?

3
元に戻すツリーを悪モードで使用できないのでしょうか?
以下の既知のバグ、別のレポート、およびredditスレッドで、やり直しができないundo-treeのバグにたびたび遭遇します。 primitive-undo: Unrecognized entry in undo list undo-tree-canary これは本当に悪いことであり、ファイルの最新バージョンを保存しなかった場合、作業が失われる可能性があります。 ブランチアンドゥツリー機能を使用したことがないので、邪魔なモードでemacsリニアアンドゥを使用できますか? 注:(global-undo-tree-mode -1)すぐに設定すると、(evil-mode 1)元に戻すツリーが無効になりますが、これを実行すると、やり直し(Ctrl-R)が機能しません。

1
Emacsの構成、特にタイルウィンドウマネージャーの元に戻すツリーモード
Emacsをフレーム指向の方法で使用し、タイリングウィンドウマネージャーにバッファー構成を処理させたい。たとえば、このチュートリアルに従ってください。デフォルトでは、undo-tree-modeなどのEmacsパッケージは、視覚化を表示するためにウィンドウに依存しているようです。私はこれについて間違っていますか?undo-tree-modeをデフォルトにして、ビジュアライザーを別のフレームで開くことはできますか?

2
元に戻すツリーを線形にする方法—元に戻す/元に戻す/やり直し
コマンドをundo-tree-undo/redo連続して実行すると、現在アクティブなブランチに基づいて、元に戻す/やり直されます。ユーザーは途中で分岐点メッセージを受け取りますが、ユーザーが手動で別の分岐を選択しない限り、以前の分岐は無視されます。 ビジュアライザーを開いて別のブランチを選択できることを理解していますが、元に戻す/やり直しキーを押したままにして、すべてがまったく逆の順序で行われるのを確認すると非常に便利です。理想的には、これはvisualizerバッファが開いているかどうかに関係なく機能する必要があります。つまり、プログラムで終了から開始まで、および開始から終了までの順序を計算します。 Q:これは基本的にundo-tree、ビジュアライザーバッファーが開いているかどうかに関係なく、線形の連続した元に戻す/やり直しを許可するように拡張する機能要求です。[この新機能の新機能と代替キーボードショートカットは確かに許容されます。]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.