= WeeChat ユーザーズガイド
:author: Sébastien Helleu
:email: flashcode@flashtux.org
:toc2:
:toclevels: 3
:toc-title: 目次
:max-width: 100%


翻訳者:

* Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>, 2012-2014


このマニュアルは WeeChat チャットクライアントについての文書で、これは WeeChat の一部です。

この文書の最新版は以下のページにあります:
https://weechat.org/doc


[[introduction]]
== イントロダクション

WeeChat (Wee Enhanced Environment for Chat) はフリーのチャットクライアントです。
高速で軽量、多くのオペレーティングシステムで動くように設計されています。

[[features]]
=== 特徴

主な特徴:

* マルチプロトコル: IRC 及び Jabber (jabber.py スクリプトや bitlbee/minbif が必要)
* 複数のサーバへの接続 (SSL、IPv6、プロキシをサポート)
* コンパクト、高速、軽量
* プラグインとスクリプトでカスタマイズや拡張が可能
* IRC の RFC に準拠 http://tools.ietf.org/html/rfc1459[1459]、
  http://tools.ietf.org/html/rfc2810[2810]、
  http://tools.ietf.org/html/rfc2811[2811]、
  http://tools.ietf.org/html/rfc2812[2812]、
  http://tools.ietf.org/html/rfc2813[2813]。
* マルチプラットフォーム (GNU/Linux、*BSD、MacOS X、Windows 等)
* 完全な GPL、フリーソフトウェア

WeeChat のホームページ: https://weechat.org/

[[prerequisites]]
=== 事前に必要なもの

WeeChat をインストールするには、以下のものが必要です:

* GNU/Linux が稼動しているシステム (ソースパッケージを使う場合は、
  コンパイラツールも必要)、又は互換 OS
* 'root' 特権 (WeeChat をシステムディレクトリにインストールする場合)
* 一部のライブラリ (<<dependencies,依存関係>>を参照)。

[[install]]
== インストール方法

[[binary_packages]]
=== バイナリパッケージ

多くのディストリビューションではバイナリパッケージが利用できます。例えば:

* Debian (または Debian 互換ディストリビューション):
  `apt-get install weechat-curses`
* Mandriva/RedHat (または RPM 互換ディストリビューション):
  `rpm -i /path/to/weechat-x.y.z-1.i386.rpm`
* Gentoo: `emerge weechat`
* Arch Linux: `pacman -S weechat`
* Fedora Core: `yum install weechat`
* Sourcemage: `cast weechat`

例えば weechat-plugins 等の追加パッケージを使うとより便利になるかもしれません。

その他のディストリビューションでは、
インストール説明マニュアルを参照してください。

[[source_package]]
=== ソースパッケージ

WeeChat は cmake または autotools を使ってコンパイルできます (cmake を使うことが推奨されています)。

[NOTE]
OS X では、http://brew.sh/[Homebrew] を使ってください:
`brew install weechat --with-python --with-perl`
(ヘルプを見るには: `brew info weechat`)。

[[dependencies]]
==== 依存関係

以下の表は WeeChat
のコンパイルに必須または任意で必要なパッケージのリストです。

[width="100%",cols="5,^3,^3,.^13",options="header"]
|===
| パッケージ ^(1)^ | バージョン | 要件 | 機能

| cmake | | *必須* |
  ビルド (autotools でも可能ですが、cmake を推奨します)

| pkg-config | | *必須* |
  インストール済みライブラリを検出

| libncursesw5-dev ^(2)^ | | *必須* |
  ncurses インターフェイス

| libcurl4-gnutls-dev | | *必須* |
  URL 転送

| zlib1g-dev | | *必須* |
  relay プラグインでパケットを圧縮 (weechat プロトコル)、スクリプトプラグイン

| libgcrypt20-dev | | *必須* |
  保護データ、IRC SASL 認証 (DH-BLOWFISH/DH-AES)、スクリプトプラグイン

| libgnutls28-dev | ≥ 2.2.0 ^(3)^ | |
  IRC サーバへの SSL 接続、IRC SASL 認証 (ECDSA-NIST256P-CHALLENGE)

| gettext | | |
  国際化 (メッセージの翻訳; ベース言語は英語です)

| ca-certificates | | |
  SSL 接続に必要な証明書、relay プラグインで SSL サポート

| libaspell-dev または libenchant-dev | | |
  aspell プラグイン

| python-dev | ≥ 2.5 ^(4)^ | |
  python プラグイン

| libperl-dev | | |
  perl プラグイン

| ruby2.1-dev | ≥ 1.8 | |
  ruby プラグイン

| liblua5.2-dev | | |
  lua プラグイン

| tcl-dev | ≥ 8.5 | |
  tcl プラグイン

| guile-2.0-dev | ≥ 2.0 | |
  guile (scheme) プラグイン

| libv8-dev | ≤ 3.24.3 | |
  javascript プラグイン

| asciidoc | ≥ 8.5.0 | |
  man ページと文書のビルド

| source-highlight | | |
  文書中のソースに対するシンタックスハイライト

| xsltproc, docbook-xml, docbook-xsl | | |
  man ページのビルド

| libcpputest-dev | ≥ 3.4 | |
  テストの実行

| C++ コンパイラ | | |
  テスト実行、javascript プラグイン
|===

[NOTE]
^(1)^ Debian GNU/Linux ディストリビューションにおけるパッケージ名です。
他のディストリビューションではバージョンとパッケージ名が異なるかもしれません。 +
^(2)^ WeeChat は libncurses5-dev でもコンパイル可能ですが、これは推奨*されません*
(ワイドキャラクタの表示にバグを生じるでしょう)。 +
^(3)^ IRC SASL 認証で ECDSA-NIST256P-CHALLENGE を使うには、Gnutls
バージョン 3.0.21 以上が必要です。 +
^(4)^ Python はバージョン 2.7 をお勧めします (全てのスクリプトはバージョン 2.7
で正しく動きますが、バージョン 2.6 以下または 3.0 以上では正しく動きません)。

[[compile_with_cmake]]
==== cmake によるコンパイル

* システムディレクトリにインストールする場合 ('root' 特権が必要です):

----
$ mkdir build
$ cd build
$ cmake ..
$ make
% make install    (as root)
----

* 任意のディレクトリにインストールする場合:

----
$ mkdir build
$ cd build
$ cmake .. -DPREFIX=/path/to/directory
$ make
$ make install
----

cmake に対するオプションを指定するには、以下のフォーマットを使ってください: "-DOPTION=VALUE".

よく利用されるオプションのリスト:

[width="100%",cols="2m,2,5m,12",options="header"]
|===
| オプション | 値 | デフォルト値 | 説明

| CMAKE_BUILD_TYPE | `Debug`, `Release`, `RelWithDebInfo`, `MinSizeRel` | |
  ビルド形式: WeeChat の開発版を使っている場合は
  `Debug` (または `RelWithDebInfo`) を推奨します。

| PREFIX | directory | /usr/local |
  WeeChat をインストールするディレクトリ。

| WEECHAT_HOME | directory | ~/.weechat |
  WeeChat 実行時のホームディレクトリ。

| CA_FILE | file | /etc/ssl/certs/ca-certificates.crt |
  認証局を含むファイル。これは
  <<option_weechat.network.gnutls_ca_file,weechat.network.gnutls_ca_file>>
  オプションのデフォルト値です。

| ENABLE_ALIAS | `ON`, `OFF` | ON |
  <<alias_plugin,Alias プラグイン>>のコンパイル。

| ENABLE_ASPELL | `ON`, `OFF` | ON |
  <<aspell_plugin,Aspell プラグイン>>のコンパイル。

| ENABLE_CHARSET | `ON`, `OFF` | ON |
  <<charset_plugin,Charset プラグイン>>のコンパイル。

| ENABLE_MAN | `ON`, `OFF` | OFF |
  man ページのコンパイル。

| ENABLE_DOC | `ON`, `OFF` | OFF |
  文書のコンパイル
  (コンパイルには時間がかかります。文書を含めたバイナリパッケージをビルドする場合、オンラインで文書を見ることができない場合だけに推奨します)。

| ENABLE_ENCHANT | `ON`, `OFF` | OFF |
  Enchant と含めた <<aspell_plugin,Aspell プラグイン>>のコンパイル。

| ENABLE_EXEC | `ON`, `OFF` | ON |
  <<exec_plugin,Exec プラグイン>>のコンパイル。

| ENABLE_FIFO | `ON`, `OFF` | ON |
  <<fifo_plugin,Fifo プラグイン>>のコンパイル。

| ENABLE_GNUTLS | `ON`, `OFF` | ON |
  Gnutls の有効化 (SSL 用)。

| ENABLE_GUILE | `ON`, `OFF` | ON |
  <<scripts_plugins,Guile プラグイン>> (Scheme) のコンパイル。

| ENABLE_IRC | `ON`, `OFF` | ON |
  <<irc_plugin,IRC プラグイン>>のコンパイル

| ENABLE_JAVASCRIPT | `ON`, `OFF` | ON |
  <<scripts_plugins,Javascript プラグイン>>のコンパイル。

| ENABLE_LARGEFILE | `ON`, `OFF` | ON |
  巨大ファイルのサポート。

| ENABLE_LOGGER | `ON`, `OFF` | ON |
  <<logger_plugin,Logger プラグイン>>のコンパイル。

| ENABLE_LUA | `ON`, `OFF` | ON |
  <<scripts_plugins,Lua プラグイン>>のコンパイル。

| ENABLE_NCURSES | `ON`, `OFF` | ON |
  Ncurses インターフェイスのコンパイル。

| ENABLE_NLS | `ON`, `OFF` | ON |
  NLS の有効化 (翻訳).

| ENABLE_PERL | `ON`, `OFF` | ON |
  <<scripts_plugins,Perl プラグイン>>のコンパイル。

| ENABLE_PYTHON | `ON`, `OFF` | ON |
  <<scripts_plugins,Python プラグイン>>のコンパイル。

| ENABLE_PYTHON3 | `ON`, `OFF` | OFF |
  Python 3 を使った <<scripts_plugins,Python プラグイン>>のコンパイル
  (多くのスクリプトは Python 3 と互換性がないため*非推奨* です)。

| ENABLE_RELAY | `ON`, `OFF` | ON |
  <<relay_plugin,リレープラグイン>>のコンパイル

| ENABLE_RUBY | `ON`, `OFF` | ON |
  <<scripts_plugins,Ruby プラグイン>>のコンパイル

| ENABLE_SCRIPT | `ON`, `OFF` | ON |
  <<scripts_plugins,スクリプトプラグイン>>のコンパイル

| ENABLE_SCRIPTS | `ON`, `OFF` | ON |
  すべての<<scripts_plugins,スクリプトプラグイン>>
  (Python、Perl、Ruby、Lua、Tcl、Guile、Javascript) のコンパイル

| ENABLE_TCL | `ON`, `OFF` | ON |
  <<scripts_plugins,Tcl プラグイン>>のコンパイル

| ENABLE_TRIGGER | `ON`, `OFF` | ON |
  <<trigger_plugin,Trigger プラグイン>>のコンパイル

| ENABLE_XFER | `ON`, `OFF` | ON |
  <<xfer_plugin,Xfer プラグイン>>のコンパイル

| ENABLE_TESTS | `ON`, `OFF` | OFF |
  コンパイルテスト。
|===

その他のオプションは以下のコマンドで確認してください:

----
$ cmake -LA
----

Curses インターフェイスを使う場合は以下のコマンドを使ってください:

----
$ ccmake ..
----

[[compile_with_autotools]]
==== autotools によるコンパイル

[WARNING]
cmake 以外を用いた WeeChat のビルドは公式にサポートされません。cmake
を利用できない場合のみ autotools を使ってください。 +
autotools を用いてビルドする場合、cmake よりも多くの依存パッケージとより長い時間が必要です。

* システムディレクトリにインストールする場合 ('root' 特権が必要です):

----
$ ./autogen.sh
$ mkdir build
$ cd build
$ ../configure
$ make
% make install    (as root)
----

* 任意のディレクトリにインストールする場合:

----
$ ./autogen.sh
$ mkdir build
$ cd build
$ ../configure --prefix=/path/to/directory
$ make
$ make install
----

'configure'
スクリプトに対してオプションを指定することができます、オプションを表示するには以下のコマンドを使ってください:

----
$ ./configure --help
----

[[git_sources]]
=== Git ソース

警告: git ソースを用いる方法は上級者向けです。コンパイルに失敗したり、
不安定な可能性があります。警告しましたよ!

git ソースを入手するには、以下のコマンドを使ってください:

----
$ git clone https://github.com/weechat/weechat.git
----

その後は、ソースパッケージの説明に従ってください
(<<source_package,ソースパッケージ>>を参照)。

[[report_crashes]]
=== クラッシュレポート

WeeChat がクラッシュした場合、または WeeChat
をクラッシュさせる操作を報告する場合、以下の手順に従ってください:

* デバッグを有効化してコンパイル (またはデバック情報を含んだバイナリパッケージをインストール)
* システムの 'core' ファイルを有効化
* gdb のインストール

[[debug_info]]
==== デバッグ情報

cmake でコンパイルする場合:

----
$ cmake .. -DCMAKE_BUILD_TYPE=Debug
----

autotools でコンパイルする場合は、デバックはデフォルトで有効化されています(`--with-debug=1`)。

バイナリパッケージをインストールする場合は、'weechat-dbg' パッケージをインストールしてください。

[[core_files]]
==== Core ファイル

'core' ファイルを有効化するには、<<option_weechat.startup.sys_rlimit,weechat.startup.sys_rlimit>>
オプションを使ってください:

----
/set weechat.startup.sys_rlimit "core:-1"
----

WeeChat バージョン 0.3.8 以下または WeeChat の実行前に core
ファイルを有効化したい場合には、`ulimit` コマンドを使ってください。

Linux で 'bash' シェルを使っている場合、以下の内容を `~/.bashrc` に追加してください:

----
ulimit -c unlimited
----

サイズを指定する場合は:

----
ulimit -c 200000
----

[[gdb_backtrace]]
==== gdb でバックトレースを得る

WeeChat がクラッシュすると、'core' または 'core.12345' ファイルが作られます
('12345' はプロセス番号です)。
このファイルは WeeChat を起動したディレクトリに作られます (これは
WeeChat がインストールされているディレクトリでは*ありません*!)。

例えば、'weechat' が '/usr/bin/' にインストールされ、'core' ファイルが
'/home/xxx/' にある場合、以下のコマンドで gdb を起動してください:

----
gdb /usr/bin/weechat /home/xxx/core
----

gdb の中で `bt full` コマンドを実行するとバックトレースが表示されます。
以下のような出力が得られるはずです:

----
(gdb) set logging file /tmp/crash.txt
(gdb) set logging on
Copying output to /tmp/crash.txt.
(gdb) bt full
#0  0x00007f9dfb04a465 in raise () from /lib/libc.so.6
#1  0x00007f9dfb04b8e6 in abort () from /lib/libc.so.6
#2  0x0000000000437f66 in weechat_shutdown (return_code=1, crash=1)
    at /some_path/src/core/weechat.c:351
#3  <signal handler called>
#4  0x000000000044cb24 in hook_process_timer_cb (arg_hook_process=0x254eb90,
    remaining_calls=<value optimized out>) at /some_path/src/core/wee-hook.c:1364
        hook_process = 0x254eb90
        status = <value optimized out>
#5  0x000000000044cc7d in hook_timer_exec ()
    at /some_path/src/core/wee-hook.c:1025
        tv_time = {tv_sec = 1272693881, tv_usec = 212665}
        ptr_hook = 0x2811f40
        next_hook = 0x0
#6  0x000000000041b5b0 in gui_main_loop ()
    at /some_path/src/gui/curses/gui-curses-main.c:319
        hook_fd_keyboard = 0x173b600
        tv_timeout = {tv_sec = 0, tv_usec = 0}
        read_fds = {fds_bits = {0 <repeats 16 times>}}
        write_fds = {fds_bits = {0 <repeats 16 times>}}
        except_fds = {fds_bits = {0 <repeats 16 times>}}
        max_fd = <value optimized out>
----

このバックトレースを開発者に報告し、
クラッシュを引き起こした動作を伝えてください。

お手伝いに感謝します!

[[debug_running_weechat]]
==== 起動した WeeChat のデバッグ

起動している WeeChat をデバッグするには (例えば WeeChat がフリーズしているような場合)、gdb
の引数にプロセス番号を与えて起動します ('12345' は weechat プロセスの PID に変更してください):

----
gdb /usr/bin/weechat 12345
----

クラッシュが起きた場合と同様に、`bt full` コマンドを使ってください:

----
(gdb) bt full
----

[[usage]]
== 使い方

[[running_weechat]]
=== WeeChat の起動

コマンドライン引数:

include::cmdline_options.ja.asciidoc[]

WeeChat を起動させるには、以下コマンドを実行:

----
$ weechat
----

初めて WeeChat を起動する場合、デフォルトのオプションで設定ファイルが作成されます。
このデフォルト設定ファイルは
'~/.weechat/weechat.conf' です。

WeeChat を設定するにはこのファイルを編集するか、
WeeChat 内で `/set` コマンドにパラメータを付けて設定します
(<<weechat_commands,WeeChat コマンド>>を参照)。

[[screen_layout]]
=== スクリーンレイアウト

WeeChat を起動したターミナルの例:

....
 ▼ "title" バー
┌───────────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel                                   │
│12:52:27   --> | Flashy (flashcode@weechat.org) has joined #test   │@Flashy│
│12:52:27    -- | Nicks #test: [@Flashy @joe +weebot peter]         │@joe   │
│12:52:27    -- | Channel #test: 4 nicks (2 ops, 1 voice, 1 normal) │+weebot│
│12:52:27    -- | Channel created on Tue Jan 27 06:30:17 2009       │peter  │
│12:54:15 peter | hey!                                              │       │
│12:55:01  @joe | hello                                             │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│[12:55] [6] [irc/freenode] 3:#test(+n){4}* [H: 4:#abc(2,5), 6]             │
│[@Flashy(i)] hi peter!█                                                    │
└───────────────────────────────────────────────────────────────────────────┘
 ▲ "status" と "input" バー                               "nicklist" バー ▲
....

スクリーンは以下のエリアから成ります:

* チャットログが表示されるチャットエリア (スクリーンの真ん中)、それぞれの行は:
** 時刻
** プレフィックス ("|" の前)
** メッセージ ("|" の後)
* チャットエリアの周りにあるバー、デフォルトバーは:
** タイトル ('title') バー、チャットエリアの上
** 状態 ('status') バー、チャットエリアの下
** 入力 ('input') バー、状態バーの下
** ニックネームリスト ('nicklist') バー、右端

状態 ('status') バーは以下の初期値を持っています:

[width="100%",cols="^3,^4,10",options="header"]
|===
| アイテム              | 例                    | 説明
| time                  | `[12:55]`             | 時刻
| buffer_last_number    | `[6]`                 | リスト中の最後のバッファ番号
| buffer_plugin         | `[irc/freenode]`      | 現在のバッファのプラグイン (irc プラグインではバッファで利用されている IRC サーバ名を追加できます)
| buffer_number         | `3`                   | 現在のバッファの番号
| buffer_name           | `#test`               | 現在のバッファの名前
| buffer_modes          | `+n`                  | IRC チャンネルモード
| buffer_nicklist_count | `{4}`                 | ニックネームリスト中のニックネームの数
| buffer_zoom           | !                     | `!` はマージされたバッファがズームされている状態 (ズームされたものだけを表示する状態) を示します、空の場合はすべてのマージされたバッファが表示されていることを示します
| buffer_filter         | `*`                   | フィルタ表示: `*` の場合いくつかの行がフィルタされ (隠され) ます、空の場合すべての行が表示されます。
| scroll                | `-MORE(50)-`          | スクロール表示、最後の行が表示されてから追加された行数を含む。
| lag                   | `[Lag: 2.5]`          | 遅延秒表示 (遅延が短い場合は非表示)
| hotlist               | `[H: 4:#abc(2,5), 6]` | 変化のあったバッファのリスト (未読メッセージ) (例では、'#abc' に 2 個のハイライトと 5 個の未読メッセージ、6 番目のバッファに 1 個の未読メッセージがあることを意味します。)
| completion            | `abc(2) def(5)`       | 補完候補の単語リスト、各単語に対して適応される補完候補の数を含む。
|===

入力 ('input') バーは以下の初期値を持っています:

[width="100%",cols="^3,^4,10",options="header"]
|===
| アイテム     | 例                                           | 説明
| input_prompt | `[@Flashy]`                                  | 入力プロンプト、irc の場合: ニックネームとモード (freenode では "+i" モードは不可視状態を意味します)
| away         | `(away)`                                     | 離席状態表示
| input_search | `[Search (~ str,msg)]`                       | 検索インジケータ ("`~`": 大文字小文字を区別しない、"`==`": 大文字小文字を区別する、"`str`": 検索文字列、"`regex`": 検索正規表現、"`msg`": メッセージ部分から検索、"`pre`": プレフィックス部分から検索、"`pre\|msg`": プレフィックス部分とメッセージ部分から検索)
| input_paste  | `[Paste 7 lines ? [ctrl-Y] Yes [ctrl-N] No]` | 行をペーストする場合にユーザへ行われる質問
| input_text   | `hi peter!`                                  | 入力テキスト
|===

その他の利用可能なアイテム (デフォルトではバーで使われていない):

[width="100%",cols="^3,^4,10",options="header"]
|===
| アイテム          | 例                  | 説明
| aspell_dict       | `fr,en`             | 現在のバッファにおけるスペリング辞書
| aspell_suggest    | `print,prone,prune` | カーソル下の単語に対するスペリング候補 (スペルが間違っている場合)
| buffer_count      | `10`                | 開いているバッファの総数
| buffer_short_name | `#test`             | 現在のバッファの短い名前
| irc_channel       | `#test`             | 現在の IRC チャンネル名
| irc_nick_modes    | `@`                 | 自分のニックネームに対する IRC モード
| mouse_status      | `M`                 | マウスの状態 (マウスが無効化されている場合は空文字列)
| window_number     | `2`                 | 現在のウィンドウ番号
|===

[[buffers_and_windows]]
=== バッファとウィンドウ

'バッファ' は番号、名前、表示された行
(とその他の情報) で構成されています。

バッファの例:

* コアバッファ (動時にy WeeChat が作成、閉じることはできない)
* irc サーバ (サーバからのメッセージを表示)
* irc チャンネル
* irc プライベート

'window' はバッファを表示するスクリーンエリアのことです。
スクリーンを複数のウィンドウに分割することができます。

それぞれのウィンドウは 1 つのバッファを表示します。バッファは隠したり
(ウィンドウに表示しない)、複数のウィンドウに表示することできます。

水平方向分割の例 (`/window splith`):

....
                          ▼ ウィンドウ #2 (バッファ #4)
┌───────────────────────────────────────────────────────────────────────────┐
│Welcome to #abc                                                            │
│12:55:12     Max | hi                                              │@Flashy│
│12:55:20 @Flashy | hi Max!                                         │Max    │
│12:55:32     Max | how are you?                                    │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│[12:55] [6] [irc/freenode] 4:#abc(+n){2}                                   │
│[@Flashy]                                                                  │
│───────────────────────────────────────────────────────────────────────────│
│Welcome to #test                                                           │
│12:54:15 peter | hey!                                              │@Flashy│
│12:55:01  @joe | hello                                             │@joe   │
│                                                                   │+weebot│
│                                                                   │peter  │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│[12:55] [6] [irc/freenode] 3:#test(+n){4}                                  │
│[@Flashy] hi peter!█                                                       │
└───────────────────────────────────────────────────────────────────────────┘
                          ▲ ウィンドウ #1 (バッファ #3)
....

垂直方向分割の例 (`/window splitv`):

....
┌───────────────────────────────────────────────────────────────────────────┐
│Welcome to #test                     │Welcome to #abc                      │
│12:54:15 peter | hey!        │@Flashy│12:55:12     Max | hi        │@Flashy│
│12:55:01  @joe | hello       │@joe   │12:55:20 @Flashy | hi Max!   │Max    │
│                             │+weebot│                             │       │
│                             │peter  │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│[12:55] [irc/oftc] 3:#test(+n){4}    │[12:55] [irc/oftc] 4:#abc(+n){2}     │
│[@Flashy] hi peter!█                 │[@Flashy]                            │
└───────────────────────────────────────────────────────────────────────────┘
      ▲ ウィンドウ #1 (バッファ #3)         ▲ ウィンドウ #2 (バッファ #4)
....

垂直方向 + 水平方向分割の例:

....
                                            ▼ ウィンドウ #3 (バッファ #5)
┌───────────────────────────────────────────────────────────────────────────┐
│Welcome to #test                     │Welcome to #def                      │
│12:54:15 peter | hey!        │@Flashy│12:55:42 @Flashy | hi        │@Flashy│
│12:55:01  @joe | hello       │@joe   │12:55:56    alex | hi Flashy │alex   │
│                             │+weebot│                             │       │
│                             │peter  │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │[12:55] [irc/oftc] 5:#def(+n){2}     │
│                             │       │[@Flashy]                            │
│                             │       │─────────────────────────────────────│
│                             │       │Welcome to #abc                      │
│                             │       │12:55:12     Max | hi        │@Flashy│
│                             │       │12:55:20 @Flashy | hi Max!   │Max    │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│                             │       │                             │       │
│[12:55] [irc/oftc] 3:#test(+n){4}    │[12:55] [irc/oftc] 4:#abc(+n){2}     │
│[@Flashy] hi peter!█                 │[@Flashy]                            │
└───────────────────────────────────────────────────────────────────────────┘
      ▲ ウィンドウ #1 (バッファ #3)         ▲ ウィンドウ #2 (バッファ #4)
....

[[bars]]
=== バー

'バー' とは任意のテキストを含めることができるチャットエリア以外の場所です。

バーオプションは `weechat.bar.name.option` オプションで設定します。ここで
`name` はバーの名前、`option` はこのバーのオプション名です。

バーオプションのリスト:

[width="100%",cols="2m,2,10",options="header"]
|===
| オプション名 | 値 | 説明

| type | `root`、`window` |
  `root` 型のバーは画面に (全てのウィンドウの外に) 1 回だけ表示されます。デフォルトでは
  root バーはありませんが、'buffers.pl' スクリプトが作成する 'buffers' バー
  (バッファのリストを含むサイドバー) が例の 1 つです。 +
  `window` 型のバーは各ウィンドウに対して表示されます。例えば (`/window splith`
  や `/window splitv` で) 画面を 1 回分割する場合、それぞれのウィンドウにバーが
  1 つ表示されます。4 つのデフォルトバー ('title'、'status'、'input'、'nicklist')
  は `window` 型のバーです。

| position | `top`、`bottom`、`left`、`right` |
  バーの位置: チャットエリアの上、下、左、右。

| priority | 0 以上の整数 |
  バーの表示優先度:
  型と位置が同じ複数のバーを画面に表示する順番に利用される。 +
  バーは画面の端から中心に向かって表示される。高い優先度を持つバーが先に
  (画面の端に近い側に) 表示される。 +
  例: 優先度 1000 の 'input' バーは優先度 500 の 'status'
  バーよりも先に表示される。

| size | 0 以上の整数 |
  バーのサイズ:
  位置が右/左の場合は列数、位置が上/下の場合は行数。値が `0`
  の場合は自動 (バーのサイズはバーの内容を基に計算される)。

| size_max | 0 以上の整数 |
  バーの最大サイズ、`0` = 制限無し (このオプションは
  `size` = `0` の場合のみ使われる)。

| color_bg | 色 |
  バーのデフォルトの背景色

| color_fg | 色 |
  バーのデフォルトのテキスト色

| color_delim | 色 |
  バーの区切り文字の色

| hidden | `on`、`off` |
  このオプションが `on` の場合、バーは表示されません。 +
  注意: このオプションを変更する代わりに、`/bar` コマンドを使うと便利です。例:
  `/bar toggle nicklist` (<<command_weechat_bar,/bar>> コマンドを参照)。

| separator | `on`、`off` |
  このオプションが `on` の場合、セパレータ (区切り線)
  がバー同士またはバーとチャットエリアの間に表示されます。

| items | 文字列 |
  'items' のリスト (詳細は<<bar_items,アイテム>>を参照)。

| filling_left_right | `horizontal`、`vertical`、`columns_horizontal`、`columns_vertical` |
  位置が `left` または `right` のバーに対するフィリングタイプ
  (詳細は<<bar_filling,フィリング>>を参照)。

| filling_top_bottom | `horizontal`、`vertical`、`columns_horizontal`、`columns_vertical` |
  位置が `top` または `bottom` のバーに対するフィリングタイプ
  (詳細は<<bar_filling,フィリング>>を参照)。

| conditions | 文字列 |
  バーを表示する状態
 (詳細は<<bar_conditions,状態>>を参照)。
|===

[[bar_items]]
==== アイテム

'items' オプションはバーアイテムをコンマ (画面上のアイテム同士に間隔を空ける)
または "+" (間隔を空けない) で区切った文字列。

バーアイテムのリストは `/bar listitems` コマンドで表示されます。

アイテム名の前または後に文字を表示させることができます (英数字以外の文字、"-"
または "_")。この文字はバー ('color_delim' オプション)
で定義された区切り文字の色をつけてアイテムの前または後に表示されます。

アイテムを含むバーの例 "[time],buffer_number+:+buffer_plugin+.+buffer_name":

....
┌───────────────────────────────────────────────────────────────────────────┐
│[12:55] 3:irc/freenode.#weechat                                            │
└───────────────────────────────────────────────────────────────────────────┘
....

特殊構文を使うことで、バーアイテム: "@buffer:item"
("buffer" はバッファの完全な名前、"item" はバーアイテムの名前)
を表示する際に強制的に指定されたバッファを利用することが可能です。

これはルートバーに現在のウィンドウで表示されない (またはどこにも表示されない)
特定のバッファのアイテムを表示させる際に便利です。

例: bitlbee のニックネームリストをルートバーに表示させる
(バーが 'bitlist' で bitlbee サーバが 'bitlbee' の場合):

----
/set weechat.bar.bitlist.items "@irc.bitlbee.&bitlbee:buffer_nicklist"
----

[[bar_filling]]
==== フィリング

フィリングタイプには 4 つの種類があります:

* `horizontal`:
  左から右に向かってアイテムを水平に表示。アイテム内に改行がある場合、空白を行区切りに利用します。
* `vertical`:
  上から下に向かってアイテムを表示。アイテム内に改行がある場合、改行を行区切りに利用します。
* `columns_horizontal`:
  テキストを左寄せして、列形式でアイテムを表示。最初のアイテムは左上、2
  番目は同じ行の 1 列右側。
* `columns_vertical`: テキストを左寄せして、列形式でアイテムを表示。最初のアイテムは左上、2
  番目は同じ列の 1 行下側。

デフォルトバーである 'title'、'status'、'input' は
'horizontal' フィリング、'nicklist' は 'vertical' フィリング。

'nicklist' バーに対するフィリングの例:

....
┌───────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel                               │
│12:54:15 peter | hey!                                         │@carl   │
│12:55:01  +Max | hello                                        │@jessika│
│                                                              │@maddy  │
│                                                              │%Diego  │
│                                                              │%Melody │
│                                                              │+Max    │
│                                                              │ celia  │
│                                                              │ Eva    │
│                                                              │ freddy │
│                                                              │ Harold^│
│                                                              │ henry4 │
│                                                              │ jimmy17│
│                                                              │ jodie ▼│
│[12:55] [6] [irc/freenode] 3:#test(+n){24}                             │
│[@carl] █                                                              │
└───────────────────────────────────────────────────────────────────────┘
                                     filling_left_right = vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel                               │
│12:54:15 peter | hey!                                │@carl     lee    │
│12:55:01  +Max | hello                               │@jessika  louise │
│                                                     │@maddy    mario  │
│                                                     │%Diego    mark   │
│                                                     │%Melody   peter  │
│                                                     │+Max      Rachel │
│                                                     │ celia    richard│
│                                                     │ Eva      sheryl │
│                                                     │ freddy   Vince  │
│                                                     │ Harold^  warren │
│                                                     │ henry4   zack   │
│                                                     │ jimmy17         │
│                                                     │ jodie           │
│[12:55] [6] [irc/freenode] 3:#test(+n){24}                             │
│[@carl] █                                                              │
└───────────────────────────────────────────────────────────────────────┘
                             filling_left_right = columns_vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│@carl    %Diego    celia    Harold^  jodie    mario    Rachel   Vince  │
│@jessika %Melody   Eva      henry4   lee      mark     richard  warren │
│@maddy   +Max      freddy   jimmy17  louise   peter    sheryl   zack   │
│───────────────────────────────────────────────────────────────────────│
│                                                                       │
        filling_top_bottom = columns_vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│@carl    @jessika @maddy   %Diego   %Melody  +Max      celia    Eva    │
│ freddy   Harold^  henry4   jimmy17  jodie    lee      louise   mario  │
│ mark     peter    Rachel   richard  sheryl   Vince    warren   zack   │
│───────────────────────────────────────────────────────────────────────│
│                                                                       │
      filling_top_bottom = columns_horizontal ▲
....

[[bar_conditions]]
==== 状態

'conditions'
オプションはバーを表示するか否かを評価する文字列です。

文字列は以下のいずれか:

* 'active': 非アクティブ状態のウィンドウ
* 'inactive': 非アクティブ状態のウィンドウ
* 'nicklist': ニックネームリストが含まれるバッファのウィンドウ
* 式: ブール値として評価
  (<<command_weechat_eval,/eval>> コマンドを参照)

式に使える変数は以下:

* `${active}`: ウィンドウがアクティブ状態の時に真
* `${inactive}`: ウィンドウが非アクティブ状態の時に真
* `${nicklist}`: ウィンドウに表示されるバッファがニックネームリストの場合に真。

式に使えるポインタは以下:

* `${window}`: 状態が評価されたウィンドウ
* `${buffer}`: 状態が評価されたウィンドウのバッファ

ニックネームリストを持ち、ウィンドウ幅が 100
より大きい全てのバッファにニックネームリストバーを表示する例:

----
/set weechat.bar.nicklist.conditions "${nicklist} && ${window.win_width} > 100"
----

上と同じだが、'&bitlbee' バッファでは常にニックネームリストを表示
(ウィンドウ幅が狭くても):

----
/set weechat.bar.nicklist.conditions "${nicklist} && (${window.win_width} > 100 || ${buffer.full_name} == irc.bitlbee.&bitlbee)"
----

[[bare_display]]
=== 最小限表示

"最小限表示" と呼ばれる特殊な表示状態を使うことで、(マウスを使って) 長い
URL を簡単にクリックしたり、テキストを簡単に選択できるようになっています。

最小限表示は以下の機能を持っています:

* 現在のバッファの内容だけを表示: 分割ウィンドウやバー等
  (タイトル、ニックネームリスト、状態、入力、...) も表示しない
* WeeChat マウスサポートを無効化 (有効化されていた場合):
  ターミナルでやるのと同じように URL をクリックしたりテキストを選択できます
* ncurses を使わない、このため URL を行の最後で分断されることがなくなります。

最小限表示を有効化するデフォルトキーは key[alt-l] で、終了するには同じキーを押してください
(また、デフォルトでは入力が変更された場合に最小限表示を終了します、<<option_weechat.look.bare_display_exit_on_input,weechat.look.bare_display_exit_on_input>>
オプションを参照)。

<<option_weechat.look.bare_display_time_format,weechat.look.bare_display_time_format>>
オプションを使えば、時間フォーマットを変更することも可能です。

<<command_weechat_window,/window>>
コマンドを使えば、指定秒後に最小限表示を有効化することができます。

WeeChat が以下のような表示状態の場合:

....
┌───────────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel                                   │
│12:52:27   --> | Flashy (flashcode@weechat.org) has joined #test   │@Flashy│
│12:52:27    -- | Nicks #test: [@Flashy @joe +weebot peter]         │@joe   │
│12:52:27    -- | Channel #test: 4 nicks (2 ops, 1 voice, 1 normal) │+weebot│
│12:52:27    -- | Channel created on Tue Jan 27 06:30:17 2009       │peter  │
│12:54:15 peter | hey!                                              │       │
│12:55:01  @joe | peter: hook_process: https://weechat.org/files/do │       │
│               | c/devel/weechat_plugin_api.en.html#_weechat_hook_ │       │
│               | process                                           │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│                                                                   │       │
│[12:55] [6] [irc/freenode] 3:#test(+n){4}* [H: 4:#abc(2,5), 6]             │
│[@Flashy(i)] hi peter!█                                                    │
└───────────────────────────────────────────────────────────────────────────┘
....

最小限表示では以下の様に表示されます:

....
┌───────────────────────────────────────────────────────────────────────────┐
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
│12:52 --> Flashy (flashcode@weechat.org) has joined #test                  │
│12:52 -- Nicks #test: [@Flashy @joe +weebot peter]                         │
│12:52 -- Channel #test: 4 nicks (2 ops, 1 voice, 1 normal)                 │
│12:52 -- Channel created on Tue Jan 27 06:30:17 2009                       │
│12:54 <peter> hey!                                                         │
│12:55 <@joe> peter: hook_process: https://weechat.org/files/doc/devel/weech│
│at_plugin_api.en.html#_weechat_hook_process                                │
└───────────────────────────────────────────────────────────────────────────┘
....

このため、ターミナルで問題なく 'joe' さんからの URL をクリックできます
(もちろん、使用中のターミナルで URL をクリックできるように設定されていなければいけませんが)。

[[notify_levels]]
=== 通知レベル

バッファに表示された各メッセージには 4 つのレベルが設定されています。レベルの低いものから順に:

* 'low': 重要性の低いメッセージ (例えば irc の参加/退出/終了メッセージ)
* 'message': ユーザからのメッセージ
* 'private': プライベートバッファのメッセージ
* 'highlight': ハイライトされたメッセージ

それぞれのバッファには通知レベルが設定されており、
通知レベルに対応するメッセージの数がホットリストに表示されます。

デフォルトの通知レベルは
<<option_weechat.look.buffer_notify_default,weechat.look.buffer_notify_default>> オプションで指定し、
デフォルトは 'all' です。

[width="50%",cols="3m,10",options="header"]
|===
| 通知レベル   | ホットリストに追加されるメッセージのレベル
| none         | (無効)
| highlight    | 'highlight' + 'private'
| message      | 'highlight' + 'private' + 'message'
| all          | 'highlight' + 'private' + 'message' + 'low'
|===

通知レベルはバッファグループに対して設定することも可能で、例えば
irc サーバ "freenode" に含まれる全てのバッファに対して設定する場合:

----
/set weechat.notify.irc.freenode message
----

"#weechat" チャンネルだけに対して、通知レベルを 'highlight' に設定する場合:

----
/set weechat.notify.irc.freenode.#weechat highlight
----

`/buffer` コマンドで、あるバッファに対する通知レベルを設定できます:

----
/buffer notify highlight
----

[[key_bindings]]
=== デフォルトのキー割り当て

[[key_bindings_command_line]]
==== コマンドライン用のキー

[width="100%",cols="^.^3,.^10,.^5",options="header"]
|===
| キー            | 説明 | コマンド
| key[←]       .2+| コマンドラインで前の文字に移動 .2+| `/input move_previous_char`
| key[ctrl-b]
| key[→]       .2+| コマンドラインで次の文字に移動 .2+| `/input move_next_char`
| key[ctrl-f]
| key[ctrl-←]  .2+| コマンドラインで前の単語に移動 .2+| `/input move_previous_word`
| key[alt-b]
| key[ctrl-→]  .2+| コマンドラインで次の単語に移動 .2+| `/input move_next_word`
| key[alt-f]
| key[Home]    .2+| コマンドラインで行頭に移動 .2+| `/input move_beginning_of_line`
| key[ctrl-a]
| key[End]     .2+| コマンドラインで行末に移動 .2+| `/input move_end_of_line`
| key[ctrl-e]
| key[ctrl-c,b]   | テキストを太字化するコードの挿入 | `/input insert \x02`
| key[ctrl-c,c]   | テキストに色をつけるコードの挿入 | `/input insert \x03`
| key[ctrl-c,i]   | テキストをイタリック体にするコードの挿入 | `/input insert \x1D`
| key[ctrl-c,o]   | テキスト色のリセットを行うコードの挿入 | `/input insert \x0F`
| key[ctrl-c,v]   | テキスト色の反転を行うコードの挿入 | `/input insert \x16`
| key[ctrl-c,_]   | テキストに下線を引くコードの挿入 | `/input insert \x1F`
| key[Del]     .2+| コマンドラインで次の文字を削除 .2+| `/input delete_next_char`
| key[ctrl-d]
| key[Backsp.] .2+| コマンドラインで前の文字を削除 .2+| `/input delete_previous_char`
| key[ctrl-h]
| key[ctrl-k]     | コマンドラインでカーソルより後の文字列を削除 (削除された文字列はクリップボードに保存) | `/input delete_end_of_line`
| key[ctrl-r]     | バッファ中の履歴からテキスト検索 (<<key_bindings_search_context,検索モード用のキー>>を参照) | `/input search_text`
| key[ctrl-t]     | 文字の入れ替え | `/input transpose_chars`
| key[ctrl-u]     | コマンドラインでカーソルより前の文字列を削除 (削除された文字列はクリップボードに保存) | `/input delete_beginning_of_line`
| key[ctrl-w]     | コマンドラインで前の単語を削除 (削除された文字列はクリップボードに保存) | `/input delete_previous_word`
| key[ctrl-y]     | クリップボードの内容を貼り付け | `/input clipboard_paste`
| key[ctrl-_]     | コマンドラインの最後の動作をやり直す | `/input undo`
| key[alt-_]      | コマンドラインの最後の動作を取り消す | `/input redo`
| key[Tab]        | コマンドやニックネームを補完 (再度 key[Tab] することで次の補完候補を表示) | `/input complete_next`
| key[shift-Tab]  | 補完候補が無い場合: 部分補完を行う、補完候補が有る場合: 前の補完候補を表示 | `/input complete_previous`
| key[Enter]   .3+| コマンドを実行するか、メッセージを送信する (検索モードの場合: 検索の終了) .3+| `/input return`
| key[ctrl-j]
| key[ctrl-m]
| key[↑]          | 前のコマンド/メッセージを呼び出す (検索モードの場合: 上方向に検索) | `/input history_previous`
| key[↓]          | 次のコマンド/メッセージを呼び出す (検索モードの場合: 下方向に検索) | `/input history_next`
| key[ctrl-↑]     | グローバル履歴から前のコマンド/メッセージを呼び出す (すべてのバッファに対して共通の履歴) | `/input history_global_previous`
| key[ctrl-↓]     | グローバル履歴から次のコマンド/メッセージを呼び出す (すべてのバッファに対して共通の履歴) | `/input history_global_next`
| key[alt-d]      | コマンドラインで次の単語を削除 (削除された文字列はクリップボードに保存) | `/input delete_next_word`
| key[alt-k]      | キー入力を奪って、コマンドラインにコード (キーが割り当てられていればコマンド) を入力 | `/input grab_key_command`
| key[alt-r]      | コマンドラインへの入力をすべて削除 | `/input delete_line`
| key[alt-s]      | aspell の有効無効を切り替え | `/mute aspell toggle`
|===

[[key_bindings_buffers_windows]]
==== バッファ / ウィンドウ用のキー

[width="100%",cols="^.^3,.^10,.^5",options="header"]
|===
| キー               | 説明 | コマンド
| key[ctrl-l]        | 全ウィンドウを再描画 | `/window refresh`
| key[ctrl-s,ctrl-u] | すべてのバッファに未読マークをセット | `/input set_unread`
| key[ctrl-x]        | 同じ番号を持つバッファにアタッチされていた場合、現在のバッファに移動 | `/input switch_active_buffer`
| key[alt-x]         | マージされたバッファに再ズーム (key[alt-x]: 全てのマージされたバッファを表示) | `/input zoom_merged_buffer`
| key[PgUp]          | バッファ履歴を 1 ページ分上方向にスクロール | `/window page_up`
| key[PgDn]          | バッファ履歴を 1 ページ分下方向にスクロール | `/window page_down`
| key[alt-PgUp]      | バッファ履歴を数行分上方向にスクロール | `/window scroll_up`
| key[alt-PgDn]      | バッファ履歴を数行分下方向にスクロール | `/window scroll_down`
| key[alt-Home]      | バッファ履歴を最初までスクロール | `/window scroll_top`
| key[alt-End]       | バッファ履歴を最後までスクロール | `/window scroll_bottom`
| key[alt-←]      .4+| 前のバッファに移動 .4+| `/buffer -1`
| key[alt-↑]
| key[ctrl-p]
| key[F5]
| key[alt-→]      .4+| 後のバッファに移動 .4+| `/buffer +1`
| key[alt-↓]
| key[ctrl-n]
| key[F6]
| key[F7]            | ウィンドウを前に移動 | `/window -1`
| key[F8]            | ウィンドウを後に移動 | `/window +1`
| key[F9]            | バッファタイトルを左方向にスクロール | `/bar scroll title * -30%`
| key[F10]           | バッファタイトルを右方向にスクロール | `/bar scroll title * +30%`
| key[F11]           | ニックネームリストを上方向にスクロール | `/bar scroll nicklist * -100%`
| key[F12]           | ニックネームリストを下方向にスクロール | `/bar scroll nicklist * +100%`
| key[alt-F11]       | ニックネームリストを一番上にスクロール | `/bar scroll nicklist * b`
| key[alt-F12]       | ニックネームリストを一番下にスクロール | `/bar scroll nicklist * e`
| key[alt-a]         | 変更のあった次のバッファに移動 (優先順位: ハイライト、新規メッセージ、その他) | `/input jump_smart`
| key[alt-h]         | ホットリスト (他のバッファにあった変更通知リスト) を消去 | `/input hotlist_clear`
| key[alt-j,alt-f]   | 最初のバッファに移動 | `/buffer -`
| key[alt-j,alt-l]   | 最後のバッファに移動 | `/buffer +`
| key[alt-j,alt-r]   | IRC 生バッファに移動 | `/server raw`
| key[alt-j,alt-s]   | IRC サーババッファに移動 | `/server jump`
| key[alt-0...9]     | 番号のバッファに移動 (0 = 10) | `/buffer *N`
| key[alt-j,01...99] | 番号のバッファに移動 | `/buffer NN`
| key[alt-l]         | 最小限表示の有効無効を切り替え | `/window bare`
| key[alt-m]         | マウスの有効無効を切り替え | `/mouse toggle`
| key[alt-n]         | 次のハイライトまでスクロール | `/window scroll_next_highlight`
| key[alt-p]         | 前のハイライトまでスクロール | `/window scroll_previous_highlight`
| key[alt-u]         | バッファを最初の未読行までスクロール | `/window scroll_unread`
| key[alt-w,alt-↑]   | 上のウィンドウに移動 | `/window up`
| key[alt-w,alt-↓]   | 下のウィンドウに移動 | `/window down`
| key[alt-w,alt-←]   | 左のウィンドウに移動 | `/window left`
| key[alt-w,alt-→]   | 右のウィンドウに移動 | `/window right`
| key[alt-w,alt-b]   | すべてのウィンドウサイズを均等に | `/window balance`
| key[alt-w,alt-s]   | 2 つのウィンドウを入れ替え | `/window swap`
| key[alt-z]         | 現在のウィンドウを最大化 (再度 key[alt-z] することで: 最初のウィンドウ状態に戻す、最大化前の状態) | `/window zoom`
| key[alt-]key[<]    | バッファ訪問履歴で前のバッファに移動 | `/input jump_previously_visited_buffer`
| key[alt-]key[>]    | バッファ訪問履歴で次のバッファに移動 | `/input jump_next_visited_buffer`
| key[alt-/]         | 最後に表示したバッファに移動 (バッファ移動前に表示していたウィンドウ) | `/input jump_last_buffer_displayed`
| key[alt-=]         | フィルタの有効無効を切り替え | `/filter toggle`
| key[alt--]         | 現在のバッファのフィルタの有効無効を切り替え | `/filter toggle @`
|===

[[key_bindings_search_context]]
==== "検索" モード用のキー

以下のキーは "検索" モード (バッファ内のテキスト検索用に
key[ctrl-r] が押された状態) でのみ有効です。

[width="100%",cols="^.^3,.^10,.^5",options="header"]
|===
| キー          | 説明 | コマンド
| key[ctrl-r]   | 検索タイプを切り替え: 文字列 (デフォルト)、正規表現 | `/input search_switch_regex`
| key[alt-c]    | 大文字小文字を区別して検索 | `/input search_switch_case`
| key[Tab]      | 検索範囲: メッセージ (デフォルト)、プレフィックス、プレフィックスとメッセージ | `/input search_switch_where`
| key[↑]        | 前のキーワードで検索 | `/input search_previous`
| key[↓]        | 次のキーワードで検索 | `/input search_next`
| key[Enter] .3+| 検索を終了 .3+| `/input search_stop`
| key[ctrl-j]
| key[ctrl-m]
|===

[[key_bindings_cursor_context]]
==== "カーソル" モード用のキー

以下のキーは "カーソル" モード (スクリーン上でカーソルを自由に動かせる状態) でのみ有効です。

[width="100%",cols="^.^3,^.^3,.^10,.^8",options="header"]
|===
| キー          | エリア            | 説明 | コマンド
| key[↑]        | -                 | カーソルを上の行に移動 | `/cursor move up`
| key[↓]        | -                 | カーソルを下の行に移動 | `/cursor move down`
| key[←]        | -                 | カーソルを左の列に移動 | `/cursor move left`
| key[→]        | -                 | カーソルを右の列に移動 | `/cursor move right`
| key[alt-↑]    | -                 | カーソルを上のエリアに移動 | `/cursor move area_up`
| key[alt-↓]    | -                 | カーソルを下のエリアに移動 | `/cursor move area_down`
| key[alt-←]    | -                 | カーソルを左のエリアに移動 | `/cursor move area_left`
| key[alt-→]    | -                 | カーソルを右のエリアに移動 | `/cursor move area_right`
| key[m]        | チャット          | メッセージを引用 | `hsignal:chat_quote_message;/cursor stop`
| key[q]        | チャット          | プレフィックスとメッセージを引用 | `hsignal:chat_quote_prefix_message;/cursor stop`
| key[Q]        | チャット          | 時間、プレフィックス、メッセージを引用 | `hsignal:chat_quote_time_prefix_message;/cursor stop`
| key[b]        | ニックネームリスト| ニックネームをバンする | `/window ${_window_number};/ban ${nick}`
| key[k]        | ニックネームリスト| ニックネームをキックする | `/window ${_window_number};/kick ${nick}`
| key[K]        | ニックネームリスト| ニックネームをバンとキックする | `/window ${_window_number};/kickban ${nick}`
| key[q]        | ニックネームリスト| ニックネームに対するクエリを開く | `/window ${_window_number};/query ${nick};/cursor stop`
| key[w]        | ニックネームリスト| ニックネームに対して whois を行う | `/window ${_window_number};/whois ${nick}`
| key[Enter] .3+| -              .3+| カーソルモードを終了 .3+| `/cursor stop`
| key[ctrl-j]
| key[ctrl-m]
|===

[[key_bindings_mouse_context]]
==== "マウス" モード用のキー

以下のキーは "マウス" モード (マウスイベントが発生したとき) でのみ有効です。

[width="100%",cols="^.^3,^.^3,^.^3,.^10,.^8",options="header"]
|===
| ボタン^(1)^ | ジェスチャー| エリア| 説明 | コマンド
| ◾◽◽         | -            | チャット                      | ウィンドウに移動 | `/window ${_window_number}`
| ◾◽◽         | 左           | チャット                      | 前のバッファに移動 | `/window ${_window_number};/buffer +1`
| ◾◽◽         | 右           | チャット                      | 次のバッファに移動 | `/window ${_window_number};/buffer +1`
| ◾◽◽         | 左 (長く)    | チャット                      | 最初のバッファに移動 | `/window ${_window_number};/buffer 1`
| ◾◽◽         | 右 (長く)    | チャット                      | 最後のバッファに移動 | `/window ${_window_number};/input jump_last_buffer`
| ◾◽◽         | -            | チャット (スクリプトバッファ) | スクリプトバッファで行選択 | `/script go ${_chat_line_y}`
| ◽◽◾         | -            | チャット (スクリプトバッファ) | スクリプトのインストール `/ 削除 | /script go ${_chat_line_y};/script installremove ${script_name_with_extension}`
| ⇑           | -            | チャット                      | バッファ履歴を上方向にスクロール | `/window scroll_up -window ${_window_number}`
| ⇓           | -            | チャット                      | バッファ履歴を下方向にスクロール | `/window scroll_down -window ${_window_number}`
| ⇑           | -            | チャット (スクリプトバッファ) | スクリプトバッファを 5 行上方向にスクロール | `/script up 5`
| ⇓           | -            | チャット (スクリプトバッファ) | スクリプトバッファで 5 行下方向にスクロール | `/script down 5`
| key[ctrl-]⇑ | -            | チャット                      | 水平左方向にスクロール | `/window scroll_horiz -window ${_window_number} -10%`
| key[ctrl-]⇓ | -            | チャット                      | 水平右方向にスクロール | `/window scroll_horiz -window ${_window_number} +10%`
| ◾◽◽         | 上           | ニックネームリスト            | ニックネームリストを 1 ページ分上方向にスクロール | `/bar scroll nicklist ${_window_number} -100%`
| ◾◽◽         | 下           | ニックネームリスト            | ニックネームリストを 1 ページ分下方向にスクロール | `/bar scroll nicklist ${_window_number} +100%`
| ◾◽◽         | 上 (長く)    | ニックネームリスト            | ニックネームリストの最初に移動 | `/bar scroll nicklist ${_window_number} b`
| ◾◽◽         | 下 (長く)    | ニックネームリスト            | ニックネームリストの最後に移動 | `/bar scroll nicklist ${_window_number} e`
| ◾◽◽         | -            | ニックネームリスト            | ニックネームに対するクエリを開く | `/window ${_window_number};/query ${nick}`
| ◽◽◾         | -            | ニックネームリスト            | ニックネームに対する whois を行う | `/window ${_window_number};/whois ${nick}`
| ◾◽◽         | 左           | ニックネームリスト            | ニックネームをキックする | `/window ${_window_number};/kick ${nick}`
| ◾◽◽         | 左 (長く)    | ニックネームリスト            | ニックネームをキックとバンする | `/window ${_window_number};/kickban ${nick}`
| ◽◽◾         | 左           | ニックネームリスト            | ニックネームをバンする | `/window ${_window_number};/ban ${nick}`
| ◽◽◾         | -            | 入力                          | マウスイベントを奪ってコマンドラインにコードを入力 | `/input grab_mouse_area`
| ⇑           | -            | 任意のバー                    | バーを -20% スクロール | `/bar scroll ${_bar_name} ${_window_number} -20%`
| ⇓           | -            | 任意のバー                    | バーを +20% スクロール | `/bar scroll ${_bar_name} ${_window_number} +20%`
| ◽◾◽         | -            | 任意の場所                    | この場所でカーソルモードを開始 | `/cursor go ${_x},${_y}`
|===

[NOTE]
^(1)^ "⇑" と "⇓" はホイールの上方向回転と下方向回転に対応します。

[[mouse]]
=== マウスサポート

WeeChat はマウスクリックとマウスジェスチャーをサポートしています。
ローカル端末と screen/tmux の有無にかかわらず ssh 接続経由で利用可能です。

[[mouse_enable]]
==== マウスの有効化

起動時にマウスを有効化するには:

----
/set weechat.look.mouse on
----

マウスを有効化するには key[alt-m] を押すか、以下のコマンドを使います:

----
/mouse enable
----

キーにマウスの一時的な無効化を割り当てることができます。 例えば、
key[alt-x] キーにマウスを 10 秒間無効化する機能を割り当てるには:

----
/key bind meta-x /mouse toggle 10
----

WeeChat でマウスが有効化されている場合、key[shift]
修飾キーで選択やクリックができます。これでマウスが無効化されている場合と同じ作業が行えます
(iTerm 等の端末では key[shift] の代わりに key[alt] を使ってください)。

[NOTE]
マウスに関するトラブルがあれば 'WeeChat FAQ' を参照してください。

[[mouse_bind_events]]
==== コマンドに対してマウスイベントを割り当てる

WeeChat はデフォルトマウスイベントの多くを定義しています
(<<key_bindings_mouse_context,"マウス" モード用のキー>>を参照)。

`/key` コマンドで "mouse" コンテキストを指定することで割り当てを追加、変更できます
(詳しい使い方は <<command_weechat_key,/key>> コマンドを参照)。

イベント名には修飾キー (任意)、ボタン/ホイール名、ジェスチャー (任意)
を利用できます。異なるイベントは "-" で分割してください。

修飾キーリスト:

[width="50%",cols="3m,4",options="header"]
|===
| 修飾キー | 説明
| ctrl     | key[ctrl] キー
| alt      | key[alt] キー
| ctrl-alt | key[ctrl-]key[alt] キー
|===

ボタン/ホイールのリスト:

[width="50%",cols="3m,4",options="header"]
|===
| ボタン/ホイール     | 説明
| button1             | 左ボタンクリック
| button2             | 右ボタンクリック
| button3             | 中ボタンクリック (多くの場合ホイールクリック)
| button4 ... button9 | その他のボタンクリック
| wheelup             | ホイール (上方向)
| wheeldown           | ホイール (下方向)
|===

ジェスチャーのリスト (ボタンのみ対応、ホイール未対応):

[width="50%",cols="3m,4",options="header"]
|===
| ジェスチャー       | 距離
| gesture-up         | 3 ... 19
| gesture-up-long    | ≥ 20
| gesture-down       | 3 ... 19
| gesture-down-long  | ≥ 20
| gesture-left       | 3 ... 39
| gesture-left-long  | ≥ 40
| gesture-right      | 3 ... 39
| gesture-right-long | ≥ 40
|===

未完了イベントのリスト (ボタンのみ、プラグイン/スクリプトで便利):

[width="50%",cols="3m,4",options="header"]
|===
| イベント   | 説明
| event-down | マウスボタンが押され、離されていない状態
| event-drag | マウスボタンが押された状態でマウスが動かされた
|===

イベントの表記例:

* `button1`
* `ctrl-button1`
* `button1-gesture-right`
* `button1-event-down`
* `button1-event-drag`
* `alt-button2-gesture-down-long`
* `wheelup`
* `ctrl-alt-wheeldown`
* ...

[TIP]
"mouse" イベントにキーを割り当てる場合、イベント名の最初または最後に `*`
を使うことで複数のイベントにマッチさせることができます。例えば
`button1-gesture-*` は左クリックを利用したすべてのジェスチャーにマッチします。

[TIP]
`/input grab_mouse` コマンドの後にマウスを動かすことでコマンドラインにマウスイベントが入力されます。
これにより対応するイベントを確認できます。

[[command_line]]
=== コマンドライン

WeeChat コマンドライン (ウィンドウの一番下にあります)
はコマンドの実行やバッファにテキストを送信するために利用します。

[[command_line_syntax]]
==== 文法

コマンドは "/" 文字で始まり、コマンドの名前を続けます。
例えば、すべてのオプションを表示するには:

----
/set
----

"/" が最初に無い場合、そのテキストはバッファに送信されます。例えば、'hello'
というテキストをバッファに送信するには:

----
hello
----

"/" 文字から始まるテキストを送信したい場合、は 2 重に "/" をつけます。例えば、'/set'
というテキストを現在のバッファに送信するには:

----
//set
----

[[command_line_colors]]
==== 色コード

IRC 等のプラグインでは、以下の色コードと属性を利用できます
(key[ctrl-c] の後に、オプションとともに以下のキーを押してください):

key[ctrl-c,b]::
    テキストを太字に

key[ctrl-c,c], key[xx]::
    テキスト表示色を `xx` に (以下の色リストを参照)

key[ctrl-c,c], key[xx]key[,]key[yy]::
    テキスト表示色を `xx` に、背景色を `yy` に (以下の色リストを参照)

key[ctrl-c,i]::
    テキストをイタリック体に

key[ctrl-c,o]::
    テキスト表示色と属性をリセット

key[ctrl-c,v]::
    テキストを反転 (テキスト表示色と背景色の入れ替え)

key[ctrl-c,_]::
    テキストに下線を引く

[NOTE]
同じコードで (色コードを入力せずに key[ctrl-c,c]
を使うことで) 属性をキャンセルすることができます。

key[ctrl-c,c] 用の色コード:

include::autogen/user/irc_colors.asciidoc[]

[NOTE]
端末で利用可能なすべての色を表示するには、WeeChat で `/color` を実行した後
key[alt-c] を入力するか、端末で以下のコマンドを実行してください: `weechat --colors`。

例: "こんにちは皆さん!" の "こんにちは" を太字の明るい青、"皆さん"
を下線付きの明るい赤に表示したい場合:

----
^Cc12^Cbこんにちは^Cb^Cc04^C_皆さん^C_^Cc!
----

[NOTE]
irc プラグインでは、<<option_irc.color.mirc_remap,irc.color.mirc_remap>>
を使ってこれらの色を別の色に対応付けることができます。

[[colors]]
=== 色

WeeChat ではバーやチャットエリアにおけるテキスト表示に 256 個の色ペアを利用できます
(この機能を利用するには WeeChat が実行されているターミナルが 256 色表示に対応している必要があります)。

'TERM' 環境変数の値によって、WeeChat
で利用できる色と色ペアに以下の制限があります:

[width="50%",cols="8,>2,>2",options="header"]
|===
| $TERM                                  | 色     | ペア ^(1)^
| "rxvt-unicode", "xterm", ...           |     88 |         256
| "rxvt-256color", "xterm-256color", ... |    256 |       32767
| "screen"                               |      8 |          64
| "screen-256color"                      |    256 |       32767
|===

[NOTE]
^(1)^ 端末が 256 ペア以上の表示をサポートしていても、WeeChat
では ncurses の制限により 256 ペア以上の表示は行えません。

`weechat --colors` を実行するか、`/color` コマンドをin WeeChat
の中で実行することで、色表示の制限を確認できます。

256 色を利用したい場合に推奨される 'TERM' 環境変数の値は:

* screen の中: 'screen-256color'
* screen の外: 'xterm-256color' 、'rxvt-256color' 、'putty-256color' 、...

[NOTE]
'TERM' 環境変数の値に上の値を設定するには、"ncurses-term"
パッケージをインストールする必要があるかもしれません。

screen を使っている場合、'~/.screenrc' に以下の内容を追加してください:

----
term screen-256color
----

'TERM' 変数が間違った値に設定された状態で WeeChat が起動完了している場合は、以下の
2 つのコマンドを使って変数の値を変更してください:

----
/set env TERM screen-256color
/upgrade
----

[[colors_basic]]
==== 基本色

WeeChat における基本色とは:

[width="50%",cols="^3m,8",options="header"]
|===
| 名前         | 色
| default      | デフォルトの端末色 (背景色を透過色とする)
| black        | 黒
| darkgray     | 暗い灰色
| red          | 暗い赤
| lightred     | 明るい赤
| green        | 暗い緑色
| lightgreen   | 明るい緑色
| brown        | 茶色
| yellow       | 黄色
| blue         | 暗い青
| lightblue    | 明るい青
| magenta      | 暗い赤紫色
| lightmagenta | 明るい赤紫色
| cyan         | 暗い青緑色
| lightcyan    | 明るい青緑色
| gray         | 灰色
| white        | 白
|===

[[colors_extended]]
==== 拡張色

WeeChat はスクリーンに色が表示された時点で色ペアを動的に割り当てます
(バッファとバーを表示する時点で)。

基本色に加えて、1 番
から端末の対応状況に依存する番号までの色番号を利用できます。

`/color` コマンドで現在の色と色制限を確認できます。key[alt-c]
をタイプすることで、一時的に端末色を選択された色に変更できます。

例えば、バッファ中のに表示される時刻をオレンジ色にしたい場合、以下のようにしてください:

----
/set weechat.color.chat_time 214
----

ステータスバーの色を非常に暗い緑色にしたい場合:

----
/set weechat.bar.status.color_bg 22
----

[[colors_aliases]]
==== 別名

`/color alias` コマンドを使えば色の別名を追加できます。
追加後は任意の色関連オプションで別名を使えます。

例:

----
/color alias 214 orange
/set weechat.color.chat_delimiters orange
----

[[colors_attributes]]
==== 属性

色に対していくつかの属性を付加することができます。1
つ以上の属性を色名又は色番号の前に付加できます:

* `*` : テキストを太字に
* `!` : テキストを反転
* `/` : テキストをイタリック体に
* `_` : テキストに下線を引く
* `|` : 属性を保持:
  色を変えた際に太字/反転/下線属性をリセットしない

例えば、自分自身のニックネームの表示色を白にして、下線を引きたい場合:

----
/set weechat.color.chat_nick_self _white
----

ステータスバーの時刻の表示色を橙色にして、下線を引いて、太字にしたい場合:

----
/set weechat.color.status_time *_214
----

デフォルト端末色 (-1) に対して属性を設定したい場合、端末色番号の最大値よりも大きな値を利用してください。
例えば、WeeChat における色番号の最大値は 99999 です。

端末の表示色に太字の属性を付加する例:

----
/set weechat.color.status_time *99999
----

[[secured_data]]
=== 暗号化データ

[[secured_data_storage]]
==== データの保存

WeeChat はパスワード及び 'sec.conf'
ファイルに保存されている個人データを暗号化することができます。

この設定ファイルは他のどのファイルよりも先に読まれ、ファイルに保存されている値を
WeeChat 及びプラグイン/スクリプトのオプションで使うことができます。

'sec.conf'
に含まれるデータを暗号化するパスフレーズを設定することが可能です。これは必須ではありませんが、パスフレーズを設定することを強く勧めます。パスフレーズを設定しない場合、データは平文でファイルに保存されます。

----
/secure passphrase this is my passphrase
----

パスフレーズを設定した場合、WeeChat
の起動時にパスフレーズの入力が求められるようになります (`/upgrade` 時には求められません)。

この挙動を変更し、パスフレーズを保存したファイルを使うことも可能です
(<<option_sec.crypt.passphrase_file,sec.crypt.passphrase_file>> オプションを参照してください)。

[[secured_data_encryption]]
===== 暗号化

データの暗号化は 3 段階に分けて行われます:

. パスフレーズから鍵を生成 (任意の salt を加えます)。
. 暗号化するデータのハッシュを計算。
. ハッシュとデータを暗号化 (出力: salt + 暗号化済みのハッシュ/データ)。

[NOTE]
ブロック暗号モードは 'CFB' です。

結果は 16 進数文字列として 'sec.conf' ファイルに保存されます、例:

----
[data]
__passphrase__ = on
freenode = "53B1C86FCDA28FC122A95B0456ABD79B5AB74654F21C3D099A6CCA8173239EEA59533A1D83011251F96778AC3F5166A394"
----

[[secured_data_decryption]]
===== 復号化

データの復号化は 3 段階に分けて行われます:

. salt とパスフレーズを使って鍵を生成。
. ハッシュとデータを復号化。
. 復号化したハッシュとデータのハッシュが同じことを確認。

[[secured_data_manage]]
==== 暗号化データの管理

暗号化データを追加するには、`/secure set` を使ってください、'freenode'
IRC サーバのパスワードを設定する例:

----
/secure set freenode mypassword
----

利便性を考慮して、暗号化データを専用のバッファに表示できるようになっています
(値を見るにはバッファで key[alt-v]、以下のコマンドを実行してください:

----
/secure
----

例えばパスワードなどの個人データを含むオプションで暗号化データを使うことができます、フォーマット:
"${sec.data.xxx}" ここで "xxx" は暗号化データの名前です
(`/secure set xxx ...` のように使った)。 +
利用できるオプションの完全なリストはを見るには、`/help secure` を使ってください。

例えば上の 'freenode' パスワードを
<<irc_sasl_authentication,SASL 認証>>で使うには:

----
/set irc.server.freenode.sasl_password "${sec.data.freenode}"
----

[[options_and_commands]]
=== オプションとコマンド

[[sec_options]]
==== 保護データのオプション (sec.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                       | 説明
| crypt      | /set sec.crypt.*                   | 暗号化に関するオプション
| data       | <<command_weechat_secure,/secure>> | 保護データ
|===

オプション:

include::autogen/user/sec_options.asciidoc[]

[[weechat_options]]
==== WeeChat オプション (weechat.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                              | 説明
| debug      | <<command_weechat_debug,/debug set>>      +
               /set weechat.debug.*                      | core とプラグインのデバッグレベル (オプションをセクションに追加/削除出来ます)
| startup    | /set weechat.startup.*                    | 起動オプション
| look       | /set weechat.look.*                       | 外観
| palette    | <<command_weechat_color,/color alias>>    +
               /set weechat.palette.*                    | 色の別名 (オプションをセクションに追加/削除出来ます)
| color      | /set weechat.color.*                      | 色
| completion | /set weechat.completion.*                 | 補完オプション
| history    | /set weechat.history.*                    | 履歴オプション (コマンドとバッファ)
| proxy      | <<command_weechat_proxy,/proxy>>          +
               /set weechat.proxy.*                      | プロキシオプション
| network    | /set weechat.network.*                    | ネットワーク/SSL オプション
| bar        | <<command_weechat_bar,/bar>>              +
               /set weechat.bar.*                        | バーオプション
| layout     | <<command_weechat_layout,/layout>>        | レイアウト
| notify     | <<command_weechat_buffer,/buffer notify>> | バッファに対する通知レベル (オプションをセクションに追加/削除出来ます)
| filter     | <<command_weechat_filter,/filter>>        | フィルタ
| key        | <<command_weechat_key,/key>>              | デフォルトコンテキストのキー
| key_search | <<command_weechat_key,/key>>              | 検索コンテキストのキー
| key_cursor | <<command_weechat_key,/key>>              | カーソルコンテキストのキー
| key_mouse  | <<command_weechat_key,/key>>              | マウスコンテキストのキー
|===

オプション:

include::autogen/user/weechat_options.asciidoc[]

[[weechat_commands]]
==== WeeChat コマンド

include::autogen/user/weechat_commands.asciidoc[]

[[plugins]]
== プラグイン

プラグインとは動的ライブラリのことで、C 言語で書かれてコンパイルされています。
プラグインは WeeChat によって読み込まれます。
GNU/Linux の場合、プラグインファイルは ".so" という拡張子を持ち、Windows の場合、".dll" です。

見つかったプラグインは WeeChat の起動時に自動的に読み込まれます。WeeChat
の起動時にプラグインを読み込むか否かは選択可能です。

'プラグイン' と 'スクリプト' の違いを明らかにすることは重要です:
'プラグイン' とは `/plugin` コマンドで読み込まれるコンパイル済みバイナリファイルです。これに対して、
'スクリプト' とは `/python` 等のコマンドで 'python'
等のプラグインとともに読み込まれるテキストファイルです。

`/plugin` コマンドを使うことで、プラグインのロード/アンロード、
ロード済みプラグインの表示を行うことができます。
あるプラグインをアンロードした場合、
アンロードしたプラグインが作成したバッファはすべて自動的に閉じられます。

プラグインをロード、アンロード、ロード済みプラグインを表示する例:

----
/plugin load irc
/plugin unload irc
/plugin list
----

デフォルトプラグインのリスト:

[width="100%",cols="^1,5",options="header"]
|===
| プラグイン | 説明
| alias      | コマンドの別名を定義
| aspell     | コマンドラインのスペルチェック
| charset    | バッファの文字コードに従ってデコード/エンコード
| exec       | WeeChat 内部から外部コマンドを実行
| fifo       | 外部から WeeChat にコマンドを送信するための FIFO パイプ
| irc        | IRC チャットプロトコル
| logger     | バッファの内容をファイルに保存
| relay      | ネットワーク経由でデータを中継
| script     | スクリプトマネージャ
| python     | Python スクリプト API
| perl       | Perl スクリプト API
| ruby       | Ruby スクリプト API
| lua        | Lua スクリプト API
| tcl        | Tcl スクリプト API
| guile      | Guile (scheme) スクリプト API
| javascript | Javascript スクリプト API
| trigger    | WeeChat およびプラグインが発生させたイベントに対するテキスト置換とコマンド実行
| xfer       | ファイル転送とダイレクトチャット
|===

API を使ったプラグインやスクリプトの開発についてより詳しく学ぶには、'WeeChat
プラグイン API リファレンス' 又は 'WeeChat スクリプト製作ガイド' を参照してください。

[[alias_plugin]]
=== Alias プラグイン

Alias プラグインを使うことで、コマンドの別名を定義できます (WeeChat
だけでなく他のプラグインが提供するコマンドの別名を定義することもできます)。

[[alias_commands]]
==== コマンド

include::autogen/user/alias_commands.asciidoc[]

[[aspell_plugin]]
=== Aspell プラグイン

Aspell プラグインを使うことで、コマンドラインに入力した文字列のスペルチェックができます。
バッファごとに異なる言語に対するスペルチェックを実行できます。

[[aspell_options]]
==== オプション (aspell.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                              | 説明
| color      | /set aspell.color.*                       | 色
| check      | /set aspell.check.*                       | スペルチェックの操作コマンド
| dict       | <<command_aspell_aspell,/aspell setdict>> +
               /set aspell.dict.*                        | バッファが利用するディレクトリ (オプションをセクションに追加/削除出来ます)
| option     | /set aspell.option.*                      | <<aspell_speller_options,Speller オプション>> (オプションをセクションに追加/削除出来ます)
|===

オプション:

include::autogen/user/aspell_options.asciidoc[]

[[aspell_commands]]
==== コマンド

include::autogen/user/aspell_commands.asciidoc[]

[[aspell_speller_options]]
==== Speller オプション

Speller オプションは aspell 設定の "option"
セクションにあるオプションを追加して定義します。

ここで利用するオプション名は aspell 設定オプションと同じものです。
オプションのリストはシェルで以下のコマンドを実行することで確認できます:

----
$ aspell config
----

例えば、"ignore-case" オプションを有効化するには:

----
/set aspell.option.ignore-case "true"
----

[[aspell_suggestions]]
==== 修正候補

"aspell_suggest" バーアイテム内に修正候補が表示されます。修正候補の数は
'aspell.check.suggestions' オプションで設定します。

修正候補を利用するには、'aspell.check.suggestions' オプションをゼロ以上の整数に設定し、'status'
バーなどに "aspell_suggest" バーアイテムを追加してください。

英語辞書 (`en`) を用いた修正候補の例:

....
│[12:55] [6] [irc/freenode] 3:#test(+n){4} [print,prone,prune]                    │
│[@Flashy] prinr █                                                                │
└─────────────────────────────────────────────────────────────────────────────────┘
....

英語とフランス語辞書 (`en,fr`) を用いた修正候補の例:

....
│[12:55] [6] [irc/freenode] 3:#test(+n){4} [print,prone,prune/prime,primer,primé] │
│[@Flashy] prinr █                                                                │
└─────────────────────────────────────────────────────────────────────────────────┘
....

[[charset_plugin]]
=== Charset プラグイン

Charset プラグインを使うことで、文字コードに従ってデータのデコードとエンコードができます。

デコード/エンコード用にデフォルトの文字コードが設定されていますが、
それぞれのバッファ (バッファグループ) に対して個別に文字コードを設定することもできます。

このプラグインの導入は任意ですが、導入を推奨します:
このプラグインがロードされていない場合、WeeChat が読み書きできるデータは UTF-8 データのみになります。

Charset プラグインは WeeChat によって自動的にロードされるべきです。
プラグインがロードされていることを確認するには、以下のようにしてください:

----
/charset
----

コマンドが見つからない場合、以下のコマンドでプラグインをロードしてください:

----
/plugin load charset
----

プラグインが見つからない場合、文字コードサポートを有効化した状態で
WeeChat を再コンパイルしてください。

Charset プラグインがロードされた場合、端末文字コードと内部文字コードが表示されます。
端末文字コードはロケールに依存し、内部文字コードは UTF-8 です。

例:

....
charset: terminal: ISO-8859-15, internal: UTF-8
....

[[charset_options]]
==== オプション (charset.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                              | 説明
| default    | /set charset.default.*                      | デフォルトのデコード/エンコード文字セット
| decode     | <<command_charset_charset,/charset decode>> +
               /set charset.decode.*                       | バッファのデコード文字セット (オプションをセクションに追加/削除出来ます)
| encode     | <<command_charset_charset,/charset encode>> +
               /set charset.encode.*                       | バッファのエンコード文字セット (オプションをセクションに追加/削除出来ます)
|===

オプション:

include::autogen/user/charset_options.asciidoc[]

[[charset_commands]]
==== コマンド

include::autogen/user/charset_commands.asciidoc[]

[[charset_set]]
==== 文字コードの設定

グローバルデコード文字コードとエンコード文字コードを設定するには、`/set` コマンドを使ってください。

例:

----
/set charset.default.decode ISO-8859-15
/set charset.default.encode ISO-8859-15
----

グローバルデコード文字コードが設定されていない場合 (例えば Charset
プラグインを始めてロードした場合)、これは自動的に端末の文字コードか
(UTF-8 でなければ) 、デフォルトの 'ISO-8859-1' に設定されます。

デフォルトのエンコード文字コードはありません。従って、内部文字コード
(UTF-8) が使われます。

IRC サーバの文字コードを設定するには、サーババッファで `/charset` コマンドを使ってください。
文字コードのみを引数として与えた場合、この文字コードがデコードとエンコードに利用されます。

例:

----
/charset ISO-8859-15
----

これは以下と等価です:

----
/charset decode ISO-8859-15
/charset encode ISO-8859-15
----

IRC チャンネル (またはプライベートメッセージ) の文字コードを設定するには、
サーバの文字コード設定と同様のコマンドをチャンネル (またはプライベートメッセージ) バッファで使ってください。

IRC サーバの全てのチャンネルおよびプライベートバッファに対する文字コードを設定するには:

----
/set charset.encode.irc.freenode ISO-8859-15
----

すべての文字コード設定を確認するには、以下のコマンドを利用してください:

----
/set charset.*
----

[[charset_troubleshooting]]
==== トラブルシューティング

文字コードに関する問題があれば、'WeeChat FAQ' を参照してください。

[[exec_plugin]]
=== exec プラグイン

`/exec` コマンドを使うことで WeeChat
内部から外部コマンドを実行し、その結果を表示したりバッファに送信することが可能になります。

[[exec_options]]
==== オプション (exec.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド     | 説明
| command | /set exec.command.* | コマンドに対するオプション
| color   | /set exec.color.*   | 色
|===

オプション:

include::autogen/user/exec_options.asciidoc[]

[[exec_commands]]
==== コマンド

include::autogen/user/exec_commands.asciidoc[]

[[fifo_plugin]]
=== Fifo プラグイン

外部から WeeChat を操作するには、FIFO パイプにコマンドやテキストを書き込んでください ("plugins.var.fifo.fifo"
オプションが有効化されている必要がありますが、デフォルトで有効化されているはずです)。

FIFO パイプは '~/.weechat/' の下にあり、'weechat_fifo_xxxx'
のような名前になっています ('xxxx' は実行中の WeeChat のプロセス ID (PID) です)。

FIFO パイプに書き込むコマンド/テキストの文法は以下の例の一つです:

....
  plugin.buffer *テキストまたはコマンド
  *テキストまたはコマンド
....

例:

* IRC サーバ freenode のニックネームを "newnick" に変更する:

----
$ echo 'irc.server.freenode */nick newnick' >~/.weechat/weechat_fifo_12345
----

* IRC の #weechat チャンネルに対してテキストを送信:

----
$ echo 'irc.freenode.#weechat *hello!' >~/.weechat/weechat_fifo_12345
----

* 現在のバッファに対してテキストを送信:

----
$ echo '*hello!' >~/.weechat/weechat_fifo_12345
----

* Python スクリプトのアンロードとロードを行う 2 つのコマンドを送信
  (複数のコマンドは "\n" で分割してください):

----
$ printf '%b' '*/python unload\n*/python autoload\n' >~/.weechat/weechat_fifo_12345
----

実行中の WeeChat
すべてに対してコマンドを送信するスクリプトは以下のように書けます。例えば:

[source,shell]
----
#!/bin/sh
if [ $# -eq 1 ]; then
    for fifo in ~/.weechat/weechat_fifo_*
    do
        printf '%b\n' "$1" >"$fifo"
    done
fi
----

このスクリプトを "auto_weechat_command" というファイル名で保存した場合、以下のように実行できます:

----
$ ./auto_weechat_command 'irc.freenode.#weechat *hello'
----

[[irc_plugin]]
=== IRC プラグイン

IRC プラグインは IRC プロトコルに従って他の人と会話を行うために設計されています。

マルチサーバに対応し、DCC チャットとファイル転送 (xfer プラグインを使います。
<<xfer_plugin,Xfer プラグイン>> を参照) を含む全ての IRC コマンドをサポートしています。

[[irc_command_line_options]]
==== コマンドラインオプション

以下のように 1 つ以上の IRC サーバに対応する URL を引数として与えることができます:

----
irc[6][s]://[nick[:password]@]irc.example.org[:port][/channel][,channel[...]]
----

'nono' というニックネームを使って 'chat.freenode.net' ホストのデフォルトポート (6667)
で稼働中の IRC サーバ上の '#weechat' と '#toto' チャンネルに参加する例:

----
$ weechat irc://nono@chat.freenode.net/#weechat,#toto
----

[[irc_options]]
==== オプション (irc.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション     | 操作コマンド                   | 説明
| look           | /set irc.look.*                | 外観
| color          | /set irc.color.*               | 色
| network        | /set irc.network.*             | ネットワークオプション
| msgbuffer      | /set irc.msgbuffer.*           | <<irc_target_buffer,IRC メッセージのターゲットバッファ>> (オプションをセクションに追加/削除出来ます)
| ctcp           | /set irc.ctcp.*                | <<irc_ctcp_replies,CTCP 応答>> (オプションをセクションに追加/削除出来ます)
| ignore         | <<command_irc_ignore,/ignore>> | 無視ユーザ
| server_default | /set irc.server_default.*      | サーバに対するデフォルト値 (サーバオプションが定義されていない場合に利用されます)
| server         | <<command_irc_server,/server>> +
                   /set irc.server.*              | サーバ
|===

オプション:

include::autogen/user/irc_options.asciidoc[]

[[irc_commands]]
==== コマンド

include::autogen/user/irc_commands.asciidoc[]

[[irc_ssl_certificates]]
==== SSL 証明書

SSL を使って IRC サーバに接続する場合、WeeChat
はデフォルトで接続が完全に信頼できるものかどうかを確認します。

以下のオプションで SSL 接続を設定します:

weechat.network.gnutls_ca_file::
    認証局ファイルへのパス (デフォルト: "%h/ssl/CAs.pem")

irc.server.xxx.ssl_cert::
    自動的にニックネームを確認するために利用される SSL 証明書ファイル (例えば
    oftc サーバにおける CertFP の場合、以下を確認してください)

irc.server.xxx.ssl_dhkey_size::
    Diffie-Hellman キー交換の際に利用される鍵サイズ (デフォルト:
    2048)

irc.server.xxx.ssl_verify::
    SSL 接続が完全に信頼できることの確認を行う (デフォルトで有効)

[NOTE]
"ssl_verify" オプションはデフォルトで有効です、したがって厳密な確認が行われ、0.3.1
より前のバージョンでは信頼性の確認に成功していたものが失敗する場合もあります。

[[irc_connect_oftc_with_certificate]]
===== 最初の例: oftc に接続して、証明書を確認

* シェルを使って証明書をインポート:

----
$ mkdir -p ~/.weechat/ssl
$ wget -O ~/.weechat/ssl/CAs.pem http://www.spi-inc.org/ca/spi-cacert.crt
----

注意: CAs.pem ファイル中で複数の証明書を連結することもできます。

* WeeChat で "oftc" サーバがすでに設定済みであれば:

----
/connect oftc
----

[[irc_connect_oftc_with_certfp]]
===== 2 番目の例: CertFP を使って oftc に接続

* シェルで証明書を作成:

----
$ mkdir -p ~/.weechat/ssl
$ cd ~/.weechat/ssl
$ openssl req -nodes -newkey rsa:2048 -keyout nick.pem -x509 -days 365 -out nick.pem
----

* WeeChat で "oftc" サーバがすでに設定済みであれば:

----
/set irc.server.oftc.ssl_cert "%h/ssl/nick.pem"
/connect oftc
/msg nickserv cert add
----

より詳しい情報は http://www.oftc.net/oftc/NickServ/CertFP を確認してください。

[[irc_sasl_authentication]]
==== SASL 認証

WeeChat は SASL 認証をサポートします、以下の認証メカニズムを利用できます:

* 'plain': 平文パスワード (デフォルト)
* 'ecdsa-nist256p-challenge': 公開鍵/秘密鍵を使うチャレンジ認証
* 'external': クライアント側 SSL 証明書
* 'dh-blowfish': blowfish 暗号パスワード
* 'dh-aes': AES 暗号パスワード

[NOTE]
"dh-blowfish" メカニズムを利用する場合、"gcrypt" ライブラリが
WeeChat のコンパイル時に必要です (<<dependencies,依存関係>>を参照)。

サーバオプション:

* 'sasl_mechanism': 利用する認証メカニズム (上記参照)
* 'sasl_timeout': 認証時のタイムアウト (秒単位)
* 'sasl_fail': 認証に失敗した場合の挙動
* 'sasl_username': ユーザ名 (ニックネーム)
* 'sasl_password': パスワード
* 'sasl_key': ECC 秘密鍵を含むファイル
  ('ecdsa-nist256p-challenge' 用)

[[irc_sasl_ecdsa_nist256p_challenge]]
===== SASL ECDSA-NIST256P-CHALLENGE 認証

ECDSA-NIST256P-CHALLENGE を使って認証を行うためには、秘密鍵を作成してください
(接続の際にパスワードは不要です)。

鍵を作成するには、以下のコマンドを使ってください:

----
$ openssl ecparam -genkey -name prime256v1 >~/.weechat/ecdsa.pem
----

公開鍵を (base64 エンコード形式で) 作成するには、以下のコマンドを使ってください:

----
$ openssl ec -noout -text -conv_form compressed -in ~/.weechat/ecdsa.pem | grep '^pub:' -A 3 | tail -n 3 | tr -d ' \n:' | xxd -r -p | base64
----

サーバに接続、本人確認 (例えば "nickserv identify" を使って)、nickserv
を使ってアカウントに公開鍵を設定 (アカウントの公開鍵に base64
文字列を指定する):

----
/connect freenode
/msg nickserv identify your_password
/msg nickserv set pubkey Av8k1FOGetUDq7sPMBfufSIZ5c2I/QYWgiwHtNXkVe/q
----

サーバの SASL オプションを設定:

----
/set irc.server.freenode.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.freenode.sasl_username "your_nickname"
/set irc.server.freenode.sasl_key "%h/ecdsa.pem"
----

サーバに再接続:

----
/reconnect freenode
----

[[irc_tor_freenode]]
==== TOR/SASL を使って Freenode に接続する場合

SSL に加えて、Freenode サーバは TOR (https://www.torproject.org/)
経由の接続をサポートしています。TOR とはバーチャルトンネルのネットワークで、
これを使うことで個人やグループがインターネット利用に伴うプライバシーとセキュリティを向上させることができます。

最初に、TOR をインストールしてください。Debian (とその派生ディストリビューション) の場合:

----
$ sudo apt-get install tor
----

WeeChat で TOR サービスを使った socks5 プロキシを作成してください
(ホスト名/IP アドレス、ポート番号は TOR の設定に依存します):

----
/proxy add tor socks5 127.0.0.1 9050
----

次に新しいサーバを作成してください。例えば:

----
/server add freenode-tor p4fsi4ockecnea7l.onion
----

TOR プロキシを設定:

----
/set irc.server.freenode-tor.proxy "tor"
----

SASL 認証を設定:

----
/set irc.server.freenode-tor.sasl_username "your_nickname"
/set irc.server.freenode-tor.sasl_password "your_password"
----

最後に、サーバに接続してください:

----
/connect freenode-tor
----

Freenode と TOR に関するより詳しい情報: http://freenode.net/irc_servers.shtml#tor

[[irc_smart_filter_join_part_quit]]
==== 参加/退出/終了メッセージに対するスマートフィルタ

チャンネル内での発言が過去 X
分間なかった場合に参加/退出/終了メッセージをフィルタリングするスマートフィルタが利用できます。

スマートフィルタはデフォルトで有効化されていますが、
バッファ内のメッセージを隠すにはフィルタを追加する必要があります。例えば:

----
/filter add irc_smart * irc_smart_filter *
----

特定のチャンネルのみ、またはある名前で始まるチャンネルに対してフィルタを作成することもできます。
(`/help filter` を参照):

----
/filter add irc_smart_weechat irc.freenode.#weechat irc_smart_filter *
/filter add irc_smart_weechats irc.freenode.#weechat* irc_smart_filter *
----

以下のコマンドで参加メッセージだけ、又は退出/終了メッセージだけを隠すこともできます:

----
/set irc.look.smart_filter_join on
/set irc.look.smart_filter_quit on
----

遅延時間 (分単位) を設定することもできます:

----
/set irc.look.smart_filter_delay 5
----

過去 5 分間あるニックネームからの発言が無かった場合、
このニックネームに対する参加または退出/終了メッセージがチャンネルから隠されます。

[[irc_ctcp_replies]]
==== CTCP 応答

CTCP 応答をカスタマイズしたり、いくつかの CTCP
要求をブロック (無応答) することができます。

例えば、CTCP "VERSION" 要求に対する応答をカスタマイズするには、以下のコマンドを使ってください:

----
/set irc.ctcp.version "I'm running WeeChat $version, it rocks!"
----

CTCP "VERSION" 要求をブロックする (要求に対する応答を行わない)
には、空文字列を設定してください:

----
/set irc.ctcp.version ""
----

未定義の CTCP 要求に対する応答もカスタマイズできます。例えば
CTCP "BLABLA" 要求に対する応答を以下のように設定できます:

----
/set irc.ctcp.blabla "This is my answer to CTCP BLABLA"
----

特定のサーバに対して CTCP 応答をカスタマイズするには、CTCP
名の前に内部サーバ名をつけてください:

----
/set irc.ctcp.freenode.version "WeeChat $version (for freenode)"
----

標準の CTCP 応答を復元するには、オプションを削除してください:

----
/unset irc.ctcp.version
----

以下のコードを設定値に含めることが可能です。これらのコードは
CTCP 応答時に自動的に WeeChat によって展開されます:

[width="100%",cols="^2l,4,8",options="header"]
|===
| コード       | 説明                                      | 値/例
| $clientinfo  | サポートしている CTCP オプションのリスト  | `ACTION DCC CLIENTINFO FINGER PING SOURCE TIME USERINFO VERSION`
| $version     | WeeChat バージョン                        | `0.4.0-dev`
| $versiongit  | WeeChat バージョン + git バージョン ^(1)^ | `0.4.0-dev (git: v0.3.9-104-g7eb5cc4)`
| $git         | git バージョン ^(1)^                      | `v0.3.9-104-g7eb5cc4`
| $compilation | WeeChat コンパイル日時                    | `Dec 16 2012`
| $osinfo      | OS に関する情報                           | `Linux 2.6.32-5-amd64 / x86_64`
| $site        | WeeChat ウェブサイト                      | `https://weechat.org/`
| $download    | WeeChat ウェブサイトのダウンロードページ  | `https://weechat.org/download`
| $time        | 現在の日時                                | `Sun, 16 Dec 2012 10:40:48 +0100`
| $username    | IRC サーバのユーザネーム                  | `ログイン名`
| $realname    | IRC サーバのリアルネーム                  | `John Doe`
|===

[NOTE]
^(1)^ git バージョンとは `git describe` コマンドの出力です。git リポジトリで
WeeChat をコンパイルし、git がインストールされている場合のみ値が設定されます。

CTCP オプションが設定されていない (デフォルトの) 場合、CTCP 応答は以下のようになります:

[width="100%",cols="^2,4,8",options="header"]
|===
| CTCP       | 応答フォーマット                     | 例
| CLIENTINFO | `$clientinfo`                        | `ACTION DCC CLIENTINFO FINGER PING SOURCE TIME USERINFO VERSION`
| FINGER     | `WeeChat $versiongit`                | `WeeChat 0.4.0-dev (git: v0.3.9-104-g7eb5cc4)`
| SOURCE     | `$download`                          | `https://weechat.org/download`
| TIME       | `$time`                              | `Sun, 16 Dec 2012 10:40:48 +0100`
| USERINFO   | `$username ($realname)`              | `ログイン名 (John Doe)`
| VERSION    | `WeeChat $versiongit ($compilation)` | `WeeChat 0.4.0-dev (git: v0.3.9-104-g7eb5cc4) (Dec 16 2012)`
|===

[[irc_target_buffer]]
==== IRC メッセージのターゲットバッファ

`irc.msgbuffer.*` オプションを使えば、IRC メッセージに対するターゲットバッファ
(メッセージを表示するバッファ) をカスタマイズすることができます。

一部の IRC メッセージ (以下のリストを参照) に対して、以下の値を設定できます:

current::
    現在のバッファ (IRC バッファまたはサーババッファの場合のデフォルト)

private::
    ニックネームに対するプライベートバッファ、見つからない場合は現在のバッファまたはサーババッファ
    ('irc.look.msgbuffer_fallback' オプションに依存)

server::
    サーババッファ

weechat::
    WeeChat "core" バッファ

オプションが設定されていない (デフォルトの) 場合、WeeChat
は適当なバッファを選びます。通常ではサーバまたはチャンネルバッファです。

カスタマイズできる一部の IRC メッセージ、別名のリストは以下です:

[width="60%",cols="^1m,^3m,8",options="header"]
|===
| メッセージ | 別名       | 説明
| error   |               | エラー
| invite  |               | チャンネルへの招待
| join    |               | 参加
| kick    |               | キック
| kill    |               | キル
| mode    |               | モード
| notice  |               | notice
| part    |               | 退出
| quit    |               | 終了
| topic   |               | トピック
| wallops |               | IRC オペレータメッセージ
|         | ctcp          | ctcp (プライベートまたは notice メッセージ内の、送信または受信メッセージ)
| 221     |               | ユーザモード文字列
| 275     | whois         | whois (セキュアな接続)
| 301     | whois         | whois (離席状態)
| 303     |               | サーバへの接続状態
| 305     | unaway        | 着席状態
| 306     | away          | 離席状態
| 307     | whois         | whois (登録済みニックネーム)
| 310     | whois         | whois (ヘルプモード)
| 311     | whois         | whois (ユーザ)
| 312     | whois         | whois (サーバ)
| 313     | whois         | whois (オペレータ)
| 314     | whowas        | whowas
| 315     | who           | who (終了)
| 317     | whois         | whois (アイドル状態)
| 318     | whois         | whois (終了)
| 319     | whois         | whois (チャンネル)
| 320     | whois         | whois (身元確認済みユーザ)
| 321     | list          | list (開始)
| 322     | list          | list (チャンネル)
| 323     | list          | list (終了)
| 326     | whois         | whois (オペレータ権限を持っているユーザ)
| 327     | whois         | whois (ホスト)
| 328     |               | チャンネルの URL
| 329     |               | チャンネル作成日時
| 330     | whois         | whois (ログイン時の名前)
| 331     |               | トピックが未設定のチャンネル
| 332     |               | チャンネルのトピック
| 333     |               | トピックに関する情報
| 335     | whois         | whois (ボットが有効化されているか)
| 338     | whois         | whois (ホスト)
| 341     |               | 招待中
| 343     | whois         | whois (オペレータ)
| 344     | reop          | チャンネルオペレータを復活
| 345     | reop          | チャンネルオペレータを復活 (終了)
| 346     | invitelist    | 招待リスト
| 347     | invitelist    | 招待リスト (終了)
| 348     | exceptionlist | 除外リスト
| 349     | exceptionlist | 除外リスト (終了)
| 351     |               | サーババージョン
| 352     | who           | who
| 353     | names         | チャンネル内ユーザのリスト
| 366     | names         | チャンネル内ユーザのリストの終了
| 367     | banlist       | 禁止リスト
| 368     | banlist       | 禁止リストの終了
| 369     | whowas        | whowas (終了)
| 378     | whois         | whois (接続元)
| 379     | whois         | whois (モード)
| 401     | whois         | 指定したニックネームおよびチャンネルがありません
| 402     | whois         | 指定したサーバがありません
| 432     |               | erroneous ニックネーム
| 433     |               | ニックネームが使用されています
| 438     |               | ニックネームを変更する権限がありません
| 671     | whois         | whois (セキュアな接続)
| 728     | quietlist     | 発言禁止リスト
| 729     | quietlist     | 発言禁止リストの終了
| 732     | monitor       | 監視中のニックネームのリスト
| 733     | monitor       | 監視中のニックネームのリスト (終了)
| 901     |               | ログインに成功
|===

その他の数値コマンドも同様にカスタマイズできます。

サーバ名を前につけることで、特定のサーバに対して設定することができます
(例: `freenode.whois`)。

例:

* `/whois` の結果をプライベートバッファに表示:

----
/set irc.msgbuffer.whois private
----

* whois に対する設定をデフォルトに戻す (サーババッファに表示):

----
/unset irc.msgbuffer.whois
----

* "freenode" サーバの場合、招待メッセージを現在のバッファに表示:

----
/set irc.msgbuffer.freenode.invite current
----

* "303" (ison) メッセージを WeeChat "core" バッファに表示:

----
/set irc.msgbuffer.303 weechat
----

[[logger_plugin]]
=== Logger プラグイン

Logger プラグインを使うことで、バッファの内容をファイルに保存できます。
保存形式とその方法をオプションで設定できます。

[[logger_options]]
==== オプション (logger.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド        | 説明
| look       | /set logger.look.*  | 外観
| color      | /set logger.color.* | 色
| file       | /set logger.file.*  | ログファイルのオプション
| level      | /set logger.level.* | バッファのログレベル (オプションをセクションに追加/削除出来ます)
| mask       | /set logger.mask.*  | バッファのファイル名マスク (オプションをセクションに追加/削除出来ます)
|===

オプション:

include::autogen/user/logger_options.asciidoc[]

[[logger_commands]]
==== コマンド

include::autogen/user/logger_commands.asciidoc[]

[[logger_log_levels]]
==== ログレベル

ログ保存はそれぞれのバッファに対して設定されたログレベルに従って行われます。デフォルトのレベルは 9
(バッファに表示されたメッセージをすべて保存) です。
特定のバッファやバッファグループに対して個別にログレベルを設定できます。

設定可能なレベルは 0 から 9 です。0 は "保存しない"、9
は "すべてのメッセージを保存" を意味します。

それぞれのプラグインでレベルの意味が変わります。
IRC プラグインに対しては以下のレベルが利用されます:

* レベル 1: ユーザからのメッセージ (チャンネルまたはプライベート)
* レベル 2: ニックネームの変更 (自身と他のユーザ)
* レベル 3: 任意のサーバメッセージ (参加/退出/終了メッセージを除く)
* レベル 4: 参加/退出/終了メッセージ

従って、IRC チャンネルに対してレベル 3 を設定した場合、WeeChat
は参加/退出/終了メッセージを除いて全てのメッセージを保存します。

例:

* IRC チャンネル #weechat に対してレベル 3 を設定:

----
/set logger.level.irc.freenode.#weechat 3
----

* freenode サーババッファに対してレベル 3 を設定:

----
/set logger.level.irc.server.freenode 3
----

* freenode サーバの全てのチャンネルに対してレベル 3 を設定:

----
/set logger.level.irc.freenode 3
----

* 全ての IRC バッファに対してレベル 2 を設定:

----
/set logger.level.irc 2
----

[[logger_filenames_masks]]
==== ファイル名マスク

バッファに対し個別にファイル名マスクを設定することができます、
ファイル名にはローカルバッファ変数が利用されます。現在のバッファに設定されたローカル変数を確認するには:

----
/buffer localvar
----

例えば "irc.freenode.#weechat" バッファの場合、WeeChat
は以下の順番でオプションに設定されたファイル名マスクを検索します:

----
logger.mask.irc.freenode.#weechat
logger.mask.irc.freenode
logger.mask.irc
logger.file.mask
----

特定の IRC サーバ ("logger.mask.irc.freenode") またはプラグイン
("logger.mask.irc") のグループに対して共通のマスクを適用できます。

[[logger_files_by_date]]
===== ログファイルに日付を利用する

ログファイルに日付を使うには、マスクに日時/時間指定子を利用できます
(フォーマットに関しては `man strftime` を参照してください)。例えば:

----
/set logger.file.mask "%Y/%m/$plugin.$name.weechatlog"
----

以下のファイルが作成されます:

....
~/.weechat/
    |--- logs/
        |--- 2010/
            |--- 11/
            |       irc.server.freenode.weechatlog
            |       irc.freenode.#weechat.weechatlog
        |--- 2010/
            |--- 12/
            |       irc.server.freenode.weechatlog
            |       irc.freenode.#weechat.weechatlog
....

[[logger_irc_files_by_server_channel]]
===== IRC ログファイルにサーバとチャンネル名を利用する

IRC サーバ名を使ったディレクトリに、チャンネル名を使ったファイルを作成する場合:

----
/set logger.mask.irc "irc/$server/$channel.weechatlog"
----

以下のファイルが作成されます:

....
~/.weechat/
    |--- logs/
        |--- irc/
            |--- freenode/
            |       freenode.weechatlog
            |       #weechat.weechatlog
            |       #mychan.weechatlog
            |--- oftc/
            |       oftc.weechatlog
            |       #chan1.weechatlog
            |       #chan2.weechatlog
....

[[relay_plugin]]
=== Relay プラグイン

Relay プラグインはネットワークを介して異なるプロトコルを用いてデータを中継するために利用します:

* 'irc': IRC プロキシ: IRC サーバに対する接続を、単一または複数の IRC
  クライアントで共有するために用います。
* 'weechat': WeeChat の表示にリモートインターフェイス
  (例えば QWeeChat) を使う場合に利用されるプロトコル

[[relay_options]]
==== オプション (relay.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                       | 説明
| look       | /set relay.look.*                  | 外観
| color      | /set relay.color.*                 | 色
| network    | /set relay.network.*               | ネットワークオプション
| irc        | /set relay.irc.*                   | 特定の irc プロトコルのオプション (irc プロキシ)
| port       | <<command_relay_relay,/relay add>> +
               /set relay.port.*                  | リレーに使うポート(irc や weechat プロトコル) (オプションをセクションに追加/削除出来ます)
|===

オプション:

include::autogen/user/relay_options.asciidoc[]

[[relay_commands]]
==== コマンド

include::autogen/user/relay_commands.asciidoc[]

[[relay_password]]
==== パスワード

以下のコマンドを利用して、リレー用のパスワードを設定することを強くお勧めします:

----
/set relay.network.password "mypass"
----

このパスワードは 'irc' と 'weechat' プロトコルで利用されます。

[[relay_ssl]]
==== SSL

証明書と秘密鍵を作り、プロトコル名の最初に "ssl." を付けることで
SSL 経由でリレーを利用することができます。

証明書/秘密鍵ファイルへのデフォルトパスは '~/.weechat/ssl/relay.pem' です
(option <<option_relay.network.ssl_cert_key,relay.network.ssl_cert_key>>)。

以下のコマンドを使って証明書と秘密鍵ファイルを作成します:

----
$ mkdir -p ~/.weechat/ssl
$ cd ~/.weechat/ssl
$ openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 365 -out relay.pem
----

WeeChat が既に起動している場合、
以下のコマンドで証明書と秘密鍵を再読み込みできます:

----
/relay sslcertkey
----

[[relay_irc_proxy]]
==== IRC プロキシ

Relay プラグインは IRC プロキシとしても使えます: Relay プラグインは IRC
サーバのふりをして、他の IRC クライアント (WeeChat 自身も) は WeeChat に接続できます。

IRC サーバごとに異なるポート、もしくは全てのサーバに対して共通のポートを定義することができます。

すべてのサーバに対して共通のポートを定義した場合には、クライアントからサーバの内部名を
IRC の "PASS" コマンドに含めて送信するようにしてください、以下のフォーマットを使ってください:

----
PASS server:mypass
----

例: SSL を使い、全てのサーバに対して共通の IRC プロキシを設定 (サーバはクライアントが選択):

----
/relay add ssl.irc 8000
----

例: SSL を使わず、内部名 "freenode" のサーバに対して IRC プロキシを設定:

----
/relay add irc.freenode 8000
----

任意の IRC クライアントからサーバパスワード "mypass" (全てのサーバに対して共通の
IRC プロキシを設定した場合には "freenode:mypass") で 8000 番ポートに接続出来ます。

[[relay_weechat_protocol]]
==== WeeChat プロトコル

Relay プラグインは WeeChat プロトコルを使ってリモートインターフェイスに対してデータを送信できます。

リモートインターフェイスを使って接続できます、ダウンロードページのリストを御覧ください:
https://weechat.org/download

[IMPORTANT]
このプロトコルを使った場合 WeeChat から他の WeeChat に接続することはできません。

例:

----
/relay add weechat 9000
----

この後、リモートインターフェイスを使って 9000
番ポートに対して、パスワード "mypass" で接続することができます。

[[relay_websocket]]
==== WebSocket

Relay プラグインはすべてのプロトコルに対して WebSocket プロトコル
(http://tools.ietf.org/html/rfc6455[RFC 6455]) をサポートします。

WebSocket ハンドシェイクは自動的に検知され、ハンドシェイク中に必要なヘッダが見つかり
origin が許可されていれば WebSocket 用のソケットが準備されます (オプション
<<option_relay.network.websocket_allowed_origins,relay.network.websocket_allowed_origins>>
を参照)。

HTML5 を使えばたった 1 行の JavaScript で WebSocket をオープンすることが可能です:

[source,js]
----
websocket = new WebSocket("ws://server.com:9000/weechat");
----

ポート番号 (例では 9000 番) は Relay プラグインで定義したものです。URI
の最後には必ず "/weechat" をつけます ('irc' と 'weechat' プロトコルの場合)。

[[scripts_plugins]]
=== スクリプトプラグイン

WeeChat は 7 種類のスクリプトプラグインを備えています: Python、Perl、Ruby、Lua、Tcl、Guile
(scheme)、Javascript。
これらのプラグインでそれぞれの言語で書かれたスクリプトのロード、実行、アンロードができます。

"スクリプト" と呼ばれるほかのプラグインはスクリプトマネージャで、任意の言語で書かれたスクリプトをロード
/ アンロードしたり、WeeChat スクリプトリポジトリ (https://weechat.org/scripts から参照可能)
のスクリプトをインストール / 削除するために利用します。

スクリプトの書き方やスクリプト用の WeeChat API についての詳しい情報は、
'WeeChat スクリプト製作ガイド' を参照してください。

[[script_options]]
==== スクリプトオプション (script.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド          | 説明
| look       | /set script.look.*    | 外観
| color      | /set script.color.*   | 色
| scripts    | /set script.scripts.* | スクリプトのダウンロードに関するオプション
|===

オプション:

include::autogen/user/script_options.asciidoc[]

[[script_commands]]
==== Script コマンド

include::autogen/user/script_commands.asciidoc[]

[[python_commands]]
==== Python コマンド

include::autogen/user/python_commands.asciidoc[]

[[perl_commands]]
==== Perl コマンド

include::autogen/user/perl_commands.asciidoc[]

[[ruby_commands]]
==== Ruby コマンド

include::autogen/user/ruby_commands.asciidoc[]

[[lua_commands]]
==== Lua コマンド

include::autogen/user/lua_commands.asciidoc[]

[[tcl_commands]]
==== Tcl コマンド

include::autogen/user/tcl_commands.asciidoc[]

[[guile_commands]]
==== Guile コマンド

include::autogen/user/guile_commands.asciidoc[]

[[javascript_commands]]
==== Javascript コマンド

include::autogen/user/javascript_commands.asciidoc[]

[[trigger_plugin]]
=== トリガプラグイン

トリガは WeeChat の便利ツールです:
様々なもの
(signal、modifier、print、...)
をフックして、データの内容を書き換えたり、複数のコマンドを実行することができます。条件をつけることで一部の場合だけトリガを実行するように設定することもできます。

トリガを使うにはシグナル、修飾子、...
がどのように動いているかを知らなければいけません。これを知るには 'WeeChat
プラグイン API リファレンス' の 'フック' の章を読むことをお勧めします。

[[trigger_options]]
==== オプション (trigger.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                             | 説明
| look       | /set trigger.look.*                      | 外観
| color      | /set trigger.color.*                     | 色
| trigger    | <<command_trigger_trigger,/trigger add>> +
               <<command_trigger_trigger,/trigger set>> +
               /set trigger.trigger.*                   | トリガオプション
|===

オプション:

include::autogen/user/trigger_options.asciidoc[]

[[trigger_commands]]
==== コマンド

include::autogen/user/trigger_commands.asciidoc[]

[[trigger_anatomy]]
==== トリガの構造

トリガは以下のオプションをとります (名前は
`trigger.trigger.<name>.<option>`):

[width="100%",cols="2m,2,10",options="header"]
|===
| オプション | 値 | 説明

| enabled | `on`、`off` |
  オプションが `off`
  の場合、トリガは無効化され、アクションは実行されません。

| hook | `signal`、`hsignal`、`modifier`、`print`、`command`、`command_run`、
  `timer`、`config`、`focus` |
  トリガの中で使われるフック。より詳しい情報は、'WeeChat
  プラグイン API リファレンス' の 'フック' の章を参照してください。

| arguments | 文字列 |
  フックに対する引数、指定したフックの型に依存します。

| conditions | 文字列 |
  トリガを実行する条件; 内容は評価されます (コマンド
  <<command_weechat_eval,/eval>> を参照)。

| regex | 文字列 |
  1 つ以上の POSIX 拡張正規表現、フックコールバック
  (とトリガプラグインによって追加されるもの)
  が受け取るデータに変更を加えるためのもの<<trigger_regex,正規表現>>を参照。

| command | 文字列 |
  実行するコマンド (複数のコマンドを使う場合には各コマンドをセミコロンで区切ってください);
  内容は評価されます (コマンド <<command_weechat_eval,/eval>> を参照)。

| return_code | `ok`、`ok_eat`、`error` |
  コールバックの戻り値 (デフォルトは
  `ok`、ほとんどすべてのトリガで戻り値はこれを使うべきで、ほかの値を使うことは極めてまれです)。
|===

例えば、デフォルトの 'beep' トリガは以下のオプションをとります:

----
trigger.trigger.beep.enabled = on
trigger.trigger.beep.hook = print
trigger.trigger.beep.arguments = ""
trigger.trigger.beep.conditions = "${tg_highlight} || ${tg_msg_pv}"
trigger.trigger.beep.regex = ""
trigger.trigger.beep.command = "/print -beep"
trigger.trigger.beep.return_code = ok
----

[[trigger_execution]]
==== 実行

トリガ機能が有効になっていてさらに対象のトリガが有効化されている場合に、トリガコールバックが呼び出されると、以下のアクションがこの順番で実行されます:

. トリガ条件の確認: 偽の場合、終了
. 正規表現を使ってトリガ内でテキスト置換
. コマンドを実行
. リターンコードを付けて終了 ('modifier' と 'focus' フックの場合を除く)。

[[trigger_hook_arguments]]
==== フック引数

引数は使用するフックの種類に依存します。引数はセミコロンで区切ってください。

[width="100%",cols="2,6,7",options="header"]
|===
| フック | 引数 | 例

| signal |
  1. シグナル名 (優先度の指定も可) (必須) +
  2. シグナル名 (優先度の指定も可) +
  3. ... |
  `*,irc_in_privmsg` +
  `*,irc_in_privmsg;*,irc_in_notice` +
  `signal_sigwinch`

| hsignal |
  1. シグナル名 (優先度の指定も可) (必須) +
  2. シグナル名 (優先度の指定も可) +
  3. ... |
  `nicklist_nick_added`

| modifier |
  1. 修飾子名 (優先度の指定も可) (必須) +
  2. 修飾子名 (優先度の指定も可) +
  3. ... |
  `weechat_print` +
  `5000\|input_text_display;5000\|history_add`

| print |
  1. バッファ名 +
  2. タグ +
  3. メッセージ +
  4. 色の削除 (0/1) |
  `irc.freenode.*` +
  `irc.freenode.#weechat` +
  `irc.freenode.#weechat;irc_notice` +
  `*;;;1`

| command |
  1. コマンド名 (優先度の指定も可) (必須) +
  2. 説明 +
  3. 引数 +
  4. 引数の説明 +
  5. 補完 |
  `test` +
  `5000\|test`

| command_run |
  1. コマンド (優先度の指定も可) (必須) +
  2. コマンド (優先度の指定も可) +
  3. ... |
  `/cmd arguments`

| timer |
  1. インターバルするミリ秒数 (必須) +
  2. 秒の調整 (デフォルト: 0) +
  3. 呼び出し回数の最大値 (デフォルト: 0、"無限に" 呼び出すことを意味します) |
  `3600000` +
  `60000;0;5`

| config |
  1. オプション名 (優先度の指定も可) (必須) +
  2. オプション名 (優先度の指定も可) +
  3. ... |
  `weechat.look.*`

| focus |
  1. エリア名 (優先度の指定も可) (必須) +
  2. エリア名 (優先度の指定も可) +
  3. ... |
  `buffer_nicklist`
|===

[[trigger_conditions]]
==== 条件

条件を指定することで、トリガ内で処理を継続するか完全に止めるかを制御できます。

条件は評価され、コールバック内で利用できるデータを条件として利用できます
(<<trigger_callback_data,コールバック内のデータ>>とコマンド
<<command_weechat_eval,/eval>> を参照)。

例: デフォルトの 'beep'
トリガは以下の条件を使い、ハイライトまたはプライベートメッセージの場合だけビープを鳴らすようにしています:

----
${tg_highlight} || ${tg_msg_pv}
----

[[trigger_regex]]
==== 正規表現

正規表現はコールバックハッシュテーブル内の変数を変更するために使われます。

フォーマットは: "/regex/replace" または "/regex/replace/var" (ここで
'var' はハッシュテーブルの変数)。 +
'var'
が指定されなかった場合、デフォルト変数を使います、これはフックの種類に依存します:

[width="50%",cols="4,5m",options="header"]
|===
| フック      | デフォルト変数
| signal      | tg_signal_data
| hsignal     |
| modifier    | tg_string
| print       | tg_message
| command     | tg_argv_eol1
| command_run | tg_command
| timer       | tg_remaining_calls
| config      | tg_value
| focus       |
|===

複数の正規表現を使う場合は空白で区切ってください、例:
"/regex1/replace1/var1 /regex2/replace2/var2"。

文字 "/" を任意の文字 (1 つ以上の同じ文字) に変えることができます。

マッチグループを "replace" の中で利用できます:

* `${re:0}` から `${re:99}`: `${re:0}` はマッチ部分の全体、`${re:1}` から
  `${re:99}` はグループ化されたマッチ部分
* `${re:+}`: 最後のマッチ部分 (最大のグループ番号を持つ)
* `${hide:c,${re:N}}`: マッチグループ "N" のすべての文字を "c" で置換した文字列
  (例: `${hide:*,${re:2}}` はグループ #2 のすべての文字を `*` で置換した文字列).

例: "*" で囲まれた文字を太字にする:

----
/\*(\S+)\*/*${color:bold}${re:1}${color:-bold}*/
----

例: デフォルトトリガ 'server_pass' はこの正規表現を使って、`/server`
と `/connect` コマンドのパスワードを隠しています (パスワード部分の文字を
`*` で置換しています):

----
==^(/(server|connect) .*-(sasl_)?password=)(\S+)(.*)==${re:1}${hide:*,${re:4}}${re:5}
----

[NOTE]
この例では、区切り文字として "==" を使っています、これは正規表現内で "/"
を使うためです。

[[trigger_command]]
==== コマンド

コマンドは正規表現を使ったテキスト置換の後に実行されます。複数のコマンドを実行するにはセミコロンで区切ってください。

コマンドは評価され (コマンド <<command_weechat_eval,/eval>> を参照)
コマンド内では正規表現を使って置換したテキストを使うことができます。

例: デフォルトの 'beep' トリガは以下のコマンドを実行してビープ (BEL) を鳴らしています:

----
/print -beep
----

[[trigger_callback_data]]
==== コールバック内におけるデータ

コールバック内で受け取ったデータはハッシュテーブル (ポインタと文字列)
の中に保存され、以下のオプションで使うことができます:

* 'conditions'
* 'regex'
* 'command'

ハッシュテーブルの内容はフックの種類に依存します。

トリガ内部におけるデータを簡単に確認するには、以下のコマンドを使ってトリガ監視バッファを開いてください:

----
/trigger monitor
----

[[trigger_data_signal]]
===== Signal

"signal" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数           | 型     | 説明
| tg_signal      | string | シグナル名
| tg_signal_data | string | シグナルと一緒に送信されたデータ
|===

シグナルが IRC
メッセージを含む場合、メッセージは解析され以下のデータがハッシュテーブルに追加されます:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数                 | 型     | 説明
| server               | string | サーバの名前 (例: "freenode")
| tags                 | string | メッセージ内のタグ (使われることはまれです)
| message_without_tags | string | タグを含まないメッセージ
| nick                 | string | ニックネーム
| host                 | string | ホスト名
| command              | string | IRC コマンド (例: "PRIVMSG"、"NOTICE"、...)
| channel              | string | IRC チャンネル
| arguments            | string | コマンドの引数 ('channel' の値を含みます)
|===

[[trigger_data_hsignal]]
===== Hsignal

"hsignal" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数      | 型     | 説明
| tg_signal | string | シグナル名
|===

ハッシュテーブルには受け取ったハッシュテーブルに含まれる全てのキーおよび値 (型:
string/string) が含まれています。

[[trigger_data_modifier]]
===== Modifier

"modifier" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数              | 型     | 説明
| tg_modifier       | string | 修飾子の名前
| tg_modifier_data  | string | 修飾子と一緒に送信されたデータ
| tg_string         | string | 修正可能な文字列
| tg_string_nocolor | string | 色コードを含まない文字列
|===

'weechat_print' 修飾子では、メッセージタグを使う変数 (下の
<<trigger_data_print,Print>> を参照) と以下の変数が追加されます:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型      | 説明
| buffer             | pointer | メッセージが表示されたバッファ
| tg_plugin          | string  | メッセージが表示されたバッファのプラグイン
| tg_buffer          | string  | メッセージが表示されたバッファの完全な名前
| tg_prefix          | string  | 表示されたメッセージのプレフィックス
| tg_prefix_nocolor  | string  | 色コードを削除したプレフィックス
| tg_message         | string  | 表示されたメッセージ
| tg_message_nocolor | string  | 色コードを削除したメッセージ
|===

修飾子が IRC メッセージを含む場合、メッセージは解析され追加のデータがハッシュテーブルに追加されます
(<<trigger_data_signal,Signal>> を参照)。

[[trigger_data_print]]
===== Print

"print" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型      | 説明
| buffer             | pointer | メッセージが表示されたバッファ
| buffer             | pointer | バッファ
| tg_date            | string  | メッセージの日付と時間 (フォーマット: `YYYY-MM-DD hh:mm:ss`)
| tg_displayed       | string  | 表示された場合 "1"、フィルタされた場合 "0"
| tg_highlight       | string  | ハイライトされた場合 "1"、それ以外は "0"
| tg_prefix          | string  | プレフィックス
| tg_prefix_nocolor  | string  | 色コードを削除したプレフィックス
| tg_message         | string  | メッセージ
| tg_message_nocolor | string  | 色コードを削除したメッセージ
|===

メッセージのタグをもとにして変数が格納されます
(変数は 'weechat_print' 修飾子でも格納されます):

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型     | 説明
| tg_tags            | string | メッセージのタグ (文字列の最初と最後にコンマが追加されます)
| tg_tags_count      | string | メッセージのタグの個数
| tg_tag_nick        | string | ニックネーム ("nick_xxx" タグから)
| tg_tag_prefix_nick | string | プレフィックスで使うニックネームの色 ("prefix_nick_ccc" タグから)
| tg_tag_host        | string | ユーザ名とホスト名、フォーマット: username@host ("host_xxx" タグから)
| tg_tag_notify      | string | 通知レベル ('none'、'message'、'private'、'highlight')
| tg_notify          | string | 通知レベルが 'none' 以外の場合、その通知レベル
| tg_msg_pv          | string | プライベートメッセージの場合 "1"、それ以外は "0"
|===

[[trigger_data_command]]
===== Command

"command" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数         | 型      | 説明
| buffer       | pointer | バッファ
| tg_argvN     | string  | N 番目の引数
| tg_argv_eolN | string  | N 番目の引数から最後の引数まで
|===

[[trigger_data_command_run]]
===== Command_run

"command_run" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数       | 型      | 説明
| buffer     | pointer | バッファ
| tg_command | string  | 実行されたコマンド
|===

[[trigger_data_timer]]
===== Timer

"timer" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型     | 説明
| tg_remaining_calls | string | 残り呼び出し回数
| tg_date            | string | 現在の日付および時間 (フォーマット: `YYYY-MM-DD hh:mm:ss`)
|===

[[trigger_data_config]]
===== Config

"config" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数      | 型     | 説明
| tg_option | string | オプション
| tg_value  | string | 値
|===

[[trigger_data_focus]]
===== Focus

"focus" コールバックは以下の変数をハッシュテーブルに格納します:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数     | 型      | 説明
| window   | pointer | ウィンドウ
| buffer   | pointer | バッファ
|===

ハッシュテーブルには受け取ったハッシュテーブルに含まれる全てのキーおよび値 (型:
string/string) が含まれています。

[[trigger_examples]]
==== 例

[[trigger_example_url_color]]
===== URL の色

URL を緑色にする:

----
/trigger add url_color modifier weechat_print "${tg_notify}" "==\S+://\S+==${color:green}${re:0}${color:reset}=="
----

[NOTE]
ここで使われている URL を検出するための単純な正規表現はすべての URL
をうまく検出するものではありませんが、複雑な正規表現を使うよりも高速です。

[[trigger_example_auto_pong]]
===== ping クエリに対する自動応答

誰かがプライベートバッファで "ping" を送信した場合、このトリガは
`pong` で自動的に応答します:

----
/trigger add pong print "" "${type} == private && ${tg_message} == ping" "" "pong"
----

[[trigger_example_responsive_layout]]
===== レスポンシブレイアウト

以下のトリガはターミナルのサイズが変更されたときに表示されている内容をカスタマイズするものです:

----
/trigger add resize_small signal signal_sigwinch "${info:term_width} < 100" "" "/bar hide nicklist"
/trigger add resize_big signal signal_sigwinch "${info:term_width} >= 100" "" "/bar show nicklist"
----

WeeChat は SIGWINCH を受けとたった際 (ターミナルのサイズが変更された際)
に "signal_sigwinch" シグナルを送信し、このトリガはこのシグナルをキャッチします。

`${info:term_width}` を使った条件でターミナルの横幅を確認します (必要であれば
`${info:term_height}` を使うことも可能です)。

この例では、ターミナルが小さくなった場合、ニックネームリストを隠します。さらに横幅が
100 文字幅以上になった場合、ニックネームリストを表示します。

[[trigger_example_config_save]]
===== 設定の自動保存

例えば 1 時間ごとに、設定ファイル (`*.conf`)
を自動的に保存することが可能です:

----
/trigger add cfgsave timer 3600000;0;0 "" "" "/mute /save"
----

timer フックに対する引数は:

* '3600000': 3600 * 1000 ミリ秒、コールバックは毎時間呼び出される
* '0': 秒の調整 (この場合調整しない)
* '0': 呼び出し回数の最大値 (0 = タイマーを無限に繰り返す)

コマンド `/mute /save` は無言で設定ファイルを保存します
(core バッファに対して何も表示しません)。

[[xfer_plugin]]
=== Xfer プラグイン

Xfer プラグインの機能:

* ダイレクトチャット (サーバ不要の 2 ホスト間直接接続):
  例えば IRC プラグイン経由の "DCC チャット"
* ファイル転送、例えば IRC プラグイン経由の "DCC"

[[xfer_options]]
==== オプション (xfer.conf)

セクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド        | 説明
| look       | /set xfer.look.*    | 外観
| color      | /set xfer.color.*   | 色
| network    | /set xfer.network.* | ネットワークオプション
| file       | /set xfer.file.*    | ファイルの送信/受信に関するオプション
|===

オプション:

include::autogen/user/xfer_options.asciidoc[]

[[xfer_commands]]
==== コマンド

include::autogen/user/xfer_commands.asciidoc[]

[[support]]
== サポート

サポートを依頼する前に、必ず WeeChat に付属するドキュメントと FAQ を読んでください。

IRC を使ったサポート窓口は 'chat.freenode.net' サーバにあります:

* 公式チャンネル (開発者もいます):
** '#weechat' (英語)
** '#weechat-fr' (フランス語)
* 非公式チャンネル:
** '#weechat-de' (ドイツ語)

他の方法でサポートを受けるには、以下のページをご覧ください: https://weechat.org/dev/support
