翻訳者:
- 
Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>, 2014-2017 
この文書は WeeChat リレープロトコルについて述べたものです: リレープロトコルとは、WeeChat データをクライアントに中継するためのもので、多くの場合クライアントはリモートインターフェイスを指します。
1. はじめに
1.1. 用語
この文書では以下の用語を利用します:
- 
リレー: これは relay プラグインを備えた WeeChat を指し、"サーバ" のように振る舞い、クライアント からの接続を受け付けます 
- 
クライアント: これは他のソフトウェアのことを指し、ネットワークを介して リレー に接続します; 多くの場合、クライアント はリモートインターフェイスのことを指します。 
1.2. ネットワーク図
以下の図に示すように クライアント は リレー に接続しています:
                                               ┌────────────────┐ ワークステーション
 ┌────────┐                                ┌───┤ クライアント 1 │ (Linux、Windows、
 │  irc   │◄──┐  ╔═══════════╤════════╗    │   └────────────────┘ BSD、Mac OS X ...)
 └────────┘   └──╢           │        ║◄───┘   ┌────────────────┐
   ......        ║  WeeChat  │ リレー ║◄───────┤ クライアント 2 │ 携帯デバイス
 ┌────────┐   ┌──╢           │        ║◄───┐   └────────────────┘ (Android、iPhone ...)
 │ jabber │◄──┘  ╚═══════════╧════════╝    │      ......
 └────────┘                                │   ┌────────────────┐
   ......                                  └───┤ クライアント N │ その他のデバイス
                                               └────────────────┘
└────────────┘   └────────────────────┘╘══════╛└──────────────────────────────────────┘
 ネットワーク           ncurses         リレー            リモートインターフェイス
    サーバ          インターフェイス   プロトコル
| この文書で述べる全てのクライアントは リレー プラグインの weechat プロトコルを使っています。また リレー プラグインは IRC クライアントからの接続を受け入れることができます、この場合 リレー プラグインは IRC プロキシ のように振舞います (この文書では説明しません)。 | 
2. プロトコルの一般的説明
- 
リレー プラグインは新しい接続を受け入れるために IP/port をリッスンし、クライアント は TCP ソケットを使って リレー に接続します。 
- 
クライアント の数はオプション relay.network.max_clients で制限されています。 
- 
それぞれの クライアント が自分以外のクライアントと協調して動くことはできません。 
- 
クライアント から リレー へのメッセージを コマンド と呼び、これはテキスト形式 (文字列) で送信されます。 
- 
リレー から クライアント へのメッセージを メッセージ と呼び、これはバイナリデータとして送信されます。 
3. コマンド (クライアント → リレー)
コマンドの書式は以下です: "(id) command arguments\n".
フィールドは:
- 
id: リレー からの応答に含まれる任意指定のメッセージ識別子; 識別子は必ず括弧で括り、アンダースコア ("") を最初につけるのは禁止されています (アンダースコアが最初についている識別子は WeeChat _event メッセージ用に予約されています) 
- 
command: コマンド (以下のテーブルを参照) 
- 
arguments: コマンドに対する任意指定の引数 (複数の引数を渡す場合は空白で区切ってください)。 
利用可能なコマンドのリスト (詳しくは次の章を参照):
| コマンド | 説明 | 
|---|---|
| 
 | リレー 接続を初期化 | 
| 
 | hdata を要求 | 
| 
 | インフォ を要求 | 
| 
 | インフォリスト を要求 | 
| 
 | ニックネームリスト を要求 | 
| 
 | バッファにデータを送信 (テキストまたはコマンド) | 
| 
 | バッファを同期 (バッファの最新情報を取得) | 
| 
 | バッファを非同期 (バッファの更新を止める) | 
| 
 | リレー から切断 | 
3.1. init
リレー 接続を初期化。リレー に送るコマンドは必ずこのコマンドから始めてください。リレー がこのコマンドを受信していない場合、リレー は最初のコマンドを受け取った時点で警告無しに接続を閉じます。
構文:
init [<option>=<value>,[<option>=<value>,...]]
引数:
- 
option: 以下のうちの 1 つ: - 
password: リレー の認証用パスワード (WeeChat の relay.network.password オプション) 
- 
compression: 圧縮タイプ: - 
zlib: リレー から受信するメッセージに対して zlib 圧縮を使う (リレー が zlib 圧縮をサポートしている場合、デフォルトで有効化されます) 
- 
off: 圧縮を使わない 
 
- 
 
- 
| WeeChat バージョン 1.6 以上の場合、コンマをエスケープすることで value にコンマを設定可能です。例えば
"foo,bar" というパスワードを送信するには init password=foo\,barのように設定してください。 | 
例:
# デフォルト設定の zlib を使用する例 (WeeChat がサポートする場合) init password=mypass # パスワードにコンマを含む値を設定する例 (WeeChat バージョン 1.6 以上の場合) init password=mypass\,with\,commas # 圧縮を使わない例 init password=mypass,compression=off
3.2. hdata
hdata を要求。
構文:
(id) hdata <path> [<keys>]
引数:
- 
path: hdata へのパス、書式: "hdata:pointer/var/var/…/var"、最後の var に対応する hdata が返されます: - 
hdata: hdata の名前 
- 
pointer: ポインタ ("0x12345") またはリスト名 (例: "gui_buffers") (番号も可能、以下を参照) 
- 
var: 親 hdata に含まれる変数名 (パスで言う 1 つ前の名前) (番号も可能、以下を参照) 
 
- 
- 
keys: hdata で返すキーのコンマ区切りリスト (指定しなかった場合、全てのキーが返されます。強大な hdata 構造体の場合全てのキーを返すことはお勧めしません) 
ポインタと変数の後に番号を指定することができます。書式は "(N)"。可能な値は:
- 
正数: N 回次の要素への反復を繰り返す 
- 
負数: N 回前の要素への反復を繰り返す 
- 
*: 最後の要素まで、次の要素への反復を繰り返す 
| WeeChat バージョン 1.6 以上では、hdata へのパスが無効または NULL ポインタが見つかった場合、空の
hdata が返されます (hdata オブジェクトの例をご覧ください)。 1.6 よりも古いバージョンでは、何も返されません。 | 
例:
# すべてのバッファを要求、"buffer" 型の hdata が返される # それぞれのバッファについて "number" と "name" キーが返される hdata buffer:gui_buffers(*) number,name # バッファの全ての行を要求、"line_data" 型の hdata が返される # 全てのキーが返される hdata buffer:gui_buffers(*)/lines/first_line(*)/data # 最初のバッファの完全な名前を要求 hdata buffer:gui_buffers full_name # ホットリストの内容を要求 hdata hotlist:gui_hotlist(*)
3.4. infolist
インフォリスト を要求。
| インフォリストの内容は実際のデータの複製です。可能な限り hdata コマンドを使ってください、このコマンドはデータを直接読み出すことが可能です (高速、省メモリ、メッセージで返すオブジェクトのサイズが小さいです)。 | 
構文:
(id) infolist <name> [<pointer> [<arguments>]]
引数:
- 
name: 取得するインフォリストの名前 
- 
pointer: ポインタ (任意) 
- 
arguments: 引数 (任意) 
例:
infolist buffer
3.5. nicklist
1 つまたは全てのバッファから ニックネームリスト を要求。
構文:
(id) nicklist [<buffer>]
引数:
- 
buffer: ポインタ (0x12345) またはバッファの完全な名前 (例: core.weechat または irc.freenode.#weechat) 
例:
# 全てのバッファのニックネームリストを要求 nicklist # irc.freenode.#weechat のニックネームリストを要求 nicklist irc.freenode.#weechat
3.6. input
バッファにデータを送信。
構文:
input <buffer> <data>
引数:
- 
buffer: ポインタ (0x12345) またはバッファの完全な名前 (例: core.weechat または irc.freenode.#weechat) 
- 
data: バッファに送信するデータ: /で始まる場合、バッファ内でコマンドとして実行されます、それ以外の場合、テキストはバッファの入力として送信されます。
例:
input core.weechat /help filter input irc.freenode.#weechat hello!
3.7. sync
WeeChat バージョン 0.4.1 で更新。
更新を取得して 1 つまたは複数のバッファを同期。
| バッファのデータ (行、…) を要求した直後にこのコマンドを送信することをお勧めします。1 つのメッセージの中にこのコマンドを含める (改行文字 "\n" で区切る) ことで同時に送信できます。 | 
構文:
sync [<buffer>[,<buffer>...] <option>[,<option>...]]
引数:
- 
buffer: ポインタ (0x12345) またはバッファの完全な名前 (例: core.weechat または irc.freenode.#weechat); 全てのバッファを指定するには "*" を使ってください 
- 
options: 以下に挙げるキーワード、コンマ区切り ("*" に対するデフォルトは buffers,upgrade,buffer,nicklist、バッファに対するデフォルトは buffer,nicklist): - 
buffers: バッファに関するシグナルを受け取る (オープン/クローズ、移動、リネーム、マージ/アンマージ、隠す/隠さない); これは名前が "*" の場合のみ利用可能 (WeeChat バージョン 0.4.1 以上で利用可) 
- 
upgrade: WeeChat アップグレードに関するシグナルを受信 (アップグレード、アップグレードの終了); 名前が "*" のバッファに対してのみ利用可能 (WeeChat バージョン 0.4.1 以上で利用可) 
- 
buffer: バッファに関するシグナルを受信 (新しい行、型の変更、タイトルの変更、ローカル変数の追加/削除、buffers と同じバッファに関するシグナル) (WeeChat バージョン 0.4.1 で更新) 
- 
nicklist: 変更後にニックネームリストを受信 
 
- 
例:
# ニックネームリストを持つ全てのバッファを同期 # (3 つのコマンドは全て等価ですが、 # 将来のバージョンとの互換性を考慮して 1 つ目のコマンドを推奨します) sync sync * sync * buffers,upgrade,buffer,nicklist # コアバッファを同期 sync core.buffer # #weechat チャンネルを同期、ニックネームリストは受信しない sync irc.freenode.#weechat buffer # 一般的なシグナル + #weechat チャンネルに対する全てのシグナルを取得 sync * buffers,upgrade sync irc.freenode.#weechat
3.8. desync
WeeChat バージョン 0.4.1 で更新。
更新を中止して 1 つまたは複数のバッファの同期を中止。
| バッファの オプション を削除します。バッファに対する一部のオプションがまだ有効な場合、クライアントはバッファに対するアップデートを受け取ります。 | 
構文:
desync [<buffer>[,<buffer>...] <option>[,<option>...]]
引数:
- 
buffer: ポインタ (0x12345) またはバッファの完全な名前 (例: core.weechat または irc.freenode.#weechat); 全てのバッファを指定するには "*" を使ってください 
- 
options: 以下に挙げるキーワード、コンマ区切り ("*" に対するデフォルトは buffers,upgrade,buffer,nicklist、バッファに対するデフォルトは buffer,nicklist): 値に関する詳しい情報は sync コマンドをご覧ください 
| buffer に "*" を指定した場合、(名前を使って) 同期されている他のバッファは同期状態が保存されます。 このため "sync *"、"sync irc.freenode.#weechat"、"desync *" の順に送信した場合、WeeChat は #weechat チャンネルに対するアップデートを送信し続けます (アップデートを止めるには、明示してこれを中止しなければいけません)。 | 
例:
# ニックネームリストを持つ全てのバッファの同期を中止 # (3 つのコマンドは全て等価ですが、 # 将来のバージョンとの互換性を考慮して 1 つ目のコマンドを推奨します) desync desync * desync * buffers,upgrade,buffer,nicklist # #weechat チャンネルのニックネームリストの同期を中止 (バッファは同期する) desync irc.freenode.#weechat nicklist # #weechat チャンネルの同期を中止 desync irc.freenode.#weechat
3.9. test
テストコマンド: WeeChat は様々な種類のオブジェクトを返します。
このコマンドは WeeChat が返すバイナリオブジェクトのデコーディングをテストする際に便利です。
| このコマンドが返したポインタ値を絶対に使ってはいけません、ポインタ値は無効です。このコマンドを WeeChat が返すメッセージのデコーディングをテストする場合以外に使わないでください。 | 
構文:
test
例:
test
返されるオブジェクト (以下の順番):
| 型 | 型 (メッセージ中) | 値 | 
|---|---|---|
| char | 
 | 
 | 
| integer | 
 | 
 | 
| integer | 
 | 
 | 
| long | 
 | 
 | 
| long | 
 | 
 | 
| string | 
 | 
 | 
| string | 
 | 
 | 
| string | 
 | 
 | 
| buffer | 
 | 
 | 
| buffer | 
 | 
 | 
| pointer | 
 | 
 | 
| pointer | 
 | 
 | 
| time | 
 | 
 | 
| string の配列 | 
 | 
 | 
| integer の配列 | 
 | 
 | 
4. メッセージ (リレー → クライアント)
メッセージは以下の書式でバイナリデータとして送信されます (サイズはバイト単位):
┌────────╥─────────────╥────╥────────┬──────────╥───────╥────────┬──────────┐
│ length ║ compression ║ id ║ type 1 │ object 1 ║  ...  ║ type N │ object N │
└────────╨─────────────╨────╨────────┴──────────╨───────╨────────┴──────────┘
 └──────┘ └───────────┘ └──┘ └──────┘ └────────┘         └──────┘ └────────┘
     4          1        ??      3        ??                 3        ??
 └────────────────────┘ └──────────────────────────────────────────────────┘
       ヘッダ (5)                        圧縮されたデータ (??)
 └─────────────────────────────────────────────────────────────────────────┘
                               'length' バイト
- 
length (符号なし整数型): メッセージ全体のバイト数 (このフィールドを含む) 
- 
compression (バイト型): フラグ: - 
0x00: これ以降のデータは圧縮されていません 
- 
0x01: これ以降のデータは zlib で圧縮されています 
 
- 
- 
id (文字列型): クライアントが送信した識別子 (コマンド名の前につけられる); コマンドに識別子が含まれない場合は空文字列でも可 (内容を含まない長さゼロの文字列) 
- 
type (3 文字): 型の種類: 3 文字 (以下の表を参照) 
- 
object: オブジェクト (以下の表を参照) 
4.2. 識別子
識別子 (id) には 2 種類あります:
- 
クライアント が送信する id: リレー は id を含む受信メッセージに対して同じ id を付けて応答します。 
- 
イベントの id: 一部のイベントで、リレー は クライアント に向けて特別な、アンダースコアで始まる、id を含むメッセージを送信します (以下の表を参照) 
WeeChat の予約識別子:
| 識別子 | sync で受信 | 送信されるデータ | 説明 | 推奨するクライアントの挙動 | 
|---|---|---|---|---|
| _buffer_opened | buffers / buffer | hdata: buffer | バッファのオープン | バッファを開く | 
| _buffer_type_changed | buffers / buffer | hdata: buffer | バッファの種類変更 | バッファの種類を変更 | 
| _buffer_moved | buffers / buffer | hdata: buffer | バッファの移動 | バッファを移動 | 
| _buffer_merged | buffers / buffer | hdata: buffer | バッファのマージ | バッファをマージ | 
| _buffer_unmerged | buffers / buffer | hdata: buffer | バッファのアンマージ | バッファをアンマージ | 
| _buffer_hidden | buffers / buffer | hdata: buffer | バッファを隠す | バッファを隠す | 
| _buffer_unhidden | buffers / buffer | hdata: buffer | バッファを隠すことを止める | バッファを隠すことを止める | 
| _buffer_renamed | buffers / buffer | hdata: buffer | バッファのリネーム | バッファをリネーム | 
| _buffer_title_changed | buffers / buffer | hdata: buffer | バッファのタイトル変更 | バッファのタイトルを変更 | 
| _buffer_localvar_added | buffers / buffer | hdata: buffer | ローカル変数の追加 | バッファに対するローカル変数を追加 | 
| _buffer_localvar_changed | buffers / buffer | hdata: buffer | ローカル変数の変更 | バッファに対するローカル変数を変更 | 
| _buffer_localvar_removed | buffers / buffer | hdata: buffer | ローカル変数を削除 | バッファからローカル変数を削除 | 
| _buffer_closing | buffers / buffer | hdata: buffer | バッファのクローズ | バッファを閉じる | 
| _buffer_cleared | buffer | hdata: buffer | バッファのクリア | バッファをクリア | 
| _buffer_line_added | buffer | hdata: line | バッファへの行追加 | バッファに行を表示 | 
| _nicklist | nicklist | hdata: nicklist_item | バッファのニックネームリスト | ニックネームリストを置換 | 
| _nicklist_diff | nicklist | hdata: nicklist_item | バッファに対するニックネームの差分 | ニックネームリストを更新 | 
| _pong | (常に) | string: ping arguments | "ping" に対する応答 | 応答時間の測定 | 
| _upgrade | upgrade | (空) | WeeChat のアップグレード中 | WeeChat との同期を中止 (または切断) | 
| _upgrade_ended | upgrade | (空) | WeeChat のアップグレード終了 | WeeChat との同期および再同期 | 
4.2.1. _buffer_opened
このメッセージは WeeChat が "buffer_opened" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | string | 短い名前 (例: #weechat) | 
| 
 | integer | バッファがニックネームリストを持つ場合 1、それ以外は 0 | 
| 
 | string | バッファのタイトル | 
| 
 | hashtable | ローカル変数 | 
| 
 | pointer | 前のバッファへのポインタ | 
| 
 | pointer | 次のバッファへのポインタ | 
例: freenode の #weechat チャンネルに参加、新しいバッファは irc.freenode.#weechat:
id: '_buffer_opened'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'short_name': 'str', 'nicklist': 'int',
         'title': 'str', 'local_variables': 'htb', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'}
  path: ['buffer']
  item 1:
    __path: ['0x35a8a60']
    number: 3
    full_name: 'irc.freenode.#weechat'
    short_name: None
    nicklist: 0
    title: None
    local_variables: {'plugin': 'irc', 'name': 'freenode.#weechat'}
    prev_buffer: '0x34e7400'
    next_buffer: '0x0'4.2.2. _buffer_moved
このメッセージは WeeChat が "buffer_moved" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | pointer | 前のバッファへのポインタ | 
| 
 | pointer | 次のバッファへのポインタ | 
例: バッファ irc.freenode.#weechat を番号 2 に移動:
id: '_buffer_moved'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'}
  path: ['buffer']
  item 1:
    __path: ['0x34588c0']
    number: 2
    full_name: 'irc.freenode.#weechat'
    prev_buffer: '0x347b9f0'
    next_buffer: '0x3471bc0'4.2.3. _buffer_merged
このメッセージは WeeChat が "buffer_merged" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | pointer | 前のバッファへのポインタ | 
| 
 | pointer | 次のバッファへのポインタ | 
例: バッファ irc.freenode.#weechat をバッファ #2 とマージ:
id: '_buffer_merged'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'}
  path: ['buffer']
  item 1:
    __path: ['0x4db4c00']
    number: 2
    full_name: 'irc.freenode.#weechat'
    prev_buffer: '0x4cef9b0'
    next_buffer: '0x0'4.2.4. _buffer_unmerged
このメッセージは WeeChat が "buffer_unmerged" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | pointer | 前のバッファへのポインタ | 
| 
 | pointer | 次のバッファへのポインタ | 
例: バッファ irc.freenode.#weechat をアンマージ:
id: '_buffer_unmerged'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'}
  path: ['buffer']
  item 1:
    __path: ['0x4db4c00']
    number: 3
    full_name: 'irc.freenode.#weechat'
    prev_buffer: '0x4cef9b0'
    next_buffer: '0x0'4.2.5. _buffer_hidden
WeeChat バージョン 1.0 以上で利用可。
このメッセージは WeeChat が "buffer_hidden" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | pointer | 前のバッファへのポインタ | 
| 
 | pointer | 次のバッファへのポインタ | 
例: バッファ irc.freenode.#weechat を隠す:
id: '_buffer_hidden'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'}
  path: ['buffer']
  item 1:
    __path: ['0x4db4c00']
    number: 2
    full_name: 'irc.freenode.#weechat'
    prev_buffer: '0x4cef9b0'
    next_buffer: '0x0'4.2.6. _buffer_unhidden
WeeChat バージョン 1.0 以上で利用可。
このメッセージは WeeChat が "buffer_unhidden" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | pointer | 前のバッファへのポインタ | 
| 
 | pointer | 次のバッファへのポインタ | 
例: バッファ irc.freenode.#weechat を隠すことを止める:
id: '_buffer_unhidden'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'}
  path: ['buffer']
  item 1:
    __path: ['0x4db4c00']
    number: 3
    full_name: 'irc.freenode.#weechat'
    prev_buffer: '0x4cef9b0'
    next_buffer: '0x0'4.2.7. _buffer_renamed
このメッセージは WeeChat が "buffer_renamed" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | string | 短い名前 (例: #weechat) | 
| 
 | hashtable | ローカル変数 | 
例: プライベートバッファを FlashCode から Flash2 にリネーム:
id: '_buffer_renamed'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'short_name': 'str', 'local_variables': 'htb'}
  path: ['buffer']
  item 1:
    __path: ['0x4df7b80']
    number: 5
    full_name: 'irc.freenode.Flash2'
    short_name: 'Flash2'
    local_variables: {'server': 'freenode', 'plugin': 'irc', 'type': 'private',
                      'channel': 'FlashCode', 'nick': 'test', 'name': 'local.Flash2'}4.2.8. _buffer_title_changed
このメッセージは WeeChat が "buffer_title_changed" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | string | バッファのタイトル | 
例: チャンネル #weechat のトピックを変更:
id: '_buffer_title_changed'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'title': 'str'}
  path: ['buffer']
  item 1:
    __path: ['0x4a715d0']
    number: 3
    full_name: 'irc.freenode.#weechat'
    title: 'Welcome on #weechat!  https://weechat.org/'4.2.9. _buffer_cleared
WeeChat バージョン 1.0 以上で利用可。
このメッセージは WeeChat が "buffer_cleared" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
例: バッファ irc.freenode.#weechat をクリア:
id: '_buffer_cleared'
hda:
  keys: {'number': 'int', 'full_name': 'str'}
  path: ['buffer']
  item 1:
    __path: ['0x4a715d0']
    number: 3
    full_name: 'irc.freenode.#weechat'4.2.10. _buffer_type_changed
このメッセージは WeeChat が "buffer_type_changed" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | integer | バッファの種類: 0 = 書式あり (デフォルト)、1 = 自由内容 | 
例: バッファ script.scripts の種類を書式あり (0) から自由内容 (1) に変更:
id: '_buffer_type_changed'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'type': 'int'}
  path: ['buffer']
  item 1:
    __path: ['0x27c9a70']
    number: 4
    full_name: 'script.scripts'
    type: 14.2.11. _buffer_localvar_added
このメッセージは WeeChat が "buffer_localvar_added" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | hashtable | ローカル変数 | 
例: irc.freenode.#weechat にローカル変数 test を追加:
id='_buffer_localvar_added', objects:
hda:
  keys: {'number': 'int', 'full_name': 'str', 'local_variables': 'htb'}
  path: ['buffer']
  item 1:
    __path: ['0x4a73de0']
    number: 3
    full_name: 'irc.freenode.#weechat'
    local_variables: {'server': 'freenode', 'test': 'value', 'plugin': 'irc',
                      'type': 'channel', 'channel': '#weechat', 'nick': 'test',
                      'name': 'freenode.#weechat'}4.2.12. _buffer_localvar_changed
このメッセージは WeeChat が "buffer_localvar_changed" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | hashtable | ローカル変数 | 
例: irc.freenode.#weechat に含まれるローカル変数 test を更新:
id='_buffer_localvar_changed', objects:
hda:
  keys: {'number': 'int', 'full_name': 'str', 'local_variables': 'htb'}
  path: ['buffer']
  item 1:
    __path: ['0x4a73de0']
    number: 3
    full_name: 'irc.freenode.#weechat'
    local_variables: {'server': 'local', 'test': 'value2', 'plugin': 'irc',
                      'type': 'channel', 'channel': '#weechat', 'nick': 'test',
                      'name': 'freenode.#weechat'}4.2.13. _buffer_localvar_removed
このメッセージは WeeChat が "buffer_localvar_removed" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
| 
 | hashtable | ローカル変数 | 
例: irc.freenode.#weechat からローカル変数 test を削除:
id: '_buffer_localvar_removed'
hda:
  keys: {'number': 'int', 'full_name': 'str', 'local_variables': 'htb'}
  path: ['buffer']
  item 1:
    __path: ['0x4a73de0']
    number: 3
    full_name: 'irc.freenode.#prout'
    local_variables: {'server': 'local', 'plugin': 'irc', 'type': 'channel',
                      'channel': '#weechat', 'nick': 'test', 'name': 'freenode.#weechat'}4.2.14. _buffer_line_added
このメッセージは WeeChat が "buffer_line_added" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | pointer | バッファへのポインタ | 
| 
 | time | メッセージの日付 | 
| 
 | time | WeeChat メッセージを表示した日付 | 
| 
 | char | メッセージが表示される場合は 1、メッセージがフィルタされる (隠される) 場合は 0 | 
| 
 | char | 行がハイライト部分を含む場合は 1、それ以外は 0 | 
| 
 | string の配列 | 行に対するタグのリスト | 
| 
 | string | プレフィックス | 
| 
 | string | メッセージ | 
例: バッファ irc.freenode.#weechat でニックネーム FlashCode からの新しいメッセージ hello!:
id: '_buffer_line_added'
hda:
  keys: {'buffer': 'ptr', 'date': 'tim', 'date_printed': 'tim', 'displayed': 'chr',
         'highlight': 'chr', 'tags_array': 'arr', 'prefix': 'str', 'message': 'str'}
  path: ['line_data']
  item 1:
    __path: ['0x4a49600']
    buffer: '0x4a715d0'
    date: 1362728993
    date_printed: 1362728993
    displayed: 1
    highlight: 0
    tags_array: ['irc_privmsg', 'notify_message', 'prefix_nick_142', 'nick_FlashCode', 'log1']
    prefix: 'F06@F@00142FlashCode'
    message: 'hello!'4.2.15. _buffer_closing
このメッセージは WeeChat が "buffer_closing" シグナルを送信する際にクライアントに送られます。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | integer | バッファ番号 (1 以上) | 
| 
 | string | 完全な名前 (例: irc.freenode.#weechat) | 
例: WeeChat がバッファ irc.freenode.#weechat を閉じる:
id: '_buffer_closing'
hda:
  keys: {'number': 'int', 'full_name': 'str'}
  path: ['buffer']
  item 1:
    __path: ['0x4a715d0']
    number: 3
    full_name: 'irc.freenode.#weechat'4.2.16. _nicklist
このメッセージはニックネームリストに対して巨大な更新 (グループおよびニックネームの追加/更新/変更) が行われた場合にクライアントに送られます。このメッセージには完全なニックネームリストが含まれます。
ニックネームリストに対して小さな更新が行われた場合 (例えばニックネームを 1 つだけ追加)、識別子 _nicklist_diff を含むメッセージが送信されます (以下を参照)。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | char | グループの場合 1、ニックネームの場合 0 | 
| 
 | char | グループおよびニックネームが表示される場合 1、それ以外は 0 | 
| 
 | integer | グループのレベル (ニックネームの場合 0) | 
| 
 | string | グループおよびニックネームの名前 | 
| 
 | string | 名前の色 | 
| 
 | string | プレフィックス (ニックネーム専用) | 
| 
 | string | プレフィックスの色 (ニックネーム専用) | 
例: バッファ irc.freenode.#weechat のニックネームリスト:
id: '_nicklist'
hda:
  keys: {'group': 'chr', 'visible': 'chr', 'level': 'int', 'name': 'str', 'color': 'str',
         'prefix': 'str', 'prefix_color': 'str'}
  path: ['buffer', 'nicklist_item']
  item 1:
    __path: ['0x4a75cd0', '0x31e95d0']
    group: 1
    visible: 0
    level: 0
    name: 'root'
    color: None
    prefix: None
    prefix_color: None
  item 2:
    __path: ['0x4a75cd0', '0x41247b0']
    group: 1
    visible: 1
    level: 1
    name: '000|o'
    color: 'weechat.color.nicklist_group'
    prefix: None
    prefix_color: None
  item 3:
    __path: ['0x4a75cd0', '0x4a60d20']
    group: 0
    visible: 1
    level: 0
    name: 'FlashCode'
    color: '142'
    prefix: '@'
    prefix_color: 'lightgreen'
  item 4:
    __path: ['0x4a75cd0', '0x4aafaf0']
    group: 1
    visible: 1
    level: 1
    name: '001|v'
    color: 'weechat.color.nicklist_group'
    prefix: None
    prefix_color: None
  item 5:
    __path: ['0x4a75cd0', '0x4a48d80']
    group: 1
    visible: 1
    level: 1
    name: '999|...'
    color: 'weechat.color.nicklist_group'
    prefix: None
    prefix_color: None
  item 6:
    __path: ['0x4a75cd0', '0x4a5f560']
    group: 0
    visible: 1
    level: 0
    name: 'test'
    color: 'weechat.color.chat_nick_self'
    prefix: ' '
    prefix_color: ''4.2.17. _nicklist_diff
WeeChat バージョン 0.4.1 以上で利用可。
このメッセージはニックネームリストに対して小さな更新 (グループおよびニックネームの追加/更新/変更) が行われた場合にクライアントに送られます。このメッセージにはニックネームリストの差分が含まれます (古いニックネームリストと新しいニックネームリストの差分)。
hdata として送られるデータ:
| 名前 | 型 | 説明 | 
|---|---|---|
| 
 | char | 差分の種類 (下を参照) | 
| 
 | char | グループの場合 1、ニックネームの場合 0 | 
| 
 | char | グループおよびニックネームが表示される場合 1、それ以外は 0 | 
| 
 | integer | グループのレベル (ニックネームの場合 0) | 
| 
 | string | グループおよびニックネームの名前 | 
| 
 | string | 名前の色 | 
| 
 | string | プレフィックス (ニックネーム専用) | 
| 
 | string | プレフィックスの色 (ニックネーム専用) | 
_diff のとりうる値:
- 
^: 親グループ: これの後に続くグループまたはニックネームに関する操作はこのグループに対して行う
- 
+: このグループおよびニックネームを親グループに追加
- 
-: このグループおよびニックネームを親グループから削除
- 
*: このグループおよびニックネームを親グループで更新
例: ニックネーム master を 000|o (IRC チャンネルのチャンネルオペレータ) グループに追加、ニックネーム nick1 と nick2 を 999|… に追加 (IRC チャンネルの一般ユーザ):
id: '_nicklist_diff'
hda:
  keys: {'_diff': 'chr', 'group': 'chr', 'visible': 'chr', 'level': 'int', 'name': 'str',
         'color': 'str', 'prefix': 'str', 'prefix_color': 'str'}
  path: ['buffer', 'nicklist_item']
  item 1:
    __path: ['0x46f2ee0', '0x343c9b0']
    _diff: 94 ('^')
    group: 1
    visible: 1
    level: 1
    name: '000|o'
    color: 'weechat.color.nicklist_group'
    prefix: None
    prefix_color: None
  item 2:
    __path: ['0x46f2ee0', '0x47e7f60']
    _diff: 43 ('+')
    group: 0
    visible: 1
    level: 0
    name: 'master'
    color: 'magenta'
    prefix: '@'
    prefix_color: 'lightgreen'
  item 3:
    __path: ['0x46f2ee0', '0x46b8e70']
    _diff: 94 ('^')
    group: 1
    visible: 1
    level: 1
    name: '999|...'
    color: 'weechat.color.nicklist_group'
    prefix: None
    prefix_color: None
  item 4:
    __path: ['0x46f2ee0', '0x3dba240']
    _diff: 43 ('+')
    group: 0
    visible: 1
    level: 0
    name: 'nick1'
    color: 'green'
    prefix: ' '
    prefix_color: ''
  item 5:
    __path: ['0x46f2ee0', '0x3c379d0']
    _diff: 43 ('+')
    group: 0
    visible: 1
    level: 0
    name: 'nick2'
    color: 'lightblue'
    prefix: ' '
    prefix_color: ''4.2.18. _pong
WeeChat バージョン 0.4.2 以上で利用可。
このメッセージは リレー が "ping" メッセージを受信する際にクライアントに送られます。
文字列として送られるデータ: "ping" メッセージで受信した引数。
クライアントは応答時間を測定し、応答時間が長い場合は切断することを推奨します。
4.3. オブジェクト
オブジェクトは type と呼ばれる 3 文字で特定されます。以下の種類が使われます:
| 型 | 値 | 長さ | 
|---|---|---|
| 
 | 符号付文字 | 1 バイト | 
| 
 | 符号付整数 | 4 バイト | 
| 
 | 符号付長整数 | 1 バイト + 文字列で表現した整数の長さ | 
| 
 | 文字列 | 4 バイト + 文字列の長さ (最後の \0 を含まない) | 
| 
 | バッファのバイト数 | 4 バイト + データの長さ | 
| 
 | ポインタ | 1 バイト + 文字列で表現したポインタの長さ | 
| 
 | 時間 | 1 バイト + 文字列で表現した時間の長さ | 
| 
 | ハッシュテーブル | 可変 | 
| 
 | hdata の内容 | 可変 | 
| 
 | インフォ: 名前 + 内容 | 可変 | 
| 
 | インフォリストの内容 | 可変 | 
| 
 | オブジェクトの配列 | 3 バイト (型) + オブジェクトの数 + データ | 
4.3.2. 符号付整数
1 つの符号付整数は 4 バイトとして保存され、ビッグエンディアン書式でエンコードされています (データは上位バイトを先頭にして並べられています)。
範囲: -2147483648 から 2147483647。
例:
┌────┬────┬────┬────┐ │ 00 │ 01 │ E2 │ 40 │ ────► 123456 └────┴────┴────┴────┘ ┌────┬────┬────┬────┐ │ FF │ FE │ 1D │ C0 │ ────► -123456 └────┴────┴────┴────┘
4.3.3. 符号付長整数
1 つの符号付長整数は文字列としてエンコードされています、文字列の長さは 1 バイトで表現されています。
範囲: -9223372036854775808 から 9223372036854775807。
例:
┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ │ 0A ║ 31 │ 32 │ 33 │ 34 │ 35 │ 36 │ 37 │ 38 │ 39 │ 30 │ ────► 1234567890 └────╨────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ └──┘ └───────────────────────────────────────────────┘ length '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' ┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ │ 0B ║ 2D │ 31 │ 32 │ 33 │ 34 │ 35 │ 36 │ 37 │ 38 │ 39 │ 30 │ ────► -1234567890 └────╨────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ └──┘ └────────────────────────────────────────────────────┘ length '-' '1' '2' '3' '4' '5' '6' '7' '8' '9' '0'
4.3.4. 文字列
1 つの文字列はその長さ (4 バイト表現した整数) + 文字列の内容 (最後の \0 を除く) で表現されています。
例:
┌────┬────┬────┬────╥────┬────┬────┬────┬────┐
│ 00 │ 00 │ 00 │ 05 ║ 68 │ 65 │ 6C │ 6C │ 6F │ ────► "hello"
└────┴────┴────┴────╨────┴────┴────┴────┴────┘
 └─────────────────┘ └──────────────────────┘
       length         'h'  'e'  'l'  'l'  'o'
空文字列を表現するには長さをゼロにしてください:
┌────┬────┬────┬────┐
│ 00 │ 00 │ 00 │ 00 │ ────► ""
└────┴────┴────┴────┘
 └─────────────────┘
       length
NULL 文字列 (C 言語の NULL ポインタ) を表現するにはの長さを -1 にしてください:
┌────┬────┬────┬────┐
│ FF │ FF │ FF │ FF │ ────► NULL
└────┴────┴────┴────┘
 └─────────────────┘
       length
4.3.5. バッファ
文字列と同じ書式; 内容は単純なバイトの配列。
4.3.6. ポインタ
1 つのポインタは文字列 (16 進数) としてエンコードされています、文字列の長さは 1 バイトで表現されています。
例:
┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┐ │ 09 ║ 31 │ 61 │ 32 │ 62 │ 33 │ 63 │ 34 │ 64 │ 35 │ ────► 0x1a2b3c4d5 └────╨────┴────┴────┴────┴────┴────┴────┴────┴────┘ └──┘ └──────────────────────────────────────────┘ length '1' 'a' '2' 'b' '3' 'c' '4' 'd' '5'
NULL ポインタを表現するには長さを 1 で値を 0 にしてください:
┌────╥────┐ │ 01 ║ 00 │ ────► NULL (0x0) └────╨────┘ └──┘ └──┘ length 0
4.3.7. 時間
1 つの時間 (秒数) は文字列としてエンコードされています、文字列の長さは 1 バイトで表現されています。
例:
┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ │ 0A ║ 31 │ 33 │ 32 │ 31 │ 39 │ 39 │ 33 │ 34 │ 35 │ 36 │ ────► 1321993456 └────╨────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ └──┘ └───────────────────────────────────────────────┘ length '1' '3' '2' '1' '9' '9' '3' '4' '5' '6'
4.3.8. ハッシュテーブル
1 つのハッシュテーブルにはキーの種類、値の種類、ハッシュテーブルに含まれる要素の数 (1 バイト表現の整数)、要素のキーと値が含まれています。
┌───────────┬─────────────┬───────╥───────┬─────────╥─────╥───────┬─────────┐ │ type_keys │ type_values │ count ║ key 1 │ value 1 ║ ... ║ key N │ value N │ └───────────┴─────────────┴───────╨───────┴─────────╨─────╨───────┴─────────┘
例:
┌─────┬─────┬───╥──────┬─────╥──────┬─────┐
│ str │ str │ 2 ║ key1 │ abc ║ key2 │ def │ ────► { 'key1' => 'abc',
└─────┴─────┴───╨──────┴─────╨──────┴─────┘         'key2' => 'def' }
 └───┘ └───┘ └─┘ └──────────┘ └──────────┘
 type  type count   item 1       item 2
 keys values
4.3.9. hdata
1 つの hdata には hdata 名を含むパス、キーのリスト、オブジェクトセットの数、オブジェクトセット (ポインタのパス、オブジェクト) が含まれています。
┌────────┬──────┬───────╥────────┬─────────────────────╥── │ h-path │ keys │ count ║ p-path │ value 1 ... value N ║ ... └────────┴──────┴───────╨────────┴─────────────────────╨── ──╥────────┬─────────────────────╥─────┐ ... ║ p-path │ value 1 ... value N ║ ... │ ──╨────────┴─────────────────────╨─────┘
- 
h-path (文字列): hdata にアクセスする際に使うパス (例: buffer/lines/line/line_data); 返される hdata はパスの最後の要素です 
- 
keys (文字列): key:type のリスト (コンマ区切り) を含む文字列、例: number:int,name:str 
- 
count (文字列): オブジェクトセットの数 
- 
p-path: オブジェクトへのポインタを含むパス (ポインタの数はパスに含まれる要素の数) 
- 
values: 値のリスト (値の数は hdata で返されるキーの数) 
2 つのバッファ (weechat コアと freenode サーバ) と 2 つのキー (number と full_name) を持つ hdata の例:
# コマンド
hdata buffer:gui_buffers(*) number,full_name
# 応答
┌────────┬──────────────────────────┬───╥──
│ buffer │ number:int,full_name:str │ 2 ║ ...
└────────┴──────────────────────────┴───╨──
 └──────┘ └────────────────────────┘ └─┘
  h-path          keys              count
   ──╥─────────┬───┬──────────────╥─────────┬───┬────────────────────┐
 ... ║ 0x12345 │ 1 │ core.weechat ║ 0x6789a │ 2 │irc.server.freenode │
   ──╨─────────┴───┴──────────────╨─────────┴───┴────────────────────┘
      └──────────────────────────┘ └────────────────────────────────┘
               buffer 1                        buffer 2
コアバッファの行を含む hdata の例:
# コマンド
hdata buffer:gui_buffers(*)/lines/first_line(*)/data
# 応答
┌─────────────────────────────┬─────┬────╥──
│ buffer/lines/line/line_data │ ... │ 50 ║ ...
└─────────────────────────────┴─────┴────╨──
 └───────────────────────────┘ └───┘ └──┘
      h-path (hdata names)     keys  count
   ──╥───────────┬───────────┬───────────┬───────╥──
 ... ║ 0x23cf970 │ 0x23cfb60 │ 0x23d5f40 │ ..... ║ ...
   ──╨───────────┴───────────┴───────────┴───────╨──
      └─────────────────────────────────┘ └─────┘
               p-path (pointers)          objects
      └─────────────────────────────────────────┘
                         line 1
   ──╥───────────┬───────────┬───────────┬───────╥──────────────┐
 ... ║ 0x23cf970 │ 0x23cfb60 │ 0x23d6110 │ ..... ║ ............ │
   ──╨───────────┴───────────┴───────────┴───────╨──────────────┘
      └─────────────────────────────────┘ └─────┘
               p-path (pointers)          objects
      └─────────────────────────────────────────┘ └────────────┘
                         line 2                     lines 3-50
ニックネームリストを含む hdata の例:
# コマンド
nicklist
# 応答
┌───────────────────┬──
│ buffer/nick_group │ ...
└───────────────────┴──
 └─────────────────┘
        h-path
   ──╥───────────────────────────────────────────────────────────┬────╥──
 ... ║ group:chr,visible:chr,name:str,color:str,prefix:str,(...) │ 12 ║ ...
   ──╨───────────────────────────────────────────────────────────┴────╨──
      └─────────────────────────────────────────────────────────┘ └──┘
                                 keys                             count
   ──╥─────────┬─────────┬───┬───┬──────┬─┬─┬─┬───╥──
 ... ║ 0x12345 │ 0x6789a │ 1 │ 0 │ root │ │ │ │ 0 ║ ...
   ──╨─────────┴─────────┴───┴───┴──────┴─┴─┴─┴───╨──
      └─────────────────┘ └──────────────────────┘
             p-path               objects
      └──────────────────────────────────────────┘
                  group (nicklist root)
   ──╥─────────┬─────────┬───┬───┬───────┬─┬─┬─┬───╥──
 ... ║ 0x123cf │ 0x678d4 │ 1 │ 0 │ 000|o │ │ │ │ 1 ║ ...
   ──╨─────────┴─────────┴───┴───┴───────┴─┴─┴─┴───╨──
      └─────────────────┘ └───────────────────────┘
             p-path                objects
      └───────────────────────────────────────────┘
                    group (channel ops)
   ──╥─────────┬─────────┬───┬───┬──────────┬──────┬───┬────────────┬───╥──
 ... ║ 0x128a7 │ 0x67ab2 │ 0 │ 1 │ ChanServ │ blue │ @ │ lightgreen │ 0 ║ ...
   ──╨─────────┴─────────┴───┴───┴──────────┴──────┴───┴────────────┴───╨──
      └─────────────────┘ └────────────────────────────────────────────┘
             p-path                          objects
      └────────────────────────────────────────────────────────────────┘
                               nick (@ChanServ)
空の hdata の例 (WeeChat のホットリストが空の場合):
# コマンド hdata hotlist:gui_hotlist(*) # 応答 ┌────────┬────────┬───┐ │ (NULL) │ (NULL) │ 0 │ └────────┴────────┴───┘ └──────┘ └──────┘ └─┘ h-path keys count
4.3.10. インフォ
1 つの インフォ は名前と値を含んでいます (両方とも文字列)。
┌──────┬───────┐ │ name │ value │ └──────┴───────┘
- 
name (文字列): インフォの名前 
- 
value (文字列): 値 
version インフォの例:
┌─────────┬───────────────────┐ │ version │ WeeChat 0.3.7-dev │ └─────────┴───────────────────┘
4.3.11. インフォリスト
1 つの インフォリスト は名前、要素の数、要素 (変数のセット) を含んでいます。
┌──────┬───────╥────────╥─────╥────────┐ │ name │ count ║ item 1 ║ ... ║ item N │ └──────┴───────╨────────╨─────╨────────┘
要素とは:
┌───────╥────────┬────────┬─────────╥─────╥────────┬────────┬─────────┐ │ count ║ name 1 │ type 1 │ value 1 ║ ... ║ name N │ type N │ value N │ └───────╨────────┴────────┴─────────╨─────╨────────┴────────┴─────────┘
- 
name (文字列): インフォリストの名前 (buffer、window、bar、…) 
- 
count (整数): 要素の数 
- 
item: - 
count: 要素に含まれる変数の数 
- 
name: 変数の名前 
- 
type: 変数の型 (int、str、…) 
- 
value: 変数の値 
 
- 
2 つのバッファ (weechat コアと freenode サーバ) を持つインフォリストの例:
# コマンド
infolist buffer
# 応答
┌────────┬───╥────┬─────────┬─────┬─────────┬─────╥──
│ buffer │ 2 ║ 42 │ pointer │ ptr │ 0x12345 │ ... ║ ...
└────────┴───╨────┴─────────┴─────┴─────────┴─────╨──
 └──────┘ └─┘ └──────────────────────────────────┘
   name  count              item 1
   ──╥────┬─────────┬─────┬─────────┬─────┐
 ... ║ 42 │ pointer │ ptr │ 0x6789a │ ... │
   ──╨────┴─────────┴─────┴─────────┴─────┘
      └──────────────────────────────────┘
                    item 2
4.3.12. 配列
1 つの配列は型 (3 バイト) + オブジェクトの数 (4 バイト表現の整数) + データからなります。
2 つの文字列を持つ配列の例:
┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥──
│ str ║ 00 │ 00 │ 00 │ 02 ║ 00 │ 00 │ 00 │ 03 ║ ...
└─────╨────┴────┴────┴────╨────┴────┴────┴────╨──
 └───┘ └─────────────────┘ └─────────────────┘
 type   number of strings        length
   ──╥────┬────┬────╥────┬────┬────┬────╥────┬────┐
 ... ║ 61 │ 62 │ 63 ║ 00 │ 00 │ 00 │ 02 ║ 64 │ 65 │ ────► [ "abc", "de" ]
   ──╨────┴────┴────╨────┴────┴────┴────╨────┴────┘
      └────────────┘ └─────────────────┘ └───────┘
       'a'  'b'  'c'       length         'd'  'e'
3 つの整数を持つ配列の例:
┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥──
│ int ║ 00 │ 00 │ 00 │ 03 ║ 00 │ 00 │ 00 │ 7B ║ ...
└─────╨────┴────┴────┴────╨────┴────┴────┴────╨──
 └───┘ └─────────────────┘ └─────────────────┘
 type   number of integers      123 (0x7B)
   ──╥────┬────┬────┬────╥────┬────┬────┬────┐
 ... ║ 00 │ 00 │ 01 │ C8 ║ 00 │ 00 │ 03 │ 15 │ ────► [ 123, 456, 789 ]
   ──╨────┴────┴────┴────╨────┴────┴────┴────┘
      └─────────────────┘ └─────────────────┘
          456 (0x1C8)         789 (0x315)
NULL 配列:
┌─────╥────┬────┬────┬────┐ │ str ║ 00 │ 00 │ 00 │ 00 │ ────► NULL └─────╨────┴────┴────┴────┘ └───┘ └─────────────────┘ type number of strings
5. 典型的なセッション
    ┌──────────────┐                  ┌────────┐                  ┌─────────┐
    │ クライアント ├ ─(ネットワーク)─ ┤ リレー ├──────────────────┤ WeeChat │
    └──────────────┘                  └────────┘                  └─────────┘
         ║                                 ║                           ║
         ╟───────────────────────────────► ║                           ║
         ║ ソケットをオープン              ║ クライアントを追加        ║
         ║                                 ║                           ║
         ╟───────────────────────────────► ║                           ║
         ║ cmd: init password=xxx,...      ║ クライアントを初期化/許可 ║
         ║                                 ║                           ║
         ╟───────────────────────────────► ║                           ║
         ║ cmd: hdata buffer ...           ╟─────────────────────────► ║
         ║      sync ...                   ║ hdata の要求              ║ hdata
         ║                                 ║                           ║ の値を読み出し
         ║                                 ║ ◄─────────────────────────╢
         ║ ◄───────────────────────────────╢                     hdata ║
バッファ ║                 msg: hda buffer ║                           ║
  を作成 ║                                 ║                           ║
         ║            ........             ║           ........        ║
         ║                                 ║                           ║
         ╟───────────────────────────────► ║                           ║
         ║ cmd: input ...                  ╟─────────────────────────► ║
         ║                                 ║ バッファにデータを送信    ║ バッファに
         ║                                 ║                           ║ データを送信
         ║            ........             ║           ........        ║
         ║                                 ║                           ║ シグナル
         ║                                 ║ ◄─────────────────────────╢ の受信
         ║ ◄───────────────────────────────╢              シグナル XXX ║ (リレー
バッファ ║          msg: id: "_buffer_..." ║                           ║ がフック)
  を更新 ║                                 ║                           ║
         ║            ........             ║           ........        ║
         ║                                 ║                           ║
         ╟───────────────────────────────► ║                           ║
         ║ cmd: ping ...                   ║                           ║
         ║                                 ║                           ║
         ║ ◄───────────────────────────────╢                           ║
    応答 ║            msg: id: "_pong" ... ║                           ║
    時間 ║                                 ║                           ║
  を計測 ║            ........             ║           ........        ║
         ║                                 ║                           ║
         ╟───────────────────────────────► ║                           ║
         ║ cmd: quit                       ║ クライアントを切断        ║
         ║                                 ║                           ║