6

PowerShell プロンプトに Mercurial/Git リポジトリのステータスを含めるのが好きです。場合によっては、これによりprompt()関数の速度が大幅に低下し、シェルで入力を開始できるようになるまで長い待ち時間が発生します。プロンプトを非同期に更新することは可能ですか?

理想的には、次のようになります。

  1. Write-Host現在のディレクトリ (典型的なプロンプト)
  2. バックグラウンドでレポステータスの収集を開始します。
  3. リポジトリ ステータスが収集されたら、promptが再び呼び出されていないと仮定して、リポジトリ ステータスをプロンプトに挿入します。

誰もこれを以前にやったことがありますか?

4

1 に答える 1

5

それ自体ではありません。

プロンプトはテキストを返すだけで、最上位のコマンドが実行されるたびにホストで呼び出されるため、プロンプトを非同期的に更新することはできません。

プロンプトを書き直して、データ ソースや、非同期に更新する変数のチェックなどを行うことができます。したがって、コマンドの実行中にプロンプ​​トが変化し続けることはありませんが、データを検索するだけなので、しばらくハングすることはありません。

これのより厄介な点は、事後に実行結果をのぞき見しようとするゲームに巻き込まれることです。PowerShell は、何かに割り当てられていない限り、それらを保持しません。したがって、これを正しく行うには、Out-Default をオーバーライドする必要があります (これは ISE、PowerGUI などでのみ適切に機能し、powershell.exe では機能しません)。これをオーバーライドするのはそれほど難しいことではありませんが、私の印象的な基準からしても、PowerShell ブードゥー教についてよく知っている必要があります。

明るい面としては、私は明らかにこれをずっと考えてきました。そして、これをたくさん行うモジュールを持っています。私はそれで何をしようとしているのか、そしてそれが独自のモジュールにとどまるかどうかを決定しているだけです。私たちが構築する他のモジュールの1つに参加します。

出たら更新しますが、このロードマップはかなり役立つはずです。

手短に言えば、プロンプトを非同期に更新することはできませんが、非常に高速にすることはできます。そのために必要なトリックによって、多くのよりクールなドアが開かれます。

お役に立てれば

于 2012-05-31T23:18:08.167 に答える