// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012-2019 Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>
//
// SPDX-License-Identifier: GPL-3.0-or-later

= WeeChat ユーザーズガイド
:author: Sébastien Helleu
:email: flashcode@flashtux.org
:lang: ja-jp
include::includes/attributes-ja.adoc[]

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

// TRANSLATION MISSING
Latest version of this document can be found on
https://weechat.org/doc/[this page ^↗^^].

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

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

[[features]]
=== 特徴

主な特徴:

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

// TRANSLATION MISSING
The list of all features can be found on
https://weechat.org/about/features/[this page ^↗^^].

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

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

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

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

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

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

* Arch Linux: `pacman -S weechat`
* Cygwin (Windows): setup.exe で WeeChat パッケージを選択してください
// TRANSLATION MISSING
* Debian/Ubuntu (または Debian 互換ディストリビューション):
  `apt-get install weechat-curses weechat-plugins` +
  For latest versions and nightly builds:
  https://weechat.org/download/debian/[Debian repositories ^↗^^]
* Fedora Core: `dnf install weechat`
* FreeBSD: `pkg 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`
// TRANSLATION MISSING
* macOS (with https://brew.sh/[Homebrew ^↗^^]): `brew install weechat`
  (for help: `brew info weechat`)

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

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

// TRANSLATION MISSING
[[containers]]
=== Containers

// TRANSLATION MISSING
Containers with WeeChat can be built or installed directly from the
https://hub.docker.com/r/weechat/weechat[Docker Hub ^↗^^]. +
For more information, see the README in the
https://github.com/weechat/weechat-container[weechat-container ^↗^^]
repository.

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

// TRANSLATION MISSING
WeeChat must be built with CMake.

[NOTE]
macOS では https://brew.sh/[Homebrew ^↗^^] を使ってください:
`brew install --build-from-source weechat`。

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

// TRANSLATION MISSING
The following table shows the list of packages that are *required* to build
WeeChat:

[width="100%",cols="5,^3,.^15",options="header"]
|===
// TRANSLATION MISSING
| パッケージ ^(1)^ | バージョン | Features

// TRANSLATION MISSING
| C コンパイラ (gcc / clang) |
| Compile C sources.

| cmake | ≥ 3.0
| ビルド

| pkgconf / pkg-config |
| インストール済みライブラリを検出

| libncurses-dev |
| ncurses インターフェース

| libcurl4-gnutls-dev |
| URL 転送

| libgcrypt20-dev |
| 保護データ、IRC SASL 認証

// TRANSLATION MISSING
| libgnutls28-dev | ≥ 2.2.0 ^(2)^
| IRC plugin: support of TLS connections, IRC SASL authentication (ECDSA-NIST256P-CHALLENGE). +
  Relay plugin: support of TLS connections.

// TRANSLATION MISSING
| zlib1g-dev |
| Logger plugin: compression of rotated log files (gzip). +
  Relay plugin: compression of messages (WeeChat -> client) with https://zlib.net/[zlib ^↗^^]
  (api and weechat protocols). +
  Script plugin: read of repository index file (gzip).
|===

[NOTE]
// TRANSLATION MISSING
^(1)^ Name comes from the Debian GNU/Linux Bookworm distribution, version and
name can be different in other distributions. +
^(2)^ IRC SASL 認証で ECDSA-NIST256P-CHALLENGE を使うには、GnuTLS
バージョン 3.0.21 以上が必要です。

// TRANSLATION MISSING
The following table shows the list of packages that are optional to compile
WeeChat:

[width="100%",cols="5,^3,.^15",options="header"]
|===
// TRANSLATION MISSING
| パッケージ ^(1)^ | バージョン | Features

| {cpp} コンパイラ (pass:[g++ / clang++]) |
| ビルドとテストの実行、JavaScript プラグイン

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

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

// TRANSLATION MISSING
| libcjson-dev |
| Relay plugin: protocol "api" (HTTP REST API).

// TRANSLATION MISSING
| libzstd-dev | ≥ 0.8.1
| Logger plugin: compression of rotated log files (zstandard). +
  Relay plugin: compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard ^↗^^]
  (api and weechat protocols).

| libaspell-dev / libenchant-dev |
| spell プラグイン

| python3-dev | 3.0 以上
| python プラグイン

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

| ruby3.1, ruby3.1-dev | 1.9.1 以上
| ruby プラグイン

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

| tcl-dev | 8.5 以上
| tcl プラグイン

| guile-3.0-dev | 2.0 以上
| guile (scheme) プラグイン

| libv8-dev | 3.24.3 以下
| javascript プラグイン

| php-dev | 7.0 以上
| PHP プラグイン

| libphp-embed | 7.0 以上
| PHP プラグイン

| libxml2-dev |
| PHP プラグイン

| libargon2-dev |
| PHP プラグイン (PHP 7.2 以上の場合)

| libsodium-dev |
| PHP プラグイン (PHP 7.2 以上の場合)

| asciidoctor | 1.5.4 以上
| man ページと文書のビルド

// TRANSLATION MISSING
| python3-pygments, ruby-pygments.rb |
| Build documentation.

| libcpputest-dev | 3.4 以上
| ビルドとテストの実行
|===

[NOTE]
// TRANSLATION MISSING
^(1)^ Name comes from the Debian GNU/Linux Bookworm distribution, version and
name can be different in other distributions.

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

[source,shell]
----
sudo apt-get build-dep weechat
----

// TRANSLATION MISSING
[[build]]
==== Build

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

[source,shell]
----
mkdir build
cd build
cmake ..
make
sudo make install
----

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

[source,shell]
----
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/directory
make
make install
----

CMake に対するオプションを指定するには、以下の書式を使ってください: `-DOPTION=VALUE`。

// TRANSLATION MISSING
List of available options:

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

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

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

// TRANSLATION MISSING
| WEECHAT_HOME | directory | (empty string)
| WeeChat 実行時のホームディレクトリ。 +
  With an empty value (recommended), XDG directories are used by default.
  If non empty, a single directory for all files is used.
  The value can also  be 4 directories separated by colons, in this order:
  config, data, cache, runtime.

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

| ENABLE_BUFLIST | `ON`, `OFF` | ON
| <<buflist,Buflist プラグイン>>のコンパイル。

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

// TRANSLATION MISSING
| ENABLE_CJSON | `ON`, `OFF` | ON
| Support of JSON with https://github.com/DaveGamble/cJSON[cJSON ^↗^^] library.

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

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

// TRANSLATION MISSING
| ENABLE_DOC_INCOMPLETE | `ON`, `OFF` | OFF
| Force build of documentation even if some plugins are not compiled
  (not recommended: docs will be incomplete).

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

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

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

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

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

// TRANSLATION MISSING
| ENABLE_HEADLESS | `ON`, `OFF` | ON
| Compile headless binary.

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

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

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

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

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

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

| ENABLE_NLS | `ON`, `OFF` | ON
| NLS の有効化 (多言語サポート)。

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

| ENABLE_PHP | `ON`, `OFF` | ON
| <<scripting_plugins,PHP プラグイン>>のコンパイル。

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

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

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

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

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

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

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

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

| ENABLE_TYPING | `ON`, `OFF` | ON
| <<typing_notifications,Typing プラグイン>>のコンパイル。

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

// TRANSLATION MISSING
| ENABLE_ZSTD | `ON`, `OFF` | ON
| Enable https://facebook.github.io/zstd/[Zstandard ^↗^^] compression.

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

| ENABLE_CODE_COVERAGE | `ON`, `OFF` | OFF
| コードカバレッジオプションを有効化してコンパイル。 +
  このオプションはテスト網羅率を測定するために用意されています。
|===

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

[source,shell]
----
cmake -LA
----

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

[source,shell]
----
ccmake ..
----

// TRANSLATION MISSING
[[tests]]
==== Tests

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

* libcpputest-dev
* C++ compiler

テストは WeeChat のコンパイル時に有効化しなければいけません:

[source,shell]
----
cmake .. -DENABLE_TESTS=ON
----

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

[source,shell]
----
ctest -V
----

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

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

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

[source,shell]
----
git clone https://github.com/weechat/weechat.git
----

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

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

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

// TRANSLATION MISSING
* Compile with:
** debug info (or install binary package with debug info),
** address sanitizer (optional).
* システムの _core_ ファイルを有効化
* gdb のインストール

// TRANSLATION MISSING
[[debug_build]]
==== Debug build

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

[source,shell]
----
cmake .. -DCMAKE_BUILD_TYPE=Debug
----

// TRANSLATION MISSING
[[address_sanitizer]]
==== Address sanitizer

// TRANSLATION MISSING
You can additionally enable the address sanitizer, which causes WeeChat to
crash immediately in case of problem:

[source,shell]
----
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address
----

// TRANSLATION MISSING
[CAUTION]
You should enable address sanitizer only if you're trying to cause a crash,
this is not recommended in production.

// TRANSLATION MISSING
Then once compiled and installed, you must run WeeChat like this:

[source,shell]
----
ASAN_OPTIONS="detect_odr_violation=0 log_path=asan.log" weechat
----

// TRANSLATION MISSING
In case of crash, the backtrace is in file `asan.log`.

[[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` に追加してください:

[source,shell]
----
ulimit -c unlimited
----

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

[source,shell]
----
ulimit -c 200000
----

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

<<core_files,オプションが有効の場合>>、WeeChat がクラッシュするとシステムは
_core_ または _core.12345_ ファイルを作ります (_12345_
はプロセス番号です)。このファイルは WeeChat を起動したディレクトリに作られます (これは
WeeChat がインストールされているディレクトリでは *ありません*!)。

// TRANSLATION MISSING
[NOTE]
On some systems like Archlinux, core dumps could be in another directory like
_/var/lib/systemd/coredump_ and you must use the command `coredumpctl` to read it. +
For more information, see this
https://wiki.archlinux.org/title/Core_dump[wiki page ^↗^^].

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

[source,shell]
----
gdb /usr/bin/weechat /home/user/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/core-hook.c:1364
        hook_process = 0x254eb90
        status = <value optimized out>
#5  0x000000000044cc7d in hook_timer_exec ()
    at /some_path/src/core/core-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 に変更してください):

[source,shell]
----
gdb /usr/bin/weechat 12345
----

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

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

[[running_weechat]]
== WeeChat の起動

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

[source,shell]
----
weechat
----

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

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

include::includes/cmdline_options.ja.adoc[tag=standard]

// TRANSLATION MISSING
Some extra options are available for debug purposes only:

// TRANSLATION MISSING
[CAUTION]
Do *NOT* use any of these options in production!

include::includes/cmdline_options.ja.adoc[tag=debug]

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

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

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

// TRANSLATION MISSING
[[colors_support]]
=== Colors support

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

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

[width="75%",cols="8,>3,>3",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
----

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

// TRANSLATION MISSING
[[xdg_directories]]
==== XDG directories

WeeChat uses XDG directories by default (according to the
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG Base Directory Specification ^↗^^]). +
A single home directory for all files can be forced by CMake option `WEECHAT_HOME`,
the environment variable `WEECHAT_HOME` or the command-line option `-d` / `--dir`.

When a single WeeChat home directory is not forced, XDG directories are used
and set like this:

[width="100%",cols="1,2m,5",options="header"]
|===
| Directory | Default value            | Fallback value if $XDG_XXX is not defined
| config    | $XDG_CONFIG_HOME/weechat | `$HOME/.config/weechat`
| data      | $XDG_DATA_HOME/weechat   | `$HOME/.local/share/weechat`
| cache     | $XDG_CACHE_HOME/weechat  | `$HOME/.cache/weechat`
| runtime   | $XDG_RUNTIME_DIR/weechat | Same as _cache_ directory
|===

The configuration files are created with default values the first time you run WeeChat.

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

// TRANSLATION MISSING
The WeeChat directories are:

[width="100%",cols="1m,3",options="header"]
|===
// TRANSLATION MISSING
| Path ^(1)^              | 説明
// TRANSLATION MISSING
| ~/.config/weechat/      | WeeChat configuration files: `*.conf`, certificates, etc.
// TRANSLATION MISSING
| ~/.local/share/weechat/ | WeeChat data files: logs, scripts, scripts data, xfer files, etc.
|    logs/                | ログファイル (バッファごとに 1 つのファイル)
|    python/              | Python スクリプト
|       autoload/         | 起動時に自動ロードされる Python スクリプト ^(2)^
|    perl/                | Perl スクリプト
|       autoload/         | 起動時に自動ロードされる Perl スクリプト ^(2)^
|    ruby/                | Ruby スクリプト
|       autoload/         | 起動時に自動ロードされる Ruby スクリプト ^(2)^
|    lua/                 | Lua スクリプト
|       autoload/         | 起動時に自動ロードされる Lua スクリプト ^(2)^
|    tcl/                 | Tcl スクリプト
|       autoload/         | 起動時に自動ロードされる Tcl スクリプト ^(2)^
|    guile/               | Guile スクリプト
|       autoload/         | 起動時に自動ロードされる Guile スクリプト ^(2)^
|    javascript/          | JavaScript スクリプト
|       autoload/         | 起動時に自動ロードされる JavaScript スクリプト ^(2)^
|    php/                 | PHP スクリプト
|       autoload/         | 起動時に自動ロードされる PHP スクリプト ^(2)^
// TRANSLATION MISSING
| ~/.cache/weechat/       | WeeChat cache files: scripts cache.
// TRANSLATION MISSING
| /run/user/1000/weechat/ | WeeChat runtime files: FIFO pipe, Relay UNIX sockets.
|===

[NOTE]
^(1)^ XDG directories may be different according to your environment variables `XDG_*`. +
^(2)^ このディレクトリには親ディレクトリ内にあるスクリプトへのシンボリックリンクのみが含まれることが多いです。

// 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_ プラグイン用の設定ファイル     | 保護されません
// TRANSLATION MISSING
| relay.conf      | _relay_ プラグイン用の設定ファイル      | *Yes*: it can contain relay password and TOTP secret (if not stored in `sec.conf`), allowed IP addresses/websocket origins and opened ports.
| ruby.conf       | _ruby_ プラグイン用の設定ファイル       | 保護されません
| script.conf     | _script_ プラグイン用の設定ファイル     | 保護されません
| spell.conf      | _spell_ プラグイン用の設定ファイル      | 保護されません
| tcl.conf        | _tcl_ プラグイン用の設定ファイル        | 保護されません
| trigger.conf    | _trigger_ プラグイン用の設定ファイル    | 保護される場合もあります、トリガに依存します
| typing.conf     | _typing_ プラグイン用の設定ファイル     | 保護されません
| xfer.conf       | _xfer_ プラグイン用の設定ファイル       | 保護されません
| weechat.log     | WeeChat ログファイル                    | 保護されません
|===

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

// TRANSLATION MISSING
[[upgrade]]
== Upgrade

If a new stable version of WeeChat is released, this is time for you to
switch to this version.

First of all, you must install the new version of WeeChat, either with your
package manager or by compiling yourself, so that the `weechat` binary and all
required files are in the same paths. +
This can be done while WeeChat is running.

// TRANSLATION MISSING
[[upgrade_command]]
=== Upgrade command

WeeChat can restart the new binary, in place, using the
<<command_weechat_upgrade,/upgrade>> command: the buffer contents and non-TLS
connections are preserved. +
The TLS connections are lost during upgrade and are restored automatically
after the upgrade (reload of TLS sessions is currently not possible
with GnuTLS).

The command can also be used if you have to restart the machine, for example
to upgrade the kernel or to move your WeeChat to another machine:

----
/upgrade -quit
----

This saves the current state in `*.upgrade` files. You can then either reboot
or move the whole WeeChat directories (config, data, cache) to another machine,
and restart WeeChat later with this command:

[source,shell]
----
weechat --upgrade
----

// TRANSLATION MISSING
[[restart_after_upgrade]]
=== Restart after upgrade

// TRANSLATION MISSING
[[restart_upgrading_notes]]
==== Upgrading notes

// TRANSLATION MISSING
After an upgrade, it is *strongly recommended* to read the file
https://github.com/weechat/weechat/blob/main/UPGRADING.md[UPGRADING.md ^↗^^]
which contains important information about breaking changes and some
manual actions that could be required.

// TRANSLATION MISSING
You must read the versions between your old (excluded) and your new version (included). +
For example if you switch from version 4.0.0 to 4.3.0, you must read versions
4.0.1 to 4.3.0.

[[restart_configuration_upgrade]]
==== Configuration upgrade

WeeChat has an automatic upgrade of configuration files (`*.conf`):

* new options are silently added with default value
* obsolete options are automatically discarded and WeeChat displays a warning
  with the value read from file.

Example of warning when an option has been removed:

----
=!= 警告: /home/user/.config/weechat/sec.conf, 行 15: セクション "crypt" の無効なオプション: passphrase_file = ""
----

That means the option `sec.crypt.passphrase_file` has been removed, and you
had value set to empty string, which was the default value in the previous version
(in this case no manual action is required).

// TRANSLATION MISSING
[[interface]]
== Interface

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

WeeChat を起動した端末の例:

....
 ▼ "buflist" バー   ▼ "title" バー
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │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/libera] 2:#test(+n){4}* M [H: 3:#abc(2,5), 5]              │
│         │[@Flashy(i)] hi peter!█                                                     │
└──────────────────────────────────────────────────────────────────────────────────────┘
            ▲ "status" と "input" バー                               "nicklist" バー ▲
....

// TRANSLATION MISSING
By default, the screen is divided up into the following areas:

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

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

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

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

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

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

[width="100%",cols="^3,^3,9",options="header"]
|===
| 要素                  | 例                     | 説明
| time                  | `12:55`                | 時刻
// TRANSLATION MISSING
| buffer_last_number    | `5`                    | Number of the latest buffer (can be different from `buffer_count` if option <<option_weechat.look.buffer_auto_renumber,weechat.look.buffer_auto_renumber>> is `off`).
| buffer_plugin         | `irc/libera`           | 現在のバッファのプラグイン (irc プラグインではバッファで利用されている IRC サーバ名を追加できます)
| buffer_number         | `2`                    | 現在のバッファの番号
| buffer_name           | `#test`                | 現在のバッファの名前
| buffer_modes          | `+n`                   | IRC チャンネルモード
// TRANSLATION MISSING
| buffer_nicklist_count | `4`                    | Number of nicks displayed in nicklist.
| buffer_zoom           | !                      | `!` はマージされたバッファがズームされている状態 (ズームされたものだけを表示する状態) を示します、空の場合はすべてのマージされたバッファが表示されていることを示します
| buffer_filter         | `+*+`                  | フィルタ表示: `+*+` の場合いくつかの行がフィルタされ (隠され) ます、空の場合すべての行が表示されます。
// TRANSLATION MISSING
| mouse_status          | `M`                    | Mouse status (empty if mouse is disabled), see command <<command_weechat_mouse,/mouse>> and <<key_bindings_toggle_keys,toggle keys>>.
| scroll                | `-MORE(50)-`           | スクロール表示、最後の行が表示されてから追加された行数を含む。
| lag                   | `Lag: 2.5`             | 遅延秒表示 (遅延が短い場合は非表示)
| hotlist               | `H: 3:#abc(2,5), 5`    | 変化のあったバッファのリスト (未読メッセージ) (例では、_#abc_ に 2 個のハイライトと 5 個の未読メッセージ、5 番目のバッファに 1 個の未読メッセージがあることを意味します。)
// TRANSLATION MISSING
| typing                | `Typing: bob, (alice)` | Typing notification, see <<typing_notifications,typing notifications>>.
| completion            | `abc(2) def(5)`        | 補完候補の単語リスト、各単語に対して適応される補完候補の数を含む。
|===

入力 (_input_) バーは以下の初期要素を持っています:

[width="100%",cols="^3,^3,9",options="header"]
|===
| 要素         | 例                                         | 説明
| input_prompt | `@Flashy`                                  | 入力プロンプト、irc の場合: ニックネームとモード (libera では "+i" モードは不可視状態を意味します)
| away         | `away`                                     | 離席状態表示
// TRANSLATION MISSING
| input_search | `Search lines (~ str,msg)`                 | Search indicator (see below).
| input_paste  | `Paste 7 lines ? [ctrl-y] Yes [ctrl-n] No` | 行をペーストする場合にユーザへ行われる質問
| input_text   | `hi peter!`                                | 入力テキスト
|===

// TRANSLATION MISSING
There are two search modes:

// TRANSLATION MISSING
* search in lines, for example `[Search lines (~ str,msg)]`, with the following info:
** `~`: 大文字小文字を区別しない
** `==`: 大文字小文字を区別する
** `str`: 検索文字列
** `regex`: 検索正規表現
** `msg`: メッセージ部分から検索
** `pre`: プレフィックス部分から検索
** `pre\|msg`: プレフィックス部分とメッセージ部分から検索
// TRANSLATION MISSING
* search in commands history, for example `[Search command (~ str,local)]`,
  with the following info:
** `~`: 大文字小文字を区別しない
** `==`: 大文字小文字を区別する
** `str`: 検索文字列
** `regex`: 検索正規表現
// TRANSLATION MISSING
** `local`: search in buffer local history
// TRANSLATION MISSING
** `global`: search in global history.

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

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

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

[width="100%",cols="^3,^3,9",options="header"]
|===
| 要素                         | 例                       | 説明
| buffer_count                 | `5`                      | 開いているバッファの総数
// TRANSLATION MISSING
| buffer_nicklist_count_all    | `4`                      | Number of visible groups and nicks in nicklist.
// TRANSLATION MISSING
| buffer_nicklist_count_groups | `0`                      | Number of visible groups in nicklist.
| buffer_short_name            | `#test`                  | 現在のバッファの短い名前
// TRANSLATION MISSING
| buflist2                     | `1.weechat`              | List of buffers, second bar item (see option <<option_buflist.look.use_items,buflist.look.use_items>>).
// TRANSLATION MISSING
| buflist3                     | `1.weechat`              | List of buffers, third bar item (see option <<option_buflist.look.use_items,buflist.look.use_items>>).
// TRANSLATION MISSING
| buflist4                     | `1.weechat`              | List of buffers, fourth bar item (see option <<option_buflist.look.use_items,buflist.look.use_items>>).
// TRANSLATION MISSING
| buflist5                     | `1.weechat`              | List of buffers, fifth bar item (see option <<option_buflist.look.use_items,buflist.look.use_items>>).
// TRANSLATION MISSING
| fset                         | `+buflist.look.sort: …+` | Help on currently selected option on fset buffer.
| irc_channel                  | `#test`                  | 現在の IRC チャンネル名
// TRANSLATION MISSING
| irc_host                     | `+user@host.com+`        | Current IRC host.
// TRANSLATION MISSING
| irc_nick                     | `+Flashy+`               | Current IRC nick.
// TRANSLATION MISSING
| irc_nick_host                | `+Flashy!user@host.com+` | Current IRC nick and host.
| irc_nick_modes               | `i`                      | 自分のニックネームに対する IRC モード
// TRANSLATION MISSING
| irc_nick_prefix              | `@`                      | IRC nick prefix on channel.
// TRANSLATION MISSING
| spacer                       |                          | Special item used to align text in bars, see <<item_spacer,Spacer item>>.
| spell_dict                   | `fr,en`                  | 現在のバッファにおけるスペリング辞書
| spell_suggest                | `print,prone,prune`      | カーソル下の単語に対するスペリング候補 (スペルが間違っている場合)
// TRANSLATION MISSING
| tls_version                  | `TLS1.3`                 | TLS version in use for current IRC server.
| window_number                | `2`                      | 現在のウィンドウ番号
|===

// TRANSLATION MISSING
Each aspect of the layout can be customized with the appropriate <<command_line,command>>:
<<command_weechat_bar,`/bar`>> to customize the bars,
<<command_weechat_buffer,/buffer>> and <<command_weechat_window,`/window`>>
to customize <<buffers_and_windows,buffers and windows>>,
and <<command_weechat_layout,/layout>> to name, save and restore the screen layout
and the association between windows and buffers.

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

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

[[command_line_syntax]]
==== 文法

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

----
/set
----

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

----
hello
----

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

----
//set
----

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

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

[width="100%",cols="1,2",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` に (以下の色リストを参照)
// TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[d],
  kbd:[xxxxxx]           | Text color `xxxxxx` (RGB as hexadecimal, for example `FF0000` for red).
// TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[d],
  kbd:[xxxxxx], kbd:[,],
  kbd:[yyyyyy]           | Text color `xxxxxx` and background `yyyyyy` (RGB as hexadecimal).
| kbd:[Ctrl+c], kbd:[i]  | テキストをイタリック体に
| kbd:[Ctrl+c], kbd:[o]  | テキスト表示色と属性をリセット
// TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[s]  | Strikethrough text (displayed as half bright in ncurses interface because strikethrough is not supported).
| kbd:[Ctrl+c], kbd:[v]  | テキストを反転 (テキスト表示色と背景色の入れ替え)
| kbd:[Ctrl+c], kbd:[_]  | テキストに下線を引く
|===

[NOTE]
// TRANSLATION MISSING
The same code (without number for kbd:[Ctrl+c], kbd:[c] and kbd:[Ctrl+c], kbd:[d])
can be used to stop the attribute.

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

include::{autogendir}/autogen_user_irc_colors.ja.adoc[tag=irc_colors]

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

// TRANSLATION MISSING
Example: display of "hello Alice!" with "hello" in light blue bold and
"Alice" in light red underlined:

// TRANSLATION MISSING
----
^Cc12^Cbhello ^Cb^Cc04^C_Alice^C_^Cc!
----

// TRANSLATION MISSING
Keys:

// TRANSLATION MISSING
kbd:[Ctrl+c] kbd:[c] kbd:[1] kbd:[2] kbd:[Ctrl+c] kbd:[b] +
kbd:[h] kbd:[e] kbd:[l] kbd:[l] kbd:[o] kbd:[Space] +
kbd:[Ctrl+c] kbd:[b] kbd:[Ctrl+c] kbd:[c] kbd:[0] kbd:[4] kbd:[Ctrl+c] kbd:[pass:[_]] +
kbd:[A] kbd:[l] kbd:[i] kbd:[c] kbd:[e] +
kbd:[Ctrl+c] kbd:[pass:[_]] kbd:[Ctrl+c] kbd:[c] +
kbd:[!]

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

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

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

バッファの例:

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

// TRANSLATION MISSING
_window_
はバッファを表示する画面エリアのことです。画面を複数のウィンドウに分割することができます
(examples <<window_split_examples,below>>, see the
<<command_weechat_window,/window>> command for details).

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

// TRANSLATION MISSING
Screen layouts and the association between windows and buffers can be
<<command_weechat_layout,saved and restored>>.

// TRANSLATION MISSING
[[window_split_examples]]
==== Examples

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

....
                               ▼ ウィンドウ #2 (バッファ #4)
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │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/libera] 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/libera] 3:#abc(+n){4}                                      │
│         │[@Flashy] hi peter!█                                                        │
└──────────────────────────────────────────────────────────────────────────────────────┘
                               ▲ ウィンドウ #1 (バッファ #3)
....

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

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │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/libera] 3:#abc(+n)  │[12:55] [5] [irc/libera] 4:#def(+n)   │
│         │[@Flashy] hi peter!█                 │[@Flashy]                             │
└──────────────────────────────────────────────────────────────────────────────────────┘
                 ▲ ウィンドウ #1 (バッファ #3)         ▲ ウィンドウ #2 (バッファ #4)
....

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

....
                                                       ▼ ウィンドウ #3 (バッファ #5)
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │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/libera] 5:#ghi(+n)   │
│         │                             │       │[@Flashy]                             │
│         │                             │       │──────────────────────────────────────│
│         │                             │       │Welcome to #def                       │
│         │                             │       │12:55:12     Max | hi         │@Flashy│
│         │                             │       │12:55:20 @Flashy | hi Max!    │Max    │
│         │                             │       │                              │       │
│         │                             │       │                              │       │
│         │                             │       │                              │       │
│         │                             │       │                              │       │
│         │                             │       │                              │       │
│         │[12:55] [5] [irc/libera] 3:#abc(+n)  │[12:55] [5] [irc/libera] 4:#def(+n)   │
│         │[@Flashy] hi peter!█                 │[@Flashy]                             │
└──────────────────────────────────────────────────────────────────────────────────────┘
                 ▲ ウィンドウ #1 (バッファ #3)         ▲ ウィンドウ #2 (バッファ #4)
....

[[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.libera │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/doc │       │
│         │               | /weechat/devel/weechat_plugin_api.en.html#_weechat │       │
│         │               | _hook_process                                      │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │[12:55] [5] [irc/libera] 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/weechat/devel/weechat_│
│plugin_api.en.html#_weechat_hook_process                                              │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

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

// TRANSLATION MISSING
[[buffers]]
=== Buffers

[[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="100%",cols="1m,4",options="header"]
|===
| タグ             | 説明
| no_filter        | フィルタできない行
| no_highlight     | ハイライトできない行
| no_log           | ログファイルに書き込まれない行
// TRANSLATION MISSING
| log0 … log9      | 行に対するログレベル (see the <<command_logger_logger,/logger>> command).
// TRANSLATION MISSING
| notify_none      | The line must not be added to hotlist. ^(1)^
// TRANSLATION MISSING
| notify_message   | The line is a user message. ^(1)^
// TRANSLATION MISSING
| notify_private   | The line is a private message. ^(1)^
// TRANSLATION MISSING
| notify_highlight | The line is a message with highlight. ^(1)^
| 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        | 離席状態のメッセージ
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ When no tag "notify_xxx" is present, the default level is "low". If a tag
"notify_xxx" is present, the real notify level can be different, for example
if a max hotlist level is used for a nick, the notify level can be lower than
the value in the tag.

// TRANSLATION MISSING
[[local_variables]]
==== Local variables

Local variables can be defined in all buffers.

A local variable has:

* a name (string)
* a value (string, can be empty).

Local variables can be set by WeeChat, plugins, scripts, or manually on the
command line in the buffer;

For example to add the local variable "completion_default_template":

----
/buffer setvar completion_default_template %(my_completion)
----

To list local variables in the current buffer:

----
/buffer listvar
----

To remove the local variable "completion_default_template":

----
/buffer delvar completion_default_template
----

By default WeeChat and its default plugins interpret these variables:

[width="100%",cols="2m,2,5",options="header"]
|===
| Name | Value | Description

| away
| any string
| Away message on the server, set by irc plugin.

| channel
| any string
| Channel name, set by irc/xfer plugins and debug buffer of relay/trigger plugins.

| charset_modifier
| any string
| Charset modifier for the server buffer, set by irc plugin.

| completion_default_template
| any string
| Default completion template for the buffer, overriding the option
  `weechat.completion.default_template`.

| filter
| any string
| Filter defined on some buffers like `/fset`, `/list` (irc), `/server raw` (irc)
  and `/script`.

| host
| any string
| Self host (if known), set by irc plugin.

| lag
| any string
| Lag on the server, set by irc plugin.

| name
| any string
| Buffer name (be careful, this is not the full name and this name is not
  enough to identify or search a buffer).

| nick
| any string
| Self nick, set by irc and xfer plugins.

| no_log
| `1` (or any non-empty string)
| If set, the logger plugin does not log anything for the buffer.

| plugin
| any string
| Name of plugin which created the buffer (`core` for WeeChat buffers).

| script_close_cb
| any string
| Close callback defined by a script for a buffer.

| script_close_cb_data
| any string
| Data for close callback defined by a script for a buffer.

| script_input_cb
| any string
| Input callback defined by a script for a buffer.

| script_input_cb_data
| any string
| Data for input callback defined by a script for a buffer.

| script_name
| any string
| Name of the script which created the buffer.

| server
| any string
| Server name, set by irc plugin and debug buffer of relay/trigger plugins.

| spell_suggest
| any string
| Misspelled word and suggestions (format: "misspelled:suggestions"), set by
  spell plugin.

| trigger_filter
| any string
| Trigger filter, set by trigger plugin.

| type
| any string, for example:
  `channel`,
  `debug`,
  `exec`,
  `option`,
  `private`,
  `relay`,
  `script`,
  `server`,
  `user`,
  `xfer`
| Type of buffer, set by WeeChat and many plugins.

|===

[NOTE]
External plugins and scripts can define and use other local variables.

// TRANSLATION MISSING
[[buflist]]
=== List of buffers

// TRANSLATION MISSING
Buflist プラグインを使うことで、"buflist" と呼ばれるバー要素の中にバッファリストを表示させることが可能になります
(four other bar items "buflist2", "buflist3", "buflist4" and "buflist5" are
available as well)。 +
プラグインは開始時にバー要素 "buflist" を持つデフォルトバー "buflist" を作成します。

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=buflist_commands]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=buflist_options]

// TRANSLATION MISSING
[[cursor_mode]]
=== Cursor mode

The cursor mode allows you to move freely the cursor anywhere on screen, in chat
area and bars, and lets you perform actions at the given position. +
You can enter in cursor mode either with the command `/cursor` or with a mouse
middle click (mouse must have been enabled with key kbd:[Alt+m] or command
`/mouse enable`).

Typical use is to quote messages (chat area) or interact with nicks (nicklist bar).

See command <<command_weechat_cursor,/cursor>> and
<<key_bindings_cursor_context,key bindings in cursor context>> for the list
of actions you can perform in this mode.

// TRANSLATION MISSING
[[key_bindings]]
== Key bindings

// TRANSLATION MISSING
WeeChat provides a lot of default key bindings, listed in the following chapters. +
They can be changed and new ones can be added with the <<command_weechat_key,/key>> command.

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

// TRANSLATION MISSING
[[key_bindings_cmdline_cursor_movement]]
==== Cursor movement

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー            | 説明 | コマンド
| kbd:[←] +
  kbd:[Shift+←] +
  kbd:[Ctrl+b]   | コマンドラインで前の文字に移動 | `+/input move_previous_char+`
| kbd:[→] +
  kbd:[Shift+→] +
  kbd:[Ctrl+f]   | コマンドラインで次の文字に移動 | `+/input move_next_char+`
// TRANSLATION MISSING
| kbd:[Shift+↑]  | Go to previous line. | `+/input move_previous_line+`
// TRANSLATION MISSING
| kbd:[Shift+↓]  | Go to next line. | `+/input move_next_line+`
| kbd:[Ctrl+←] +
  kbd:[Alt+b]    | コマンドラインで前の単語に移動 | `+/input move_previous_word+`
| kbd:[Ctrl+→] +
  kbd:[Alt+f]    | コマンドラインで次の単語に移動 | `+/input move_next_word+`
// TRANSLATION MISSING
| kbd:[Home] +
  kbd:[Ctrl+a]   | Go to the beginning of current line. | `+/input move_beginning_of_line+`
// TRANSLATION MISSING
| kbd:[Shift+Home] | Go to the beginning of command line. | `+/input move_beginning_of_input+`
// TRANSLATION MISSING
| kbd:[End] +
  kbd:[Ctrl+e]   | Go to the end of current line. | `+/input move_end_of_line+`
// TRANSLATION MISSING
| kbd:[Shift+End]  | Go to the end of command line. | `+/input move_end_of_input+`
|===

// TRANSLATION MISSING
[[key_bindings_cmdline_editing]]
==== Editing

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー                | 説明 | コマンド
| kbd:[Del] +
  kbd:[Ctrl+d]        | コマンドラインで次の文字を削除 | `+/input delete_next_char+`
| kbd:[Backspace] +
  kbd:[Ctrl+h]        | コマンドラインで前の文字を削除 | `+/input delete_previous_char+`
// TRANSLATION MISSING
| kbd:[Ctrl+k]        | Delete from cursor until end of current line (deleted string is copied to the internal clipboard). | `+/input delete_end_of_line+`
// TRANSLATION MISSING
| kbd:[Alt+Ctrl+k]    | Delete from cursor until end of command line (deleted string is copied to the internal clipboard). | `+/input delete_end_of_input+`
| kbd:[Ctrl+t]        | 文字の入れ替え | `+/input transpose_chars+`
// TRANSLATION MISSING
| kbd:[Ctrl+u]        | Delete from cursor until beginning of current line (deleted string is copied to the internal clipboard). | `+/input delete_beginning_of_line+`
// TRANSLATION MISSING
| kbd:[Alt+Ctrl+u]    | Delete from cursor until beginning of command line (deleted string is copied to the internal clipboard). | `+/input delete_beginning_of_input+`
| kbd:[Alt+Backspace] | コマンドラインで前の単語を削除 (削除された文字列は WeeChat 専用の内部クリップボードに保存) | `+/input delete_previous_word+`
// TRANSLATION MISSING
| kbd:[Ctrl+w]        | Delete previous word of command line until whitespace (deleted string is copied to the internal clipboard). | `+/input delete_previous_word_whitespace+`
| 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+`
// TRANSLATION MISSING
| kbd:[Alt+Enter]     | Insert a newline. | `+/input insert \n+`
| kbd:[Alt+d]         | コマンドラインで次の単語を削除 (削除された文字列は WeeChat 専用の内部クリップボードに保存) | `+/input delete_next_word+`
| kbd:[Alt+k]         | キー入力を奪って、コマンドラインにコード (キーが割り当てられていればコマンド) を入力 | `+/input grab_key_command+`
// TRANSLATION MISSING
| kbd:[Alt+r]         | Delete current line. | `+/input delete_line+`
// TRANSLATION MISSING
| kbd:[Alt+R]         | Delete entire command line. | `+/input delete_input+`
|===

// TRANSLATION MISSING
[[key_bindings_cmdline_color_codes]]
==== Color codes

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー                   | 説明 | コマンド
| kbd:[Ctrl+c], kbd:[b] | テキストを太字化するコードの挿入 | `+/input insert \x02+`
| kbd:[Ctrl+c], kbd:[c] | テキストに色をつけるコードの挿入 | `+/input insert \x03+`
// TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[d] | Insert code for colored text (RGB color, as hexadecimal). | `+/input insert \x04+`
| kbd:[Ctrl+c], kbd:[i] | テキストをイタリック体にするコードの挿入 | `+/input insert \x1D+`
| kbd:[Ctrl+c], kbd:[o] | テキスト色のリセットを行うコードの挿入 | `+/input insert \x0F+`
// TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[s] | Insert code for strikethrough text. | `+/input insert \x1E+`
| kbd:[Ctrl+c], kbd:[v] | テキスト色の反転を行うコードの挿入 | `+/input insert \x16+`
| kbd:[Ctrl+c], kbd:[_] | テキストに下線を引くコードの挿入 | `+/input insert \x1F+`
|===

// TRANSLATION MISSING
[[key_bindings_cmdline_history]]
==== Command history

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー          | 説明 | コマンド
| kbd:[↑]      | 前のコマンド/メッセージを呼び出す (検索モードの場合: 上方向に検索) | `+/input history_previous+`
| kbd:[↓]      | 次のコマンド/メッセージを呼び出す (検索モードの場合: 下方向に検索) | `+/input history_next+`
| kbd:[Ctrl+↑] | グローバル履歴から前のコマンド/メッセージを呼び出す (すべてのバッファに対して共通の履歴) | `+/input history_global_previous+`
| kbd:[Ctrl+↓] | グローバル履歴から次のコマンド/メッセージを呼び出す (すべてのバッファに対して共通の履歴) | `+/input history_global_next+`
|===

// TRANSLATION MISSING
[[key_bindings_cmdline_system]]
==== System

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー         | 説明 | コマンド
| kbd:[Ctrl+z] | Suspend WeeChat process. | `+/sys suspend+`
|===

// TRANSLATION MISSING
[[key_bindings_buffers]]
=== Buffers

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー                            | 説明 | コマンド
// TRANSLATION MISSING
| kbd:[Ctrl+r]                   | Search for text in commands history (see <<key_bindings_histsearch_context,keys for context "histsearch">>). | `+/input search_history+`
// TRANSLATION MISSING
| kbd:[Ctrl+s]                   | Search for text in buffer lines (see <<key_bindings_search_context,keys for context "search">>). | `+/input search_text_here+`
// TRANSLATION MISSING
| kbd:[Ctrl+x]                   | Switch current buffer if buffers are merged with same number, for example switch to another IRC server buffer. | `+/buffer switch+`
| kbd:[Alt+x]                    | マージされたバッファに再ズーム (kbd:[Alt+x]: 全てのマージされたバッファを表示) | `+/buffer zoom+`
| 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:[Alt+←] +
  kbd:[Alt+↑] +
  kbd:[Ctrl+p] +
  kbd:[F5]                       | 前のバッファに移動 | `+/buffer -1+`
| kbd:[Alt+→] +
  kbd:[Alt+↓] +
  kbd:[Ctrl+n] +
  kbd:[F6]                       | 後のバッファに移動 | `+/buffer +1+`
| 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+n]                    | 次のハイライトまでスクロール | `+/window scroll_next_highlight+`
| kbd:[Alt+p]                    | 前のハイライトまでスクロール | `+/window scroll_previous_highlight+`
| kbd:[Alt+u]                    | バッファを最初の未読行までスクロール | `+/window scroll_unread+`
| kbd:[Alt+Shift+U]              | すべてのバッファに未読マークをセット | `+/allbuf /buffer set unread+`
| kbd:[Alt+<]                    | バッファ訪問履歴で前のバッファに移動 | `+/buffer jump prev_visited+`
| kbd:[Alt+>]                    | バッファ訪問履歴で次のバッファに移動 | `+/buffer jump next_visited+`
| kbd:[Alt+/]                    | 最後に表示したバッファに移動 (バッファ移動前に表示していたウィンドウ) | `+/buffer jump last_displayed+`
|===

// TRANSLATION MISSING
[[key_bindings_windows]]
=== Windows

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー                      | 説明 | コマンド
| kbd:[Ctrl+l] (`L`)       | 全ウィンドウを再描画 | `+/window refresh+`
| kbd:[Alt+l] (`L`)        | 最小限表示の有効無効を切り替え | `+/window bare+`
| kbd:[F7]                 | ウィンドウを前に移動 | `+/window -1+`
| kbd:[F8]                 | ウィンドウを後に移動 | `+/window +1+`
| 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+`
|===

// TRANSLATION MISSING
[[key_bindings_bars]]
=== Bars

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー               | 説明 | コマンド
| 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:[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+`
// TRANSLATION MISSING
| kbd:[Alt+Shift+B] | Toggle buflist. | `+/buflist toggle+`
// TRANSLATION MISSING
| kbd:[Alt+Shift+N] | Toggle nicklist bar. | `+/bar toggle nicklist+`
|===

// TRANSLATION MISSING
[[key_bindings_hotlist]]
=== Hotlist

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー                            | 説明 | コマンド
| kbd:[Alt+a]                    | 変更のあった次のバッファに移動 (優先順位: ハイライト、新規メッセージ、その他) | `+/buffer jump smart+`
// TRANSLATION MISSING
| kbd:[Alt+h], kbd:[Alt+c]       | Clear hotlist (activity notification on buffers). | `+/hotlist clear+`
// TRANSLATION MISSING
| kbd:[Alt+h], kbd:[Alt+m]       | Remove current buffer from hotlist. | `+/hotlist remove+`
// TRANSLATION MISSING
| kbd:[Alt+h], kbd:[Alt+r]       | Restore latest hotlist removed in the current buffer. | `+/hotlist restore+`
// TRANSLATION MISSING
| kbd:[Alt+h], kbd:[Alt+Shift+R] | Restore latest hotlist removed in all buffers. | `+/hotlist restore -all+`
|===

// TRANSLATION MISSING
[[key_bindings_toggle_keys]]
=== Toggle keys

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー                   | 説明 | コマンド
| kbd:[Alt+m]            | マウスの有効無効を切り替え | `+/mouse toggle+`
| kbd:[Alt+s]            | スペルチェッカの有効無効を切り替え | `+/mute spell toggle+`
| kbd:[Alt+=]            | フィルタの有効無効を切り替え | `+/filter toggle+`
| kbd:[Alt+-]            | 現在のバッファのフィルタの有効無効を切り替え | `+/filter toggle @+`
// TRANSLATION MISSING
| kbd:[Alt+Ctrl+l] (`L`) | Toggle between remote and local commands on a remote buffer (relay "api"). | `+/remote togglecmd+`
|===

// TRANSLATION MISSING
[[key_bindings_search_context]]
=== Search context

// TRANSLATION MISSING
These keys are used in context "search" (when kbd:[Ctrl+s] is pressed to search
text in buffer lines).

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

// TRANSLATION MISSING
[[key_bindings_histsearch_context]]
=== History search context

// TRANSLATION MISSING
These keys are used in context "histsearch" (when kbd:[Ctrl+r] is pressed to
search text in commands history).

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| キー            | 説明 | コマンド
| kbd:[Ctrl+x]   | 検索タイプを切り替え: 文字列 (デフォルト)、正規表現 | `+/input search_switch_regex+`
| kbd:[Alt+c]    | 大文字小文字を区別して検索 | `+/input search_switch_case+`
// TRANSLATION MISSING
| kbd:[Tab]      | Switch search in: buffer local history (default), global history. | `+/input search_switch_where+`
// TRANSLATION MISSING
| kbd:[Ctrl+r] +
  kbd:[↑]        | Search in previous (older) history entries. | `+/input search_previous+`
// TRANSLATION MISSING
| kbd:[Ctrl+s] +
  kbd:[↓]        | Search in next (newer) history entries. | `+/input search_next+`
// TRANSLATION MISSING
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]   | Stop search and use matching input. | `+/input search_stop_here+`
// TRANSLATION MISSING
| kbd:[Ctrl+o]   | Execute the command found in history and insert the next one in the command line. | `+/input history_use_get_next+`
// TRANSLATION MISSING
| kbd:[Ctrl+q]   | Stop search and restore input to its initial value. | `+/input search_stop+`
|===

// TRANSLATION MISSING
[[key_bindings_cursor_context]]
=== Cursor context

// TRANSLATION MISSING
以下のキーは「カーソル」モード (画面上でカーソルを自由に動かせる状態) でのみ有効です,
see <<cursor_mode,Cursor mode>>.

[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+`
// TRANSLATION MISSING
| kbd:[Alt+↑]       | -                  | Move cursor to the first line of the area. | `+/cursor move edge_top+`
// TRANSLATION MISSING
| kbd:[Alt+↓]       | -                  | Move cursor to the last line of the area. | `+/cursor move edge_bottom+`
// TRANSLATION MISSING
| kbd:[Alt+←]       | -                  | Move cursor to the first column of the area. | `+/cursor move edge_left+`
// TRANSLATION MISSING
| kbd:[Alt+→]       | -                  | Move cursor to the last column of the area. | `+/cursor move edge_right+`
// TRANSLATION MISSING
| kbd:[Alt+Home]    | -                  | Move cursor to the top left corner of the area. | `+/cursor move top_left+`
// TRANSLATION MISSING
| kbd:[Alt+End]     | -                  | Move cursor to the bottom right corner of the area. | `+/cursor move bottom_right+`
| kbd:[Alt+Shift+↑] | -                  | カーソルを上のエリアに移動 | `+/cursor move area_up+`
| kbd:[Alt+Shift+↓] | -                  | カーソルを下のエリアに移動 | `+/cursor move area_down+`
| kbd:[Alt+Shift+←] | -                  | カーソルを左のエリアに移動 | `+/cursor move area_left+`
| kbd:[Alt+Shift+→] | -                  | カーソルを右のエリアに移動 | `+/cursor move area_right+`
| kbd:[m]           | チャット           | メッセージを引用 | `+hsignal:chat_quote_message;/cursor stop+`
// TRANSLATION MISSING
| kbd:[l]           | チャット           | Quote focused line. | `+hsignal:chat_quote_focused_line;/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+`
|===

// TRANSLATION MISSING
[[key_bindings_mouse]]
=== Mouse

// TRANSLATION MISSING
These mouse actions are possible only if mouse is enabled with key kbd:[Alt+m]
(command: `+/mouse toggle+`).

[width="100%",cols="^.^3,^.^3,^.^3,.^8,.^8",options="header"]
|===
| ボタン/ホイール ^(1)^ | ジェスチャー | エリア                       | 説明 | コマンド
| kbd:[■ □ □]           | -            | チャット                     | ウィンドウに移動 | `+/window ${_window_number}+`
| kbd:[■ □ □]           | 左           | チャット                     | 前のバッファに移動 | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □]           | 右           | チャット                     | 次のバッファに移動 | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □]           | 左 (長く)    | チャット                     | 最初のバッファに移動 | `+/window ${_window_number};/buffer 1+`
| kbd:[■ □ □]           | 右 (長く)    | チャット                     | 最後のバッファに移動 | `+/window ${_window_number};/buffer ++`
| kbd:[▲]               | -            | チャット                     | バッファ履歴を上方向にスクロール | `+/window scroll_up -window ${_window_number}+`
| kbd:[▼]               | -            | チャット                     | バッファ履歴を下方向にスクロール | `+/window scroll_down -window ${_window_number}+`
| kbd:[Ctrl+▲]          | -            | チャット                     | 水平左方向にスクロール | `+/window scroll_horiz -window ${_window_number} -10%+`
| kbd:[Ctrl+▼]          | -            | チャット                     | 水平右方向にスクロール | `+/window scroll_horiz -window ${_window_number} +10%+`
// TRANSLATION MISSING
| kbd:[▲]               | -            | chat: fset buffer            | Move five lines up in fset buffer. | `+/fset -up 5+`
// TRANSLATION MISSING
| kbd:[▼]               | -            | chat: fset buffer            | Move five lines down in fset buffer. | `+/fset -down 5+`
// TRANSLATION MISSING
| kbd:[■ □ □]           | -            | chat: fset buffer            | Select line in fset buffer. | `+/window ${_window_number};/fset -go ${fset_option_index}+`
// TRANSLATION MISSING
| kbd:[□ □ ■]           | -            | chat: fset buffer            | Toggle boolean (on/off) or edit the option value. | `+hsignal:fset_mouse+`
// TRANSLATION MISSING
| kbd:[□ □ ■]           | left         | chat: fset buffer            | Decrease value for integer/color/enum, set/append to value for other types. | `+hsignal:fset_mouse+`
// TRANSLATION MISSING
| kbd:[□ □ ■]           | right        | chat: fset buffer            | Increase value for integer/color/enum, set/append to value for other types. | `+hsignal:fset_mouse+`
// TRANSLATION MISSING
| kbd:[□ □ ■]           | up / down    | chat: fset buffer            | Mark/unmark multiple options. | `+hsignal:fset_mouse+`
// TRANSLATION MISSING
| kbd:[▲]               | -            | chat: /list buffer           | Move five lines up in /list buffer. | `+/list -up 5+`
// TRANSLATION MISSING
| kbd:[▼]               | -            | chat: /list buffer           | Move five lines down in /list buffer. | `+/list -down 5+`
// TRANSLATION MISSING
| kbd:[■ □ □]           | -            | chat: /list buffer           | Select line in /list buffer. | `+/window ${_window_number};/list -go ${_chat_line_y}+`
// TRANSLATION MISSING
| kbd:[□ □ ■]           | -            | chat: /list buffer           | Join IRC channel on selected line. | `+hsignal:irc_list_mouse+`
| kbd:[▲]               | -            | チャット: スクリプトバッファ | スクリプトバッファを 5 行上方向にスクロール | `+/script -up 5+`
| kbd:[▼]               | -            | チャット: スクリプトバッファ | スクリプトバッファで 5 行下方向にスクロール | `+/script -down 5+`
| kbd:[■ □ □]           | -            | チャット: スクリプトバッファ | スクリプトバッファで行選択 | `+/script -go ${_chat_line_y}+`
| kbd:[□ □ ■]           | -            | チャット: スクリプトバッファ | スクリプトのインストール `+/ 削除 | /script -go ${_chat_line_y};/script installremove ${script_name_with_extension}+`
| kbd:[■ □ □]           | 上 / 左      | バッファリスト               | 指定したバッファを下の番号に移動 | `+buflist_mouse+` シグナル
| kbd:[■ □ □]           | 下 / 右      | バッファリスト               | 指定したバッファを上の番号に移動 | `+buflist_mouse+` シグナル
| kbd:[■ □ □]           | -            | バッファリスト               | 指定したバッファに切り替える (現在のバッファを指定した場合、バッファ切り替え履歴で前のバッファに切り替える) | `+buflist_mouse+` シグナル
| kbd:[□ □ ■]           | -            | バッファリスト               | 現在のバッファを指定した場合、バッファ切り替え履歴で次のバッファに切り替える | `+buflist_mouse+` シグナル
| kbd:[Ctrl+▲]          | -            | バッファリスト               | バッファ切り替え履歴で前のバッファに切り替える | `+buflist_mouse+` シグナル
| kbd:[Ctrl+▼]          | -            | バッファリスト               | バッファ切り替え履歴で次のバッファに切り替える | `+buflist_mouse+` シグナル
| kbd:[■ □ □]           | 上           | ニックネームリスト           | ニックネームリストを 1 ページ分上方向にスクロール | `+/bar scroll nicklist ${_window_number} -100%+`
| kbd:[■ □ □]           | 下           | ニックネームリスト           | ニックネームリストを 1 ページ分下方向にスクロール | `+/bar scroll nicklist ${_window_number} +100%+`
| kbd:[■ □ □]           | 上 (長く)    | ニックネームリスト           | ニックネームリストの最初に移動 | `+/bar scroll nicklist ${_window_number} b+`
| kbd:[■ □ □]           | 下 (長く)    | ニックネームリスト           | ニックネームリストの最後に移動 | `+/bar scroll nicklist ${_window_number} e+`
| kbd:[■ □ □]           | -            | ニックネームリスト           | ニックネームに対するクエリを開く | `+/window ${_window_number};/query ${nick}+`
| kbd:[□ □ ■]           | -            | ニックネームリスト           | ニックネームに対する whois を行う | `+/window ${_window_number};/whois ${nick}+`
| kbd:[■ □ □]           | 左           | ニックネームリスト           | ニックネームをキックする | `+/window ${_window_number};/kick ${nick}+`
| kbd:[■ □ □]           | 左 (長く)    | ニックネームリスト           | ニックネームをキックとバンする | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[□ □ ■]           | 左           | ニックネームリスト           | ニックネームをバンする | `+/window ${_window_number};/ban ${nick}+`
| kbd:[□ □ ■]           | -            | 入力                         | マウスイベントを奪ってコマンドラインにコードを入力 | `+/input grab_mouse_area+`
| kbd:[▲]               | -            | 任意のバー                   | バーを -20% スクロール | `+/bar scroll ${_bar_name} ${_window_number} -20%+`
| kbd:[▼]               | -            | 任意のバー                   | バーを +20% スクロール | `+/bar scroll ${_bar_name} ${_window_number} +20%+`
| kbd:[□ ■ □]           | -            | 任意の場所                   | この場所でカーソルモードを開始 | `+/cursor go ${_x},${_y}+`
|===

[NOTE]
// TRANSLATION MISSING
^(1)^ Buttons: +
kbd:[◼ □ □]: click on left button +
kbd:[□ ◼ □]: click on middle button +
kbd:[□ □ ◼]: click on right button +
Wheel: +
kbd:[▲]: wheel up +
kbd:[▼]: wheel down

// TRANSLATION MISSING
[[key_bindings_fset_buffer]]
=== Fset buffer

// TRANSLATION MISSING
These keys and actions are used on the fset buffer (see <<fset,Fset plugin>>).

// TRANSLATION MISSING
[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Key                      | Action ^(1)^ | Description | Command
| kbd:[↑]                  |              | Move one line up. | `+/fset -up+`
| kbd:[↓]                  |              | Move one line down. | `+/fset -down+`
| kbd:[PgUp]               |              | Move one page up. | `+/window page_up+`
| kbd:[PgDn]               |              | Move one page down. | `+/window page_down+`
| kbd:[Alt+Home]           | `pass:[<<]`  | Move to first line. | `+/fset -go 0+`
| kbd:[Alt+End]            | `pass:[>>]`  | Move to last line. | `+/fset -go end+`
| kbd:[F11]                | `pass:[<]`   | Scroll horizontally on the left. | `+/fset -left+`
| kbd:[F12]                | `pass:[>]`   | Scroll horizontally on the right. | `+/fset -right+`
| kbd:[Alt+Space]          | `t`          | Toggle boolean value. | `+/fset -toggle+`
| kbd:[Alt+-]              | `-`          | Subtract 1 from value for integer/color/enum, set value for other types. | `+/fset -add -1+`
| kbd:[Alt++]              | `+`          | Add 1 to value for integer/color/enum, append to value for other types. | `+/fset -add 1+`
| kbd:[Alt+f], kbd:[Alt+r] | `r`          | Reset value. | `+/fset -reset+`
| kbd:[Alt+f], kbd:[Alt+u] | `u`          | Unset value. | `+/fset -unset+`
| kbd:[Alt+Enter]          | `s`          | Set value. | `+/fset -set+`
| kbd:[Alt+f], kbd:[Alt+n] | `n`          | Set new value. | `+/fset -setnew+`
| kbd:[Alt+f], kbd:[Alt+a] | `a`          | Append to value. | `+/fset -append+`
| kbd:[Alt+,]              | `,`          | Mark/unmark option. | `+/fset -mark 1+`
| kbd:[Shift+↑]            |              | Move one line up and mark/unmark option. | `+/fset -up; /fset -mark+`
| kbd:[Shift+↓]            |              | Mark/unmark option and move one line down. | `+/fset -mark; /fset -down+`
|                          | `m:xxx`      | Mark options displayed that are matching filter "xxx" (any filter on option or value is allowed, see <<command_fset_fset,/fset>> command). |
|                          | `u:xxx`      | Unmark options displayed that are matching filter "xxx" (any filter on option or value is allowed, see <<command_fset_fset,/fset>> command). |
| kbd:[Ctrl+l] (`L`)       |              | Refresh options and whole screen. | `+/fset -refresh+`
|                          | `$`          | Refresh options (keep marked options). |
|                          | `$$`         | Refresh options (unmark all options). |
| kbd:[Alt+p]              | `p`          | Toggle plugin description options (`pass:[plugins.desc.*]`). | `+/mute /set fset.look.show_plugins_desc toggle+`
| kbd:[Alt+v]              | `v`          | Toggle help bar. | `+/bar toggle fset+`
|                          | `s:x,y`      | Sort options by fields x,y (see option <<option_fset.look.sort,fset.look.sort>>). | `+/mute /set fset.look.sort x,y+`
|                          | `s:`         | Reset sort to its default value (see option <<option_fset.look.sort,fset.look.sort>>). | `+/mute /unset fset.look.sort+`
|                          | `w:xxx`      | Export options in file "xxx". | `+/fset -export xxx+`
|                          | `w-:xxx`     | Export options in file "xxx" without help. | `+/fset -export -nohelp xxx+`
|                          | `w+:xxx`     | Export options in file "xxx" with help. | `+/fset -export -help xxx+`
| kbd:[Ctrl+x]             | `x`          | Switch the format used to display options. | `+/fset -format+`
|                          | `q`          | Close fset buffer. | `+/buffer close+`
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ The action must be entered as input on the command line, followed by kbd:[Enter].

// TRANSLATION MISSING
[[key_bindings_irc_list_buffer]]
=== IRC /list buffer

These keys and actions are used on the IRC /list buffer (see command <<command_irc_list,/list>>).

[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Key            | Action ^(1)^ | Description | Command
| kbd:[↑]        |              | Move one line up. | `+/list -up+`
| kbd:[↓]        |              | Move one line down. | `+/list -down+`
| kbd:[PgUp]     |              | Move one page up. | `+/window page_up+`
| kbd:[PgDn]     |              | Move one page down. | `+/window page_down+`
| kbd:[Alt+Home] | `pass:[<<]`  | Move to first line. | `+/list -go 0+`
| kbd:[Alt+End]  | `pass:[>>]`  | Move to last line. | `+/list -go end+`
| kbd:[F11]      | `pass:[<]`   | Scroll horizontally on the left. | `+/list -left+`
| kbd:[F12]      | `pass:[>]`   | Scroll horizontally on the right. | `+/list -right+`
| kbd:[Ctrl+j]   | `j`          | Join IRC channel on selected line. | `+/list -join+`
|                | `xxx`        | Show only channels with "xxx" in name or topic (case-insensitive). |
|                | `n:xxx`      | Show only channels with "xxx" in name (case-insensitive). |
|                | `t:xxx`      | Show only channels with "xxx" in topic (case-insensitive). |
|                | `u:n`        | Show only channels with at least "n" users. |
|                | `u:>n`       | Show only channels with more than "n" users. |
|                | `u:<n`       | Show only channels with less than "n" users. |
|                | `c:xxx`      | Show only channels matching the evaluated condition "xxx", using following variables: name, name2, users, topic. |
|                | `s:x,y`      | Sort channels by fields x,y (see command <<command_irc_list,/list>>). |
|                | `s:`         | Reset sort to its default value (see command <<command_irc_list,/list>>). |
|                | `$`          | Refresh list (run again command <<command_irc_list,/list>>). |
|                | `q`          | Close buffer. | `+/buffer close+`
|===

[NOTE]
^(1)^ The action must be entered as input on the command line, followed by kbd:[Enter].

// TRANSLATION MISSING
[[key_bindings_script_buffer]]
=== Script buffer

// TRANSLATION MISSING
These keys and actions are used on the script buffer (see <<script_manager,script manager>>).

// TRANSLATION MISSING
[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Key               | Action ^(1)^ | Description | Command
| kbd:[↑]           |              | Move one line up. | `+/script -up+`
| kbd:[↓]           |              | Move one line down. | `+/script -down+`
| kbd:[PgUp]        |              | Move one page up. | `+/window page_up+`
| kbd:[PgDn]        |              | Move one page down. | `+/window page_down+`
| kbd:[Alt+i]       | `i`          | Install script. | `+/script install+`
| kbd:[Alt+r]       | `r`          | Remove script. | `+/script remove+`
| kbd:[Alt+l]       | `l`          | Load script. | `+/script load+`
| kbd:[Alt+L]       | `L`          | Reload script. | `+/script reload+`
| kbd:[Alt+u]       | `u`          | Unload script. | `+/script unload+`
| kbd:[Alt+Shift+A] | `A`          | Autoload script. | `+/script toggleautoload+`
| kbd:[Alt+h]       | `h`          | Hold/unhold script. | `+/script hold+`
| kbd:[Alt+v]       | `v`          | View script. | `+/script show+`
|                   | `s:x,y`      | Sort scripts by fields x,y (see option <<option_script.look.sort,script.look.sort>>). |
|                   | `s:`         | Reset sort to its default value (see option <<option_script.look.sort,script.look.sort>>). |
|                   | `$`          | Refresh list. |
|                   | `q`          | Close buffer. | `+/buffer close+`
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ The action must be entered as input on the command line, followed by kbd:[Enter].

// TRANSLATION MISSING
[[configuration]]
== Configuration

[[fset]]
=== Fset

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

// TRANSLATION MISSING
Example of fset buffer displaying options starting with `weechat.look` :

[subs="quotes"]
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│7/125 | Filter: weechat.look.* | Sort: ~name | Key(input): alt+space=toggl>>│
│2.fset   │weechat.look.bare_display_exit_on_input: 入力の変更に対する最小限表示モード │
│         │を終了する [デフォルト: on]                                                 │
│         │----------------------------------------------------------------------------│
│         │  weechat.look.align_end_of_lines              enum    message              │
│         │  weechat.look.align_multiline_words           ブール  on                   │
│         │  weechat.look.bar_more_down                   文字列  "++"                 │
│         │  weechat.look.bar_more_left                   文字列  "<<"                 │
│         │  weechat.look.bar_more_right                  文字列  ">>"                 │
│         │  weechat.look.bar_more_up                     文字列  "--"                 │
│         │##  weechat.look.bare_display_exit_on_input      ブール  on                   ##│
│         │  weechat.look.bare_display_time_format        文字列  "%H:%M"              │
│         │  weechat.look.buffer_auto_renumber            ブール  on                   │
│         │  weechat.look.buffer_notify_default           enum    all                  │
│         │  weechat.look.buffer_position                 enum    end                  │
│         │  weechat.look.buffer_search_case_sensitive    ブール  off                  │
│         │  weechat.look.buffer_search_force_default     ブール  off                  │
│         │  weechat.look.buffer_search_history           enum    local                │
│         │  weechat.look.buffer_search_regex             ブール  off                  │
│         │  weechat.look.buffer_search_where             enum    prefix_message       │
│         │  weechat.look.buffer_time_format              文字列  "%H:%M:%S"           │
│         │[12:55] [2] [fset] 2:fset                                                   │
│         │█                                                                           │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=fset_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=fset_options]

// TRANSLATION MISSING
[[colors]]
=== Colors

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

WeeChat における基本色とは:

[width="75%",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
つ以上の属性を色名または色番号の前に付加できます:

// TRANSLATION MISSING
* `+%+`: blink
// TRANSLATION MISSING
* `+.+`: "dim" (half bright)
* `+*+` : テキストを太字に
* `+!+` : テキストを反転
* `+/+` : テキストをイタリック体に
* `+_+` : テキストに下線を引く
// TRANSLATION MISSING
* `+|+`: keep attributes: do not reset blink/dim/bold/reverse/italic/underlined
  when changing color

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

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

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

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

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

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

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

// TRANSLATION MISSING
[[themes]]
=== Themes

A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.

[[themes_themable_options]]
==== Themable options

Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.

You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.

[[themes_apply]]
==== Applying a theme

To switch to the built-in light-background theme:

----
/theme apply light
----

The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:

----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----

Backup creation can be disabled (not recommended):

----
/set weechat.look.theme_backup off
----

If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.

The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).

[[themes_reset]]
==== Resetting to defaults

To restore the look shipped with WeeChat, reset every themable option
to its default value:

----
/theme reset
----

A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.

[[themes_save_delete]]
==== Saving and deleting user themes

Save the current themable options as a new user theme file:

----
/theme save mytheme
----

Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.

Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.

Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):

----
/theme rename backup-20260525-094210-123456 mybackup
----

Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.

Delete a user theme:

----
/theme del mytheme
----

This removes the file on disk; built-in themes cannot be deleted.

[[themes_file_format]]
==== Theme file format

A theme file is INI-like with two sections:

----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"

[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----

`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).

User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.

[[themes_resolution]]
==== Resolution order

When `+/theme apply <name>+` is run:

* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
  is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
  registered programmatically by core, plugins and scripts (see the
  plugin and scripting documentation for `+weechat_theme_register+`).

If neither source provides the name, the apply is refused.

[[charset]]
=== 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.libera ISO-8859-15
----

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

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

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

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=charset_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=charset_options]

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

[[setup_notify_levels]]
==== 通知レベルの設定

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// TRANSLATION MISSING
[[highlights_disable]]
==== Disable highlights

You can disable highlights with option
<<option_weechat.look.highlight_disable_regex,weechat.look.highlight_disable_regex>>
(regular expression). +
When a highlight is disabled with this option, the other highlight options are
ignored.

For example to disable any highlight on messages with a word beginning
with "flash" between chevrons:

----
/set weechat.look.highlight_disable_regex "<flash.*>"
----

This can also be set with the buffer property "highlight_disable_regex".

Same example, specific to the current buffer:

----
/buffer setauto highlight_disable_regex <flash.*>
----

[[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 setauto highlight_regex .*
----

// TRANSLATION MISSING
[[buffer_logging]]
=== Buffer logging

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

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

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

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

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

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

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

例:

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

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

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

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

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

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

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

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

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

// TRANSLATION MISSING
It is possible to define a filename mask for each buffer, and use local buffer
variables to build filename. To see available local variables for current buffer:

----
/buffer listvar
----

// TRANSLATION MISSING
Masks will be matched on options in descending order of specificity on
`logger.mask.$plugin.*`, with `logger.file.mask` as fallback option.

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

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

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

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

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

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

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

....
~/.local/share/weechat
└── logs
    ├── 2010
    │   ├── 11
    │   │   ├── irc.server.libera.weechatlog
    │   │   └── irc.libera.#weechat.weechatlog
    │   └── 12
    │       ├── irc.server.libera.weechatlog
    │       └── irc.libera.#weechat.weechatlog
    ├── 2011
    │   ├── 01
    │   │   ├── irc.server.libera.weechatlog
    │   │   └── irc.libera.#weechat.weechatlog
    │   ├── 02
    ...
....

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

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

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

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

....
~/.local/share/weechat
└── logs
    └── irc
        ├── libera
        │   ├── libera.weechatlog
        │   ├── #weechat.weechatlog
        │   └── #mychan.weechatlog
        ├── oftc
        │   ├── oftc.weechatlog
        │   ├── #channel1.weechatlog
        │   └── #channel2.weechatlog
        ...
....

// TRANSLATION MISSING
[[logger_rotation_compression]]
==== Rotation and compression

It is possible to define a max size for log files, and when it is reached,
there is automatic rotation of log file.

The rotated log files can be compressed with gzip or
https://facebook.github.io/zstd/[zstd ^↗^^].

[NOTE]
As the compression of a file can take some time, it is performed in background.

Example with a max size of 2GB and compression with gzip, using good compression
level (slower than default one):

----
/set logger.file.rotation_compression_type gzip
/set logger.file.rotation_compression_level 80
/set logger.file.rotation_size_max "2g"
----

If you want to use a decimal number, you can use the unit below and multiply
by 1000, for example to set max size to 2.5GB:

----
/set logger.file.rotation_size_max "2500m"
----

With these settings, you'll end with files like these ones (in this example
there is rotation only for the log of #weechat channel):

....
~/.local/share/weechat
└── logs
    ├── core.weechat.weechatlog
    ├── irc.server.libera.weechatlog
    ├── irc.libera.#weechat.weechatlog
    ├── irc.libera.#weechat.weechatlog.1.gz
    ├── irc.libera.#weechat.weechatlog.2.gz
    └── irc.libera.#weechat.weechatlog.3.gz
....

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=logger_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=logger_options]

[[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]]
==== コマンドに対してマウスイベントを割り当てる

// TRANSLATION MISSING
WeeChat はデフォルトマウスイベントの多くを定義しています
(<<key_bindings_mouse,mouse actions>>を参照)。

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

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

// TRANSLATION MISSING
List of modifiers (by order in the event name):

[width="100%",cols="1m,4",options="header"]
|===
| 修飾キー | 説明
| alt      | kbd:[Alt] キー
| ctrl     | kbd:[Ctrl] キー
| shift    | kbd:[Shift] キー ^(1)^
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ The `shift` modifier can rarely be used in WeeChat because many terminals
use this modifier to catch directly mouse events.

// TRANSLATION MISSING
Several modifiers can be combined, for example:

* `alt-ctrl`
* `ctrl-shift`
* `alt-ctrl-shift`

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

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

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

[width="100%",cols="1m,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="100%",cols="1m,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`
* `alt-ctrl-wheeldown`
* ...

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

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

// TRANSLATION MISSING
[[spell_checking]]
=== Spell checking

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

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

[[spell_dictionaries]]
==== 辞書

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

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

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

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

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

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

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

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

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

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

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

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

[source,shell]
----
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/libera] 3:#test(+n){4} [print,prone,prune]                      │
│[@Flashy] prinr █                                                                │
└─────────────────────────────────────────────────────────────────────────────────┘
....

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

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=spell_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=spell_options]

[[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,[buffer_last_number]":

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

// TRANSLATION MISSING
[[item_spacer]]
===== Spacer item

An item called `spacer` can be used to align items (left, center, right).

When at least one `spacer` item is used in a bar, the whole bar width is used:
the spacers auto expand with the same size (or almost). +
When the bar is not large enough for all items, spacers are not displayed.

[NOTE]
The `spacer` bar item can be used only in bars with position `top` or `bottom`,
filling `horizontal` and size `1`.

Example of bar with items
"[time],spacer,buffer_number+:+buffer_plugin+.+buffer_name,spacer,[buffer_last_number]":

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

// TRANSLATION MISSING
[[item_force_buffer]]
===== Force buffer

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

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

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

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

// TRANSLATION MISSING
[[custom_bar_items]]
===== Custom bar items

Custom bar items can be added with the <<command_weechat_item,/item>> command,
each new item having two properties defined via configuration options:

* `conditions`: evaluated conditions to display the bar item, for example to
  restrict the bar item to some specific buffers (if empty, the bar item is
  displayed everywhere)
* `content`: evaluated content of bar item.

In both options, the following variables can be used:

* `window`: pointer to the window where the bar is displayed (`NULL` for root bars)
* `buffer`: pointer to buffer where the bar is displayed (current buffer for root bars).

Examples of conditions:

[width="100%",cols="3,10",options="header"]
|===
| Condition | Description
| `${window}` | Displayed in window bars only
| `${buffer.number} == 1` | Displayed in all buffers with number = 1
| `${buffer.plugin.name} == irc` | Displayed in all IRC buffers
| `${type} == channel` | Displayed in all buffers where local variable `type` is set to `channel` (example: all IRC channels)
| `${type} == private` | Displayed in all buffers where local variable `type` is set to `private` (example: all IRC private buffers)
|===

[NOTE]
There's no builtin way to refresh the custom bar items. You can use the
<<trigger,Trigger>> plugin to force the refresh, for example via one or more
signals received.

For more information and examples, see the <<command_weechat_item,/item>> command.

[[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/libera] 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/libera] 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}+`: 状態が評価されたウィンドウのバッファ

// TRANSLATION MISSING
Example to display nicklist bar in all buffers with a nicklist, and only if
width of terminal is > 100:

----
/set weechat.bar.nicklist.conditions "${nicklist} && ${info:term_width} > 100"
----

// TRANSLATION MISSING
Same condition, but always display nicklist on buffer _&bitlbee_
(even if terminal is small):

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

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

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

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

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

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

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

// TRANSLATION MISSING
[[secured_data_passphrase_on_startup]]
===== Passphrase on startup

When a passphrase is set, WeeChat will ask you to enter it on startup
(but not on `/upgrade`).

If you are using a password manager, you can run an external program to read
the passphrase instead of having to type it manually on WeeChat startup. +
For example with password-store (command `pass`):

----
/set sec.crypt.passphrase_command "/usr/bin/pass show weechat/passphrase"
----

The program may ask you unlock your GPG key or enter another passphrase to
read the secret. WeeChat will wait for the end of the command to read the
passphrase on the standard output (it must be on the first line without any
extra character). +
If the output contains no passphrase or if it is wrong, WeeChat will then ask
you to enter it.

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

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

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

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

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

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

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

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

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

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

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

----
/secure set libera mypassword
----

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

----
/secure
----

例えばパスワードなどの個人データを含むオプションで暗号化データを使うことができます、書式:
"${sec.data.xxx}" ここで "xxx" は暗号化データの名前です
(`/secure set xxx ...` のように使います)。 +
// TRANSLATION MISSING
For a complete list of supported options, see the <<command_weechat_secure,/secure>> command.

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

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

// TRANSLATION MISSING
[[command_aliases]]
=== Command aliases

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

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


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

include::{autogendir}/autogen_user_default_aliases.ja.adoc[tag=default_aliases]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=alias_commands]

[[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.*        | 別名に割り当てた補完
|===

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=weechat_commands]

[[sec_options]]
==== 保護データのオプション

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=sec_options]

[[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.*                     | ネットワーク/TLS オプション
// TRANSLATION MISSING
| plugin     | /set weechat.plugin.*                      | Options on plugins.
// TRANSLATION MISSING
| signal     | /set weechat.signal.*                      | Options on signals.
| bar        | <<command_weechat_bar,/bar>>               +
               /set weechat.bar.*                         | バーオプション
| layout     | <<command_weechat_layout,/layout>>         | レイアウト
// TRANSLATION MISSING
| buffer     | <<command_weechat_buffer,/buffer setauto>> | Properties auto-applied on buffers when they are opened.
| 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::{autogendir}/autogen_user_options.ja.adoc[tag=weechat_options]

[[irc]]
== IRC

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

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

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

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

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

_alice_ というニックネームを使って _irc.libera.chat_ ホストのデフォルトポート (6667)
で稼働中の IRC サーバ上の _#weechat_ と _#weechat-fr_ チャンネルに参加する例:

[source,shell]
----
weechat irc://alice@irc.libera.chat/#weechat,#weechat-fr
----

// TRANSLATION MISSING
[[irc_servers]]
=== Servers

[[irc_servers_add]]
==== Add a server

By default no servers are defined. You can add as many servers as you want with
the <<command_irc_server,/server>> command.

For example to connect to https://libera.chat/[libera.chat ^↗^^]:

----
/server add libera irc.libera.chat
----

[NOTE]
Default port is 6697 and TLS (encrypted traffic) is enabled.

You can tell WeeChat to auto-connect to this server on startup:

----
/set irc.server.libera.autoconnect on
----

To authenticate, it is recommended to use SASL (if supported on the server),
with the password stored as secured data (see also chapter on
<<irc_sasl_authentication,SASL authentication>>):

----
/set irc.server.libera.sasl_username "alice"
/secure set libera xxxxxxx
/set irc.server.libera.sasl_password "${sec.data.libera}"
----

If SASL is not supported, you can use a command to send a message to nickserv:

----
/set irc.server.libera.command "/msg nickserv identify ${sec.data.libera}"
----

[NOTE]
By sending a message to nickserv, you may authenticate after joining channels
which could be a problem on some channels requiring you to be authenticated
to join. In this case, you can set a command delay:
`/set irc.server.libera.command_delay 5`.

[[irc_servers_options]]
==== Server options

Server options are named `irc.server.<server>.<option>` where `<server>` is the
internal name of the server and `<option>` the name of an option. +
The value of a server option is inherited from `irc.server_default.xxx`
if the server option has the special value `null`.

For example if you created the _libera_ server with the commands above, you'll
see this with the command `/fset libera`:

....
irc.server.libera.addresses             文字列  "irc.libera.chat"
irc.server.libera.anti_flood            整数    null -> 2000
irc.server.libera.autoconnect           ブール  on
irc.server.libera.autojoin              文字列  null -> ""
irc.server.libera.autojoin_delay        整数    null -> 0
irc.server.libera.autojoin_dynamic      ブール  null -> off
irc.server.libera.autoreconnect         ブール  null -> on
irc.server.libera.autoreconnect_delay   整数    null -> 10
irc.server.libera.autorejoin            ブール  null -> off
irc.server.libera.autorejoin_delay      整数    null -> 30
irc.server.libera.away_check            整数    null -> 0
irc.server.libera.away_check_max_nicks  整数    null -> 25
irc.server.libera.capabilities          文字列  null -> "*"
irc.server.libera.charset_message       enum    null -> message
irc.server.libera.command               文字列  null -> ""
irc.server.libera.command_delay         整数    null -> 0
irc.server.libera.connection_timeout    整数    null -> 60
irc.server.libera.default_chantypes     文字列  null -> "#&"
irc.server.libera.ipv6                  enum    null -> auto
irc.server.libera.local_hostname        文字列  null -> ""
irc.server.libera.msg_kick              文字列  null -> ""
irc.server.libera.msg_part              文字列  null -> "WeeChat ${info:version}"
irc.server.libera.msg_quit              文字列  null -> "WeeChat ${info:version}"
irc.server.libera.nicks                 文字列  null -> "${username},${username}2,${username}3,${username}4,${username}5"
irc.server.libera.nicks_alternate       ブール  null -> on
irc.server.libera.notify                文字列  null -> ""
irc.server.libera.password              文字列  null -> ""
irc.server.libera.proxy                 文字列  null -> ""
irc.server.libera.realname              文字列  null -> ""
irc.server.libera.registered_mode       文字列  null -> "r"
irc.server.libera.sasl_fail             enum    null -> reconnect
irc.server.libera.sasl_key              文字列  null -> ""
irc.server.libera.sasl_mechanism        enum    null -> plain
irc.server.libera.sasl_password         文字列  "${sec.data.libera}"
irc.server.libera.sasl_timeout          整数    null -> 15
irc.server.libera.sasl_username         文字列  "alice"
irc.server.libera.split_msg_max_length  整数    null -> 512
irc.server.libera.tls                   ブール  null -> on
irc.server.libera.tls_cert              文字列  null -> ""
irc.server.libera.tls_dhkey_size        整数    null -> 2048
irc.server.libera.tls_fingerprint       文字列  null -> ""
irc.server.libera.tls_password          文字列  null -> ""
irc.server.libera.tls_priorities        文字列  null -> "NORMAL"
irc.server.libera.tls_verify            ブール  null -> on
irc.server.libera.usermode              文字列  null -> ""
irc.server.libera.username              文字列  null -> "${username}"
....

For example if you want to automatically connect to all servers you define
without having to do it on each server, you can do:

----
/set irc.server_default.autoconnect on
----

And then you can reset the server option so that it uses the default inherited
value, which is now `on` instead of the default value `off`:

----
/unset irc.server.libera.autoconnect
----

[[irc_tls_certificates]]
==== TLS 証明書

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

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

// TRANSLATION MISSING
weechat.network.gnutls_ca_system::
    load system's default trusted certificate authorities on startup

// TRANSLATION MISSING
weechat.network.gnutls_ca_user::
    extra file(s) with certificate authorities

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

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

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

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

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

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

[source,shell]
----
mkdir -p ~/.config/weechat/tls
wget -O ~/.config/weechat/tls/CAs.pem https://www.spi-inc.org/ca/spi-cacert.crt
----

// TRANSLATION MISSING
[NOTE]
You must replace `~/.config/weechat` by the path to your WeeChat config directory
which can also be for example `~/.weechat`.

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

* WeeChat では、"oftc" サーバが既に追加されています:

----
/connect oftc
----

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

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

[source,shell]
----
mkdir -p ~/.config/weechat/tls
cd ~/.config/weechat/tls
openssl req -nodes -newkey rsa:2048 -keyout nick.pem -x509 -days 365 -out nick.pem
----

// TRANSLATION MISSING
[NOTE]
You must replace `~/.config/weechat` by the path to your WeeChat config directory
which can also be for example `~/.weechat`.

* WeeChat では、"oftc" サーバが既に追加されています:

----
/set irc.server.oftc.tls_cert "${weechat_config_dir}/tls/nick.pem"
/connect oftc
/msg nickserv cert add
----

// TRANSLATION MISSING
For more information, please look at
https://www.oftc.net/NickServ/CertFP/[this page ^↗^^].

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

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

* _plain_: 平文パスワード (デフォルト)
// TRANSLATION MISSING
* _scram-sha-1_: SCRAM with SHA-1 digest algorithm
// TRANSLATION MISSING
* _scram-sha-256_: SCRAM with SHA-256 digest algorithm
// TRANSLATION MISSING
* _scram-sha-512_: SCRAM with SHA-512 digest algorithm
* _ecdsa-nist256p-challenge_: 公開鍵/秘密鍵を使うチャレンジ認証
* _external_: クライアント側 TLS 証明書

サーバオプション:

* _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 を使って認証を行うためには、秘密鍵を作成してください
(接続の際にパスワードは不要です)。

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

[source,shell]
----
openssl ecparam -genkey -name prime256v1 -out ~/.config/weechat/ecdsa.pem
----

// TRANSLATION MISSING
[NOTE]
You must replace `~/.config/weechat` by the path to your WeeChat config directory
which can also be for example `~/.weechat`.

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

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

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

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

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

----
/set irc.server.libera.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.libera.sasl_username "your_nickname"
/set irc.server.libera.sasl_key "${weechat_config_dir}/ecdsa.pem"
----

サーバに再接続:

----
/reconnect libera
----

// TRANSLATION MISSING
[[irc_servers_connection]]
==== Connection

You can connect to server with the <<command_irc_connect,/connect>> command:

----
/connect libera
----

To disconnect:

----
/disconnect libera
----

Or just this if you are on any buffer belonging to _libera_ server (server,
channel, private):

----
/disconnect
----

When you connect to multiple servers at same time, server buffers are merged
by default and you can switch between them with the kbd:[Ctrl+x] key. +
It is possible to disable auto merge of server buffers to have independent
server buffers:

----
/set irc.look.server_buffer independent
----

// TRANSLATION MISSING
[[irc_tor_sasl]]
==== Connect with Tor and SASL

// TRANSLATION MISSING
Some servers support connections with https://www.torproject.org/[Tor ^↗^^],
a network of virtual tunnels that allows people and groups to improve their
privacy and security on the Internet.

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

[source,shell]
----
sudo apt-get install tor
----

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

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

// TRANSLATION MISSING
Now, add a new server (replace server name "irc-tor" and the address by a valid one):

----
/server add irc-tor this.is.the.address.onion
----

Tor プロキシを設定:

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

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

----
/set irc.server.irc-tor.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.irc-tor.sasl_username "your_nickname"
/set irc.server.irc-tor.sasl_key "${weechat_config_dir}/ecdsa.pem"
----

// TRANSLATION MISSING
And finally, connect to the server:

----
/connect irc-tor
----

// TRANSLATION MISSING
[[irc_ircv3_support]]
=== IRCv3 support

WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:

* <<irc_ircv3_account_notify,account-notify>>
* <<irc_ircv3_account_tag,account-tag>>
* <<irc_ircv3_away_notify,away-notify>>
* <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_batch,batch>>
* <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>>
* <<irc_ircv3_message_tags,message-tags>>
* <<irc_ircv3_monitor,monitor>>
* <<irc_ircv3_multi_prefix,multi-prefix>>
* <<irc_ircv3_sasl,SASL v3.2>>
* <<irc_ircv3_server_time,server-time>>
* <<irc_ircv3_setname,setname>>
* <<irc_ircv3_typing,typing>>
* <<irc_ircv3_userhost_in_names,userhost-in-names>>
* <<irc_ircv3_whox,WHOX>>

By default all capabilities supported by the server and WeeChat are
automatically enabled
(see option <<option_irc.server_default.capabilities,irc.server_default.capabilities>>).

Tables with comparison of different IRC clients, including WeeChat, are available
on https://ircv3.net/software/clients[this page ^↗^^].

[[irc_ircv3_account_notify]]
==== account-notify

Specification: https://ircv3.net/specs/extensions/account-notify[account-notify ^↗^^]

This capability allows the server to send messages when users identify or
unidentify on the server. +
WeeChat displays such messages if the option
<<option_irc.look.display_account_message,irc.look.display_account_message>>
is enabled (default value).

Examples:

....
-- alice has identified as Alice01

-- alice has unidentified
....

[[irc_ircv3_account_tag]]
==== account-tag

Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^^]

This capability allows the server to send account as message tag to commands
sent to the client. +
WeeChat parses this tag and saves it in the message, but it is not used or
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter
messages matching specific accounts.

Example of raw IRC message received:

....
@account=Alice01 :user@example.com PRIVMSG #test :Hello!
....

Message displayed in channel:

....
<alice> Hello!
....

Message with tags:

....
<alice> Hello! [irc_privmsg,irc_tag_account_Alice01,notify_message,prefix_nick_lightcyan,nick_alice,host_user@example.com,log1]
....

[[irc_ircv3_away_notify]]
==== away-notify

Specification: https://ircv3.net/specs/extensions/away-notify[away-notify ^↗^^]

This capability allows the server to send away notifications for users present
on the same channels as you.

When the away status is changed for a user (away or back), this is reflected
with a specific color in the nicklist, using the following options:

* <<option_irc.server_default.away_check,irc.server_default.away_check>>
* <<option_irc.server_default.away_check_max_nicks,irc.server_default.away_check_max_nicks>>
* <<option_weechat.look.item_away_message,weechat.look.item_away_message>>

// TRANSLATION MISSING
[[irc_ircv3_batch]]
==== batch

Specification: https://ircv3.net/specs/extensions/batch[batch ^↗^^]

This capability allows the server to send batched events (grouping of several
messages that are related).

For now, WeeChat only stores messages received in a batch and processes as usual
later, when the batch ends.

[[irc_ircv3_cap_notify]]
==== cap-notify

Specification: https://ircv3.net/specs/extensions/capability-negotiation#the-cap-new-subcommand[cap-notify ^↗^^]

This capability allows the server to advertise on new or removed capabilities
on the server (via `CAP NEW` and `CAP DEL` commands).

Examples:

....
-- irc: クライアントの機能、現在利用可能なもの: sasl

-- irc: クライアントの機能、削除されたもの: sasl
....

[[irc_ircv3_chghost]]
==== chghost

Specification: https://ircv3.net/specs/extensions/chghost[chghost ^↗^^]

This capability allows the server to send messages when users change name or host. +
When the option <<option_irc.look.smart_filter_chghost,irc.look.smart_filter_chghost>>
is enabled (default value), the host changes are automatically hidden if the nick
has not spoken for several minutes. +
The color of the change host message is controlled by the option
<<option_irc.color.message_chghost,irc.color.message_chghost>>.

Example:

....
-- alice (user@example.com) がホストを test.com に変更しました
....

// TRANSLATION MISSING
[[irc_ircv3_draft_multiline]]
==== draft/multiline

Specification: https://ircv3.net/specs/extensions/multiline[multiline ^↗^^]

This capability allows the client and server to send messages with multiple lines,
using the <<irc_ircv3_batch,batch>> capability, that must be enabled as well.

There are limits in term of bytes or number of lines in a multiline message
that are given in the capability sent by the server, for example:

....
CAP alice LS * :draft/multiline=max-bytes=4096,max-lines=24
....

This sets a limit of 4096 bytes and 24 lines for a multiline batched content.

If the limits are not given by the server, the default in WeeChat are:

* max bytes: 4096
* max lines: 24

Only standard messages and those send by the <<command_irc_notice,/notice>>
command can be multiline. +
ACTION CTCP messages sent with command <<command_irc_me,/me>> are not affected
by this capability. That means multiline actions are sent as multiple actions.

[WARNING]
As the specification is a "draft", it may change and the multiline support can
possibly break at any time in WeeChat. +
The capability is automatically enabled if the server supports it and can be
disabled with this command:
`/set irc.server_default.capabilities "*,!draft/multiline"`. +
When the capability is disabled, a multiline message is sent as multiple messages,
as if they were sent sequentially to the server.

Example of IRC messages sent for a user message with two lines (`this is a test`
/ `on two lines`), send to channel #test:

....
BATCH +i8Je7M7gquddoyC9 draft/multiline #test
@batch=i8Je7M7gquddoyC9 PRIVMSG #test :this is a test
@batch=i8Je7M7gquddoyC9 PRIVMSG #test :on two lines
BATCH -i8Je7M7gquddoyC9
....

Display of the message sent in WeeChat:

....
19:01:45 alice | this is a test
               | on two lines
....

// TRANSLATION MISSING
[[irc_ircv3_echo_message]]
==== echo-message

Specification: https://ircv3.net/specs/extensions/echo-message[echo-message ^↗^^]

This capability forces the server to send PRIVMSG, NOTICE and TAGMSG messages
back to WeeChat.

WeeChat displays only the message received and not the message sent, so a delay
can be noticed between the send and the display. When the message is displayed,
it means it has been properly received by the server and propagated to other
clients connected to the server as well.

[[irc_ircv3_extended_join]]
==== extended-join

Specification: https://ircv3.net/specs/extensions/extended-join[extended-join ^↗^^]

This capability allows the server to send account and real name when users
join channels. +
WeeChat displays this additional information in join messages if the option
<<option_irc.look.display_extended_join,irc.look.display_extended_join>>
is enabled (default value).

Example:

....
--> john [John01] (John Doe) (~user@example.com) が #test に参加
....

[[irc_ircv3_invite_notify]]
==== invite-notify

Specification: https://ircv3.net/specs/extensions/invite-notify[invite-notify ^↗^^]

This capability allows the server to send invite messages when users are
invited to channels.

Example:

....
-- alice が bob を #test に招待しました
....

[[irc_ircv3_message_tags]]
==== message-tags

Specification: https://ircv3.net/specs/extensions/message-tags[message-tags ^↗^^]

This capability allows to add metadata in messages. +
These tags can be displayed using the command `/debug tags`.

It must be enabled to use <<typing_notifications,typing notifications>>.

[[irc_ircv3_monitor]]
==== monitor

Specification: https://ircv3.net/specs/extensions/monitor[monitor ^↗^^]

This capability allows the server to send notifications when clients become
online/offline. +
WeeChat automatically uses this extension if available when using the
<<command_irc_notify,/notify>> command.

[[irc_ircv3_multi_prefix]]
==== multi-prefix

Specification: https://ircv3.net/specs/extensions/multi-prefix[multi-prefix ^↗^^]

This capability allows the server to send all user modes at once in
<<command_irc_names,/names>> and <<command_irc_whois,/whois>> responses. +

////
Example: output of `/names`:

....
-- ニックネーム #test: [@%+alice bob +carol]
....
////

[NOTE]
For now, WeeChat doesn't display all prefixes in the `/names` output, even if
they are received and properly saved internally.

Example: output of `/whois alice`:

....
-- [alice] @%+#test
....

[[irc_ircv3_sasl]]
==== SASL

Specification: https://ircv3.net/specs/extensions/sasl-3.2[SASL 3.2 ^↗^^]

See the dedicated chapter <<irc_sasl_authentication,SASL authentication>>.

[[irc_ircv3_server_time]]
==== server-time

Specification: https://ircv3.net/specs/extensions/server-time[server-time ^↗^^]

This capability allows the server to send time for messages as message tag. +
When the time is received in a message, WeeChat uses it to display the message
(it can then be displayed with a past date).

The <<relay_irc_proxy,IRC proxy>> in Relay plugin supports this capability,
so any IRC client of Relay should enable it to display the real message time
in the backlog sent upon connection.

[[irc_ircv3_setname]]
==== setname

Specification: https://ircv3.net/specs/extensions/setname[setname ^↗^^]

This capability lets you change your real name by using the
<<command_irc_setname,/setname>> command.

[[irc_ircv3_typing]]
==== typing

Specification: https://ircv3.net/specs/client-tags/typing[typing ^↗^^]

See the dedicated chapter <<typing_notifications,Typing notifications>>.

[[irc_ircv3_userhost_in_names]]
==== userhost-in-names

Specification: https://ircv3.net/specs/extensions/userhost-in-names[userhost-in-names ^↗^^]

This capability allows the server to send hostnames in <<command_irc_names,/names>>
responses.

[NOTE]
WeeChat doesn't display hostnames in the `/names` output.

Example of raw IRC messages received without the capability:

....
:irc.server 353 alice = #test :@alice bob +carol
....

Example of raw IRC messages received with the capability:

....
:irc.server 353 alice = #test :@alice!user1@host1 bob!user2@host2 +carol!user3@host3
....

[[irc_ircv3_whox]]
==== WHOX

Specification: https://ircv3.net/specs/extensions/whox[WHOX ^↗^^]

This capability lets you request additional fields in the WHO response
(via the <<command_irc_who,/who>> command). +
WeeChat displays all additional information received in the WHO output.

// TRANSLATION MISSING
[[irc_channels]]
=== Channels

You can join channels with the <<command_irc_join,/join>> command:

----
/join #channel
----

Part a channel (keeping the buffer open):

----
/part [quit message]
----

The channels you joined are not saved. If you want to join them automatically
when connecting to the server, you must set the server `autojoin` option:

----
/set irc.server.libera.autojoin "#weechat,#weechat-fr"
----

[NOTE]
Some scripts can help to automatically set this option,
see `/script search autojoin`.

Be careful, spaces can be used only to separate list of channels from keys,
for example if `#channel1` requires a key but not `#channel2`:

----
/set irc.server.libera.autojoin "#channel1,#channel2 key1"
----

// TRANSLATION MISSING
For help on the format, see option <<option_irc.server_default.autojoin,irc.server_default.autojoin>>.

[[irc_private_messages]]
=== Private messages

You can send a private message with the <<command_irc_query,/query>> command,
which opens a separate buffer:

----
/query bob hi, how are you?
----

Without arguments the command just opens the buffer (or selects it if already open):

----
/query bob
----

To close the private buffer, you can do this command on the private buffer:

----
/close
----

// TRANSLATION MISSING
[[irc_smart_filter]]
=== Smart filter

A smart filter is available to filter some messages when someone did not write
anything in the channel during a configurable delay:

- join: user joins the channel
- part: user leaves the channel
- quit: user quits the server
- account: user changes its account
- chghost: user changes name or host
- mode: mode changes on channel
- nick: user changes its nick
- setname: user changes its real name

Smart filter is enabled by default, but you must add a filter to hide lines on
buffers, for example:

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

// TRANSLATION MISSING
It is possible to create filter for one channel only or channels beginning with
same name (see the <<command_weechat_filter,/filter>> command):

----
/filter add irc_smart_weechat irc.libera.#weechat* irc_smart_filter *
----

You can setup a longer delay (in minutes):

----
/set irc.look.smart_filter_delay 10
----

If someone did not write anything during last 10 minutes, its messages like
join/part/quit will be hidden by default on channel, and you can use key
kbd:[Alt+=] (toggle filters) to see them.

[[irc_ctcp_replies]]
=== CTCP 応答

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

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

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

// TRANSLATION MISSING
[NOTE]
The name of CTCP must be in lower case. That means option _irc.ctcp.VERSION_
would not work.

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.libera.version "WeeChat ${version} (for libera)"
----

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

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

// TRANSLATION MISSING
The CTCP replies are evaluated (see command <<command_weechat_eval,/eval>>) and
the following extra variables are available:

[width="100%",cols="2,4,8",options="header"]
|===
// TRANSLATION MISSING
| Variable           | 説明                                      | 値/例
| `+${clientinfo}+`  | サポートしている CTCP オプションのリスト  | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| `+${version}+`     | WeeChat バージョン                        | `+4.1.0-dev+`
| `+${versiongit}+`  | WeeChat バージョン + Git バージョン ^(1)^ | `+4.1.0-dev (git: v4.0.0-51-g8f98b922a)+`
| `+${git}+`         | Git バージョン ^(1)^                      | `+v4.0.0-51-g8f98b922a+`
| `+${compilation}+` | WeeChat コンパイル日時                    | `+Jul  8 2023 20:14:23+`
| `+${osinfo}+`      | OS に関する情報                           | `+Linux 5.10.0-23-amd64 / x86_64+`
| `+${site}+`        | WeeChat ウェブサイト                      | `+https://weechat.org/+`
| `+${download}+`    | WeeChat ウェブサイトのダウンロードページ  | `+https://weechat.org/download/+`
| `+${time}+`        | 現在の日時                                | `+Sat, 08 Jul 2023 21:11:19 +0200+`
| `+${username}+`    | IRC サーバ上で使うユーザ名                | `+name+`
| `+${realname}+`    | IRC サーバ上で使う実名                    | `+John Doe+`
|===

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

// TRANSLATION MISSING
The default CTCP replies are:

[width="100%",cols="2,4,8",options="header"]
|===
| CTCP       | 応答書式                      | 例
| CLIENTINFO | `+${clientinfo}+`             | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| SOURCE     | `+${download}+`               | `+https://weechat.org/download/+`
| TIME       | `+${time}+`                   | `+Sat, 08 Jul 2023 21:11:19 +0200+`
| VERSION    | `+WeeChat ${version}+`        | `+WeeChat 4.1.0-dev+`
|===

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

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

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

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

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

server::
    サーババッファ

weechat::
    WeeChat "core" バッファ

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

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

[width="100%",cols="^2m,^3m,15",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     |               | ログインに成功
|===

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

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

例:

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

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

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

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

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

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

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

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=irc_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=irc_options]

[[xfer]]
== Xfer

Xfer プラグインの機能:

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=xfer_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=xfer_options]

// TRANSLATION MISSING
[[typing_notifications]]
== Typing notifications

The typing plugin is used to inform other users you are typing messages and
show a list of users currently typing a message on the buffer.

It is used by IRC plugin on channel and private buffers, when the "message-tags"
capability is enabled (you can check with <<command_irc_cap,/cap>> command). +
Under the hood, typing client tag is used, following
https://ircv3.net/specs/client-tags/typing[this specification ^↗^^].

[[typing_activation]]
=== Activation

For privacy considerations, the typing feature is disabled by default. +
If you want to use it, you must enable options in both typing and irc plugins:

----
/set typing.look.enabled_nicks on
/set typing.look.enabled_self on
/set irc.look.typing_status_nicks on
/set irc.look.typing_status_self on
----

The typing notifications are displayed at the end of the status bar.

Example of status bar with the "typing" item: "bob" is typing a message and
"alice" was typing a message but made a pause:

....
│[12:55] [6] [irc/libera] 3:#test(+n){4} [Typing: bob, (alice)]                   │
│[@Flashy] █                                                                      │
└─────────────────────────────────────────────────────────────────────────────────┘
....

[[typing_signals_sent]]
=== Signals sent

When you are typing a message (not a command starting with `/`), the typing
plugin sends signals to inform other plugins (like IRC) that you are typing,
and these plugins can then send typing notifications to other users.

The following signals are sent when you are typing messages:

[width="100%",cols="1,1,5",options="header"]
|===
| Signal              | Arguments        | Description
| typing_self_typing  | Pointer: buffer. | You are typing a message.
| typing_self_paused  | Pointer: buffer. | You made a pause while typing a message.
| typing_self_cleared | Pointer: buffer. | You cleared the command line without sending the message.
| typing_self_sent    | Pointer: buffer. | You sent the message to the buffer.
|===

[[typing_signals_caught]]
=== Signals caught

The typing plugin is catching some signals that can be sent by other plugins
(like IRC), to update internal hashtables used to store the typing state of
nicks on buffers. These hashtables are used to build the content of "typing"
bar item.

The following signals are caught by the typing plugin:

[width="100%",cols="1,4,3",options="header"]
|===
| Signal | Arguments | Description

| typing_set_nick
| String: buffer pointer + ";" + state (one of: "off", "typing", "paused",
  "cleared") + ";" + nick. +
  Example: "0x1234abcd;typing;alice".
| Set typing state for a nick on a buffer.

| typing_reset_buffer
| Pointer: buffer.
| Remove typing state for all nicks on a buffer.
|===

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=typing_options]

[[relay]]
== Relay

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

* _irc_: IRC プロキシ: IRC サーバに対する接続を、単一または複数の IRC
  クライアントで共有するために用います。
// TRANSLATION MISSING
* _api_: HTTP REST API, used by WeeChat and remote interfaces to display and
  interact with WeeChat
// TRANSLATION MISSING
* _weechat_: protocol used by remote interfaces to display and interact with
  WeeChat.

// TRANSLATION MISSING
For _api_ and _weechat_ protocols, see the list of remote interfaces on
https://weechat.org/about/interfaces/[this page ^↗^^].

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

// TRANSLATION MISSING
It is highly recommended to set a password for relay, with these commands:

----
secure set relay mypassword
/set relay.network.password "${sec.data.relay}"
----

// TRANSLATION MISSING
This password is used with all protocols.

[[relay_totp]]
=== TOTP

// TRANSLATION MISSING
TOTP (Time-based One-Time Password) can be used as secondary authentication
factor for _api_ and _weechat_ protocols, in addition to the password.

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

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

* FreeOTP:
  https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp[Android ^↗^^],
  https://apps.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://apps.apple.com/fr/app/google-authenticator/id388497605[iOS ^↗^^]

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

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

----
/secure set relay_totp secretpasswordbase32
/set relay.network.totp_secret "${sec.data.relay_totp}"
----

[[relay_tls]]
=== TLS

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

// TRANSLATION MISSING
The default path to certificate/key is defined by option
<<option_relay.network.tls_cert_key,relay.network.tls_cert_key>>.

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

[source,shell]
----
mkdir -p ~/.config/weechat/tls
cd ~/.config/weechat/tls
openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 365 -out relay.pem
----

// TRANSLATION MISSING
[NOTE]
You must replace `~/.config/weechat` by the path to your WeeChat config directory
which can also be for example `~/.weechat`.

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

----
/relay tlscertkey
----

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

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

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

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

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

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

----
/relay add tls.irc 8000
----

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

----
/relay add irc.libera 8000
----

任意の IRC クライアントからサーバパスワード "mypass" (全てのサーバに対して共通の
IRC プロキシを設定した場合には "libera: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 these
commands:

----
/secure set relay_libera libera:secret
/set irc.server.relay.password "${sec.data.relay_libera}"
----

// TRANSLATION MISSING
[[relay_api_protocol]]
=== API protocol

The Relay plugin can send data to a remote WeeChat or interface using an
HTTP REST API protocol.

You can browse and test the API online:
https://weechat.org/api/[WeeChat Relay API ^↗^^].

You can connect with WeeChat or a remote interface, see
https://weechat.org/about/interfaces/[this page ^↗^^].

For example:

----
/relay add api 9000
----

Now you can connect on port 9000 with a WeeChat or a remote interface using
password "mypassword".

To connect to an _api_ relay running locally with WeeChat:

----
/remote add weechat http://localhost:9000 -password=mypassword
/remote connect weechat
----

To connect to an _api_ relay running elsewhere with WeeChat
(TLS is highly recommended):

----
/remote add weechat https://example.com:9000 -password=mypassword
/remote connect weechat
----

[NOTE]
The remote WeeChat must expose the same API version as the local WeeChat, so
it's highly recommended to use exactly the same WeeChat version on remote
and local client.

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

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

// TRANSLATION MISSING
You can connect with a remote interface, see
https://weechat.org/about/interfaces/[this page ^↗^^].

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

例:

----
/relay add weechat 9500
----

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

[[relay_websocket]]
=== WebSocket

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

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

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

[source,javascript]
----
websocket = new WebSocket("ws://example.com:9500/weechat");
----

ポート番号 (例では 9500 番) は Relay プラグインで定義したものです。

// TRANSLATION MISSING
The URI must end with "/weechat" for _irc_ and _weechat_ protocols and "/api"
for _api_ protocol.

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

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

----
/relay add unix.weechat ${weechat_runtime_dir}/relay_socket
----

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

OpenSSH を使った例:

[source,shell]
----
ssh -L 9000:.weechat/relay_socket user@hostname
----

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=relay_commands]

[[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.*                  | リレーに使うポート (オプションをセクションに追加/削除出来ます)
|===

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=relay_options]

// TRANSLATION MISSING
[[external_commands]]
== External commands

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

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=exec_commands]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=exec_options]

// TRANSLATION MISSING
[[fifo_pipe]]
== FIFO pipe

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

// TRANSLATION MISSING
The FIFO pipe is located in WeeChat runtime directory and is called
_weechat_fifo_12345_ by default (where _12345_ is the WeeChat process id).

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

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

// TRANSLATION MISSING
Backslashes can be interpreted with this format, where `*` is replaced by `\`,
allowing for example to send multiline messages:

....
  plugin.buffer \text or command here
  \text or command here
....

例:

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

[source,shell]
----
echo 'irc.server.libera */nick newnick' >/run/user/1000/weechat/weechat_fifo_12345
----

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

[source,shell]
----
echo 'irc.libera.#weechat *hello!' >/run/user/1000/weechat/weechat_fifo_12345
----

// TRANSLATION MISSING
* Send a multiline message on IRC #test channel, if capability "draft/multiline"
  is enabled on the ergo server:

[source,shell]
----
echo 'irc.ergo.#test \hello\n...on two lines!' >/run/user/1000/weechat/weechat_fifo_12345
----

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

[source,shell]
----
echo '*hello!' >/run/user/1000/weechat/weechat_fifo_12345
----

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

[source,shell]
----
printf '%b' '*/python unload\n*/python autoload\n' >/run/user/1000/weechat/weechat_fifo_12345
----

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=fifo_commands]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=fifo_options]

[[trigger]]
== 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:[/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.libera.*+` +
  `+*;irc.libera.#weechat+` +
  `+formatted;irc.libera.#weechat;irc_notice+`
| link:weechat_plugin_api.ja.html#_hook_line[hook_line ^↗^^]

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

// TRANSLATION MISSING
| command
| 1. コマンド名 (優先度の指定も可) (必須) +
  2. 説明 (evaluated, <<command_weechat_eval,/eval>> コマンドを参照) +
  3. 引数 (evaluated, <<command_weechat_eval,/eval>> コマンドを参照) +
  4. 引数の説明 (evaluated, <<command_weechat_eval,/eval>> コマンドを参照) +
  5. 補完 (evaluated, <<command_weechat_eval,/eval>> コマンドを参照)
| `+test+` +
  `+5000\|test+` +
  `+test;test command;arg1 arg2;arg1: description 1${\n}arg2: description 2+`
| 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})
----

// TRANSLATION MISSING
[[trigger_regex]]
=== Regular expression

The regular expression is used to change variables in callback hashtable.

Format is one of the following:

----
/string1/string2
/string1/string2/var
s/string1/string2
s/string1/string2/var
y/string1/string2
y/string1/string2/var
----

Fields:

* `s` or `y`: a letter with the command; if missing, default command is `s`
  and the first char is then used as the delimiter:
** `s`: regex replacement: first string is a regular expression, second string
   is the replacement for every matching string
** `y`: chars translation: first string is a set of characters that are replaced
   by the characters in the second string; once evaluated, each string must have
   exactly the same number of UTF-8 chars
* `/`: the regex delimiter; the char "/" can be replaced by any char
  (one or more identical chars)
* `string1`: the first string (use depends on the command)
* `string2`: the second string (use depends on the command)
* `var`: the hashtable variable to update

Many regular expressions can be separated by a space, for example:

----
s/regex1/replace1/var1 y/abcdef/ABDDEF/var2
----

// TRANSLATION MISSING
[[trigger_regex_replace]]
==== Regex replace

For the command `s`, the format is: `s/regex/replace` or `s/regex/replace/var`
(where _var_ is a variable of the hashtable).

As `s` is the default command, it can be omitted, so `/regex/replace` is also
valid (but the first char, which is the delimiter, must not be a letter).

Matching groups can be used in _replace_:

* `+${re:0}+` to `+${re:99}+`: `+${re:0}+` is the whole match, `+${re:1}+` to
  `+${re:99}+` are groups captured
* `pass:[${re:+}]`: the last match (with highest number)
* `+${re:#}+`: index of last group captured
* `+${re:repl_index}+`: index of replacement being done (starts to 1)
* `+${hide:c,${re:N}}+`: match "N" with all chars replaced by "c"
  (example: `+${hide:*,${re:2}}+` is the group #2 with all chars replaced by
  `+*+`).

Example: use bold for words between `+*+`:

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

Example: default trigger _server_pass_ uses this regular expression to hide
password in commands `/server` and `/connect` (chars in passwords are replaced
by `+*+`):

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

[NOTE]
In this example, the delimiter used is "==" because there is a "/" in the
regular expression.

// TRANSLATION MISSING
[[trigger_regex_translate_chars]]
==== Translate chars

For the command `y`, the format is: `y/chars1/chars2` or `y/chars1/chars2/var`
(where _var_ is a variable of the hashtable).

Example: replace "a", "b" and "c" by upper case letter:

----
y/abc/ABC/
----

Example: rotate arrows clockwise:

----
y/←↑→↓/↑→↓←/
----

Example: convert all letters to lower case:

----
y/${chars:upper}/${chars:lower}/
----

Example: shift each letter by one position, preserving case: a→b, b→c … y→z, z→a:

----
y/${chars:a-z}${chars:A-Z}/${chars:b-z}a${chars:B-Z}A/
----

// TRANSLATION MISSING
[[trigger_regex_variable]]
==== Variable

If _var_ does not exist in the hashtable, it is created automatically with an
empty value. This allows to create custom temporary variables.

If _var_ is not specified, the default variable is used, it depends on hook
type:

[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_usec、date_printed、date_usec_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 によって使われる値に影響を及ぼします

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

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

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

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

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

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

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

* _conditions_
* _regex_
* _command_

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

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

----
/trigger monitor
----

// TRANSLATION MISSING
All callbacks set following variables in hashtable:

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数            | 型     | 説明
// TRANSLATION MISSING
| tg_trigger_name | string | Name of trigger.
// TRANSLATION MISSING
| tg_hook_type    | string | Hook type: "signal", "command", etc.
|===

[[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  | サーバの名前 (例: "libera")
| tags                 | string  | メッセージ内のタグ (使われることはまれです)
| message_without_tags | string  | タグを含まないメッセージ
| nick                 | string  | ニックネーム ^(1)^
| 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")
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ The nick is the sender of the message. +
Your own nick on the server is `${irc_server.nick}`.

データがポインタの場合、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  | 行の日付 (タイムスタンプ)
// TRANSLATION MISSING
| date_usec          | string  | Microseconds of line date.
| date_printed       | string  | 行が表示される日付 (タイムスタンプ).
// TRANSLATION MISSING
| date_usec_printed  | string  | Microseconds of date when line was displayed.
| str_time           | string  | 表示に使う日付、色コードを含めることも可能
| tags               | string  | メッセージのタグ (文字列の最初と最後にコンマが追加されます)
| displayed          | string  | "1" の場合は表示、"0" の場合は非表示
// TRANSLATION MISSING
| notify_level       | string  | "-1" = no notify, "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_)
// TRANSLATION MISSING
| tg_tag_irc_xxx     | string | IRC message tag (key "xxx"). ^(1)^
| tg_notify          | string | 通知レベルが _none_ 以外の場合、その通知レベル
| tg_msg_pv          | string | プライベートメッセージの場合 "1"、それ以外は "0"
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ Commas are replaced by semicolons in IRC tag (key and value).

[[trigger_data_print]]
==== Print

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

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数               | 型      | 説明
| buffer             | pointer | メッセージが表示されたバッファ
// TRANSLATION MISSING
| tg_date            | string  | メッセージの日付と時間 (書式: `%FT%T.%f`, see link:weechat_plugin_api.ja.html#_util_strftimeval[WeeChat plugin API reference / util_strftimeval ^↗^^]).
| 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_)
// TRANSLATION MISSING
| tg_tag_irc_xxx     | string | IRC message tag (key "xxx"). ^(1)^
| tg_notify          | string | 通知レベルが _none_ 以外の場合、その通知レベル
| tg_msg_pv          | string | プライベートメッセージの場合 "1"、それ以外は "0"
|===

// TRANSLATION MISSING
[NOTE]
^(1)^ Commas are replaced by semicolons in IRC tag (key and value).

[[trigger_data_command]]
==== Command

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

[width="100%",cols="3m,2,14",options="header"]
|===
| 変数           | 型      | 説明
| buffer         | pointer | バッファ
// TRANSLATION MISSING
| tg_argc        | string  | The number of arguments (the command itself counts for one).
// TRANSLATION MISSING
| tg_argvN       | string  | N 番目の引数 (`+tg_argv0+` is the command itself, the others are command arguments).
// TRANSLATION MISSING
| tg_argv_eolN   | string  | N 番目の引数から最後の引数まで (`+tg_argv_eol0+` includes the command itself).
// TRANSLATION MISSING
| tg_shell_argc  | string  | The number of arguments with a split like the shell does (the command itself counts for one).
// TRANSLATION MISSING
| tg_shell_argvN | string  | Argument #N with a split like the shell does (`+tg_shell_argv0+` is the command itself, the others are command arguments).
|===

[[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 | 残り呼び出し回数
// TRANSLATION MISSING
| tg_date            | string | 現在の日付および時間 (書式: `%FT%T.%f`, see link:weechat_plugin_api.ja.html#_util_strftimeval[WeeChat plugin API reference / util_strftimeval ^↗^^]).
|===

[[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::{autogendir}/autogen_user_commands.ja.adoc[tag=trigger_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=trigger_options]

// TRANSLATION MISSING
[[extending_weechat]]
== Extending WeeChat

// TRANSLATION MISSING
WeeChat has a modular design and can be extended with plugins and scripts.

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

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

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

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

`/plugin`
コマンドを使うことで、プラグインのロード/アンロード、ロード済みプラグインの表示を行うことができます。

// TRANSLATION MISSING
When a plugin is unloaded, WeeChat removes:

* buffers
* configuration options (options are written in files)
* all hooks: commands, modifiers, process, etc.
* infos and infolists
* hdata
* bar items.

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

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

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

[width="100%",cols="1,5",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 およびプラグインが発生させたイベントに対するテキスト置換とコマンド実行
// TRANSLATION MISSING
| typing     | Display users currently writing messages.
| xfer       | ファイル転送とダイレクトチャット
|===

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

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

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

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

// TRANSLATION MISSING
[[script_manager]]
==== Script manager

// TRANSLATION MISSING
The script manager (command <<command_script_script,/script>>) is used to
load/unload scripts of any language, and install/remove scripts of WeeChat
scripts repository, which are visible on
https://weechat.org/scripts/[this page ^↗^^].

// TRANSLATION MISSING
For privacy considerations, the download of scripts is disabled by default. +
To enable it, type this command:

----
/script enable
----

// TRANSLATION MISSING
Then you can download the list of scripts and display them in a new buffer
with the <<command_script_script,/script>> command:

[subs="quotes,attributes"]
:x: *
....
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│322/322 個のスクリプト (フィルタ: {x}) | ソート: i,p,n | Alt+key/input: i=インストール、r=削除、l=ロ>>│
│2.scripts│{x}      autosort.py                     3.10    2023-12-31 | サーバによるグループ化と名前によるソート│
│         │{x}      highmon.pl                      2.7     2020-06-21 | ハイライトモニタバッファを追加。        │
│         │{x}ia r  grep.py                   0.8.6 0.8.6   2022-11-11 | バッファとログファイルから正規表現で検索│
│         │{x}      colorize_nicks.py               32      2023-10-30 | チャットエリアとコマンドラインで weechat│
│         │##{x}ia r  go.py                     3.0.1 3.0.1   2024-05-30 | 素早くバッファへ移動。                  ##│
│         │       aesthetic.py                    1.0.6   2020-10-25 | Make messages more A E S T H E T I C A L│
│         │       aformat.py                      0.2     2018-06-21 | テキスト書式を変更します、書式機能を持た│
│         │       alternatetz.py                  0.4     2022-01-25 | 代替タイムゾーン要素を追加。            │
│         │       amarok2.pl                      0.7     2012-05-08 | Amarok 2 の操作と現在再生中の局に関する │
│         │       amqp_notify.rb                  0.1     2011-01-12 | プライベートメッセージとハイライトを AMQ│
│         │       announce_url_title.py           19      2021-06-05 | URL タイトルをユーザまたはチャンネルに通│
│         │       anotify.py                      1.0.2   2020-05-16 | プライベートメッセージ、ハイライト、DCC │
│         │       anti_password.py                1.2.1   2021-03-13 | Prevent a password from being accidental│
│         │       apply_corrections.py            1.3     2018-06-21 | ユーザが s/誤/正 を送信したらテキストを │
│         │       arespond.py                     0.1.2   2022-01-25 | 単純な自動応答。                        │
│         │       atcomplete.pl                   0.001   2016-10-29 | "@" 文字の後でニックネームのタブ補完。  │
│         │       audacious.pl                    0.3     2009-05-03 | Audacious が現在再生中の曲を表示。      │
│         │       auth.rb                         0.3     2014-05-30 | SASL ユーザ名およびパスワードを使って Ni│
│         │       auto_away.py                    0.4     2018-11-11 | 簡単な自動離席スクリプト。              │
│         │       autoauth.py                     1.3     2021-11-07 | ニックネームを変更した際に自動認証を許可│
│         │       autobump.py                     0.1.0   2019-06-14 | バッファの活発さに応じて並び替える。    │
│         │       autoconf.py                     0.4     2021-05-11 | 変更されたオプションを .weerc ファイルに│
│         │       autoconnect.py                  0.3.3   2019-10-06 | WeeChat の終了時に開いていたサーバとチャ│
│         │       autojoin_on_invite.py           0.9     2022-10-25 | チャンネルに招待されたら自動的に参加。  │
│         │       automarkbuffer.py               1.0     2015-03-31 | 特定の時間内に新しいメッセージを受け取っ│
│         │       automerge.py                    0.2     2018-03-03 | 新しいバッファを事前に定義した規則に従っ│
│         │[12:55] [2] [script] 2:scripts                                                                      │
│         │█                                                                                                   │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
....

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=script_commands]

[[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::{autogendir}/autogen_user_options.ja.adoc[tag=script_options]

// TRANSLATION MISSING
[[scripting_plugins]]
==== Scripting plugins

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=python_commands]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=perl_commands]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=ruby_commands]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=lua_commands]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=tcl_commands]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=guile_commands]

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

include::{autogendir}/autogen_user_commands.ja.adoc[tag=php_commands]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=python_options]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=perl_options]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=ruby_options]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=lua_options]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=tcl_options]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=guile_options]

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

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

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

オプション:

include::{autogendir}/autogen_user_options.ja.adoc[tag=php_options]

[[support]]
== サポート

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

IRC を使ったサポート窓口は _irc.libera.chat_ サーバにあります:

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

// TRANSLATION MISSING
For other ways of support, see
https://weechat.org/about/support/[this page ^↗^^].
