コンテンツにスキップ

外からの操作

エディタなどのほかのプログラムから、動いている Kanaemi のモードを調べたり、変えたり、変わったときに知らせを受け取ったりできます。たとえば、Vim で挿入モードを抜けたら ABC モードに戻す、といったことができます。

対象は、そのときフォーカスのある入力欄です。

設定ファイル に、待つポートを書きます。書かなければ、Kanaemi は外からの操作を待ちません。

[control]
port = 50123
  • 1 から 65535 までの整数で書きます。上の番号は例です。使っていないポートを選んでください。
  • Kanaemi は 127.0.0.1 のそのポートだけで待ちます。ほかのマシンからはつなげません。
  • そのポートで待てないとき(ほかのプログラムが使っているなど)は、ログに残し、待たずに動き続けます。

TCP でつなぎ、1 行に 1 つの JSON のオブジェクトを UTF-8 で送りあいます。行末は LF です。1 つの接続で、要求をいくつでも送れます。

要求 答え
{"op": "get-mode"} 今のモード({"mode": "kana"})
{"op": "set-mode", "mode": "abc"} モードを変え、変えたあとのモードを答える
{"op": "watch-mode"} 今のモードを答え、以後、モードが変わるたびに知らせる

モードの名前は kana か abc です。要求に id(数か文字列)を付けると、答えに同じ id が付きます。

ターミナルウィンドウ
$ nc 127.0.0.1 50123
{"id": 1, "op": "get-mode"}
{"id": 1, "mode": "kana"}
{"id": 2, "op": "set-mode", "mode": "abc"}
{"id": 2, "mode": "abc"}
  • 今と同じモードにするときは、何もしません。何度送っても結果は同じです。
  • abc にすると、打っている途中のものは確定します(読みはかなのまま、候補は選んでいるもの)。
  • パスワード欄は abc のまま変わりません。kana にしようとしても、答えは abc です。
  • 外から変えたときは、モードの表示 を出しません。

watch-mode を送った接続には、フォーカスのある入力欄のモードが変わるたびに知らせを送ります。利用者が切り替えたとき、外から変えたとき、フォーカスがほかの入力欄に移ったときのどれでも送ります。

{"event": "mode", "mode": "abc"}

Kanaemi を使っている入力欄からフォーカスが外れたときは、"mode": null を送ります。知らせは、接続が切れるまで続きます。

答えの代わりに、error にわけを入れて返します。接続は切りません。

{"id": 3, "error": "no-field", "message": "…"}
error わけ
no-field Kanaemi を使っている入力欄にフォーカスがない
bad-request op を知らない、mode の名前を知らない

JSON のオブジェクトとして読めない行が来たら、答えずに接続を切ります。