DomTermは、ブラウザエンジンを「GUIツールキット」として使用する最新のターミナルエミュレータです。これにより、埋め込み可能なグラフィックとリンク、HTMLリッチテキスト、折りたたみ可能な(表示/非表示)コマンドなど、いくつかの優れた機能が有効になります。それ以外の点では、機能が充実したスタンドアロンのターミナルエミュレーターのように見え、優れたxterm互換性(マウス処理と24ビットカラーを含む)と適切な「クロム」(メニュー)を備えています。さらに、セッション管理とサブウィンドウのサポートが組み込まれています(tmux
のように) およびGNU screen
)、基本的な入力編集(readline
のように) )、およびページング(less
のように) )。
以下では、これらの機能について詳しく説明します。 domterm
があると想定します インストール済み(DomTermを取得してビルドする必要がある場合は、この記事の最後までスキップしてください)。ただし、最初に、テクノロジーの概要を簡単に説明します。
フロントエンドとバックエンド
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
DomTermのほとんどはJavaScriptで記述されており、ブラウザエンジンで実行されます。これは、ChromeやFirefoxなどのデスクトップウェブブラウザ(画像3を参照)でも、埋め込みブラウザでもかまいません。一般的なWebブラウザーの使用は問題なく機能しますが、ユーザーエクスペリエンスはそれほど良くなく(メニューはターミナルエミュレーターではなく一般的なブラウジング用に設計されているため)、セキュリティモデルが邪魔になるため、組み込みブラウザーを使用する方が適切です。 。
現在サポートされているのは次のとおりです。
-
qtdomterm
、QtツールキットとQtWebEngine
を使用します Electron
埋め込み(画像1を参照)-
atom-domterm
DomTermをAtomテキストエディター(これもElectronに基づいています)でパッケージとして実行し、Atomペインシステムと統合します(画像2を参照) - JavaFXの
WebEngine
のラッパー 、Javaで記述されたコードに役立ちます(画像4を参照) - 以前は、推奨されるフロントエンドはFirefox-XULを使用していましたが、Mozillaはその後XULを廃止しました
現在、Electronフロントエンドがおそらく最も優れたオプションであり、Qtフロントエンドがそれに続きます。 Atomを使用する場合は、atom-domterm
かなりうまく機能します。
バックエンドサーバーはCで記述されています。これは、疑似端末(PTY)とセッションを管理します。また、JavaScriptやその他のファイルをフロントエンドに提供するHTTPサーバーでもあります。 domterm
コマンドはターミナルジョブを開始し、他の要求を実行します。実行中のサーバーがない場合は、domterm
自分自身をデーモン化します。バックエンドとサーバー間の通信は通常、WebSocketを使用して行われます(サーバー上のlibwebsocketsを使用)。ただし、JavaFXの埋め込みでは、WebSocketもDomTermサーバーも使用しません。代わりに、JavaアプリケーションはJava-JavaScriptブリッジを使用して直接通信します。
堅実なxterm互換のターミナルエミュレータ
DomTermは、最新のターミナルエミュレータのように見えます。マウスイベント、24ビットカラー、Unicode、倍幅(CJK)文字、および入力メソッドを処理します。 DomTermはvttestテストスイートで非常に優れた仕事をします。
珍しい機能は次のとおりです。
ボタンの表示/非表示(「折りたたみ」): 小さな三角形(上の画像2に表示)は、対応する出力を表示/非表示にするボタンです。ボタンを作成するには、プロンプトテキストに特定のエスケープシーケンスを追加するだけです。
マウスクリックによるreadline
のサポート および同様の入力エディター: (黄色の)入力領域をクリックすると、DomTermは正しい順序の矢印キーキーストロークをアプリケーションに送信します。 (これは、プロンプトのエスケープシーケンスによって有効になります。Alt+クリックを使用して強制することもできます。)
CSSを使用して端末のスタイルを設定します: これは通常、~/.domterm/settings.ini
で行われます。 、保存時に自動的に再ロードされます。たとえば、画像2では、端末固有の背景色が設定されています。
より優れたREPLコンソール
従来のターミナルエミュレータは、文字セルの長方形グリッドで動作します。これはREPL(コマンドシェル)では機能しますが、理想的ではありません。ターミナルエミュレータには通常見られないREPLに役立つDomTermの機能を次に示します。
コマンドは、画像、グラフ、数式、またはクリック可能なリンクのセットを「印刷」できます。 アプリケーションは、ほとんどすべてのHTMLを含むエスケープシーケンスを送信できます。 (HTMLは、JavaScriptやその他の危険な機能を削除するためにスクラブされます。)
画像3は、gnuplot
のフラグメントを示しています セッション。 Gnuplot(2.1以降)はdomterm
をサポートしています 端末タイプとして。グラフィック出力はSVG画像に変換され、端末に印刷されます。 DomTermの私のブログ投稿Gnuplotの表示は、これに関する詳細情報を提供します。
Kawa言語には、幾何学的な画像値を作成および変換するためのライブラリがあります。このような画像値をDomTerm端末に出力すると、画像はSVGに変換され、出力に埋め込まれます。
出力のリッチテキスト: ヘルプメッセージは、HTMLスタイルで読みやすく、見栄えが良くなります。画像1の下のペインは、domterm help
からの出力を示しています。 。 (DomTermで実行されていない場合、出力はプレーンテキストです。)PAUSED
に注意してください。 内蔵ポケットベルからのメッセージ。
エラーメッセージにはクリック可能なリンクが含まれる場合があります: DomTermは構文filename:line:column:
設定可能なテキストエディタでファイルと行を開くリンクに変換します。 (これは、PROMPT_COMMAND
を使用する場合、相対ファイル名に対して機能します。 またはトラックディレクトリに似ています。)
コンパイラは、DomTermで実行されていることを検出し、エスケープシーケンスでファイルリンクを直接出力できます。これは、スペースやその他の特殊文字を処理し、ディレクトリトラッキングに依存しないため、DomTermのパターンマッチングに依存するよりも堅牢です。画像4では、Kawaコンパイラからのエラーメッセージを確認できます。ファイルの位置にカーソルを合わせると、下線が引かれ、file:
URLはatom-domterm
に表示されます メッセージ領域(ウィンドウの下部)。 (atom-domterm
を使用しない場合 、PAUSED
で見られるように、このようなメッセージはオーバーレイボックスに表示されます 画像1のメッセージ。)
リンクをクリックしたときのアクションは構成可能です。 file:
#position
とのリンク 接尾辞は、テキストエディタでファイルを開くことです。
構造化された内部表現: 内部ノード構造には、コマンド、プロンプト、入力行、通常およびエラー出力、タブ、および「HTMLとして保存」した場合の構造の保持がすべて含まれています。 HTMLファイルはXMLと互換性があるため、XMLツールを使用して出力を検索または変換できます。コマンドdomterm view-saved
コマンドの折りたたみ(表示/非表示ボタンがアクティブ)とウィンドウのサイズ変更時のリフローを可能にする方法で、保存されたHTMLファイルを開きます。
組み込みのLispスタイルのきれいな印刷: ウィンドウのサイズ変更時に改行が再計算されるように、出力にきれいな印刷ディレクティブ(グループ化など)を含めることができます。詳細については、私の記事「DomTermでの動的プリティプリンティング」を参照してください。
基本的な組み込みのライン編集 履歴付き(GNU readline
など ):これはブラウザの組み込みエディタを使用するため、優れたマウスと選択の処理が可能です。通常の文字モードを切り替えることができます(入力されたほとんどの文字はプロセスに直接送信されます)。またはラインモード(制御文字が編集アクションを引き起こす間に通常の文字が挿入され、Enterを使用して編集された行がプロセスに送信されます)。デフォルトは自動モードです。DomTermは、PTYがraw
または
canonical
のどちらであるかに応じて、文字モードと行モードを切り替えます。 モード。
組み込みのポケットベル (簡略化されたless
のように ):キーボードショートカットはスクロールを制御します。 「ページングモード」では、新しい画面が表示されるたびに出力が一時停止します(または、行ごとに進む場合は1行)。ページングモードは、ユーザー入力に関して目立たず、スマートであるため、(必要に応じて)インタラクティブなプログラムに干渉することなく実行できます。
多重化とセッション
タブとタイリング: 複数のターミナルタブを作成できるだけでなく、それらを並べて表示することもできます。マウスまたはキーボードショートカットを使用して、ペインとタブ間を移動したり、新しいものを作成したりできます。それらは、マウスで再配置およびサイズ変更できます。これは、GoldenLayoutJavaScriptライブラリを使用して実装されます。画像1は、2つのペインを持つウィンドウを示しています。一番上のタブには2つのタブがあり、1つはMidnightCommanderを実行しています。下のペインにはdomterm help
が表示されます HTMLとして出力します。ただし、Atomでは、代わりに組み込みのドラッグ可能なタイルとタブを使用します。これは画像2で確認できます。
セッションの切り離しと再接続: DomTermは、tmux
と同様にセッションの配置をサポートします およびGNUscreen
。同じセッションに複数のウィンドウまたはペインをアタッチすることもできます。これは、マルチユーザーセッション共有とリモート接続をサポートします。 (セキュリティのために、同じサーバーのすべてのセッションで、Unixドメインソケットとランダムキーを含むローカルファイルを読み取ることができる必要があります。この制限は、安全で安全なリモートアクセスストーリーがあれば解除されます。)
domterm
コマンド tmux
にも似ています またはGNUscreen
その中には、1つ以上のセッションを管理するサーバーを制御または起動するための複数のオプションがあります。主な違いは、DomTermでまだ実行されていない場合は、domterm
コマンドは、既存のターミナルで実行するのではなく、新しいトップレベルウィンドウを作成します。
domterm
コマンドには、tmux
と同様に、いくつかのサブコマンドがあります またはgit
。一部のサブコマンドは、ウィンドウまたはセッションを作成します。その他(画像の「印刷」など)は、既存のDomTermセッション内でのみ機能します。
コマンドdomterm browse
ドキュメントを閲覧するときなど、指定したURLを閲覧するためのウィンドウまたはペインを開きます。
DomTermの入手とインストール
DomTermは、GitHubリポジトリから入手できます。現在、ビルド済みのパッケージはありませんが、詳細な手順があります。すべての前提条件はFedora27で利用可能であり、これにより特に簡単に構築できます。