スクリプトまたはコマンドを実行するためのカスタムボタン付きのLinux端末

スクリプトまたはコマンドを実行するためのカスタムボタン付きのLinux端末

私の目標は、ダッシュボードを作成してソフトウェア開発の最終的な使用率を高めることです。まず、TilixまたはTerminatorを使用すると、すでに可能な垂直/水平分割が必要です(私はTmuxがあまり好きではありません)。しかし、マウスでスクリプトを実行する方法はありません。私はしばしばスクリプトを実行し、コードをクリーンアップまたはチェックするのが好きです。私がやっていることは、端末に焦点を当てて上矢印を押してからEnterを押すだけです。これはボタンをクリックするほど簡単ではありません。

カスタムコマンドやスクリプトを実行できるボタンを上部(または他の場所)に追加できる端末はありますか?たとえば、「OK」をクリックすると、特定の端末で実行され、その出力を表示する必要がある「scripts/check.sh」が実行されます。

私が使用するもう一つのボタンは、コードを変更した後に更新するなど、実行中のプログラムを再起動するボタンです。

答え1

Terminatorプラグインを確認してくださいCustom Commands Menu

ターミネーターのデフォルト設定で有効にしてから、右クリックメニューから...かなり明確にする必要があります。

メニュー項目の代わりにボタンが必要な場合、それに応じてターミネータのユーザーインターフェイスを変更することは比較的簡単なPythonとGTKプログラミングの課題です。

\nまた、末尾を追加しないように、つまりコマンドをすぐに実行しないようにTerminatorのソースコードを変更する必要があると思います。プラグインのソースコード(ターミネータの公式ソースコード)と改行が追加された場所を簡単に見つけることができます。 (アップストリームでは、対応するUIトグルを追加するパッチを喜んで受け入れると思います。)


そのため、これらの機能を備えた端末エミュレータはほんの一握りだと思います。

たとえば、「OK」をクリックすると、特定の端末で実行され、その出力を表示する必要がある「scripts/check.sh」が実行されます。

ターミナルを起動すると、ほぼ常に(*)プロセス、つまり通常シェルも実行されます。

同じ端末で他のプログラムを同じ方法で「実行」することはできません。横にあなたの殻。二人はインプットとおそらく他の資源を置き、互いに戦うでしょう。 「実行中」とは、すでに実行中の項目について尋ねることを意味します。シェルアプリケーションを実行してください。

これを行う方法は、そのキーを押したかのように偽装することです。つまり、入力を端末に合成し、それをシェルに渡します。 [カスタムコマンドプラグインソースコードの特定のステップは、vte.feed_child()メソッドを使用して実行されます。 ]

しかし、本質的な問題があります。シェルが入力を待機するプロンプトにあるかどうか、入力行が現在空であるか、特殊モード(文字反復計算など)が有効になっているかを知る方法はありません。つまり、これらの入力文字が文字通り解釈され、実行したいコマンドを形成するかどうかを知る方法はありません。

部分コマンドを入力すると、目的のボタンにテキストが追加されます。すべてのキーストロークがメニューなどを呼び出すアプリケーションを持つことができます。scripts/check.shファイルに対してさまざまなランダムvim編集コマンドを実行する同様の文字列をvimのコマンドモードに挿入できます。など。

場合によっては、事前定義されたテキストを貼り付けることが必要に応じて正確に行われます。他のケースでは、簡単に多くのダメージを与える可能性があります。そして、端末は実際に何が起こるのかわからないので、そのようなエラーからユーザーを保護することはできません。

これは、人々がそのようなUI機能ではなく、シェルエイリアスと機能、インタラクティブシェルコマンドの編集、および関連機能(履歴検索など)を好む傾向がある理由です。


(*)VTE(ターミネータで使用される端末エミュレーションライブラリ)のプログラミングを詳しく見ると、次のことがわかります。はいどのコマンドも実行せずに(シェルも含む)、その端末をアイドル状態にしてからボタンを追加して、その端末から直接お気に入りのコマンドを実行できます。完了したら、ボタンのいずれかを使用して別のコマンドを実行できます。しかし、やはり、次のコマンドを入力できるシェルはありません。この場合、状況を心配する必要はありません。しかし、私はこの可能性を探るのに努力する価値があるかどうかは本当にわかりません。

答え2

私が知る限りではない。

ある種の分割端末を使用している場合は、いずれかのdialog側面で実行できます。たとえば、次のようになります。

list=( */ )
folder=$( dialog --title "List directory" --cancel-label "Exit" \
                 --no-items --menu "Please choose one folder: " \
                 --output-fd 1 10 40 0 ${list[@]///} )
echo $folder

端末に応じてマウスを使用することもできます。

ただし、コンソールモード(ほとんど誰も使用しない)で実行しない限り、別のウィンドウを作成する方がはるかに簡単です。tkこれを行う方法については、お気に入りの言語(TCL / Tk、Perl / Tk、Python tkinter、またはBash / Tk)を確認してください。

ダッシュボードにターミナルウィンドウを含めるには、次のものを使用できます。

from tkinter import *
import os

root = Tk()
termf = Frame(root, height=400, width=500)
root.attributes("-fullscreen", True)    
termf.pack(fill=BOTH, expand=YES)
wid = termf.winfo_id()
os.system('xterm -into %d -geometry 400x500 -sb -e "ls; sleep 10" &' % wid)
root.mainloop()

関連情報