もう少しインタラクティブな端末がある場合は、プログラムの出力にインタラクティブな機能を追加し、テキスト要素を単純なリンクやコンテキストメニューなどのクリック可能なウィジェットに変換して、一部のタスクをスピードアップすることができれば幸いです。
例:
- Gitとの統合:
子支店
、クリック可能なブランチ名に変換されます。そのうちの1つをクリックすると、そのブランチに切り替わります。
- 標準コマンドとの統合:
ls -al
ls
、ディレクトリ名をクリックすると、そのディレクトリに移動します。右クリックすると、「cd to...」、「lsディレクトリ...」などを含むコンテキストメニューが表示されます。
これらのスクリプトをサポートし、端末のテキストウィンドウの上にUI要素レイヤーを作成する既存のソリューションはありますか?
ベストアンサー1
このタイプの機能を提供するターミナルエミュレータ(TE)のビデオを1つまたは2つ見ました。私はその名前を覚えておらず、もう一度聞いたこともないようです。おそらくそのような理由があるでしょう。
TEでこの動作を実装することは完全に絶望的です。私はいくつかの質問を通してこれを見せたいです。これは質問の性格を示すために設計された調査的な質問であり、私は答えを期待せず、各答えについて同様の性格の後続の質問を何十もの尋ねることができます。
まず、TEは、特定の出力がls
それls -l
に似ているものから出てくることを何とか知っているとします。どのように解析するのですか?
ls
どのくらいの書式設定オプションがあるかを確認してください。長いリストには列を追加または削除できます。カスタム形式を含む複数の日付形式があり、最近のファイルは、以前のファイルとはまったく異なる2つの形式を持つことができます。解析するのが難しい方法など、ファイル名に特殊文字を表す方法はさまざまです。
もちろん、パーサーにこれらの形式をすべて教えたいと思うかもしれませんが、どの形式を適用するべきかを知ることができますか?どのように?そのprompt$ ls -l
行を見つけて、それからわかるように実行されたコマンドを見てみましょうか?いいえ、エイリアスはしばしばいくつかのコマンドラインスイッチを含めるために使用されるため、わかりませんls
(他のユーティリティはTEでも見られない環境変数を介して同様に制御できます)。
たぶん、ユーザーはls
さまざまな出力形式で複数の実装をインストールして実行している可能性があります。~/bin/foo-ls
出力を処理する方法は?
多くのユーザーは、代表者l
または同様のエイリアスを持っています。この場合、TEはどのように識別されますか?ll
ls -l
ユーザーがls $dir
またはls $(some-command-that-prints-a-directory-name)
。 TEはどのディレクトリのリストが表示されるかをどのように知っていますか?
git branch
私には、ポケットベルが表示され、less
端末に表示される他のすべてを一時的に隠します。ブランチ名だけを印刷するように設定することも、呼び出すことなく、コンテンツが1ページに収まる場合にのみすぐに終了するように指示することもできますless
。less
内部にある場合、less
コンテンツを水平方向にスクロールし始めると、長いブランチ名が部分的に消えることがあります。または、ヘルプページを呼び出してから戻って実際のコンテンツを表示することもできます。 TEはこれらすべてをどのように追跡し、画面上のどの単語が支店名であるかを知ることができますか?
git
エイリアスをどのように識別しますか?たとえば、git br
ユーザーはそのようなエイリアスを設定しましたか?たとえば、TEはgit
将来正しく機能しない構成を調査して解決しますかssh
?
どのコマンドが実行されているのか、どうすればわかりますか?最も近い推測はヒントを解析することです(私が説明したように、間違った推測につながる可能性があります)。ヒントをどのように見つけますか?ユーザー、特に素晴らしい機能を必要とするユーザーは、プロンプトを大幅にカスタマイズする傾向があります。それでは、実行中のコマンドを見つける方法は?制御できないほど多くのカスタマイズ可能なプロンプトを分析する領域に入る必要があります。 (ここでiTerm2のシェル統合は、コピー可能な明示的なエスケープシーケンスを介して素晴らしいソリューションを導入します。)
また、どのシェルを使用しているのか、どうすればわかりますか?より複雑なコマンドラインでは、シェルごとに構文が異なります。
より複雑なコマンドを処理する方法は?たとえば、実行可能ls; git branch
ファイルのリストが終了し、git分岐リストが始まる場所を出力でどのように知ることができますか?
cd foo; ls; cd ..; git branch
コマンドなどの操作のためにディレクトリを追跡する方法など、ディレクトリの変更を処理する方法は?を考慮し$CDPATH
てcd
エイリアスを指定することもできますcd -P
。
さて、これらすべての問題を何とか克服し、TEが特定の単語のドロップダウンボックスを表示しているとしましょう。ユーザーがクリックすると、TEはタスクを実行しようとします。
どうすればいいですか?
TEには、内部アプリケーション(シェルなど)にコマンドを送信する正しい方法はありません。ユーザーが入力してEnterキーを押すのと同じようにキーストロークを合成できますが、シェルがコマンド入力を待っていて、ls -l that-particular-directory
そのコマンドラインが現在空の場合にのみ機能します。他の対話型アプリケーションが実行されている場合、または一部の部分コマンドが入力された場合、または印刷ssh
接続を終了したthat-particular-directory
場合、これらのキーストロークを組み合わせると問題が深刻に中断される可能性があります。 TEは現在これらのキーを挿入するのが安全であるかどうかをどうやって知ることができますか?
それともTE自体が必要なコマンドを実行しますか(それらの間にシェルなし)。それでは、出力を挿入する必要がある画面の位置が混乱しませんか?そして、それに属するプロンプトやコマンドラインもありません。そしてそれは渡すことはできませんssh
。
上記の質問は、状況がどのように間違っているのかを表面的に示しています。
ターミナルエミュレーションとそれに伴うアプリケーションは約40〜50年間発展してきました(よくわかりません)、このレベルの有用性は決して目標ではありませんでした。これを達成するには、すべてがまったく異なる方法で行われる必要があります。
ストーリーの開発者リソースの側面もあります。そのような処理を必要とする公益事業会社はどのくらいですか?あなたはそれを言及しls
、git
私の考えでは、あなたはもっと考えることができると思います。このユーティリティにはいくつの動作モードがありますか?両方の数字は膨大です。そのため、TEが解析し、提供するタスクを決定し、それらをどのように実行するかを決定できる必要がある何百、数千、さらには数万のコマンド出力形式について話しています(作業ディレクトリなどを考慮) 。その後、シェルは変更される可能性があります)。
誰がこれを実施しますか?物事の本質的にどんなに努力しても必要以上に頻繁に失敗する可能性がある複雑な経験的方法であることをご存知ですか?知る分析する特に、出力が明示的に解析できない場合はもちろん、解析するように設計されていない場合は、コンピュータプログラミングの最悪の領域の1つですか?ユーザーが一般的に使用するエイリアスなどを教えて期待どおりに動作できるように、ユーザーが簡単に拡張できる方法でこれを設計して実装する人は誰ですか?これらすべてのユーティリティの新しいバージョンと機能を最新の状態に保つには、誰が管理する必要がありますか?無限に注がれる必然的なバグレポートを誰が処理しますか?それは失敗する運命である。
このアプローチを忘れてください。現在と同じ方法でTEおよびTEベースのアプリケーションを使用することに慣れてください。
または代替ソリューションを探してください。
git
職場でグラフィックフロントエンドを使用したい場合があります。
ファイルリストとサブディレクトリリストが頻繁に必要な場合は、Midnight Commanderまたは他のグラフィックファイルマネージャを見つけることができます。
タッチタイピングを学ぶことで、あなたが望むものをはるかに速くコンピュータに伝えることができます。さらに重要なことは、実際に注意を払うのを妨げない完全に自動で無意味な作業になるということです。言うほど自然にタイピングをしてみてください。