= WeeChat ユーザーズガイド
:author: Sébastien Helleu
:email: flashcode@flashtux.org
:lang: ja
:toc: left
:toclevels: 4
:toc-title: 目次
:sectnums:
:sectnumlevels: 3
:docinfo1:


翻訳者:

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


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

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


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

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

[[features]]
=== 特徴

主な特徴:

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

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

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

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

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

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

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

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

* Arch Linux: `pacman -S weechat`
* Cygwin (Windows): setup.exe で WeeChat パッケージを選択してください
* Debian/Ubuntu (または Debian 互換ディストリビューション):
  `apt-get install weechat-curses weechat-plugins`
* Fedora Core: `dnf install weechat`
* Gentoo: `emerge weechat`
* Mandriva/RedHat (または RPM 互換ディストリビューション):
  `rpm -i /path/to/weechat-x.y.z-1.i386.rpm`
* openSUSE: `zypper in weechat`
* Sourcemage: `cast weechat`

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

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

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

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

[NOTE]
macOS では https://brew.sh/[Homebrew] を使ってください:
`brew install weechat` (ヘルプを見るには: `brew info weechat`)。

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

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

[width="100%",cols="6,^3,^3,.^13",options="header"]
|===
| パッケージ ^(1)^       | バージョン       | 要件   | 機能
| C コンパイラ
  (gcc, clang, ...)      |                  | *必須* | ビルド
| C++ コンパイラ         |                  |        | ビルドとテストの実行、JavaScript プラグイン
| cmake                  | ≥ 3.0            | *必須* | ビルド (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       |                  |        | spell プラグイン
| python3-dev            | ^(4)^            |        | python プラグイン
| libperl-dev            |                  |        | perl プラグイン
| ruby2.5, ruby2.5-dev   | 1.8 以上         |        | ruby プラグイン
| liblua5.3-dev          |                  |        | lua プラグイン
| tcl-dev                | 8.5 以上         |        | tcl プラグイン
| guile-2.0-dev          | 2.0 以上         |        | guile (scheme) プラグイン
| libv8-dev              | 3.24.3 以下      |        | javascript プラグイン
| php-dev, libphp-embed  | 7.0 以上         |        | PHP プラグイン
| libxml2-dev            |                  |        | PHP プラグイン
| libargon2-0-dev        |                  |        | PHP プラグイン (PHP 7.2 以上の場合)
| libsodium-dev          |                  |        | PHP プラグイン (PHP 7.2 以上の場合)
| asciidoctor            | 1.5.4 以上       |        | man ページと文書のビルド
| libcpputest-dev        | 3.4 以上         |        | ビルドとテストの実行
|===

[NOTE]
^(1)^ Debian GNU/Linux
ディストリビューションにおけるパッケージ名です。他のディストリビューションではバージョンとパッケージ名が異なるかもしれません。 +
^(2)^ WeeChat は libncurses**w**5-dev でコンパイルすることを推奨します
(*w* が重要です)。libncurses5-dev でもコンパイル可能ですが、これは推奨
*されません* (ワイドキャラクタの表示にバグを生じるでしょう)。 +
^(3)^ IRC SASL 認証で ECDSA-NIST256P-CHALLENGE を使うには、GnuTLS
バージョン 3.0.21 以上が必要です。 +
// TRANSLATION MISSING
^(4)^ By default Python 3.x is used. If you enable option `ENABLE_PYTHON2` (see
below), only the version 2.7 of Python is recommended.

Debian および Ubuntu
ベースのディストリビューションを使っており、_/etc/apt/sources.list_ ファイルで "deb-src"
ソースエントリを指定しているならば、すべての依存関係にあるパッケージを以下のコマンドでインストール可能です:

----
# apt-get build-dep weechat
----

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

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

----
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
----

* 任意のディレクトリ (例えば自分のホームディレクトリ) にインストールする場合:

----
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/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`) を推奨します。

| CMAKE_INSTALL_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_BUFLIST | `ON`, `OFF` | ON |
  <<buflist_plugin,Buflist プラグイン>>のコンパイル。

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

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

| ENABLE_DOC | `ON`, `OFF` | OFF |
  HTML 文書のコンパイル。

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

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

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

| ENABLE_FSET | `ON`, `OFF` | ON |
  <<fset_plugin,Fset プラグイン>>のコンパイル。

| 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_PHP | `ON`, `OFF` | ON |
  <<scripts_plugins,PHP プラグイン>>のコンパイル。

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

// TRANSLATION MISSING
| ENABLE_PYTHON2 | `ON`, `OFF` | OFF |
  Compile <<scripts_plugins,Python plugin>> using Python 2 instead of 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、PHP) のコンパイル。

| ENABLE_SPELL | `ON`, `OFF` | ON |
  <<spell_plugin,Spell プラグイン>>のコンパイル。

| 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 |
  コンパイルテスト。

| ENABLE_CODE_COVERAGE | `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
$ sudo make install
----

* 任意のディレクトリ (例えば自分のホームディレクトリ) にインストールする場合:

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

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

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

[[run_tests]]
==== テストの実行

テストをコンパイルするには以下のパッケージが *必須* です:

* libcpputest-dev
* C++ compiler

テストは WeeChat のコンパイル時に有効化しなければいけません (CMake を使う場合):

----
$ cmake .. -DENABLE_TESTS=ON
----

コンパイル終了後、build ディレクトリでテストを起動してください (CMake を使う場合):

----
$ ctest -V
----

[[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 でバックトレースを得る

<<core_files,オプションが有効の場合>>、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 の起動

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

----
$ weechat
----

WeeChat の初回起動時にデフォルトのオプション設定を含む設定ファイルが
_~/.weechat_ ディレクトリの中に作成されます
(<<files_and_directories,ファイルとディレクトリ>>を参照してください)。

==== コマンドラインオプション

include::cmdline_options.ja.adoc[]

==== デバッグオプション

[WARNING]
以下のオプションはデバッグ用です。*通常利用時には使わないでください!*

include::cmdline_options_debug.ja.adoc[]

[[environment_variables]]
=== 環境変数

以下の環境変数が定義されていた場合、WeeChat はそれを利用します:

[width="100%",cols="1m,6",options="header"]
|===
| 変数名               | 説明
| WEECHAT_HOME         | WeeChat ホームディレクトリ (ここには設定ファイル、ログ、スクリプトなどがあります)
| WEECHAT_PASSPHRASE   | 暗号化データを復号化するためのパスフレーズ
| WEECHAT_EXTRA_LIBDIR | プラグインをロードするための追加ディレクトリパス (設定したパス内の "plugins" ディレクトリからロードします)
|===

[[files_and_directories]]
=== ファイルとディレクトリ

デフォルト状態の WeeChat は `~/.weechat`
ディレクトリ内に設定ファイルおよびその他のデータを書き込みます。

// TRANSLATION MISSING
[[weechat_directories]]
==== WeeChat directories

// TRANSLATION MISSING
The WeeChat directories are:

[width="100%",cols="1m,3",options="header"]
|===
| パス/ファイル     | 説明
| ~/.weechat/       | WeeChat ホームディレクトリ (変更するには <<running_weechat,WeeChat の起動>>を参照してください)
|    logs/          | ログファイル (バッファごとに 1 つのファイル)
|    python/        | Python スクリプト
|       autoload/   | 起動時に自動ロードされる Python スクリプト ^(1)^
|    perl/          | Perl スクリプト
|       autoload/   | 起動時に自動ロードされる Perl スクリプト ^(1)^
|    ruby/          | Ruby スクリプト
|       autoload/   | 起動時に自動ロードされる Ruby スクリプト ^(1)^
|    lua/           | Lua スクリプト
|       autoload/   | 起動時に自動ロードされる Lua スクリプト ^(1)^
|    tcl/           | Tcl スクリプト
|       autoload/   | 起動時に自動ロードされる Tcl スクリプト ^(1)^
|    guile/         | Guile スクリプト
|       autoload/   | 起動時に自動ロードされる Guile スクリプト ^(1)^
|    javascript/    | JavaScript スクリプト
|       autoload/   | 起動時に自動ロードされる JavaScript スクリプト ^(1)^
|    php/           | PHP スクリプト
|       autoload/   | 起動時に自動ロードされる PHP スクリプト ^(1)^
|===

[NOTE]
^(1)^ このディレクトリには親ディレクトリ内にあるスクリプトへのシンボリックリンクのみが含まれることが多いです。

// TRANSLATION MISSING
[[weechat_files]]
==== WeeChat files

WeeChat ホームディレクトリには以下のファイルが含まれます:

[width="100%",cols="1m,3,6",options="header"]
|===
| ファイル        | 説明                                    | データ保護
| weechat.conf    | WeeChat の主要設定ファイル              | 保護される場合もあります (例: 保存されたバッファレイアウトに含まれるチャンネルのリスト)
| sec.conf        | 機密データを含む設定ファイル            | *保護されます、機密性の高いデータ*: このファイルを誰かと共有してはいけません
| plugins.conf    | プラグイン設定ファイル                  | 保護される場合もあります、プラグインおよびスクリプトに依存します
| alias.conf      | _alias_ プラグイン用の設定ファイル      | 保護される場合もあります、エイリアスに依存します
| buflist.conf    | _buflist_ プラグイン用の設定ファイル    | 保護されません
| charset.conf    | _charset_ プラグイン用の設定ファイル    | 保護されません
| exec.conf       | _exec_ プラグイン用の設定ファイル       | 保護されません
| fifo.conf       | _fifo_ プラグイン用の設定ファイル       | 保護されません
| fset.conf       | _fset_ プラグイン用の設定ファイル       | 保護されません
| guile.conf      | _guile_ プラグイン用の設定ファイル      | 保護されません
| irc.conf        | _irc_ プラグイン用の設定ファイル        | *保護されます*: サーバ、nickserv、チャンネルのパスワードを保存することが可能です (これらのデータが `sec.conf` に保存されない場合)
| javascript.conf | _javascript_ プラグイン用の設定ファイル | 保護されません
| logger.conf     | _logger_ プラグイン用の設定ファイル     | 保護されません
| lua.conf        | _lua_ プラグイン用の設定ファイル        | 保護されません
| perl.conf       | _perl_ プラグイン用の設定ファイル       | 保護されません
| php.conf        | _php_ プラグイン用の設定ファイル        | 保護されません
| python.conf     | _python_ プラグイン用の設定ファイル     | 保護されません
| relay.conf      | _relay_ プラグイン用の設定ファイル      | 保護されません
| ruby.conf       | _ruby_ プラグイン用の設定ファイル       | 保護されません
| script.conf     | _script_ プラグイン用の設定ファイル     | 保護されません
| spell.conf      | _spell_ プラグイン用の設定ファイル      | 保護されません
| tcl.conf        | _tcl_ プラグイン用の設定ファイル        | 保護されません
| trigger.conf    | _trigger_ プラグイン用の設定ファイル    | 保護される場合もあります、トリガに依存します
| xfer.conf       | _xfer_ プラグイン用の設定ファイル       | 保護されません
| weechat.log     | WeeChat ログファイル                    | 保護されません
|===

[IMPORTANT]
手作業で設定ファイルを編集することは *推奨されません*。なぜなら
WeeChat は常時 (例えば <<command_weechat_quit,/quit>> コマンドの実行時など)
設定ファイルに書き込む可能性がありますし、手作業で修正を加えた後には必ず <<command_weechat_reload,/reload>>
コマンドを実行しなければいけない (これには <<command_weechat_save,/save>>
を使って保存されていない変更を失うリスクがある) からです。 +
設定を編集するには <<command_weechat_set,/set>>
コマンドを使ってください。これは値を検査し、設定の変更をすぐに適用します。

[[screen_layout]]
=== 画面レイアウト

WeeChat を起動した端末の例:

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

画面は以下のエリアから構成されます:

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

バッファリスト (_buflist_) バーは以下の初期要素を持っています:

[width="100%",cols="^3,^4,10",options="header"]
|===
| 要素    | 例          | 説明
| buflist | `1.weechat` | バッファ一覧
|===

状態 (_title_) バーは以下の初期要素を持っています:

[width="100%",cols="^3,^4,10",options="header"]
|===
| 要素         | 例                 | 説明
| buffer_title | `Welcome to #test` | バッファタイトル
|===

状態 (_status_) バーは以下の初期要素を持っています:

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

ニックネームリスト (_nicklist_) バーは以下の初期要素を持っています:

[width="100%",cols="^3,^4,10",options="header"]
|===
| 要素            | 例        | 説明
| buffer_nicklist | `@Flashy` | 現在のバッファのニックネーム一覧
|===

その他の利用可能な要素 (初期状態のバーはこれらの要素を持ちません):

[width="100%",cols="^3,^4,10",options="header"]
|===
| 要素              | 例                  | 説明
| spell_dict        | `fr,en`             | 現在のバッファにおけるスペリング辞書
| spell_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`                 | 現在のウィンドウ番号
|===

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

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

[[command_line_syntax]]
==== 文法

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

----
/set
----

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

----
hello
----

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

----
//set
----

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

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

[width="60%",cols="3,5",options="header"]
|===
| キー                   | 説明
| kbd:[Ctrl+c], kbd:[b]  | テキストを太字に
| kbd:[Ctrl+c], kbd:[c],
  kbd:[xx]               | テキスト表示色を `xx` に (以下の色リストを参照)
| kbd:[Ctrl+c], kbd:[c],
  kbd:[xx], kbd:[,],
  kbd:[yy]               | テキスト表示色を `xx` に、背景色を `yy` に (以下の色リストを参照)
| kbd:[Ctrl+c], kbd:[i]  | テキストをイタリック体に
| kbd:[Ctrl+c], kbd:[o]  | テキスト表示色と属性をリセット
| kbd:[Ctrl+c], kbd:[v]  | テキストを反転 (テキスト表示色と背景色の入れ替え)
| kbd:[Ctrl+c], kbd:[_]  | テキストに下線を引く
|===

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

kbd:[Ctrl+c], kbd:[c] 用の色コード:

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

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

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

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

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

[[colors]]
=== 色

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

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

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

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

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

* screen 内の場合: _screen-256color_
* tmux 内の場合: _screen-256color_、_tmux-256color_
* screen および tmux の外の場合: _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="1m,4",options="header"]
|===
| 名前         | 色
| default      | デフォルトの端末色 (背景色を透過色とする)
| black        | 黒
| darkgray     | 暗い灰色
| red          | 暗い赤
| lightred     | 明るい赤
| green        | 暗い緑色
| lightgreen   | 明るい緑色
| brown        | 茶色
| yellow       | 黄色
| blue         | 暗い青
| lightblue    | 明るい青
| magenta      | 暗い赤紫色
| lightmagenta | 明るい赤紫色
| cyan         | 暗い青緑色
| lightcyan    | 明るい青緑色
| gray         | 灰色
| white        | 白
|===

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

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

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

`/color` コマンドで現在の色と色制限を確認できます。kbd:[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
----

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

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

バッファの例:

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

_window_
はバッファを表示する画面エリアのことです。画面を複数のウィンドウに分割することができます。

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

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

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

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

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

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

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

[[buffers_lines]]
=== バッファの行

[[lines_format]]
==== 行の書式

書式付きバッファに表示される各行は以下のフィールドから構成されます:

[width="100%",cols="2,2,10",options="header"]
|===
| フィールド          | 表示状態           | 説明
| 日付/時間 (メッセージ) | 表示            | メッセージの日付および時間 (おそらく過去)。
| 日付/時間 (表示)    | 非表示             | WeeChat がメッセージを表示した時間。
| プレフィックス      | 表示               | メッセージのプレフィックス、通常ニックネーム。
| メッセージ          | 表示               | メッセージ自体。
| 表示状態            | 非表示             | ブール値: 行が表示された場合には真、行が <<command_weechat_filter,/filter>> コマンドでフィルタされた場合には偽。
| ハイライト          | 非表示             | ブール値: 行がハイライトされている場合には真、それ以外の場合には偽。
| タグ | `/debug tags` の実行で表示状態を切り替え | 行に関連付けられたタグ (<<lines_tags,行のタグ>>参照)。
|===

外観オプション(_pass:[weechat.look.*]_) と色オプション (_pass:[weechat.color.chat_*]_)
を使えば、行の表示をカスタマイズすることが可能です。

[[lines_tags]]
==== 行のタグ

WeeChat は様々な目的で各行にタグを付けます:

* ハイライト
* 通知レベル
* ログ記録
* <<command_weechat_filter,/filter>> コマンドの使用

`/debug tags` コマンドでタグを表示することが可能です (タグを非表示にする場合も同じコマンドを使います)。

通常使用するタグ (一部抜粋したリスト):

[width="70%",cols="1m,4",options="header"]
|===
| タグ             | 説明
| no_filter        | フィルタできない行
| no_highlight     | ハイライトできない行
| no_log           | ログファイルに書き込まれない行
| log0 ... log9    | 行に対するログレベル (`/help logger` を参照)
| notify_none      | この行を含むバッファはホットリストに追加されません
| notify_message   | この行を含むバッファは "message" レベルでホットリストに追加されます
| notify_private   | この行を含むバッファは "private" レベルでホットリストに追加されます
| notify_highlight | この行を含むバッファは "highlight" レベルでホットリストに追加されます
| self_msg         | 自分のメッセージ
| nick_xxx         | ニックネーム "xxx" からのメッセージ
| prefix_nick_ccc  | プレフィックスを色 "ccc" のニックネームにします
| host_xxx         | メッセージ中のユーザ名とホスト
| irc_xxx          | IRC メッセージ "xxx" (コマンドまたは 3 桁の番号)
| irc_numeric      | IRC 番号メッセージ
| irc_error        | IRC からのエラー
| irc_action       | あるニックネームからのアクション (`/me` コマンド)
| irc_ctcp         | CTCP メッセージ
| irc_ctcp_reply   | CTCP メッセージに対する返信
| irc_smart_filter | "smart filter" でフィルタリング可能な IRC メッセージ
| away_info        | 離席状態のメッセージ
|===

[[bars]]
=== バー

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

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

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

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

| type | `root`、`window` |
  `root` 型バーは画面上の全ウィンドウの外側にきっかり 1 回だけ表示されます。
  デフォルトバーである _buflist_ は `root` 型のバーです。 +
  `window` 型バーは各ウィンドウの中に表示されます。例えば、`/window splith`
  や `/window splitv` などの方法で画面を 1 回分割した場合、1
  つのバーがそれぞれのウィンドウに表示されます。デフォルトの `window`
  型バーには _title_、_status_、_input_、_nicklist_ などがあります。

| 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 を行の最後で分断されることがなくなります。

最小限表示を有効化するデフォルトキーは kbd:[Alt+l] (`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 が以下のような表示状態の場合:

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.freenode│Welcome to #abc                                                            │
│  weechat │12:52:27   --> | Flashy (flashcode@weechat.org) has joined #abc    │@Flashy│
│2.  #test │12:52:27    -- | Nicks #abc: [@Flashy @joe +weebot peter]          │@joe   │
│3.  #abc  │12:52:27    -- | Channel #abc: 4 nicks (2 ops, 1 voice, 1 normal)  │+weebot│
│4.  #def  │12:52:27    -- | Channel created on Tue Jan 27 06:30:17 2009       │peter  │
│5.  #ghi  │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] [5] [irc/freenode] 3:#abc(+n){4}                                   │
│          │[@Flashy(i)] hi peter!█                                                    │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

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

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│12:52 --> Flashy (flashcode@weechat.org) has joined #abc                              │
│12:52 -- Nicks #abc: [@Flashy @joe +weebot peter]                                     │
│12:52 -- Channel #abc: 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/weechat_plugin_a│
│pi.en.html#_weechat_hook_process                                                      │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

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

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

[[setup_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
----

[[max_hotlist_level_nicks]]
==== ニックネームに対するホットリストレベルの最大値

ニックネーム、バッファ、バッファグループ (IRC サーバなど)
に対してホットリストレベルの最大値を設定することが可能です。

あるニックネームのリストに対してバッファプロパティ "hotlist_max_level_nicks"
を設定したり、各ニックネームに対してホットリストレベルの最大値を設定することも可能です。設定可能なレベルは以下です:

* -1: ニックネームがホットリストを変更しない優先度
* 0: 低優先度 (参加および退出メッセージなど)
* 1: 通常メッセージ
* 2: プライベートメッセージ
* 3: ハイライト (これはすべてのメッセージのデフォルト最大値であるため、通常これを指定することはありません)

例えば現在のバッファで "joe" と "mike" からのメッセージに対するハイライトを無効化するには以下のように設定します:

----
/buffer set hotlist_max_level_nicks_add joe:2,mike:2
----

[NOTE]
バッファプロパティ "hotlist_max_level_nicks" は設定ファイルに保存されません。 +
これを保存するには _buffer_autoset.py_ スクリプトを使ってください: このスクリプトをインストールするには
`/script install buffer_autoset.py` コマンドを使い、ヘルプを見るには `/help buffer_autoset` コマンドを使ってください。

[[highlights]]
=== ハイライト

[[highlights_words]]
==== ハイライトする単語の追加

デフォルトで WeeChat
は自分のニックネームが含まれる他のユーザからのメッセージをハイライトします。このため、ハイライトはバッファに依存します
(ニックネームはバッファごとに異なる場合があります)。

他の単語を追加するには <<option_weechat.look.highlight,weechat.look.highlight>>
オプションを使います。例えば自分のニックネーム、"word1"、"word2"、"test"
から始まる任意の単語をハイライトするには以下のように設定します:

----
/set weechat.look.highlight word1,word2,test*
----

単語に対してさらに具体的なルールを設定する必要がある場合、<<option_weechat.look.highlight_regex,weechat.look.highlight_regex>>
オプションを使って正規表現で指定することも可能です。例えば "flashcode"、"flashcöde"、"flashy"
という単語をハイライトするには以下のように設定します:

----
/set weechat.look.highlight_regex flashc[oö]de|flashy
----

ハイライトする単語の区切りは <<option_weechat.look.word_chars_highlight,weechat.look.word_chars_highlight>>
オプションを使って設定します。

[[highlights_tags]]
==== ハイライトするタグの追加

表示される行には「タグ」を含めることが可能です。「タグ」とはメッセージの出自やメッセージ自身に関する情報を与えるものです。 +
`/debug tags` コマンドでタグを表示することが可能です
(タグを非表示にする場合も同じコマンドを使います)。

ハイライトするタグを明示するには
<<option_weechat.look.highlight_tags,weechat.look.highlight_tags>>
オプションを使います。複数のタグを指定するにはコンマで区切り、複数のタグの論理
"and" を表すには `+++` で区切ります。

例えば "FlashCode" というニックネームからのすべてのメッセージと "toto"
で始まるニックネームからのすべての通知メッセージをハイライトするには以下のように設定します:

----
/set weechat.look.highlight_tags "nick_flashcode,irc_notice+nick_toto*"
----

[[highlights_regex_buffer]]
==== バッファに対する特別なハイライトの設定

バッファプロパティ "highlight_regex"
と正規表現を使ってハイライトを強制できます。

例えば現在のバッファ宛のすべてのメッセージをハイライトするには以下のように設定します:

----
/buffer set highlight_regex .*
----

[NOTE]
バッファプロパティ "highlight_regex" は設定ファイルに保存されません。 +
これを保存するには _buffer_autoset.py_ スクリプトを使ってください: このスクリプトをインストールするには
`/script install buffer_autoset.py` コマンドを使い、ヘルプを見るには `/help buffer_autoset` コマンドを使ってください。

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

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

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

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

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

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

以下のキーは「検索」検索モード (バッファ内のテキスト検索用に
kbd:[Ctrl+r] が押された状態) でのみ有効です。

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

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

以下のキーは「カーソル」モード (画面上でカーソルを自由に動かせる状態) でのみ有効です。

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

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

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

[width="100%",cols="^.^3,^.^3,^.^3,.^8,.^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}`
| kbd:[▲]           | -            | チャット                      | バッファ履歴を上方向にスクロール | `/window scroll_up -window ${_window_number}`
| kbd:[▼]           | -            | チャット                      | バッファ履歴を下方向にスクロール | `/window scroll_down -window ${_window_number}`
| kbd:[▲]           | -            | チャット (スクリプトバッファ) | スクリプトバッファを 5 行上方向にスクロール | `/script up 5`
| kbd:[▼]           | -            | チャット (スクリプトバッファ) | スクリプトバッファで 5 行下方向にスクロール | `/script down 5`
| kbd:[Ctrl+▲]      | -            | チャット                      | 水平左方向にスクロール | `/window scroll_horiz -window ${_window_number} -10%`
| kbd:[Ctrl+▼]      | -            | チャット                      | 水平右方向にスクロール | `/window scroll_horiz -window ${_window_number} +10%`
| ◾◽◽               | 上 / 左      | バッファリスト                | 指定したバッファを下の番号に移動 | `buflist_mouse` シグナル
| ◾◽◽               | 下 / 右      | バッファリスト                | 指定したバッファを上の番号に移動 | `buflist_mouse` シグナル
| ◾◽◽               | -            | バッファリスト                | 指定したバッファに切り替える (現在のバッファを指定した場合、バッファ切り替え履歴で前のバッファに切り替える) | `buflist_mouse` シグナル
| ◽◽◾               | -            | バッファリスト                | 現在のバッファを指定した場合、バッファ切り替え履歴で次のバッファに切り替える | `buflist_mouse` シグナル
| kbd:[Ctrl+▲]      | -            | バッファリスト                | バッファ切り替え履歴で前のバッファに切り替える | `buflist_mouse` シグナル
| kbd:[Ctrl+▼]      | -            | バッファリスト                | バッファ切り替え履歴で次のバッファに切り替える | `buflist_mouse` シグナル
| ◾◽◽               | 上           | ニックネームリスト            | ニックネームリストを 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`
| kbd:[▲]           | -            | 任意のバー                    | バーを -20% スクロール | `/bar scroll ${_bar_name} ${_window_number} -20%`
| kbd:[▼]           | -            | 任意のバー                    | バーを +20% スクロール | `/bar scroll ${_bar_name} ${_window_number} +20%`
| ◽◾◽               | -            | 任意の場所                    | この場所でカーソルモードを開始 | `/cursor go ${_x},${_y}`
|===

[NOTE]
^(1)^ kbd:[▲] と kbd:[▼] はホイールの上方向回転と下方向回転に対応します。

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

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

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

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

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

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

----
/mouse enable
----

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

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

[IMPORTANT]
WeeChat でマウスを有効化した場合、すべてのマウスイベントは WeeChat
によって捕捉されます。したがって、カット/ペーストなどの操作や URL
のクリックなどは端末に送信されません。kbd:[Shift]
キーを使えば、一時的にマウスを無効化して、端末へ直接イベントを送信する事が可能です
(一部の端末、例えば iTerm などでは kbd:[Shift] の代わりに kbd:[Alt] を使ってください)。

[NOTE]
マウスに関するトラブルがあれば link:weechat_faq.ja.html#mouse[WeeChat FAQ (よくある質問) / マウス]を参照してください。

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

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

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

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

修飾キーリスト:

[width="50%",cols="3m,4",options="header"]
|===
| 修飾キー | 説明
| ctrl     | kbd:[Ctrl] キー
| alt      | kbd:[Alt] キー
| ctrl-alt | kbd:[Ctrl] + kbd:[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`
コマンドの後にマウスを動かすことでコマンドラインにマウスイベントが入力されます。これにより対応するイベントを確認できます。

[[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
----

利便性を考慮して、暗号化データを専用のバッファに表示できるようになっています
(値を見るにはバッファで kbd:[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}"
----

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

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

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

[[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.adoc[]

[[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.adoc[]

[[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,8",options="header"]
|===
| プラグイン | 説明
| alias      | コマンドの別名を定義
| buflist    | バッファリストを表示するためのバー要素
| charset    | バッファの文字コードに従ってデコード/エンコード
| exec       | WeeChat 内部から外部コマンドを実行
| fifo       | 外部から WeeChat にコマンドを送信するための FIFO パイプ
| fset       | WeeChat とプラグインのオプションを高速設定
| 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
| php        | PHP スクリプト API
| spell      | コマンドラインのスペルチェック
| trigger    | WeeChat およびプラグインが発生させたイベントに対するテキスト置換とコマンド実行
| xfer       | ファイル転送とダイレクトチャット
|===

API を使ったプラグインやスクリプトの開発についてより詳しく学ぶには
link:weechat_plugin_api.ja.html[WeeChat プラグイン API リファレンス]または
link:weechat_scripting.ja.html[WeeChat スクリプト作成ガイド]を参照してください。

[[alias_plugin]]
=== Alias

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

大文字の別名はデフォルトで定義されたものです (標準コマンドと区別するために大文字を使っています);
WeeChat はコマンドの大文字小文字を区別しないので、コマンド
`/close` は別名である `/CLOSE` を実行します。


デフォルトで定義された別名のリスト:

include::autogen/user/alias_default_aliases.adoc[]

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

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

[[alias_options]]
==== オプション

_alias.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド                   | 説明
| cmd        | <<command_alias_alias,/alias>> +
               /set alias.cmd.*               | 別名に割り当てたコマンド
| completion | <<command_alias_alias,/alias>> +
               /set alias.completion.*        | 別名に割り当てた補完
|===

[[buflist_plugin]]
=== Buflist

Buflist プラグインを使うことで、"buflist" と呼ばれるバー要素の中にバッファリストを表示させることが可能になります
(それ以外に "buflist2" と "buflist3" と呼ばれるバー要素も利用可能です)。 +
プラグインは開始時にバー要素 "buflist" を持つデフォルトバー "buflist" を作成します。

[[buflist_commands]]
==== コマンド

include::autogen/user/buflist_commands.adoc[]

[[buflist_options]]
==== オプション

_buflist.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド          | 説明
| format     | /set buflist.format.* | バッファリストの表示書式
| look       | /set buflist.look.*   | 外観
|===

オプション:

include::autogen/user/buflist_options.adoc[]

[[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_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]]
==== トラブルシューティング

文字コードに関する問題があれば、link:weechat_faq.ja.html#charset[WeeChat FAQ (よくある質問) / いくつかの文字が見えません。どうすれば良いですか。]を参照してください。

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

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

[[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.adoc[]

[[exec_plugin]]
=== Exec

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

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

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

[[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.adoc[]

[[fifo_plugin]]
=== Fifo

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

FIFO パイプは _~/.weechat/_ の中にあり、デフォルトで _weechat_fifo_ という名前を付けられています。

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

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

例:

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

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

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

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

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

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

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

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

[[fifo_commands]]
==== コマンド

include::autogen/user/fifo_commands.adoc[]

[[fifo_options]]
==== オプション

_fifo.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド     | 説明
| file       | /set fifo.file.* | FIFO パイプに関するオプション
|===

オプション:

include::autogen/user/fifo_options.adoc[]

[[fset_plugin]]
=== Fset

fset (高速設定) プラグインはバッファ内にオプションのリストを表示し、WeeChat
とプラグインのオプション設定を支援します。

[[fset_commands]]
==== コマンド

include::autogen/user/fset_commands.adoc[]

[[fset_options]]
==== オプション

_fset.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド       | 説明
| color      | /set fset.color.*  | 色
| format     | /set fset.format.* | オプションリストの表示書式
| look       | /set fset.look.*   | 外観
|===

オプション:

include::autogen/user/fset_options.adoc[]

[[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_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 https://www.spi-inc.org/ca/spi-cacert.crt
----

[NOTE]
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
----

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

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

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

* _plain_: 平文パスワード (デフォルト)
* _ecdsa-nist256p-challenge_: 公開鍵/秘密鍵を使うチャレンジ認証
* _external_: クライアント側 SSL 証明書
* _dh-blowfish_: blowfish 暗号パスワード (*危険*、非推奨)
* _dh-aes_: AES 暗号パスワード (*危険*、非推奨)

サーバオプション:

* _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 -out ~/.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 ajnvpgl6prmkb7yktvue6im5wiedlz2w32uhcwaamdiecdrfpwwgnlqd.onion
----

// TRANSLATION MISSING
[NOTE]
If you are using an old version of TOR (before 0.3.5) you should use the address
`freenodeok2gncmy.onion` instead.

TOR プロキシを設定:

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

ECDSA-NIST256P-CHALLENGE メカニズムで SASL 認証を設定 (秘密鍵を作成するには
<<irc_sasl_ecdsa_nist256p_challenge,SASL ECDSA-NIST256P-CHALLENGE 認証>>を参照してください):

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

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

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

Freenode と TOR に関するより詳しい情報:
https://freenode.net/kb/answer/chat#accessing-freenode-via-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 サーバ上で使うユーザ名                | `name`
| $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)`              | `name (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  |               | 通知
| 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     |               | ニックネームにエラーがあります
| 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
----

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

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

[[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.adoc[]

[[logger_plugin]]
=== Logger

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

[[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
    │   └── 12
    │       ├── irc.server.freenode.weechatlog
    │       └── irc.freenode.#weechat.weechatlog
    ├── 2011
    │   ├── 01
    │   │   ├── irc.server.freenode.weechatlog
    │   │   └── irc.freenode.#weechat.weechatlog
    │   ├── 02
    ...
....

[[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
        ...
....

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

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

[[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.adoc[]

[[relay_plugin]]
=== Relay

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

* _irc_: IRC プロキシ: IRC サーバに対する接続を、単一または複数の IRC
  クライアントで共有するために用います。
* _weechat_: リモートインターフェースを通じて WeeChat
  を表示および操作する際に利用されるプロトコル。リモートインターフェースの一例:
** Glowing Bear (HTML5): https://www.glowing-bear.org/
** QWeeChat (Qt): https://weechat.org/download
** WeeChat-Android (Android): https://github.com/ubergeek42/weechat-android
** weechat.el (Emacs): https://github.com/the-kenny/weechat.el
** WeeCloud (JavaScript): https://github.com/eirikb/weecloud

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

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

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

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

[[relay_totp]]
==== TOTP

_weechat_ プロトコルでは、パスワードに加えて、二要素認証の
TOTP (時間ベースのワンタイムパスワード) を使うことが可能です。

これは任意設定項目であり、セキュリティレベルを向上させます。

ワンタイムパスワードは以下のようなアプリケーションを使って生成します:

* FreeOTP:
  https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp[Android],
  https://itunes.apple.com/fr/app/freeotp-authenticator/id872559395[iOS]
  (https://freeotp.github.io/[website])
* Google Authenticator:
  https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2[Android],
  https://itunes.apple.com/fr/app/google-authenticator/id388497605[iOS]

TOTP の secret を WeeChat
とワンタイムパスワードを生成するアプリケーション内部に設定しなければいけません。

TOTP の secret は base32 でエンコードされた文字列
(文字および 2 から 7 までの数字) でなければいけません。以下はその例です:

----
/set relay.network.totp_secret "secretpasswordbase32"
----

[[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 サーバごとに異なるポート、もしくは全てのサーバに対して共通のポートを定義することができます。

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

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

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

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

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

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

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

// TRANSLATION MISSING
For example if you use WeeChat as IRC client of the relay, with a server called
"relay" and the relay password "secret", you can setup the password with this
command:

----
/set irc.server.relay.password "freenode:secret"
----

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

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

リモートインターフェースを使って接続できます、<<relay_plugin>> のリストを参照してください。

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

例:

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

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

[[relay_websocket]]
==== WebSocket

Relay プラグインはすべてのプロトコルに対して WebSocket プロトコル
(https://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_ プロトコルの場合)。

[[relay_unix_socket]]
==== UNIX ドメインソケット

`/relay add` コマンドにプロトコルオプション "unix" をつけることで、指定したパスで動作する
UNIX ドメインソケット上の任意のプロトコルをリッスンできます。例:

----
/relay add unix.weechat %h/relay_socket
----

こうすることで、クライアントは weechat プロトコルを使って _~/.weechat/relay_socket_
に接続できます。これは、他のポートをオープンが禁止されている状況下で、リレークライアントの
SSH 転送を許可する際に特に便利です。OpenSSH を使った例:

----
$ ssh -L 9000:.weechat/relay_socket user@hostname
----

これでポート 9000 番に接続してきたローカルのリレークライアントは
"hostname" 上で動作中の WeeChat インスタンスへ転送されます。

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

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

[[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.adoc[]

[[scripts_plugins]]
=== スクリプト

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

スクリプトマネージャを使えば、任意の言語で書かれたスクリプトをロード/アンロードしたり、WeeChat
スクリプトリポジトリ (https://weechat.org/scripts から参照可能)
のスクリプトをインストール/削除したりする事が可能です。

スクリプトの書き方やスクリプト用の WeeChat API についての詳しい情報は
link:weechat_scripting.ja.html[WeeChat スクリプト作成ガイド]を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[[php_commands]]
==== PHP コマンド

include::autogen/user/php_commands.adoc[]

[[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.adoc[]

[[python_options]]
==== Python オプション

_python.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド       | 説明
| look       | /set python.look.* | 外観
|===

オプション:

include::autogen/user/python_options.adoc[]

[[perl_options]]
==== Perl オプション

_perl.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド     | 説明
| look       | /set perl.look.* | 外観
|===

オプション:

include::autogen/user/perl_options.adoc[]

[[ruby_options]]
==== Ruby オプション

_ruby.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド     | 説明
| look       | /set ruby.look.* | 外観
|===

オプション:

include::autogen/user/ruby_options.adoc[]

[[lua_options]]
==== Lua オプション

_lua.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド    | 説明
| look       | /set lua.look.* | 外観
|===

オプション:

include::autogen/user/lua_options.adoc[]

[[tcl_options]]
==== Tcl オプション

_tcl.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド    | 説明
| look       | /set tcl.look.* | 外観
|===

オプション:

include::autogen/user/tcl_options.adoc[]

[[guile_options]]
==== Guile オプション

_guile.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド      | 説明
| look       | /set guile.look.* | 外観
|===

オプション:

include::autogen/user/guile_options.adoc[]

[[javascript_options]]
==== Javascript オプション

_javascript.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド           | 説明
| look       | /set javascript.look.* | 外観
|===

オプション:

include::autogen/user/javascript_options.adoc[]

[[php_options]]
==== PHP オプション

_php.conf_ ファイル内のセクション:

[width="100%",cols="3m,6m,16",options="header"]
|===
| セクション | 操作コマンド    | 説明
| look       | /set php.look.* | 外観
|===

オプション:

include::autogen/user/php_options.adoc[]

[[spell_plugin]]
=== Spell

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

スペルチェック機能はデフォルトで無効化されています。kbd:[Alt+s] で有効無効を切り替える事が可能です。

[[spell_dictionaries]]
==== 辞書

スペルチェック機能を使う前に、すべてのバッファまたは特定のバッファに対して辞書を定義しなければいけません。

同時に複数の辞書を使用可能です:
WeeChat はすべての辞書を使って単語をチェックします。

英語とフランス語の辞書を使う例:

----
/set spell.check.default_dict "en,fr"
----

特定のバッファで使用する辞書を定義することも可能です。ドイツ語のチャンネルでドイツ語の辞書を使う例:

----
/spell setdict de
----

バッファグループに対して特定の辞書を指定することも可能です。freenode
IRC サーバに対して英語の辞書を使う例:

----
/set spell.dict.irc.freenode en
----

詳しい情報はコマンド <<command_spell_spell,/spell>> を参照してください。

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

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

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

----
$ aspell config
----

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

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

[[spell_suggestions]]
==== 修正候補

"spell_suggest" バー要素内に修正候補が表示されます。修正候補の数は
_spell.check.suggestions_ オプションで設定します。

修正候補を利用するには、_spell.check.suggestions_ オプションをゼロ以上の整数に設定し、_status_
バーなどに "spell_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 █                                                                │
└─────────────────────────────────────────────────────────────────────────────────┘
....

[[spell_commands]]
==== コマンド

include::autogen/user/spell_commands.adoc[]

[[spell_options]]
==== オプション

_spell.conf_ ファイル内のセクション:

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

オプション:

include::autogen/user/spell_options.adoc[]

[[trigger_plugin]]
=== Trigger

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

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

[[trigger_default]]
==== デフォルトトリガ

WeeChat はデフォルトで 5
つのトリガを作成しますが、これらを無効化、更新、削除することも可能です:

* 通知用の _beep_ トリガ
* それ以外の 4 つは画面上でパスワードを隠すためのトリガ

デフォルトトリガのリスト:

[width="100%",cols="5m,3,22",options="header"]
|===
| 名前 | フック | 説明

| beep | print |
  ハイライト/プライベートメッセージを受信した際にビープを鳴らす。

| cmd_pass | modifier |
  コマンド内のパスワードを隠す:
  `pass:[/msg nickserv id\|identify\|set password\|ghost\|release\|regain\|recover]`、
  `pass:[/oper]`、
  `pass:[/quote pass]`、
  `pass:[/set *password*]`、
  `pass:[/secure passphrase\|decrypt\|set]`。

| cmd_pass_register | modifier |
  コマンド内のパスワードを隠す `pass:[/msg nickserv register]`。

| msg_auth | modifier |
  IRC auth メッセージ
  (ユーザがコマンドを実行した後にサーバから受信するメッセージ)
  の表示時にパスワードを隠す。

| server_pass | modifier |
  `/server` と `/connect` コマンド内のパスワードを隠す。
|===

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

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

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

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

| hook | `signal`、`hsignal`、`modifier`、`line`, `print`、`command`、
  `command_run`、`timer`、`config`、`focus`、`info`、`info_hashtable` |
  トリガの中で使われるフック。より詳しい情報は
  link:weechat_plugin_api.ja.html#hooks[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`、ほとんどすべてのトリガで戻り値はこれを使うべきで、ほかの値を使うことは極めてまれです)。

| post_action | `none` (何もしない)、`disable` (無効化)、`delete` (削除) |
  実行後のトリガに対する処遇 (ほとんどすべてのトリガではデフォルトの `none`
  を設定するべきで、それ以外の値を設定することはほとんどありません)。
|===

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

----
trigger.trigger.beep.enabled = on
trigger.trigger.beep.hook = print
trigger.trigger.beep.arguments = ""
trigger.trigger.beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})"
trigger.trigger.beep.regex = ""
trigger.trigger.beep.command = "/print -beep"
trigger.trigger.beep.return_code = ok
trigger.trigger.beep.post_action = none
----

[[trigger_execution]]
==== 実行

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

. トリガ条件の確認: 偽の場合、終了
. 正規表現を使ってトリガ内でテキスト置換
. コマンドを実行
. 戻り値を返して終了
  (_modifier_、_line_、_focus_、_info_、_info_hashtable_ フックを除く)
. トリガ実行後の処遇を適用 (`none` 以外の場合)。

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

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

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

| signal |
  1. シグナル名 (優先度の指定も可) (必須) +
  2. シグナル名 (優先度の指定も可) +
  3. ... |
  `+*,irc_in_privmsg+` +
  `+*,irc_in_privmsg;*,irc_in_notice+` +
  `+signal_sigwinch+` |
  link:weechat_plugin_api.ja.html#_hook_signal[hook_signal]

| hsignal |
  1. シグナル名 (優先度の指定も可) (必須) +
  2. シグナル名 (優先度の指定も可) +
  3. ... |
  `+nicklist_nick_added+` |
  link:weechat_plugin_api.ja.html#_hook_hsignal[hook_hsignal]

| modifier |
  1. 修飾子名 (優先度の指定も可) (必須) +
  2. 修飾子名 (優先度の指定も可) +
  3. ... |
  `+weechat_print+` +
  `+5000\|input_text_display;5000\|history_add+` |
  link:weechat_plugin_api.ja.html#_hook_modifier[hook_modifier]

| line |
  1. バッファ型 +
  2. バッファ名 +
  3. タグ |
  `+formatted+` +
  `+free+` +
  `+*;irc.freenode.*+` +
  `+*;irc.freenode.#weechat+` +
  `+formatted;irc.freenode.#weechat;irc_notice+` |
  link:weechat_plugin_api.en.html#_hook_line[hook_line]

| print |
  1. バッファ名 +
  2. タグ +
  3. メッセージ +
  4. 色の削除 (0/1) |
  `+irc.freenode.*+` +
  `+irc.freenode.#weechat+` +
  `+irc.freenode.#weechat;irc_notice+` +
  `+*;;;1+` |
  link:weechat_plugin_api.ja.html#_hook_print[hook_print]

| command |
  1. コマンド名 (優先度の指定も可) (必須) +
  2. 説明 +
  3. 引数 +
  4. 引数の説明 +
  5. 補完 |
  `+test+` +
  `+5000\|test+` |
  link:weechat_plugin_api.ja.html#_hook_command[hook_command]

| command_run |
  1. コマンド (優先度の指定も可) (必須) +
  2. コマンド (優先度の指定も可) +
  3. ... |
  `+/cmd arguments+` |
  link:weechat_plugin_api.ja.html#_hook_command_run[hook_command_run]

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

| config |
  1. オプション名 (優先度の指定も可) (必須) +
  2. オプション名 (優先度の指定も可) +
  3. ... |
  `+weechat.look.*+` |
  link:weechat_plugin_api.ja.html#_hook_config[hook_config]

| focus |
  1. エリア名 (優先度の指定も可) (必須) +
  2. エリア名 (優先度の指定も可) +
  3. ... |
  `+buffer_nicklist+` |
  link:weechat_plugin_api.ja.html#_hook_focus[hook_focus]

| info |
  1. インフォ名 (優先度の指定も可) (必須) +
  2. インフォ名 (優先度の指定も可) +
  3. ... |
  `+my_info+` |
  link:weechat_plugin_api.ja.html#_hook_info[hook_info]

| info_hashtable |
  1. インフォ名 (優先度の指定も可) (必須) +
  2. インフォ名 (優先度の指定も可) +
  3. ... |
  `+my_info+` |
  link:weechat_plugin_api.ja.html#_hook_info_hashtable[hook_info_hashtable]
|===

[[trigger_conditions]]
==== 条件

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

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

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

----
${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})
----

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

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

書式: "/regex/replace" または "/regex/replace/var" (ここで
_var_ はハッシュテーブルの変数)。

ハッシュテーブル内に _var_ が存在しない場合、空の値を持つ _var_
が自動的に作られます。これを使うことで一時的な任意の変数を作れます。

_var_
が指定されなかった場合、デフォルト変数を使います、これはフックの種類に依存します:

[width="100%",cols="2,3,7",options="header"]
|===
| フック         | デフォルト変数     | 更新が許可Update allowed ^(1)^
| signal         | tg_signal_data     |
| hsignal        |                    |
| modifier       | tg_string          | tg_string
| line           | message            | buffer、buffer_name、y、date、date_printed、str_time、tags、notify_level、highlight、prefix、message
| print          | tg_message         |
| command        | tg_argv_eol1       |
| command_run    | tg_command         |
| timer          | tg_remaining_calls |
| config         | tg_value           |
| focus          |                    |
| info           | tg_info            | tg_info
| info_hashtable |                    | ハッシュテーブルで受け取ったすべての変数
|===

[NOTE]
^(1)^ トリガはすべての値を更新できますが、ここで挙げた変数だけがトリガによって返されて
WeeChat によって使われる値に影響を及ぼします

複数の正規表現を使う場合は空白で区切ってください、例:
"/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 のすべての文字を `+*+`
  で置換した文字列)。

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

----
/\*([^ ]+)\*/*${color:bold}${re:1}${color:-bold}*/
----

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

----
==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${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"]
|===
| 変数                 | 型      | 説明
| irc_server           | pointer | IRC サーバへのポインタ (`${irc_server.name}` のように使うことで、"irc_server" 型の hdata に含まれる変数を使うことが可能です)
| irc_channel          | pointer | IRC チャンネルへのポインタ (`${irc_channel.name}` のように使うことで、"irc_channel" 型の hdata に含まれる変数を使うことが可能です)
| server               | string  | サーバの名前 (例: "freenode")
| tags                 | string  | メッセージ内のタグ (使われることはまれです)
| message_without_tags | string  | タグを含まないメッセージ
| nick                 | string  | ニックネーム
| host                 | string  | ホスト名
| command              | string  | IRC コマンド (例: "PRIVMSG"、"NOTICE"、...)
| channel              | string  | IRC チャンネル
| arguments            | string  | コマンドの引数 (_channel_ の値を含みます)
| text                 | string  | テキスト (例えばユーザメッセージ)
| pos_command          | string  | メッセージ内における _command_ のインデックス (_command_ が見つからない場合 "-1")
| pos_arguments        | string  | メッセージ内における _arguments_ のインデックス (_arguments_ が見つからない場合 "-1")
| pos_channel          | string  | メッセージ内における _channel_ のインデックス (_channel_ が見つからない場合 "-1")
| pos_text             | string  | メッセージ内における _text_ のインデックス (_text_ が見つからない場合 "-1")
|===

データがポインタの場合、hdata の属性を読むために変数 `tg_signal_data`
を以下のようにして使うことが可能です (以下の例では、バッファのポインタとして使っています):

----
${buffer[${tg_signal_data}].full_name}
----

[[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_line]]
===== Line

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

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型      | 説明
| buffer             | pointer | バッファ
| buffer_name        | string  | バッファ名
| buffer_type        | string  | バッファ型 ("formatted" または "free")
| y                  | string  | 自由内容バッファの行番号 (≥ 0)、-1 はフォーマット済みバッファ用
| date               | string  | 行の日付 (タイムスタンプ)
| date_printed       | string  | 行が表示される日付 (タイムスタンプ).
| str_time           | string  | 表示に使う日付、色コードを含めることも可能
| tags               | string  | メッセージのタグ (文字列の最初と最後にコンマが追加されます)
| displayed          | string  | "1" の場合は表示、"0" の場合は非表示
| notify_level       | string  | "0" = 低レベル、"1" = メッセージ、"2" = プライベートメッセージ、"3" = ハイライト
| highlight          | string  | "1" の場合はハイライトあり、"0" の場合はハイライトなし
| prefix             | string  | プレフィックス
| tg_prefix_nocolor  | string  | 色コードを含まないプレフィックス
| message            | string  | メッセージ
| tg_message_nocolor | string  | 色コードを含まないメッセージ
|===

メッセージにつけられたタグに関する変数:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型     | 説明
| 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_print]]
===== Print

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

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型      | 説明
| 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  | 色コードを削除したメッセージ
|===

メッセージにつけられたタグに関する変数:

[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_data_info]]
===== Info

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

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数         | 型     | 説明
| tg_info_name | string | インフォ名
| tg_arguments | string | 引数
| tg_info      | string | 空文字列 (インフォの返却先)
|===

[[trigger_data_info_hashtable]]
===== Info_hashtable

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

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数         | 型     | 説明
| tg_info_name | string | インフォ名
|===

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

[[trigger_examples]]
==== 例

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

URL を緑色にする:

----
/trigger add url_color modifier weechat_print "${tg_notify}" "==[a-zA-Z0-9_]+://[^ ]+==${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 バッファに対して何も表示しません)。

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

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

[[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.adoc[]

[[xfer_plugin]]
=== Xfer

Xfer プラグインの機能:

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

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

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

[[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.adoc[]

[[support]]
== サポート

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

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

* 公式チャンネル (開発者もいます):
** _#weechat_ (英語)
** _#weechat-fr_ (フランス語)
* 非公式チャンネル:
** _#weechat-de_ (ドイツ語)
** _#weechat-fi_ (フィンランド語)

他の方法でサポートを受けるには、以下のページを参照してください: https://weechat.org/about/support
