プラグイン
ドキュメント作成中
一部の内容はまだ不完全な場合があります。
プラグインは、右サイドバーにパネルを 1 つ加える独立したプログラムです。ThinkTerm はそれを起動し、やり取りし、送られてきたものを描きます — デスクトップのウィンドウでもブラウザでも同じです — が、そのコードは ThinkTerm の中では一切動きません。プラグインがクラッシュしても、道連れになるのはそのパネルだけで、ほかには及びません。
ファイルとノート で説明したスニペットもプラグインです。内蔵されていて、インストールするプラグインと同じインターフェースを使っています。
プラグインが現れる場所
右サイドバーの中だけです。パネルを持つプラグインは、サイドバーの切り替えにファイル、ノート、スニペットと並んで自分の名前で現れ、設定 › サイドバーとプラグイン に一覧されます。独自のコマンド、メニュー項目、通知は加えません。

サイドバーに収まりきらないほど見せるものがあるパネルは、その左にもっと広いビューを開けます。幅はドラッグした分だけです。その場所がないとき — 狭いウィンドウやスマートフォン — プラグインはそこに出すはずだったものをパネル自体に収めます。
パネルはブラウザでもデスクトップと同じに見えます。どちらも同じコードで、ThinkTerm 自身の色で描くからです。ブラウザが使うのは、ページを渡したサーバーがあるマシンのプラグインで、ブラウザが動いているデバイスのものではありません — そのためヘッドレスのホストはそのホスト自身のプラグインを見せ、サーバー用パッケージにもプラグインサーバーが同梱されています。ウェブアクセス を参照してください。
インストールと削除
プラグインは、plugin.toml と実行するプログラムを収めたディレクトリです。インストールとは、そのディレクトリをプラグインディレクトリに置くことです。
| システム | プラグインディレクトリ |
|---|---|
| macOS | ~/Library/Application Support/ThinkTerm/plugins |
| Linux | ~/.local/share/ThinkTerm/plugins |
| Windows | %APPDATA%\ThinkTerm\plugins |
インストールの手順も再起動もありません。ThinkTerm は次に見に行ったときに新しいプラグインに気づきます。設定 › サイドバーとプラグイン を開いたとき、または thinkterm plugin list を実行したときです。ディレクトリを消せば削除になります。
プラグインを代わりにダウンロードしたりインストールしたりするものはなく、選べるカタログもありません。マシン上のプラグインはすべて、誰かがそこへコピーしたものです。
コマンドライン
thinkterm plugin は、シェルからプラグインを確認し、操作します。
| コマンド | 内容 |
|---|---|
thinkterm plugin list | すべてのプラグインと、その状態とバージョン |
thinkterm plugin enable <id> | プラグインをオンにする |
thinkterm plugin disable <id> | プラグインをオフにする |
thinkterm plugin reload [<id>] | プラグインを止めてマニフェストを読み直す。id を省くとインストール済みのすべてが対象 |
thinkterm plugin call <id> <json> | プラグインに呼び出しを送り、その答えを出力する |
thinkterm plugin dir | プラグインディレクトリを出力する |
reload は、クラッシュや失敗の状態も解除し、もう一度試せるようにします。同じスイッチ、再読み込み ボタン、プラグインフォルダーを開く手段は 設定 › サイドバーとプラグイン にもあります。
プラグインの動き方
プラグインを動かすのはウィンドウではありません。GUI ともセッションサーバーとも別の小さなプロセス thinkterm-plugin-server の下で動き、デスクトップ、ブラウザ、コマンドラインはどれもこれとやり取りします。マシンごと、ユーザーごとに 1 つです。何かが初めてプラグインを必要としたときに起動し、最後の利用者がいなくなってから 30 秒で終了し、そのときすべてのプラグインを止めます。
インストールしたプラグインは、それぞれがさらに独立したプロセスで、初めて使われたとき — パネルが表示されたとき、またはコマンドラインから呼び出されたとき — に起動します。予期せず終了したプラグインは停止したと表示され、次に使われたときに起動し直します。1 分間に 3 回クラッシュしたものは失敗とされ、再読み込みするか、そのファイルが変わるまで放っておかれます。プログラムがディスク上で変わると、ThinkTerm は次に使う前にそれを再起動します。
使われていないプラグインがどれだけ動くか
プラグインは、そのパネルのどれかがどこか — ウィンドウでもブラウザでも — に表示されている間、あるいはそれへの呼び出しが答えを待っている間、使用中です。使用中でなくなった後、プログラムがどれだけ動き続けるかはバックグラウンドの設定で決まります。
| 設定 | 起動 | 停止 |
|---|---|---|
常駐 | そのマシンの ThinkTerm と一緒に | そのマシンの ThinkTerm がいなくなったとき |
必要なときだけ(既定) | 使われたとき | 最後に使われてから 2 分後 |
使ったら停止 | 使われたとき | 最後に使われてから 10 秒後 |
どれが要るかはプラグインのマニフェストが示します。設定 › サイドバーとプラグイン で各プラグインの横にあるメニューは、デスクトップでもブラウザでも、プラグインごとにそれを上書きします。メニューでは、マニフェストが求めたものに プラグインの既定 と記されます。
ここでの兼ね合いは、パネルを開いた瞬間に準備ができていることと、見ていない間はプログラムが動いていないことの間にあります。常駐 は何かを見張っておくプラグインに向いていて、ThinkTerm が頼まれずにプラグインを起動するのはこのモードだけです。常駐のプラグインが自分で止まると、失敗とされるまで 2 秒後に起動し直されます。
「そのマシンの ThinkTerm」とは、デスクトップアプリかセッションサーバーのうち、動いているほうです。デスクトップのないホストではセッションサーバーなので、そこで常駐にしたプラグインはそのサーバーと同じだけ動きます。選択はマシンごとに保たれます。同じプラグインを、サーバーでは常駐に、ノート PC では必要なときだけにできます。
別のマシンの端末
パネルは隣の端末 — そのウィンドウでフォーカスのあるペイン — に属し、プラグインにはその端末のディレクトリが伝えられます。その端末が SSH でつないだ別のマシンで動いているとき、プラグイン自体はこちら、このマシンで動いたままです。向こうでしたいことは ThinkTerm に頼みます。プログラムを実行する、ファイルを読む、あるパスに何があるかを調べる、のいずれかです。ThinkTerm はそれを、ファイルパネルが使うのと同じ接続で、あなたとして行います。
こうした依頼には、知っておくべき制限があります。
- 届くのはプラグインのパネルの隣にある端末のマシンだけで、その端末がまだそこにある間だけです。端末がすでに離れたマシンへの依頼は失敗します。
- ThinkTerm がマシンに接続するのは、あなたが許してからです。ファイルパネルで、あるいはパネルが中身の代わりに表示するボタンで許します。それまでは、どの依頼も失敗します。
- 向こうで実行したプログラムは 20 秒で止められます。
これはデスクトップの機能です。ブラウザのパネルは、この方法でほかのマシンに届きません。
プラグインにできること
プラグインはあなたがマシンに置いたプログラムで、あなたとして、あなたの権限で動きます。ThinkTerm はサイドバーの外にプラグインのものを何も表示しませんが、それでプログラム自身がファイルを読んだり、ネットワークを使ったり、ほかのプログラムを実行したりするのを止められるわけではありません。止められるのはサンドボックスだけで、それはありません。ほかのプログラムをインストールするのと同じつもりでインストールしてください。
リモートへの依頼は、これを SSH でつないだマシンにまで広げます。ここで信頼するプラグインは、そのパネルの隣に端末があるすべてのホストで信頼するプラグインでもあります。上の制限が狭めるのは、それらにいつ届くかであって、届いた後に何ができるかではありません。
ThinkTerm のソースにあるプラグイン
ThinkTerm のソースには plugins/ の下に 3 つのプラグインがあります。ダウンロードには含まれていません。どれも Cargo でビルドし、その plugin.toml とプログラムをプラグインディレクトリの中の専用のディレクトリにコピーしてインストールします。
- Diff(
diff)は、隣の端末がいる git リポジトリの、最後のコミット以降の変更を GitHub Desktop のように表示します。変更されたファイルはパネルに、選んだファイルの各行は広いビューに出て、変わった行には印が付きます。パネルが表示されている間は 2 秒ごとに(git が時間のかかるリポジトリではもっと間を空けて)gitを実行し、リポジトリの設定がそのために指定できるプログラム — fsmonitor、外部 diff、テキスト変換 — は実行しません。別のマシンの端末の隣では、ThinkTerm を通じてそちらでgitを実行します。 - 株価(
stocks)は Yahoo Finance のウォッチリストで、銘柄ごとの 1 日の動きを線で示し、選んだ銘柄のチャートを出します。Yahoo のチャート API は公式のものではなく、予告なく拒否されたり変わったりすることがあります。 - テキストツール(
text-tools)はplugins/exampleにあり、パネルを持ちません。コマンドラインからの 2 種類の呼び出しに答えるもので、プラグインを書く出発点として置かれています。
プラグインを書く
プラグインのプログラムは、標準入力と標準出力を通じて、1 行ずつの JSON で ThinkTerm とやり取りします。パネルは手で描きます。プラグインが矩形、テキスト、線、塗りつぶし領域、そしてクリックが届く場所の一覧を送り、ThinkTerm がそれを描きます。ウィジェットはありません。
Rust のクレート thinkterm-plugin-sdk がこのプロトコルを実装しており、上のプラグインはどれもこれを使っています。マニフェスト、メッセージ、パネルの要素、各種の上限は、ThinkTerm のリポジトリの docs/thinkterm/plugins.md に詳しく書かれています。開発中は、ソースのディレクトリをプラグインディレクトリにリンクしてビルドし直せば足ります。プログラムが標準エラーに書いたものは、プラグインサーバーのログに入ります。
