問題タブ [undo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
design-patterns - 「元に戻す」機能に最適なデザインパターン
重複の可能性:
Undoエンジンのデザインパターン
一般に、アプリケーションで「元に戻す」機能のサポートにどのように対処しますか?私はWebアプリとデスクトップアプリの両方に取り組んできましたが、自分が作成した「元に戻す」システムに本当に満足したことはありません。
air - AdobeAIRのデフォルトのブラウザアクション
私はhtml/javascriptサポートに基づいたairプロジェクトに取り組んでいます。javascriptクラスでundo/redoシステムを作成しましたが、ブラウザー(webkit)独自のundo(ctr + z)アクション(最後に変更された入力要素に焦点を当てています)によって干渉されます。ブラウザのデフォルトの動作をどうやってオフにすることはできますか?
java - テキストエディタで元に戻すとやり直しを設計するにはどうすればよいですか?
私のプロジェクトの一部は、いくつかのルールの入力、アプリケーションのコンパイル、および実行に使用されるテキストエディターを作成することです。コンパイラの作成は終了し、ベータ版をリリースしました。最終バージョンでは、元に戻るとやり直しをテキストエディタに追加する必要があります。私はファイルを使用して、テキストエディタ用に定期的に保存します。テキストエディタで元に戻すとやり直しを設計するにはどうすればよいですか?ファイルの永続性の構造は何が変わったのですか?
git - 「gitreverthead」の効果を元に戻す方法はありますか?
リポジトリ内の間違ったブランチに対して誤ってコマンドを実行しました-この変更を元に戻す方法はありますか?
algorithm - メモリが限られている場合、ビットマップ エディタの元に戻す/やり直しは高速ですか?
モバイル デバイス用のビットマップ エディタ (Photoshop の限定バージョン) を作成しようとしています。ユーザーのドキュメントは、それぞれのサイズが約 1000x500 の ~4 ビットマップで構成されています。
できる限りシンプルで、堅牢で効率的な取り消し/やり直しシステムが必要です。編集を元に戻したりやり直したりするのに約 0.2 秒かかることを目指しています。現在意図しているアプローチに関するフィードバック、または使用できる新しいアイデアを探しています。私が持っているものは複雑すぎると思うので、先に進むことに慎重です.
元に戻す/やり直しシステムに Command パターンと Memento パターンを組み合わせて使用して実験しました。これまでに私が到達したいくつかの結論は次のとおりです。
十分なメモリがなく、多くの状況で前のコマンドの「実行しない」操作をサポートするメメントを使用するのに十分な速さでメモリをディスクに書き込むことができません。ユーザーが保存されるのを待たずに、ユーザーが塗りつぶしたものを表すビットマップを保存できるようにします。
ドキュメントを初期状態に復元し、最後のコマンドを除いてすべてのコマンドを再生して元に戻すと、10 回のペイント ストロークまたは 5 回のスマッジ ストロークの再生など、わずかな数のコマンドを実行しても非常に遅くなります。遅い。
バックグラウンドでドキュメント全体を定期的にディスクに保存し、コマンドを再生する前にこのチェックポイントに復元することで、前のポイントを回避できます。最後のチェックポイントよりも前に元に戻すには、この前のチェックポイントをリロードして、コマンドを再生します。
アプローチ 2 と 3 は問題なく動作しますが、レイヤーが追加されるにつれてドキュメント全体の保存がますます遅くなり、4 つのビットマップで既に遅くなります (約 5 ~ 10 秒待機)。したがって、前回から変更されたものだけを保存するように、3 を変更する必要があります。
多くのコマンドは 1 つのレイヤーのみで動作するため、最後のチェックポイント以降に変更されたレイヤーのみを保存するのが理にかなっています。たとえば、チェックポイントを保存する場所を指定した 3 つの初期レイヤーがある場合、コマンド スタックは次のようになります。
編集中は、前回のチェックポイント以降に変更されたレイヤーを追跡します。チェックポイントを復元するときは、変更されたレイヤーのみを復元します。たとえば、レイヤー 2 と 3 を変更した後にチェックポイント 4 を復元するには、ディスクからレイヤー 2 と 3 のバックアップをリロードします。チェックポイントを追加するときは、それまでに変更したレイヤーのみを保存します。一度にメモリに保持できるレイヤーの一時コピーは約 1 つだけであるため、ユーザーがチェックポイントが保存されるのを待たなければならないインターフェイスの場所が必要な場合を除いて、これらすべてをほぼ自動化できます。
どう思いますか?私が望んでいるよりもはるかに複雑ですが、他に方法がありません。生活を楽にするために使用できる他の便利なパターンはありますか?
command - ペイント プログラムの取り消し
元に戻すをサポートするペイント プログラムを作成する方法を調べていますが、おそらくコマンド パターンが必要であることがわかります。誰かが簡単な答えや確認を提供してくれることを願っています。
基本的に、コマンドを元に戻す機能を具体化する場合、たとえば画面に塗りつぶされた円をスタンプする場合、円がメモリにカバーするフレーム バッファーをこのコマンド オブジェクトに本質的にコピーする必要があるということですか? たとえば、ランダムなピクセル色の束をスタンプするなど、元に戻すことができる他の方法はありません。
1 つのアプローチは、前方アクションを追跡するだけであり、元に戻す操作が実行されると、ステップ 1 から開始して元に戻す前のステップに前方描画するだけであると聞いたことがありますが、大規模なアクションをサポートする場合、これは実行不可能に思えます。スタックを元に戻します。
おそらく、解決策は、15 ~ 20 アクションごとのビットマップを保持し、最後の「保存」転送から開始する間の何かです。
この場合、コマンドでバッファの四角形を保存するか、すべてのアクションをやり直すか、または私が完全に見逃した何かについて、誰かが洞察を提供できますか?
更新: 良い反応がたくさんあります。みんな、ありがとう。私が読んでいることから、Nアクションごとにバッファを保存し、ユーザーが元に戻すコマンドを発行すると、最後に保存されたバッファからすべてのコマンドをやり直すことでこれにアプローチすると考えています。N を可能な限り高い値に微調整することはできますが、(メモリ使用量を最小限に抑えるために) レスポンシブな元に戻す必要があるというユーザー エクスペリエンスを著しく低下させることはありません。これはそれほど悪くないので、1 つのフレームでかなりの数のアクションを実行することで逃げることができます。願わくば、このアプローチにより、他の方向に切り替えるかどうかをすばやく判断し、代わりにそれを必要とするアクションのために以前の状態のビットマップ四角形を保存することができます.
c# - プログラムを大幅に変更せずに元に戻す/やり直し操作を実装する方法
こんにちは、現在書いているアプリケーションに新しい機能を追加しようとしています。元に戻す/やり直し機能を書く必要があります。しかし、私たちのアプリケーションの 90% は準備ができており、既に作成されたコードに影響を与えずにこの機能を実装する最良の方法は何なのかわかりません。
version-control - Mercurialでのマージを中止する方法は?
私はマージを間違えました。元に戻してからもう一度やり直したいのですが。
コミットされる前にマージを元に戻す方法はありますか?
hg revert
私が望むことをしません、それはファイルのテキストを元に戻すだけです。Mercurialは、マージの2回目の試行を中止し、元のマージがまだコミットされていないことを訴えます。
hg merge
コマンドの後、コミットされる前にマージを元に戻す方法はありますか?
git - Git pull into wrong branch
Myself and one other developer had been merging and pushing our work to a non-master branch called toolwork. That way, we didn't impact the rest of the team. My topic branch was called DPM-93 and my git workflow was this.
That was mostly working fine until I accidently issued these git commands
At that point, a bunch of new stuff showed up in branch toolwork and I'm not sure how to get rid of it short of deleting my workspace and re-cloning from the repo.
Is there any way to back this out to the state before the pull?
emacs - emacs で call-last-kbd-macro を元に戻す方法
emacs で、誤って call-last-kbd-macro を呼び出すことがあります。元に戻すとき、元に戻すとキーボード マクロの効果全体がアトミックに元に戻されると思っていましたが、そうはなりません。代わりに、マクロの各ステップを一度に 1 つずつ元に戻さなければならないことに気づきました。マクロの実行前に emacs をバッファ状態に戻すにはどうすればよいですか?