4745 lines
171 KiB
Plaintext
4745 lines
171 KiB
Plaintext
= WeeChat user's guide
|
||
:author: Sébastien Helleu
|
||
:email: flashcode@flashtux.org
|
||
:lang: en
|
||
:toc: left
|
||
:toclevels: 4
|
||
:sectnums:
|
||
:sectnumlevels: 3
|
||
:docinfo1:
|
||
|
||
|
||
This manual documents WeeChat chat client, it is part of WeeChat.
|
||
|
||
Latest version of this document can be found on this page:
|
||
https://weechat.org/doc
|
||
|
||
|
||
[[introduction]]
|
||
== Introduction
|
||
|
||
WeeChat (Wee Enhanced Environment for Chat) is a free chat client, fast and
|
||
light, designed for many operating systems.
|
||
|
||
[[features]]
|
||
=== Features
|
||
|
||
Main features are:
|
||
|
||
* multi-protocols (mainly IRC)
|
||
* multi-servers connection (with SSL, IPv6, proxy)
|
||
* small, fast and light
|
||
* customizable and extensible with plugins and scripts
|
||
* compliant with IRC RFCs
|
||
https://tools.ietf.org/html/rfc1459[1459],
|
||
https://tools.ietf.org/html/rfc2810[2810],
|
||
https://tools.ietf.org/html/rfc2811[2811],
|
||
https://tools.ietf.org/html/rfc2812[2812] and
|
||
https://tools.ietf.org/html/rfc2813[2813]
|
||
* IRC proxy and relay for remote interfaces
|
||
* multi-platform (GNU/Linux, *BSD, macOS, Windows and other)
|
||
* 100% GPL, free software
|
||
|
||
WeeChat homepage is here: https://weechat.org/
|
||
|
||
[[prerequisites]]
|
||
=== Prerequisites
|
||
|
||
In order to install WeeChat, you need:
|
||
|
||
* a running GNU/Linux system (with compiler tools for source
|
||
package), or a compatible OS
|
||
* _root_ privileges (to install WeeChat in a system directory)
|
||
* some libraries (see <<dependencies,dependencies>>)
|
||
|
||
[[install]]
|
||
== Installation
|
||
|
||
[[binary_packages]]
|
||
=== Binary packages
|
||
|
||
Binary packages are available for many distributions, including:
|
||
|
||
* Arch Linux: `pacman -S weechat`
|
||
* Cygwin (Windows): select WeeChat packages in setup.exe
|
||
* Debian/Ubuntu (or any Debian compatible distribution):
|
||
`apt-get install weechat-curses weechat-plugins` +
|
||
For latest versions and nightly builds: https://weechat.org/download/debian
|
||
* Fedora Core: `dnf install weechat`
|
||
* Gentoo: `emerge weechat`
|
||
* Mandriva/RedHat (or any RPM compatible distribution):
|
||
`rpm -i /path/to/weechat-x.y.z-1.i386.rpm`
|
||
* openSUSE: `zypper in weechat`
|
||
* Sourcemage: `cast weechat`
|
||
|
||
Some additional packages may be useful, like weechat-plugins.
|
||
|
||
For other distributions, please look at your manual for installation
|
||
instructions.
|
||
|
||
[[source_package]]
|
||
=== Source package
|
||
|
||
WeeChat can be compiled with CMake or autotools (CMake is recommended way).
|
||
|
||
[NOTE]
|
||
On macOS, you can use https://brew.sh/[Homebrew]:
|
||
`brew install weechat` (for help: `brew info weechat`).
|
||
|
||
[[dependencies]]
|
||
==== Dependencies
|
||
|
||
The following table shows the list of packages that are *required* to compile
|
||
WeeChat:
|
||
|
||
[width="100%",cols="5,^3,.^15",options="header"]
|
||
|===
|
||
| Package ^(1)^ | Version | Feature
|
||
| C compiler
|
||
(gcc, clang, ...) | | Build.
|
||
| cmake | ≥ 3.0 | Build (autotools still possible, but CMake is recommended).
|
||
| pkg-config | | Detect installed libraries.
|
||
| libncursesw5-dev ^(2)^ | | Ncurses interface.
|
||
| libcurl4-gnutls-dev | | URL transfer.
|
||
| zlib1g-dev | | Compression of packets in relay plugin (weechat protocol), script plugin.
|
||
| libgcrypt20-dev | | Secured data, IRC SASL authentication.
|
||
| libgnutls28-dev | ≥ 2.2.0 ^(3)^ | SSL connection to IRC server, support of SSL in relay plugin, IRC SASL authentication (ECDSA-NIST256P-CHALLENGE).
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ Name comes from the Debian GNU/Linux distribution, versions and package
|
||
names may be different in different distributions and versions. +
|
||
^(2)^ It is recommended to compile with libncurses**w**5-dev (the *w* is
|
||
important). WeeChat can compile with libncurses5-dev, but it is *NOT* recommended:
|
||
you may experience display bugs with wide chars. +
|
||
^(3)^ GnuTLS ≥ 3.0.21 is required for IRC SASL authentication with mechanism
|
||
ECDSA-NIST256P-CHALLENGE.
|
||
|
||
The following table shows the list of packages that are optional to compile
|
||
WeeChat:
|
||
|
||
[width="100%",cols="5,^3,.^15",options="header"]
|
||
|===
|
||
| Package | Version | Feature
|
||
| C++ compiler | | Build and run tests, JavaScript plugin.
|
||
| gettext | | Internationalization (translation of messages; base language is English).
|
||
| ca-certificates | | Certificates for SSL connections.
|
||
| libaspell-dev
|
||
∥ libenchant-dev | | Spell plugin.
|
||
| python3-dev ^(1)^ | | Python plugin.
|
||
| libperl-dev | | Perl plugin.
|
||
| ruby2.5, ruby2.5-dev | ≥ 1.9.1 | Ruby plugin.
|
||
| liblua5.3-dev | | Lua plugin.
|
||
| tcl-dev | ≥ 8.5 | Tcl plugin.
|
||
| guile-2.0-dev | ≥ 2.0 | Guile (scheme) plugin.
|
||
| libv8-dev | ≤ 3.24.3 | JavaScript plugin.
|
||
| php-dev, libphp-embed | ≥ 7.0 | PHP plugin.
|
||
| libxml2-dev | | PHP plugin.
|
||
| libargon2-0-dev | | PHP plugin (if PHP ≥ 7.2).
|
||
| libsodium-dev | | PHP plugin (if PHP ≥ 7.2).
|
||
| asciidoctor | ≥ 1.5.4 | Build man page and documentation.
|
||
| libcpputest-dev | ≥ 3.4 | Build and run tests.
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ By default Python 3.x is used. If you enable option `+ENABLE_PYTHON2+`
|
||
(see below), only the version 2.7 of Python is recommended.
|
||
|
||
If you are using a Debian/Ubuntu based distribution, and if you have some
|
||
"deb-src" source entries in your file _/etc/apt/sources.list_, you can install
|
||
all dependencies with the command:
|
||
|
||
----
|
||
# apt-get build-dep weechat
|
||
----
|
||
|
||
[[compile_with_cmake]]
|
||
==== Compile with CMake
|
||
|
||
* Installation in system directories (requires _root_ privileges):
|
||
|
||
----
|
||
$ mkdir build
|
||
$ cd build
|
||
$ cmake ..
|
||
$ make
|
||
$ sudo make install
|
||
----
|
||
|
||
* Installation in custom directory (for example your home):
|
||
|
||
----
|
||
$ mkdir build
|
||
$ cd build
|
||
$ cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/directory
|
||
$ make
|
||
$ make install
|
||
----
|
||
|
||
Options can be used for CMake, with format: "-DOPTION=VALUE".
|
||
|
||
List of commonly used options:
|
||
|
||
[width="100%",cols="2m,2,5m,12",options="header"]
|
||
|===
|
||
| Option | Values | Default value | Description
|
||
|
||
| CMAKE_BUILD_TYPE | `Debug`, `Release`, `RelWithDebInfo`, `MinSizeRel` | |
|
||
The type of build: `Debug` (or `RelWithDebInfo`) is recommended if you are
|
||
running development version of WeeChat.
|
||
|
||
| CMAKE_INSTALL_PREFIX | directory | /usr/local |
|
||
The directory where WeeChat will be installed.
|
||
|
||
| WEECHAT_HOME | directory | (empty string) |
|
||
The default home directory when running 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 |
|
||
Compile <<alias_plugin,Alias plugin>>.
|
||
|
||
| ENABLE_BUFLIST | `ON`, `OFF` | ON |
|
||
Compile <<buflist_plugin,Buflist plugin>>.
|
||
|
||
| ENABLE_CHARSET | `ON`, `OFF` | ON |
|
||
Compile <<charset_plugin,Charset plugin>>.
|
||
|
||
| ENABLE_MAN | `ON`, `OFF` | OFF |
|
||
Build man page.
|
||
|
||
| ENABLE_DOC | `ON`, `OFF` | OFF |
|
||
Build HTML documentation.
|
||
|
||
| ENABLE_ENCHANT | `ON`, `OFF` | OFF |
|
||
Compile <<spell_plugin,Spell plugin>> with Enchant.
|
||
|
||
| ENABLE_EXEC | `ON`, `OFF` | ON |
|
||
Compile <<exec_plugin,Exec plugin>>.
|
||
|
||
| ENABLE_FIFO | `ON`, `OFF` | ON |
|
||
Compile <<fifo_plugin,Fifo plugin>>.
|
||
|
||
| ENABLE_FSET | `ON`, `OFF` | ON |
|
||
Compile <<fset_plugin,Fset plugin>>.
|
||
|
||
| ENABLE_GUILE | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Guile plugin>> (Scheme).
|
||
|
||
| ENABLE_IRC | `ON`, `OFF` | ON |
|
||
Compile <<irc_plugin,IRC plugin>>.
|
||
|
||
| ENABLE_JAVASCRIPT | `ON`, `OFF` | OFF |
|
||
Compile <<scripts_plugins,JavaScript plugin>>.
|
||
|
||
| ENABLE_LARGEFILE | `ON`, `OFF` | ON |
|
||
Support of large files.
|
||
|
||
| ENABLE_LOGGER | `ON`, `OFF` | ON |
|
||
Compile <<logger_plugin,Logger plugin>>.
|
||
|
||
| ENABLE_LUA | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Lua plugin>>.
|
||
|
||
| ENABLE_NCURSES | `ON`, `OFF` | ON |
|
||
Compile Ncurses interface.
|
||
|
||
| ENABLE_NLS | `ON`, `OFF` | ON |
|
||
Enable NLS (translations).
|
||
|
||
| ENABLE_PERL | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Perl plugin>>.
|
||
|
||
| ENABLE_PHP | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,PHP plugin>>.
|
||
|
||
| ENABLE_PYTHON | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Python plugin>>.
|
||
|
||
| ENABLE_PYTHON2 | `ON`, `OFF` | OFF |
|
||
Compile <<scripts_plugins,Python plugin>> using Python 2 instead of Python 3.
|
||
|
||
| ENABLE_RELAY | `ON`, `OFF` | ON |
|
||
Compile <<relay_plugin,Relay plugin>>.
|
||
|
||
| ENABLE_RUBY | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Ruby plugin>>.
|
||
|
||
| ENABLE_SCRIPT | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Script plugin>>.
|
||
|
||
| ENABLE_SCRIPTS | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,script plugins>> (Python, Perl, Ruby, Lua, Tcl,
|
||
Guile, JavaScript, PHP).
|
||
|
||
| ENABLE_SPELL | `ON`, `OFF` | ON |
|
||
Compile <<spell_plugin,Spell plugin>>.
|
||
|
||
| ENABLE_TCL | `ON`, `OFF` | ON |
|
||
Compile <<scripts_plugins,Tcl plugin>>.
|
||
|
||
| ENABLE_TRIGGER | `ON`, `OFF` | ON |
|
||
Compile <<trigger_plugin,Trigger plugin>>.
|
||
|
||
| ENABLE_XFER | `ON`, `OFF` | ON |
|
||
Compile <<xfer_plugin,Xfer plugin>>.
|
||
|
||
| ENABLE_TESTS | `ON`, `OFF` | OFF |
|
||
Compile tests.
|
||
|
||
| ENABLE_CODE_COVERAGE | `ON`, `OFF` | OFF |
|
||
Compile with code coverage options. +
|
||
This option should be used only for tests, to measure test coverage.
|
||
|===
|
||
|
||
The other options can be displayed with this command:
|
||
|
||
----
|
||
$ cmake -LA
|
||
----
|
||
|
||
Or with Curses interface:
|
||
|
||
----
|
||
$ ccmake ..
|
||
----
|
||
|
||
[[compile_with_autotools]]
|
||
==== Compile with autotools
|
||
|
||
[WARNING]
|
||
Only CMake is officially supported to build WeeChat. You should use autotools
|
||
only if you are not able to use CMake. +
|
||
Build with autotools requires more dependencies and is slower than with CMake.
|
||
|
||
* Installation in system directories (requires _root_ privileges):
|
||
|
||
----
|
||
$ ./autogen.sh
|
||
$ mkdir build
|
||
$ cd build
|
||
$ ../configure
|
||
$ make
|
||
$ sudo make install
|
||
----
|
||
|
||
* Installation in custom directory (for example your home):
|
||
|
||
----
|
||
$ ./autogen.sh
|
||
$ mkdir build
|
||
$ cd build
|
||
$ ../configure --prefix=/path/to/directory
|
||
$ make
|
||
$ make install
|
||
----
|
||
|
||
Options can be used for _configure_ script, they can be displayed with this
|
||
command:
|
||
|
||
----
|
||
$ ./configure --help
|
||
----
|
||
|
||
[[run_tests]]
|
||
==== Run tests
|
||
|
||
Following packages are *required* to compile tests:
|
||
|
||
* libcpputest-dev
|
||
* C++ compiler
|
||
|
||
Tests must be enabled when compiling WeeChat (with CMake):
|
||
|
||
----
|
||
$ cmake .. -DENABLE_TESTS=ON
|
||
----
|
||
|
||
They can be launched after compilation from the build directory (with CMake):
|
||
|
||
----
|
||
$ ctest -V
|
||
----
|
||
|
||
[[git_sources]]
|
||
=== Git sources
|
||
|
||
Warning: git sources are for advanced users: it may not compile or not be
|
||
stable. You're warned!
|
||
|
||
To get git sources, issue this command:
|
||
|
||
----
|
||
$ git clone https://github.com/weechat/weechat.git
|
||
----
|
||
|
||
Then follow instructions for source package (see
|
||
<<source_package,source package>>).
|
||
|
||
[[report_crashes]]
|
||
=== Report crashes
|
||
|
||
If you experienced crashes, or if you want to report any future WeeChat crash,
|
||
you have to:
|
||
|
||
* Compile with:
|
||
** debug info (or install binary package with debug info),
|
||
** address sanitizer (optional).
|
||
* Enable _core_ files on your system.
|
||
* Install gdb.
|
||
|
||
[[build_debug]]
|
||
==== Build with debug options
|
||
|
||
If you're compiling with CMake:
|
||
|
||
----
|
||
$ cmake .. -DCMAKE_BUILD_TYPE=Debug
|
||
----
|
||
|
||
[[build_debug_address_sanitizer]]
|
||
==== Build with debug options and address sanitizer
|
||
|
||
You can additionally enable the address sanitizer, which causes WeeChat to
|
||
crash immediately in case of problem:
|
||
|
||
----
|
||
$ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address
|
||
----
|
||
|
||
[WARNING]
|
||
You should enable address sanitizer only if you're trying to cause a crash,
|
||
this is not recommended in production.
|
||
|
||
Then once compiled and installed, you must run WeeChat like this:
|
||
|
||
----
|
||
$ ASAN_OPTIONS="detect_odr_violation=0 log_path=asan.log" weechat
|
||
----
|
||
|
||
In case of crash, the backtrace is in file `asan.log`.
|
||
|
||
[[core_files]]
|
||
==== Core files
|
||
|
||
To enable _core_ files, you can use option
|
||
<<option_weechat.startup.sys_rlimit,weechat.startup.sys_rlimit>>:
|
||
|
||
----
|
||
/set weechat.startup.sys_rlimit "core:-1"
|
||
----
|
||
|
||
For WeeChat ≤ 0.3.8 or if you want to enable core files even before WeeChat
|
||
starts, you can use `ulimit` command.
|
||
|
||
For example under Linux with _bash_ shell, add this line to your `~/.bashrc`:
|
||
|
||
----
|
||
ulimit -c unlimited
|
||
----
|
||
|
||
Or max size:
|
||
|
||
----
|
||
ulimit -c 200000
|
||
----
|
||
|
||
[[gdb_backtrace]]
|
||
==== Get backtrace with gdb
|
||
|
||
When WeeChat crashes, your system will create a file _core_ or _core.12345_
|
||
(_12345_ is process id) if the <<core_files,option is enabled>>.
|
||
This file is created in directory where you have run WeeChat (this is *not*
|
||
directory where WeeChat is installed!).
|
||
|
||
[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 wiki page: https://wiki.archlinux.org/index.php/Core_dump
|
||
|
||
For example if _weechat_ is installed in _/usr/bin/_ and _core_ file is
|
||
in _/home/user/_, then run gdb with this command:
|
||
|
||
----
|
||
gdb /usr/bin/weechat /home/user/core
|
||
----
|
||
|
||
Then under gdb, use command `bt full` to display backtrace.
|
||
You will see something like that:
|
||
|
||
----
|
||
(gdb) set logging file /tmp/crash.txt
|
||
(gdb) set logging on
|
||
Copying output to /tmp/crash.txt.
|
||
(gdb) bt full
|
||
#0 0x00007f9dfb04a465 in raise () from /lib/libc.so.6
|
||
#1 0x00007f9dfb04b8e6 in abort () from /lib/libc.so.6
|
||
#2 0x0000000000437f66 in weechat_shutdown (return_code=1, crash=1)
|
||
at /some_path/src/core/weechat.c:351
|
||
#3 <signal handler called>
|
||
#4 0x000000000044cb24 in hook_process_timer_cb (arg_hook_process=0x254eb90,
|
||
remaining_calls=<value optimized out>) at /some_path/src/core/wee-hook.c:1364
|
||
hook_process = 0x254eb90
|
||
status = <value optimized out>
|
||
#5 0x000000000044cc7d in hook_timer_exec ()
|
||
at /some_path/src/core/wee-hook.c:1025
|
||
tv_time = {tv_sec = 1272693881, tv_usec = 212665}
|
||
ptr_hook = 0x2811f40
|
||
next_hook = 0x0
|
||
#6 0x000000000041b5b0 in gui_main_loop ()
|
||
at /some_path/src/gui/curses/gui-curses-main.c:319
|
||
hook_fd_keyboard = 0x173b600
|
||
tv_timeout = {tv_sec = 0, tv_usec = 0}
|
||
read_fds = {fds_bits = {0 <repeats 16 times>}}
|
||
write_fds = {fds_bits = {0 <repeats 16 times>}}
|
||
except_fds = {fds_bits = {0 <repeats 16 times>}}
|
||
max_fd = <value optimized out>
|
||
----
|
||
|
||
You must report this trace to developers, and tell them what action caused this
|
||
crash.
|
||
|
||
Thank you for your help!
|
||
|
||
[[debug_running_weechat]]
|
||
==== Debug a running WeeChat
|
||
|
||
To debug a running WeeChat (for example if WeeChat seems blocked), you can use
|
||
gdb with process id (replace _12345_ with PID of weechat process):
|
||
|
||
----
|
||
gdb /usr/bin/weechat 12345
|
||
----
|
||
|
||
Then like for a crash, use command `bt full`:
|
||
|
||
----
|
||
(gdb) bt full
|
||
----
|
||
|
||
[[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.
|
||
|
||
[[upgrade_command]]
|
||
==== Upgrade command
|
||
|
||
WeeChat can restart the new binary, in place, using the
|
||
<<command_weechat_upgrade,/upgrade>> command: the buffer contents and non-SSL
|
||
connections are preserved. +
|
||
The SSL connections are lost during upgrade and you are automatically
|
||
reconnected after the upgrade (reload of SSL 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:
|
||
|
||
----
|
||
$ weechat --upgrade
|
||
----
|
||
|
||
[[restart_after_upgrade]]
|
||
==== Restart after upgrade
|
||
|
||
[[restart_release_notes]]
|
||
===== Release notes
|
||
|
||
After an upgrade, it is *strongly recommended* to read the
|
||
https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
|
||
which contain important information about breaking changes and some
|
||
manual actions that could be required.
|
||
|
||
You must read the release notes of all versions between your old (excluded) and
|
||
your new version (included). +
|
||
For example if you switch from version 3.0 to 3.2, you must read release notes
|
||
of versions 3.1 and 3.2.
|
||
|
||
[[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:
|
||
|
||
----
|
||
=!= Warning: /home/user/.config/weechat/sec.conf, line 15: unknown option for section "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).
|
||
|
||
[[usage]]
|
||
== Usage
|
||
|
||
[[running_weechat]]
|
||
=== Running WeeChat
|
||
|
||
To start WeeChat, issue this command:
|
||
|
||
----
|
||
$ weechat
|
||
----
|
||
|
||
When you run WeeChat for the first time, the default configuration files are
|
||
created in _~/.config/weechat_ with default options and values
|
||
(see <<files_and_directories,Files and directories>>).
|
||
|
||
[[command_line_options]]
|
||
==== Command line options
|
||
|
||
include::includes/cmdline_options.en.adoc[tag=standard]
|
||
|
||
[[extra_debug_options]]
|
||
==== Extra debug options
|
||
|
||
[WARNING]
|
||
These options are for debug purposes only, *DO NOT USE IN PRODUCTION!*
|
||
|
||
include::includes/cmdline_options.en.adoc[tag=debug]
|
||
|
||
[[environment_variables]]
|
||
=== Environment variables
|
||
|
||
Some environment variables are used by WeeChat if they are defined:
|
||
|
||
[width="100%",cols="1m,6",options="header"]
|
||
|===
|
||
| Name | Description
|
||
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, etc.). Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
|
||
| WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data.
|
||
| WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|
||
|===
|
||
|
||
[[files_and_directories]]
|
||
=== Files and directories
|
||
|
||
[[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
|
||
| config | $XDG_CONFIG_HOME/weechat | `$HOME/.config/weechat` if `$XDG_CONFIG_HOME` is not defined or empty.
|
||
| data | $XDG_DATA_HOME/weechat | `$HOME/.local/share/weechat` if `$XDG_DATA_HOME` is not defined or empty.
|
||
| cache | $XDG_CACHE_HOME/weechat | `$HOME/.cache/weechat` if `$XDG_CACHE_HOME` is not defined or empty.
|
||
| runtime | $XDG_RUNTIME_DIR/weechat | Same as _cache_ directory if `$XDG_RUNTIME_DIR` is not defined or empty.
|
||
|===
|
||
|
||
The configuration files are created with default values the first time you run WeeChat.
|
||
|
||
[[weechat_directories]]
|
||
==== WeeChat directories
|
||
|
||
The WeeChat directories are:
|
||
|
||
[width="100%",cols="1m,3",options="header"]
|
||
|===
|
||
| Path ^(1)^ | Description
|
||
| ~/.config/weechat/ | WeeChat configuration files: `*.conf`, certificates, etc.
|
||
| ~/.local/share/weechat/ | WeeChat data files: logs, scripts, scripts data, xfer files, etc.
|
||
| logs/ | Log files (one file per buffer).
|
||
| python/ | Python scripts.
|
||
| autoload/ | Python scripts auto-loaded on startup ^(2)^.
|
||
| perl/ | Perl scripts.
|
||
| autoload/ | Perl scripts auto-loaded on startup ^(2)^.
|
||
| ruby/ | Ruby scripts.
|
||
| autoload/ | Ruby scripts auto-loaded on startup ^(2)^.
|
||
| lua/ | Lua scripts.
|
||
| autoload/ | Lua scripts auto-loaded on startup ^(2)^.
|
||
| tcl/ | Tcl scripts.
|
||
| autoload/ | Tcl scripts auto-loaded on startup ^(2)^.
|
||
| guile/ | Guile scripts.
|
||
| autoload/ | Guile scripts auto-loaded on startup ^(2)^.
|
||
| javascript/ | JavaScript scripts.
|
||
| autoload/ | JavaScript scripts auto-loaded on startup ^(2)^.
|
||
| php/ | PHP scripts.
|
||
| autoload/ | PHP scripts auto-loaded on startup ^(2)^.
|
||
| ~/.cache/weechat/ | WeeChat cache files: scripts cache.
|
||
| /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)^ This directory often contains only symbolic links to scripts in the parent directory.
|
||
|
||
[[weechat_files]]
|
||
==== WeeChat files
|
||
|
||
The files in the WeeChat home directory are:
|
||
|
||
[width="100%",cols="1m,3,6",options="header"]
|
||
|===
|
||
| File | Description | Sensitive data
|
||
| weechat.conf | Main WeeChat configuration file | Possible (example: list of channels in a saved buffers layout).
|
||
| sec.conf | Configuration file with secured data | *Yes, highly sensitive*: this file must never be shared with anyone.
|
||
| plugins.conf | Plugins configuration file | Possible, depends on plugins/scripts.
|
||
| alias.conf | Configuration file for _alias_ plugin | Possible, depends on aliases.
|
||
| buflist.conf | Configuration file for _buflist_ plugin | No.
|
||
| charset.conf | Configuration file for _charset_ plugin | No.
|
||
| exec.conf | Configuration file for _exec_ plugin | No.
|
||
| fifo.conf | Configuration file for _fifo_ plugin | No.
|
||
| fset.conf | Configuration file for _fset_ plugin | No.
|
||
| guile.conf | Configuration file for _guile_ plugin | No.
|
||
| irc.conf | Configuration file for _irc_ plugin | *Yes*: it can contain passwords for servers, nickserv and channels (if not stored in `sec.conf`).
|
||
| javascript.conf | Configuration file for _javascript_ plugin | No.
|
||
| logger.conf | Configuration file for _logger_ plugin | No.
|
||
| lua.conf | Configuration file for _lua_ plugin | No.
|
||
| perl.conf | Configuration file for _perl_ plugin | No.
|
||
| php.conf | Configuration file for _php_ plugin | No.
|
||
| python.conf | Configuration file for _python_ plugin | No.
|
||
| relay.conf | Configuration file for _relay_ plugin | *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 | Configuration file for _ruby_ plugin | No.
|
||
| script.conf | Configuration file for _script_ plugin | No.
|
||
| tcl.conf | Configuration file for _tcl_ plugin | No.
|
||
| spell.conf | Configuration file for _spell_ plugin | No.
|
||
| trigger.conf | Configuration file for _trigger_ plugin | Possible, depends on triggers.
|
||
| xfer.conf | Configuration file for _xfer_ plugin | No.
|
||
| weechat.log | WeeChat log file | No.
|
||
|===
|
||
|
||
[IMPORTANT]
|
||
It is *not recommended* to edit configuration files by hand because WeeChat
|
||
may write them at any time (for example on <<command_weechat_quit,/quit>>)
|
||
and after any change you must run the command <<command_weechat_reload,/reload>>
|
||
(with the risk of losing other changes that were not yet saved with
|
||
<<command_weechat_save,/save>>). +
|
||
You can use the command <<command_weechat_set,/set>>, which checks the value
|
||
and applies immediately the changes.
|
||
|
||
[[screen_layout]]
|
||
=== Screen layout
|
||
|
||
Example of terminal with WeeChat:
|
||
|
||
....
|
||
▼ bar "buflist" ▼ bar "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}* [H: 3:#abc(2,5), 5] │
|
||
│ │[@Flashy(i)] hi peter!█ │
|
||
└──────────────────────────────────────────────────────────────────────────────────────┘
|
||
▲ bars "status" and "input" bar "nicklist" ▲
|
||
....
|
||
|
||
By default, the screen is divided up into the following areas:
|
||
|
||
* chat area (middle of screen) with chat lines, and for each line:
|
||
** time
|
||
** prefix (before "|")
|
||
** message (after "|")
|
||
* bars around chat area, default bars are:
|
||
** _buflist_ bar, on the left
|
||
** _title_ bar, above chat area
|
||
** _status_ bar, below chat area
|
||
** _input_ bar, below status bar
|
||
** _nicklist_ bar, on the right
|
||
|
||
Bar _buflist_ has following default items:
|
||
|
||
[width="100%",cols="^3,^3,9",options="header"]
|
||
|===
|
||
| Item | Example | Description
|
||
| buflist | `1.weechat` | List of buffers.
|
||
|===
|
||
|
||
Bar _title_ has following default items:
|
||
|
||
[width="100%",cols="^3,^3,9",options="header"]
|
||
|===
|
||
| Item | Example | Description
|
||
| buffer_title | `Welcome to #test` | Buffer title.
|
||
|===
|
||
|
||
Bar _status_ has following default items:
|
||
|
||
[width="100%",cols="^3,^3,9",options="header"]
|
||
|===
|
||
| Item | Example | Description
|
||
| time | `[12:55]` | Time.
|
||
| buffer_last_number | `[5]` | Number of last buffer in list.
|
||
| buffer_plugin | `[irc/libera]` | Plugin of current buffer (irc plugin can add IRC server name used by buffer).
|
||
| buffer_number | `2` | Current buffer number.
|
||
| buffer_name | `#test` | Current buffer name.
|
||
| buffer_modes | `+n` | IRC channel modes.
|
||
| buffer_nicklist_count | `{4}` | Number of nicks displayed in nicklist.
|
||
| buffer_zoom | ! | `!` means the merged buffer is zoomed (only this one is displayed), empty value means all merged buffers are displayed.
|
||
| buffer_filter | `+*+` | Filtering indicator: `+*+` means some lines are filtered (hidden), empty value means all lines are displayed.
|
||
| scroll | `-MORE(50)-` | Scroll indicator, with number of lines below last line displayed.
|
||
| lag | `[Lag: 2.5]` | Lag indicator, in seconds (hidden if lag is low).
|
||
| hotlist | `[H: 3:#abc(2,5), 5]` | List of buffers with activity (unread messages) (in example, 2 highlights and 5 unread messages on _#abc_, one unread message on buffer #5).
|
||
| completion | `abc(2) def(5)` | List of words for completion, with number of possible completions for each word.
|
||
|===
|
||
|
||
Bar _input_ has following default items:
|
||
|
||
[width="100%",cols="^3,^3,9",options="header"]
|
||
|===
|
||
| Item | Example | Description
|
||
| input_prompt | `[@Flashy(i)]` | Input prompt, for irc: nick and modes (mode "+i" means invisible on libera).
|
||
| away | `(away)` | Away indicator.
|
||
| input_search | `[Search (~ str,msg)]` | Search indicator ("`~`": case insensitive, "`==`": case sensitive, "`str`": search string, "`regex`": search regular expression, "`msg`": search in messages, "`pre`": search in prefixes, "`pre\|msg`": search in prefixes and messages).
|
||
| input_paste | `[Paste 7 lines ? [ctrl-Y] Yes [ctrl-N] No]` | Question to user for pasting lines.
|
||
| input_text | `hi peter!` | Input text.
|
||
|===
|
||
|
||
Bar _nicklist_ has following default items:
|
||
|
||
[width="100%",cols="^3,^3,9",options="header"]
|
||
|===
|
||
| Item | Example | Description
|
||
| buffer_nicklist | `@Flashy` | List of nicks on current buffer.
|
||
|===
|
||
|
||
Other items available (not used in bars by default):
|
||
|
||
[width="100%",cols="^3,^3,9",options="header"]
|
||
|===
|
||
| Item | Example | Description
|
||
| buffer_count | `10` | Total number of buffers opened.
|
||
| buffer_last_number | `10` | 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_nicklist_count_all | `4` | Number of visible groups and nicks in nicklist.
|
||
| buffer_nicklist_count_groups | `0` | Number of visible groups in nicklist.
|
||
| buffer_short_name | `#test` | Current buffer short name.
|
||
| buflist2 | `1.weechat` | List of buffers, second bar item (see option <<option_buflist.look.use_items,buflist.look.use_items>>).
|
||
| buflist3 | `1.weechat` | List of buffers, third bar item (see option <<option_buflist.look.use_items,buflist.look.use_items>>).
|
||
| fset | `+buflist.look.sort: …+` | Help on currently selected option on fset buffer.
|
||
| irc_channel | `#test` | Current IRC channel name.
|
||
| irc_host | `+user@host.com+` | Current IRC host.
|
||
| irc_nick | `+Flashy+` | Current IRC nick.
|
||
| irc_nick_host | `+Flashy!user@host.com+` | Current IRC nick and host.
|
||
| irc_nick_modes | `i` | IRC modes for self nick.
|
||
| irc_nick_prefix | `@` | IRC nick prefix on channel.
|
||
| mouse_status | `M` | Mouse status (empty if mouse is disabled).
|
||
| spell_dict | `fr,en` | Spelling dictionaries used on current buffer.
|
||
| spell_suggest | `print,prone,prune` | Spelling suggestions for word under cursor (if misspelled).
|
||
| tls_version | `TLS1.3` | TLS version in use for current IRC server.
|
||
| window_number | `2` | Current window number.
|
||
|===
|
||
|
||
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_layot,/layout>> to name, save and restore the screen layout
|
||
and the association between windows and buffers.
|
||
|
||
[[command_line]]
|
||
=== Command line
|
||
|
||
WeeChat command line (at the bottom of window) lets you execute commands or
|
||
send text to buffer.
|
||
|
||
[[command_line_syntax]]
|
||
==== Syntax
|
||
|
||
Commands begin with "/" char, followed by name of command. For example, to see
|
||
list of all options:
|
||
|
||
----
|
||
/set
|
||
----
|
||
|
||
Text sent to a buffer is any text that does not begin with "/" char.
|
||
For example, to send text _hello_ on current buffer:
|
||
|
||
----
|
||
hello
|
||
----
|
||
|
||
However, it is possible to start with "/" char, by adding another.
|
||
For example, to send text `/set` on current buffer:
|
||
|
||
----
|
||
//set
|
||
----
|
||
|
||
[[command_line_colors]]
|
||
==== Color codes
|
||
|
||
For some plugins like IRC, you can use color codes and attributes, as
|
||
follow (press kbd:[Ctrl+c] then following letter, with optional value):
|
||
|
||
[width="100%",cols="1,2",options="header"]
|
||
|===
|
||
| Key | Description
|
||
| kbd:[Ctrl+c], kbd:[b] | Bold text.
|
||
| kbd:[Ctrl+c], kbd:[c],
|
||
kbd:[xx] | Text color `xx` (see list of colors below).
|
||
| kbd:[Ctrl+c], kbd:[c],
|
||
kbd:[xx], kbd:[,],
|
||
kbd:[yy] | Text color `xx` and background `yy` (see list of colors below).
|
||
| kbd:[Ctrl+c], kbd:[i] | Italic text.
|
||
| kbd:[Ctrl+c], kbd:[o] | Disable color and attributes.
|
||
| kbd:[Ctrl+c], kbd:[v] | Reverse video (revert text color with background).
|
||
| kbd:[Ctrl+c], kbd:[_] | Underlined text.
|
||
|===
|
||
|
||
[NOTE]
|
||
The same code (without number for kbd:[Ctrl+c], kbd:[c]) can be used to stop the
|
||
attribute.
|
||
|
||
Color codes for kbd:[Ctrl+c], kbd:[c] are:
|
||
|
||
include::includes/autogen_user_irc_colors.en.adoc[tag=irc_colors]
|
||
|
||
[NOTE]
|
||
To show all available colors in your terminal, you can do `/color` then
|
||
kbd:[Alt+c] in WeeChat or run this command in terminal: `weechat --colors`.
|
||
|
||
Example: display of "hello Alice!" with "hello" in light blue bold and
|
||
"Alice" in light red underlined:
|
||
|
||
----
|
||
^Cc12^Cbhello ^Cb^Cc04^C_Alice^C_^Cc!
|
||
----
|
||
|
||
Keys:
|
||
|
||
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]
|
||
In irc plugin, you can remap these colors using option
|
||
<<option_irc.color.mirc_remap,irc.color.mirc_remap>>.
|
||
|
||
[[colors]]
|
||
=== Colors
|
||
|
||
WeeChat can use up to 32767 color pairs to display text in bars and chat area
|
||
(your terminal must support 256 colors to use them in WeeChat).
|
||
|
||
According to value of _TERM_ environment variable, you may have following limits
|
||
for colors in WeeChat:
|
||
|
||
[width="75%",cols="8,>3,>3",options="header"]
|
||
|===
|
||
| $TERM | Colors | Pairs
|
||
| "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
|
||
|===
|
||
|
||
You can run `weechat --colors` or use command `/color` in WeeChat to
|
||
display limits for your environment.
|
||
|
||
Some recommended values for _TERM_ if you want 256 colors:
|
||
|
||
* under screen: _screen-256color_
|
||
* under tmux: _screen-256color_ or _tmux-256color_
|
||
* outside screen/tmux: _xterm-256color_, _rxvt-256color_, _putty-256color_, ...
|
||
|
||
[NOTE]
|
||
You may have to install package "ncurses-term" to use these values in _TERM_
|
||
variable.
|
||
|
||
If you are using screen, you can add this line to your _~/.screenrc_:
|
||
|
||
----
|
||
term screen-256color
|
||
----
|
||
|
||
If your _TERM_ variable has wrong value and that WeeChat is already running,
|
||
you can change it with these two commands:
|
||
|
||
----
|
||
/set env TERM screen-256color
|
||
/upgrade
|
||
----
|
||
|
||
[[colors_basic]]
|
||
==== Basic colors
|
||
|
||
Basic colors in WeeChat are:
|
||
|
||
[width="75%",cols="1m,4",options="header"]
|
||
|===
|
||
| Name | Color
|
||
| default | Default terminal color (transparent for background)
|
||
| black | Black
|
||
| darkgray | Dark gray
|
||
| red | Dark red
|
||
| lightred | Light red
|
||
| green | Dark green
|
||
| lightgreen | Light green
|
||
| brown | Brown
|
||
| yellow | Yellow
|
||
| blue | Dark blue
|
||
| lightblue | Light blue
|
||
| magenta | Dark magenta
|
||
| lightmagenta | Light magenta
|
||
| cyan | Dark cyan
|
||
| lightcyan | Light cyan
|
||
| gray | Gray
|
||
| white | White
|
||
|===
|
||
|
||
[[colors_extended]]
|
||
==== Extended colors
|
||
|
||
WeeChat dynamically allocates color pairs when colors are used on screen (to
|
||
display buffers and bars).
|
||
|
||
In addition to basic colors, you can use a color number between 1 and the limit
|
||
of your terminal.
|
||
|
||
Use command `/color` to see current colors and limits. With kbd:[Alt+c] you can
|
||
temporarily switch to terminal colors to choose a color.
|
||
|
||
For example if you want to display time in orange in buffer, do:
|
||
|
||
----
|
||
/set weechat.color.chat_time 214
|
||
----
|
||
|
||
Or if you want a very dark green background for status bar:
|
||
|
||
----
|
||
/set weechat.bar.status.color_bg 22
|
||
----
|
||
|
||
[[colors_aliases]]
|
||
==== Aliases
|
||
|
||
You can add color aliases with command `/color alias` and then use this alias
|
||
in any color option.
|
||
|
||
For example:
|
||
|
||
----
|
||
/color alias 214 orange
|
||
/set weechat.color.chat_delimiters orange
|
||
----
|
||
|
||
[[colors_attributes]]
|
||
==== Attributes
|
||
|
||
It is possible to use some attributes for colors. One or more attributes can be
|
||
added before color name or number:
|
||
|
||
* `+*+`: bold text
|
||
* `+!+`: reverse video
|
||
* `+/+`: italic
|
||
* `+_+`: underlined text
|
||
* `+|+`: keep attributes: do not reset bold/reverse/italic/underlined when
|
||
changing color
|
||
|
||
For example if you want self nick as white underlined, do:
|
||
|
||
----
|
||
/set weechat.color.chat_nick_self _white
|
||
----
|
||
|
||
Or if you want time in status bar as orange underlined with bold:
|
||
|
||
----
|
||
/set weechat.color.status_time *_214
|
||
----
|
||
|
||
To use an attribute with default terminal color (-1), you must use a number
|
||
greater than last terminal color, for example max color in WeeChat: 99999.
|
||
|
||
Example of bold with terminal foreground color:
|
||
|
||
----
|
||
/set weechat.color.status_time *99999
|
||
----
|
||
|
||
[[buffers_and_windows]]
|
||
=== Buffers and windows
|
||
|
||
A _buffer_ is composed by a number, a name, lines displayed (and some other
|
||
data).
|
||
|
||
Examples of buffers:
|
||
|
||
* core buffer (created by WeeChat on startup, can not be closed)
|
||
* irc server (displays messages from server)
|
||
* irc channel
|
||
* irc private messages
|
||
|
||
A _window_ is a screen area which displays a buffer. It is possible to split
|
||
your screen into many windows (examples <<window_split_examples,below>>,
|
||
see the <<command_weechat_window,/window command>> for details).
|
||
|
||
Each window displays one buffer. A buffer can be hidden (not displayed by a
|
||
window) or displayed by one or more windows.
|
||
|
||
Screen layouts and the association between windows and buffers can be
|
||
<<command_weechat_layout,saved and restored>>.
|
||
|
||
[[window_split_examples]]
|
||
==== Examples
|
||
|
||
Example of horizontal split (`/window splith`):
|
||
|
||
....
|
||
▼ window #2 (buffer #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!█ │
|
||
└──────────────────────────────────────────────────────────────────────────────────────┘
|
||
▲ window #1 (buffer #3)
|
||
....
|
||
|
||
Example of vertical split (`/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] │
|
||
└──────────────────────────────────────────────────────────────────────────────────────┘
|
||
▲ window #1 (buffer #3) ▲ window #2 (buffer #4)
|
||
....
|
||
|
||
Example of vertical + horizontal splits:
|
||
|
||
....
|
||
▼ window #3 (buffer #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] │
|
||
└──────────────────────────────────────────────────────────────────────────────────────┘
|
||
▲ window #1 (buffer #3) ▲ window #2 (buffer #4)
|
||
....
|
||
|
||
[[buffers]]
|
||
=== Buffers
|
||
|
||
[[lines_format]]
|
||
==== Format of lines
|
||
|
||
Lines displayed in formatted buffers have following fields:
|
||
|
||
[width="100%",cols="2,2,10",options="header"]
|
||
|===
|
||
| Field | Displayed | Description
|
||
| date/time (message) | Yes | Date/time of message (may be past).
|
||
| date/time (print) | No | Date/time when WeeChat prints the message.
|
||
| prefix | Yes | Prefix of message, commonly a nick.
|
||
| message | Yes | The message itself.
|
||
| displayed | No | Boolean: true if line is displayed, false if line is filtered with command <<command_weechat_filter,/filter>>.
|
||
| highlight | No | Boolean: true if line has a highlight, false otherwise.
|
||
| tags | With `/debug tags` | Tags associated with the line (see <<lines_tags,lines tags>>).
|
||
|===
|
||
|
||
The display of lines can be customized with many look options
|
||
(_pass:[weechat.look.*]_) and color options (_pass:[weechat.color.chat_*]_).
|
||
|
||
[[lines_tags]]
|
||
==== Lines tags
|
||
|
||
WeeChat uses tags in lines for different purposes:
|
||
|
||
* highlight
|
||
* notify level
|
||
* logging
|
||
* use of command <<command_weechat_filter,/filter>>
|
||
|
||
Tags can be displayed with the command `/debug tags` (same command to hide them).
|
||
|
||
Tags commonly used (non-exhaustive list):
|
||
|
||
[width="100%",cols="1m,4",options="header"]
|
||
|===
|
||
| Tag | Description
|
||
| no_filter | Line can not be filtered.
|
||
| no_highlight | No highlight is possible on line.
|
||
| no_log | Line is not written in log file.
|
||
| log0 … log9 | Level of log for line (see `/help logger`).
|
||
| notify_none | The line must not be added to hotlist. ^(1)^
|
||
| notify_message | The line is a user message. ^(1)^
|
||
| notify_private | The line is a private message. ^(1)^
|
||
| notify_highlight | The line is a message with highlight. ^(1)^
|
||
| self_msg | Self message.
|
||
| nick_xxx | Message is from nick "xxx".
|
||
| prefix_nick_ccc | Prefix is a nick with color "ccc".
|
||
| host_xxx | Username and host in message.
|
||
| irc_xxx | IRC message "xxx" (can be a command or a 3-digits number).
|
||
| irc_numeric | IRC numeric message.
|
||
| irc_error | Error from IRC server.
|
||
| irc_action | Action from a nick (command `/me`).
|
||
| irc_ctcp | CTCP message.
|
||
| irc_ctcp_reply | Reply to CTCP message.
|
||
| irc_smart_filter | IRC message that can be filtered with the "smart filter".
|
||
| away_info | Message with away info.
|
||
|===
|
||
|
||
[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.
|
||
|
||
[[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`, `/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.
|
||
|
||
[[bars]]
|
||
=== Bars
|
||
|
||
A _bar_ is an area beside the chat that can contain any type of text.
|
||
|
||
The bar options can be set with options `weechat.bar.name.option` where `name`
|
||
is the name of the bar and `option` the option for this bar.
|
||
|
||
List of bar options:
|
||
|
||
[width="100%",cols="2m,2,10",options="header"]
|
||
|===
|
||
| Option | Values | Description
|
||
|
||
| type | `root`, `window` |
|
||
A bar with type `root` is displayed exactly one time on screen, outside all
|
||
windows. The default bar _buflist_ has type `root`. +
|
||
A bar with type `window` is displayed in each window, for example if you
|
||
split one time the screen (with `/window splith` or `/window splitv`), you
|
||
will have one bar in each window. The default bars _title_, _status_,
|
||
_input_ and _nicklist_ have type `window`.
|
||
|
||
| position | `top`, `bottom`, `left`, `right` |
|
||
Position of the bar: above/below chat, on the left/right.
|
||
|
||
| priority | integer ≥ 0 |
|
||
Priority for display of bar: this is used for ordering the bars on screen when
|
||
many bars have same type and position. +
|
||
The bars are displayed from the edge of the screen to the center. A higher
|
||
priority will display bar at the beginning, so closer to the edge. +
|
||
Example: _input_ bar has priority 1000, so it is displayed before the _status_
|
||
bar, which has priority 500.
|
||
|
||
| size | integer ≥ 0 |
|
||
The size of the bar: number of columns for position left/right, number
|
||
of lines for position top/bottom. A size of `0` means automatic, so the size
|
||
will be computed according to content displayed in bar.
|
||
|
||
| size_max | integer ≥ 0 |
|
||
The maximum size for a bar, `0` = no limit (this option is used only if
|
||
`size` = `0`).
|
||
|
||
| color_bg | color |
|
||
The default background color for the bar.
|
||
|
||
| color_fg | color |
|
||
The default text color for the bar.
|
||
|
||
| color_delim | color |
|
||
The color for delimiters in bar.
|
||
|
||
| hidden | `on`, `off` |
|
||
When option is `on`, the bar is hidden. +
|
||
Note: instead of changing this option, the command `/bar` is preferred, for
|
||
example: `/bar toggle nicklist` (see command <<command_weechat_bar,/bar>>).
|
||
|
||
| separator | `on`, `off` |
|
||
When option is `on`, a separator (line) is displayed between this bar and
|
||
other bars (or chat).
|
||
|
||
| items | string |
|
||
A list of _items_ (see <<bar_items,items>> for more info).
|
||
|
||
| filling_left_right | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+` |
|
||
Type of filling for a bar which has position `left` or `right` (see
|
||
<<bar_filling,filling>> for more info).
|
||
|
||
| filling_top_bottom | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+` |
|
||
Type of filling for a bar which has position `top` or `bottom` (see
|
||
<<bar_filling,filling>> for more info).
|
||
|
||
| conditions | string |
|
||
The conditions to display the bar (see <<bar_conditions,conditions>> for more
|
||
info).
|
||
|===
|
||
|
||
[[bar_items]]
|
||
==== Items
|
||
|
||
The option _items_ is a string with a list of bar items, separated by a comma
|
||
(space between items on screen) or `+++` (glued items).
|
||
|
||
The list of bar items is displayed with command `/bar listitems`.
|
||
|
||
Before or after item name, you can use chars (that are not alphanumeric, `+-+`
|
||
or `+_+`). They will be displayed before/after item with the delimiters color
|
||
defined in bar (option _color_delim_).
|
||
|
||
Example of bar with items "[time],buffer_number+:+buffer_plugin+.+buffer_name":
|
||
|
||
....
|
||
┌───────────────────────────────────────────────────────────────────────────┐
|
||
│[12:55] 3:irc/libera.#weechat │
|
||
└───────────────────────────────────────────────────────────────────────────┘
|
||
....
|
||
|
||
A special syntax can be used to force the buffer used when displaying the bar
|
||
item: "@buffer:item" (where "buffer" is the full name of buffer and "item" is
|
||
the name of a bar item).
|
||
|
||
This is useful in root bars, to display item for a specific buffer which is
|
||
not displayed in the current window (or even not displayed at all).
|
||
|
||
Example: nicklist of bitlbee in a root bar (if the bar is called
|
||
_bitlist_ and if bitlbee server is called _bitlbee_):
|
||
|
||
----
|
||
/set weechat.bar.bitlist.items "@irc.bitlbee.&bitlbee:buffer_nicklist"
|
||
----
|
||
|
||
[[bar_filling]]
|
||
==== Filling
|
||
|
||
There are four types of filling:
|
||
|
||
* `+horizontal+`: the items are displayed horizontally, from left to right. If
|
||
there are new lines in items, a space is used to separate lines.
|
||
* `+vertical+`: the items are displayed from top to bottom. If there are new
|
||
lines in items, a new line is used to separate lines.
|
||
* `+columns_horizontal+`: items are displayed using columns, where text is
|
||
aligned on the left. The first item is on top left, the second is on same
|
||
line, on the right.
|
||
* `+columns_vertical+`: items are displayed using columns, where text is aligned
|
||
on the left. The first item is on top left, the second is one line below.
|
||
|
||
Default bars _title_, _status_ and _input_ have _horizontal_ filling, and
|
||
default bar _nicklist_ has _vertical_ filling.
|
||
|
||
Some examples of filling for bar _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
|
||
|
||
The option _conditions_ is a string which is evaluated to know if the bar
|
||
must be displayed or not.
|
||
|
||
The string can be:
|
||
|
||
* _active_: the window must be active
|
||
* _inactive_: the window must be inactive
|
||
* _nicklist_: the buffer displayed in window must have a nicklist
|
||
* an expression: it is evaluated as boolean (see command
|
||
<<command_weechat_eval,/eval>>)
|
||
|
||
For the expression, following variables are available:
|
||
|
||
* `+${active}+`: true if window is active
|
||
* `+${inactive}+`: true if window is inactive
|
||
* `+${nicklist}+`: true if buffer displayed in window has a nicklist
|
||
|
||
Following pointers are available:
|
||
|
||
* `+${window}+`: the window where condition is evaluated
|
||
* `+${buffer}+`: the buffer of window where condition is evaluated
|
||
|
||
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"
|
||
----
|
||
|
||
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)"
|
||
----
|
||
|
||
[[bare_display]]
|
||
=== Bare display
|
||
|
||
A special display, called "bare display" can be used for easy click on long URLs
|
||
and selection of text (using the mouse).
|
||
|
||
The bare display has following features:
|
||
|
||
* It displays only the content of current buffer: no window split neither bars
|
||
(no title, nicklist, status, input, ...).
|
||
* The WeeChat mouse support is disabled (if it was enabled): you can use your
|
||
mouse like you do in the terminal to click on URLs and select text.
|
||
* Ncurses is not used, therefore URLs are not cut at the end of lines.
|
||
|
||
The default key to enable bare display is kbd:[Alt+l] (`L`), and same key to exit
|
||
(or by default anything changing the input will exit the bare display, see option
|
||
<<option_weechat.look.bare_display_exit_on_input,weechat.look.bare_display_exit_on_input>>).
|
||
|
||
The time format can be customized with the option
|
||
<<option_weechat.look.bare_display_time_format,weechat.look.bare_display_time_format>>.
|
||
|
||
The bare display can be enabled for a specific delay using the command
|
||
<<command_weechat_window,/window>>.
|
||
|
||
If WeeChat looks like that:
|
||
|
||
....
|
||
┌──────────────────────────────────────────────────────────────────────────────────────┐
|
||
│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 │ │
|
||
│ │ | /devel/weechat_plugin_api.en.html#_weechat_hook_pr │ │
|
||
│ │ | ocess │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │ │ │
|
||
│ │[12:55] [5] [irc/libera] 3:#abc(+n){4} │
|
||
│ │[@Flashy(i)] hi peter!█ │
|
||
└──────────────────────────────────────────────────────────────────────────────────────┘
|
||
....
|
||
|
||
The screen will look like that in bare display:
|
||
|
||
....
|
||
┌──────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│ │
|
||
│12:52 --> Flashy (flashcode@weechat.org) has joined #abc │
|
||
│12:52 -- Nicks #abc: [@Flashy @joe +weebot peter] │
|
||
│12:52 -- Channel #abc: 4 nicks (2 ops, 1 voice, 1 normal) │
|
||
│12:52 -- Channel created on Tue Jan 27 06:30:17 2009 │
|
||
│12:54 <peter> hey! │
|
||
│12:55 <@joe> peter: hook_process: https://weechat.org/files/doc/devel/weechat_plugin_a│
|
||
│pi.en.html#_weechat_hook_process │
|
||
└──────────────────────────────────────────────────────────────────────────────────────┘
|
||
....
|
||
|
||
So you can click the URL from _joe_ without any problem in your terminal (of
|
||
course this supposes that your terminal supports click on URLs).
|
||
|
||
[[notify_levels]]
|
||
=== Notify levels
|
||
|
||
[[setup_notify_levels]]
|
||
==== Setup notify levels
|
||
|
||
Four levels are possible in messages displayed in buffers, from lower to higher:
|
||
|
||
* _low_: message with low importance (for example irc join/part/quit)
|
||
* _message_: message from a user
|
||
* _private_: message in a private buffer
|
||
* _highlight_: message with highlight
|
||
|
||
Each buffer has a notify level, which is used to decide what messages will add
|
||
buffer in hotlist.
|
||
|
||
The default notify level can be set using option
|
||
<<option_weechat.look.buffer_notify_default,weechat.look.buffer_notify_default>>,
|
||
default is _all_.
|
||
|
||
[width="75%",cols="2m,7",options="header"]
|
||
|===
|
||
| Notify level | Level of messages added to hotlist
|
||
| none | (none)
|
||
| highlight | _highlight_ + _private_
|
||
| message | _highlight_ + _private_ + _message_
|
||
| all | _highlight_ + _private_ + _message_ + _low_
|
||
|===
|
||
|
||
Notify level can be defined for a set of buffers, for example all buffers of
|
||
irc server "libera":
|
||
|
||
----
|
||
/set weechat.notify.irc.libera message
|
||
----
|
||
|
||
Set notify level _highlight_ on channel "#weechat" only:
|
||
|
||
----
|
||
/set weechat.notify.irc.libera.#weechat highlight
|
||
----
|
||
|
||
The notify level for a buffer can be set with command `/buffer`:
|
||
|
||
----
|
||
/buffer notify highlight
|
||
----
|
||
|
||
[[max_hotlist_level_nicks]]
|
||
==== Max hotlist level for nicks
|
||
|
||
It is possible to set max hotlist level for some nicks, per buffer, or per group
|
||
of buffers (like IRC servers).
|
||
|
||
The buffer property "hotlist_max_level_nicks" can be set with a list of nicks
|
||
and for each nick the max hotlist level to trigger, possible levels are:
|
||
|
||
* -1: no hotlist changes for nick
|
||
* 0: low priority (like join/part messages)
|
||
* 1: message
|
||
* 2: private message
|
||
* 3: highlight (in fact useless, since it's already the default max for all messages)
|
||
|
||
For example to disable highlights from "joe" and "mike" on current buffer:
|
||
|
||
----
|
||
/buffer set hotlist_max_level_nicks_add joe:2,mike:2
|
||
----
|
||
|
||
[NOTE]
|
||
The buffer property "hotlist_max_level_nicks" is not saved in configuration. +
|
||
You can easily save it with the script _buffer_autoset.py_: you can install it
|
||
with `+/script install buffer_autoset.py+` and get help with
|
||
`+/help buffer_autoset+`.
|
||
|
||
[[highlights]]
|
||
=== Highlights
|
||
|
||
[[highlights_words]]
|
||
==== Add words to highlight
|
||
|
||
By default, WeeChat highlights messages from other users containing your nick,
|
||
therefore the highlight depends on the buffer (the nick can be different from
|
||
one buffer to another).
|
||
|
||
You can add other words to highlight with the option
|
||
<<option_weechat.look.highlight,weechat.look.highlight>>, for example to
|
||
highlight your nick and "word1", "word2" and all words beginning with "test":
|
||
|
||
----
|
||
/set weechat.look.highlight word1,word2,test*
|
||
----
|
||
|
||
If you need a more specific rule for the word, you can use regular expressions
|
||
with the option <<option_weechat.look.highlight_regex,weechat.look.highlight_regex>>,
|
||
for example to highlight words "flashcode", "flashcöde" and "flashy":
|
||
|
||
----
|
||
/set weechat.look.highlight_regex flashc[oö]de|flashy
|
||
----
|
||
|
||
The delimiters around words to highlight can be customized with the option
|
||
<<option_weechat.look.word_chars_highlight,weechat.look.word_chars_highlight>>.
|
||
|
||
[[highlights_tags]]
|
||
==== Add tags to highlight
|
||
|
||
Lines displayed can contain "tags", which give some info about the origin of
|
||
message or the message itself. +
|
||
You can display tags with the command `/debug tags` (same command to hide them).
|
||
|
||
You can add specific tags to highlight with the option
|
||
<<option_weechat.look.highlight_tags,weechat.look.highlight_tags>>.
|
||
Tags are separated by commas, and multiple tags can be separated by `+++` to do
|
||
a logical "and" between them.
|
||
|
||
For example to highlight all messages from nick "FlashCode" and all notices
|
||
from nicks beginning with "toto":
|
||
|
||
----
|
||
/set weechat.look.highlight_tags "nick_flashcode,irc_notice+nick_toto*"
|
||
----
|
||
|
||
[[highlights_regex_buffer]]
|
||
==== Set extra highlights on buffer
|
||
|
||
You can force highlight using a regular expression with the buffer property
|
||
"highlight_regex".
|
||
|
||
For example to force the highlight on all messages in the current buffer:
|
||
|
||
----
|
||
/buffer set highlight_regex .*
|
||
----
|
||
|
||
[NOTE]
|
||
The buffer property "highlight_regex" is not saved in configuration. +
|
||
You can easily save it with the script _buffer_autoset.py_: you can install it
|
||
with `+/script install buffer_autoset.py+` and get help with
|
||
`+/help buffer_autoset+`.
|
||
|
||
[[key_bindings]]
|
||
=== Default key bindings
|
||
|
||
[[key_bindings_command_line]]
|
||
==== Keys for command line
|
||
|
||
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|
||
|===
|
||
| Key | Description | Command
|
||
| kbd:[←] +
|
||
kbd:[Ctrl+b] | Go to previous char in command line. | `+/input move_previous_char+`
|
||
| kbd:[→] +
|
||
kbd:[Ctrl+f] | Go to next char in command line. | `+/input move_next_char+`
|
||
| kbd:[Ctrl+←] +
|
||
kbd:[Alt+b] | Go to previous word in command line. | `+/input move_previous_word+`
|
||
| kbd:[Ctrl+→] +
|
||
kbd:[Alt+f] | Go to next word in command line. | `+/input move_next_word+`
|
||
| kbd:[Home] +
|
||
kbd:[Ctrl+a] | Go to the beginning of command line. | `+/input move_beginning_of_line+`
|
||
| kbd:[End] +
|
||
kbd:[Ctrl+e] | Go to the end of command line. | `+/input move_end_of_line+`
|
||
| kbd:[Ctrl+c],
|
||
kbd:[b] | Insert code for bold text. | `+/input insert \x02+`
|
||
| kbd:[Ctrl+c],
|
||
kbd:[c] | Insert code for colored text. | `+/input insert \x03+`
|
||
| kbd:[Ctrl+c],
|
||
kbd:[i] | Insert code for italic text. | `+/input insert \x1D+`
|
||
| kbd:[Ctrl+c],
|
||
kbd:[o] | Insert code for color reset. | `+/input insert \x0F+`
|
||
| kbd:[Ctrl+c],
|
||
kbd:[v] | Insert code for reverse color. | `+/input insert \x16+`
|
||
| kbd:[Ctrl+c],
|
||
kbd:[_] | Insert code for underlined text. | `+/input insert \x1F+`
|
||
| kbd:[Del] +
|
||
kbd:[Ctrl+d] | Delete next char in command line. | `+/input delete_next_char+`
|
||
| kbd:[Backsp.] +
|
||
kbd:[Ctrl+h] | Delete previous char in command line. | `+/input delete_previous_char+`
|
||
| kbd:[Ctrl+k] | Delete from cursor until end of command line (deleted string is copied to the internal clipboard). | `+/input delete_end_of_line+`
|
||
| kbd:[Ctrl+r] | Search for text in buffer history (see <<key_bindings_search_context,keys for search context>>). | `+/input search_text_here+`
|
||
| kbd:[Ctrl+t] | Transpose chars. | `/input transpose_chars`
|
||
| kbd:[Ctrl+u] | Delete from cursor until beginning of command line (deleted string is copied to the internal clipboard). | `+/input delete_beginning_of_line+`
|
||
| kbd:[Ctrl+w] | Delete previous word of command line (deleted string is copied to the internal clipboard). | `+/input delete_previous_word+`
|
||
| kbd:[Ctrl+y] | Paste the internal clipboard content. | `+/input clipboard_paste+`
|
||
| kbd:[Ctrl+_] | Undo last action on command line. | `+/input undo+`
|
||
| kbd:[Alt+_] | Redo last action on command line. | `+/input redo+`
|
||
| kbd:[Tab] | Complete command or nick (kbd:[Tab] again: find next completion). | `+/input complete_next+`
|
||
| kbd:[Shift+Tab] | Without completion: do a partial completion, with pending completion: complete with previous completion. | `+/input complete_previous+`
|
||
| kbd:[Enter] +
|
||
kbd:[Ctrl+j] +
|
||
kbd:[Ctrl+m] | Execute command or send message (in search mode: stop search). | `+/input return+`
|
||
| kbd:[Alt+Enter] | Insert a newline. | `+/input insert \n+`
|
||
| kbd:[↑] | Call previous command/message (in search mode: search up). | `+/input history_previous+`
|
||
| kbd:[↓] | Call next command/message (in search mode: search down). | `+/input history_next+`
|
||
| kbd:[Ctrl+↑] | Call previous command/message in global history (common for all buffers). | `+/input history_global_previous+`
|
||
| kbd:[Ctrl+↓] | Call next command/message in global history (common for all buffers). | `+/input history_global_next+`
|
||
| kbd:[Alt+d] | Delete next word in command line (deleted string is copied to the internal clipboard). | `+/input delete_next_word+`
|
||
| kbd:[Alt+k] | Grab a key and insert its code (and command bound if key exists) in command line. | `+/input grab_key_command+`
|
||
| kbd:[Alt+r] | Delete entire command line. | `+/input delete_line+`
|
||
| kbd:[Alt+s] | Toggle spell checker. | `+/mute spell toggle+`
|
||
|===
|
||
|
||
[[key_bindings_buffers_windows]]
|
||
==== Keys for buffers / windows
|
||
|
||
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|
||
|===
|
||
| Key | Description | Command
|
||
| kbd:[Ctrl+l] (`L`) | Redraw whole window. | `+/window refresh+`
|
||
| kbd:[Ctrl+s],
|
||
kbd:[Ctrl+u] | Set unread marker on all buffers. | `+/input set_unread+`
|
||
| kbd:[Ctrl+x] | Switch current buffer if buffers are attached with same number. | `+/input switch_active_buffer+`
|
||
| kbd:[Alt+x] | Zoom on merged buffer (kbd:[Alt+x] again: display all merged buffers). | `+/input zoom_merged_buffer+`
|
||
| kbd:[PgUp] | Scroll up one page in buffer history. | `+/window page_up+`
|
||
| kbd:[PgDn] | Scroll down one page in buffer history. | `+/window page_down+`
|
||
| kbd:[Alt+PgUp] | Scroll up a few lines in buffer history. | `+/window scroll_up+`
|
||
| kbd:[Alt+PgDn] | Scroll down a few lines in buffer history. | `+/window scroll_down+`
|
||
| kbd:[Alt+Home] | Scroll to top of buffer. | `+/window scroll_top+`
|
||
| kbd:[Alt+End] | Scroll to bottom of buffer. | `+/window scroll_bottom+`
|
||
| kbd:[F1] +
|
||
kbd:[Ctrl+F1] | Scroll up one page in buflist. | `+/bar scroll buflist * -100%+`
|
||
| kbd:[F2] +
|
||
kbd:[Ctrl+F2] | Scroll down one page in buflist. | `+/bar scroll buflist * +100%+`
|
||
| kbd:[Alt+F1] | Go to the beginning of buflist. | `+/bar scroll buflist * b+`
|
||
| kbd:[Alt+F2] | Go to the end of buflist. | `+/bar scroll buflist * e+`
|
||
| kbd:[Alt+←] +
|
||
kbd:[Alt+↑] +
|
||
kbd:[Ctrl+p] +
|
||
kbd:[F5] | Switch to previous buffer. | `+/buffer -1+`
|
||
| kbd:[Alt+→] +
|
||
kbd:[Alt+↓] +
|
||
kbd:[Ctrl+n] +
|
||
kbd:[F6] | Switch to next buffer. | `+/buffer +1+`
|
||
| kbd:[F7] | Switch to previous window. | `+/window -1+`
|
||
| kbd:[F8] | Switch to next window. | `+/window +1+`
|
||
| kbd:[F9] | Scroll buffer's title on the left. | `+/bar scroll title * -30%+`
|
||
| kbd:[F10] | Scroll buffer's title on the right. | `+/bar scroll title * +30%+`
|
||
| kbd:[F11] +
|
||
kbd:[Ctrl+F11] | Scroll up one page in nicklist. | `+/bar scroll nicklist * -100%+`
|
||
| kbd:[F12] +
|
||
kbd:[Ctrl+F12] | Scroll down one page in nicklist. | `+/bar scroll nicklist * +100%+`
|
||
| kbd:[Alt+F11] | Go to the beginning of nicklist. | `+/bar scroll nicklist * b+`
|
||
| kbd:[Alt+F12] | Go to the end of nicklist. | `+/bar scroll nicklist * e+`
|
||
| kbd:[Alt+a] | Switch to next buffer with activity (with priority: highlight, message, other). | `+/input jump_smart+`
|
||
| kbd:[Alt+Shift+B] | Toggle buflist. | `+/buflist toggle+`
|
||
| kbd:[Alt+h] | Clear hotlist (activity notification on other buffers). | `+/input hotlist_clear+`
|
||
| kbd:[Alt+j],
|
||
kbd:[Alt+f] | Switch to first buffer. | `+/buffer -+`
|
||
| kbd:[Alt+j],
|
||
kbd:[Alt+l] (`L`) | Switch to last buffer. | `+/buffer ++`
|
||
| kbd:[Alt+j],
|
||
kbd:[Alt+r] | Switch to IRC raw buffer. | `+/server raw+`
|
||
| kbd:[Alt+j],
|
||
kbd:[Alt+s] | Switch to IRC server buffer. | `+/server jump+`
|
||
| kbd:[Alt+0...9] | Switch to buffer by number (0 = 10). | `+/buffer *N+`
|
||
| kbd:[Alt+j],
|
||
kbd:[01...99] | Switch to buffer by number. | `+/buffer *NN+`
|
||
| kbd:[Alt+l] (`L`) | Toggle bare display. | `+/window bare+`
|
||
| kbd:[Alt+m] | Toggle mouse. | `+/mouse toggle+`
|
||
| kbd:[Alt+n] | Scroll to next highlight. | `+/window scroll_next_highlight+`
|
||
| kbd:[Alt+Shift+N] | Toggle nicklist bar. | `+/bar toggle nicklist+`
|
||
| kbd:[Alt+p] | Scroll to previous highlight. | `+/window scroll_previous_highlight+`
|
||
| kbd:[Alt+u] | Scroll to first unread line in buffer. | `+/window scroll_unread+`
|
||
| kbd:[Alt+w],
|
||
kbd:[Alt+↑] | Switch to window above. | `+/window up+`
|
||
| kbd:[Alt+w],
|
||
kbd:[Alt+↓] | Switch to window below. | `+/window down+`
|
||
| kbd:[Alt+w],
|
||
kbd:[Alt+←] | Switch to window on the left. | `+/window left+`
|
||
| kbd:[Alt+w],
|
||
kbd:[Alt+→] | Switch to window on the right. | `+/window right+`
|
||
| kbd:[Alt+w],
|
||
kbd:[Alt+b] | Balance the sizes of all windows. | `+/window balance+`
|
||
| kbd:[Alt+w],
|
||
kbd:[Alt+s] | Swap buffers of two windows. | `+/window swap+`
|
||
| kbd:[Alt+z] | Zoom on current window (kbd:[Alt+z] again: restore initial windows state, before zoom). | `+/window zoom+`
|
||
| kbd:[Alt+<] | Switch to previous buffer in list of visited buffers. | `+/input jump_previously_visited_buffer+`
|
||
| kbd:[Alt+>] | Switch to next buffer in list of visited buffers. | `+/input jump_next_visited_buffer+`
|
||
| kbd:[Alt+/] | Switch to last buffer displayed (before last jump to a buffer). | `+/input jump_last_buffer_displayed+`
|
||
| kbd:[Alt+=] | Toggle filters. | `+/filter toggle+`
|
||
| kbd:[Alt+-] | Toggle filters in current buffer. | `+/filter toggle @+`
|
||
|===
|
||
|
||
[[key_bindings_search_context]]
|
||
==== Keys for "search" context
|
||
|
||
These keys are used in context "search" (when kbd:[Ctrl+r] is pressed to search
|
||
text in buffer).
|
||
|
||
[width="100%",cols="^.^3,.^8,.^5",options="header"]
|
||
|===
|
||
| Key | Description | Command
|
||
| kbd:[Ctrl+r] | Switch search type: string (default), regular expression. | `+/input search_switch_regex+`
|
||
| kbd:[Alt+c] | Switch exact case for search. | `+/input search_switch_case+`
|
||
| kbd:[Tab] | Switch search in: messages (default), prefixes, prefixes + messages. | `+/input search_switch_where+`
|
||
| kbd:[↑] | Search previous line. | `+/input search_previous+`
|
||
| kbd:[↓] | Search next line. | `+/input search_next+`
|
||
| kbd:[Enter] +
|
||
kbd:[Ctrl+j] +
|
||
kbd:[Ctrl+m] | Stop search at current position. | `+/input search_stop_here+`
|
||
| kbd:[Ctrl+q] | Stop search and scroll to bottom of buffer. | `+/input search_stop+`
|
||
|===
|
||
|
||
[[key_bindings_cursor_context]]
|
||
==== Keys for "cursor" context
|
||
|
||
These keys are used in context "cursor" (free movement of cursor on screen).
|
||
|
||
[width="100%",cols="^.^3,^.^2,.^7,.^7",options="header"]
|
||
|===
|
||
| Key | Area | Description | Command
|
||
| kbd:[↑] | - | Move cursor one line up. | `+/cursor move up+`
|
||
| kbd:[↓] | - | Move cursor one line down. | `+/cursor move down+`
|
||
| kbd:[←] | - | Move cursor one column left. | `+/cursor move left+`
|
||
| kbd:[→] | - | Move cursor one column right. | `+/cursor move right+`
|
||
| kbd:[Alt+↑] | - | Move cursor one area up. | `+/cursor move area_up+`
|
||
| kbd:[Alt+↓] | - | Move cursor one area down. | `+/cursor move area_down+`
|
||
| kbd:[Alt+←] | - | Move cursor one area left. | `+/cursor move area_left+`
|
||
| kbd:[Alt+→] | - | Move cursor one area right. | `+/cursor move area_right+`
|
||
| kbd:[m] | chat | Quote message. | `+hsignal:chat_quote_message;/cursor stop+`
|
||
| kbd:[q] | chat | Quote prefix + message. | `+hsignal:chat_quote_prefix_message;/cursor stop+`
|
||
| kbd:[Q] | chat | Quote time + prefix + message. | `+hsignal:chat_quote_time_prefix_message;/cursor stop+`
|
||
| kbd:[b] | nicklist | Ban nick. | `+/window ${_window_number};/ban ${nick}+`
|
||
| kbd:[k] | nicklist | Kick nick. | `+/window ${_window_number};/kick ${nick}+`
|
||
| kbd:[K] | nicklist | Kick and ban nick. | `+/window ${_window_number};/kickban ${nick}+`
|
||
| kbd:[q] | nicklist | Open query with nick. | `+/window ${_window_number};/query ${nick};/cursor stop+`
|
||
| kbd:[w] | nicklist | Do a whois on nick. | `+/window ${_window_number};/whois ${nick}+`
|
||
| kbd:[Enter] +
|
||
kbd:[Ctrl+j] +
|
||
kbd:[Ctrl+m] | - | Stop cursor mode | `/cursor stop`
|
||
|===
|
||
|
||
[[key_bindings_mouse_context]]
|
||
==== Keys for "mouse" context
|
||
|
||
These keys are used in context "mouse", namely when a mouse event occurs.
|
||
|
||
[width="100%",cols="^.^3,^.^3,^.^3,.^8,.^8",options="header"]
|
||
|===
|
||
| Button/Wheel ^(1)^ | Gesture | Area | Description | Command
|
||
| ◾◽◽ | - | chat | Switch to window. | `+/window ${_window_number}+`
|
||
| ◾◽◽ | left | chat | Switch to previous buffer. | `+/window ${_window_number};/buffer +1+`
|
||
| ◾◽◽ | right | chat | Switch to next buffer. | `+/window ${_window_number};/buffer +1+`
|
||
| ◾◽◽ | left (long) | chat | Switch to first buffer. | `+/window ${_window_number};/buffer 1+`
|
||
| ◾◽◽ | right (long) | chat | Switch to last buffer. | `+/window ${_window_number};/input jump_last_buffer+`
|
||
| kbd:[▲] | - | chat | Scroll up a few lines in buffer history. | `+/window scroll_up -window ${_window_number}+`
|
||
| kbd:[▼] | - | chat | Scroll down a few lines in buffer history. | `+/window scroll_down -window ${_window_number}+`
|
||
| kbd:[Ctrl+▲] | - | chat | Scroll horizontally to the left. | `+/window scroll_horiz -window ${_window_number} -10%+`
|
||
| kbd:[Ctrl+▼] | - | chat | Scroll horizontally to the right. | `+/window scroll_horiz -window ${_window_number} +10%+`
|
||
| kbd:[▲] | - | chat: fset buffer | Move five lines up in fset buffer. | `+/fset -up 5+`
|
||
| kbd:[▼] | - | chat: fset buffer | Move five lines down in fset buffer. | `+/fset -down 5+`
|
||
| ◾◽◽ | - | chat: fset buffer | Select line in fset buffer. | `+/window ${_window_number};/fset -go ${_chat_line_y}+`
|
||
| ◽◽◾ | - | chat: fset buffer | Toggle boolean (on/off) or edit the option value. | `+hsignal:fset_mouse+`
|
||
| ◽◽◾ | left | chat: fset buffer | Decrease value for integer/color, set/append to value for other types. | `+hsignal:fset_mouse+`
|
||
| ◽◽◾ | right | chat: fset buffer | Increase value for integer/color, set/append to value for other types. | `+hsignal:fset_mouse+`
|
||
| ◽◽◾ | up / down | chat: fset buffer | Mark/unmark multiple options. | `+hsignal:fset_mouse+`
|
||
| kbd:[▲] | - | chat: script buffer | Move five lines up in script buffer. | `+/script up 5+`
|
||
| kbd:[▼] | - | chat: script buffer | Move five lines down in script buffer. | `+/script down 5+`
|
||
| ◾◽◽ | - | chat: script buffer | Select line in script buffer. | `+/script go ${_chat_line_y}+`
|
||
| ◽◽◾ | - | chat: script buffer | Install/remove script. | `+/script go ${_chat_line_y};/script installremove -q ${script_name_with_extension}+`
|
||
| ◾◽◽ | up / left | buflist | Move buffer to a lower number. | Signal `+buflist_mouse+`.
|
||
| ◾◽◽ | down / right | buflist | Move buffer to a higher number. | Signal `+buflist_mouse+`.
|
||
| ◾◽◽ | - | buflist | Switch to buffer (previously visited buffer if the buffer is the current one). | Signal `+buflist_mouse+`.
|
||
| ◽◽◾ | - | buflist | Switch to next visited buffer if the buffer is the current one. | Signal `+buflist_mouse+`.
|
||
| kbd:[Ctrl+▲] | - | buflist | Switch to previous buffer. | Signal `+buflist_mouse+`.
|
||
| kbd:[Ctrl+▼] | - | buflist | Switch to next buffer. | Signal `+buflist_mouse+`.
|
||
| ◾◽◽ | up | nicklist | Scroll up one page in nicklist. | `+/bar scroll nicklist ${_window_number} -100%+`
|
||
| ◾◽◽ | down | nicklist | Scroll down one page in nicklist. | `+/bar scroll nicklist ${_window_number} +100%+`
|
||
| ◾◽◽ | up (long) | nicklist | Go to the beginning of nicklist. | `+/bar scroll nicklist ${_window_number} b+`
|
||
| ◾◽◽ | down (long) | nicklist | Go to the end of nicklist. | `+/bar scroll nicklist ${_window_number} e+`
|
||
| ◾◽◽ | - | nicklist | Open query with nick. | `+/window ${_window_number};/query ${nick}+`
|
||
| ◽◽◾ | - | nicklist | Do a whois on nick. | `+/window ${_window_number};/whois ${nick}+`
|
||
| ◾◽◽ | left | nicklist | Kick nick. | `+/window ${_window_number};/kick ${nick}+`
|
||
| ◾◽◽ | left (long) | nicklist | Kick and ban nick. | `+/window ${_window_number};/kickban ${nick}+`
|
||
| ◽◽◾ | left | nicklist | Ban nick. | `+/window ${_window_number};/ban ${nick}+`
|
||
| ◽◽◾ | - | input | Grab a mouse event and insert its code in command line. | `+/input grab_mouse_area+`
|
||
| kbd:[▲] | - | any bar | Scroll bar by -20%. | `+/bar scroll ${_bar_name} ${_window_number} -20%+`
|
||
| kbd:[▼] | - | any bar | Scroll bar by +20%. | `+/bar scroll ${_bar_name} ${_window_number} +20%+`
|
||
| ◽◾◽ | - | anywhere | Start cursor mode at this point. | `+/cursor go ${_x},${_y}+`
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ kbd:[▲] and kbd:[▼] are wheel up and down.
|
||
|
||
[[key_bindings_fset_buffer]]
|
||
==== Keys for fset buffer
|
||
|
||
These keys and actions are used on the fset buffer (see <<fset_plugin,Fset plugin>>).
|
||
|
||
[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, set value for other types. | `+/fset -add -1+`
|
||
| kbd:[Alt++] | `+` | Add 1 to value for integer/color, 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] | | Toggle plugin description options (`pass:[plugins.desc.*]`). | `+/mute /set fset.look.show_plugins_desc toggle+`
|
||
| kbd:[Alt+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+`
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ The action must be entered as input on the command line, followed by kbd:[Enter].
|
||
|
||
[[key_bindings_script_buffer]]
|
||
==== Keys for script buffer
|
||
|
||
These keys and actions are used on the script buffer (see <<scripts_plugins,Script plugin>>).
|
||
|
||
[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`) | `l` | Load script. | `+/script load+`
|
||
| 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+`
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ The action must be entered as input on the command line, followed by kbd:[Enter].
|
||
|
||
[[mouse]]
|
||
=== Mouse support
|
||
|
||
WeeChat supports mouse clicks and gestures. It is working with local terminal,
|
||
and remotely via ssh connection with or without screen/tmux.
|
||
|
||
[[mouse_enable]]
|
||
==== Enable mouse
|
||
|
||
To enable mouse at startup:
|
||
|
||
----
|
||
/set weechat.look.mouse on
|
||
----
|
||
|
||
To enable mouse now, press kbd:[Alt+m] or do following command:
|
||
|
||
----
|
||
/mouse enable
|
||
----
|
||
|
||
It is possible to temporarily disable mouse, and bind that on a key. For example
|
||
key kbd:[Alt+%] to disable mouse for 10 seconds:
|
||
|
||
----
|
||
/key bind meta-% /mouse toggle 10
|
||
----
|
||
|
||
[IMPORTANT]
|
||
When mouse is enabled in WeeChat, all mouse events are caught by WeeChat, so
|
||
actions such as copy/paste or clicks on URLs are not sent to the terminal. +
|
||
Using kbd:[Shift] key causes the events to be sent directly to the terminal,
|
||
as if the mouse was disabled (on some terminals like iTerm, you have to use
|
||
kbd:[Alt] instead of kbd:[Shift]).
|
||
|
||
[NOTE]
|
||
For any problem with mouse, please look at
|
||
link:weechat_faq.en.html#mouse[WeeChat FAQ / Mouse].
|
||
|
||
[[mouse_bind_events]]
|
||
==== Bind mouse events to commands
|
||
|
||
Many default mouse events are already defined by WeeChat (see
|
||
<<key_bindings_mouse_context,keys for "mouse" context>>).
|
||
|
||
You can change or add bindings with the command `/key` using context "mouse"
|
||
(for syntax, see command <<command_weechat_key,/key>>).
|
||
|
||
Event name consists of a modifier (optional), a button/wheel name and a gesture
|
||
(optional). Different elements are separated by `+-+`.
|
||
|
||
List of modifiers:
|
||
|
||
[width="100%",cols="2m,3",options="header"]
|
||
|===
|
||
| Modifier | Description
|
||
| ctrl | Key kbd:[Ctrl]
|
||
| alt | Key kbd:[Alt]
|
||
| ctrl-alt | Keys kbd:[Ctrl] + kbd:[Alt]
|
||
|===
|
||
|
||
List of buttons/wheel:
|
||
|
||
[width="100%",cols="2m,3",options="header"]
|
||
|===
|
||
| Button/wheel | Description
|
||
| button1 | Click on left button
|
||
| button2 | Click on right button
|
||
| button3 | Click on middle button (often click on wheel)
|
||
| button4 ... button9 | Click on extra buttons
|
||
| wheelup | Wheel (up)
|
||
| wheeldown | Wheel (down)
|
||
|===
|
||
|
||
List of gestures (only for buttons, not wheel):
|
||
|
||
[width="100%",cols="2m,3",options="header"]
|
||
|===
|
||
| Gesture | Distance
|
||
| 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
|
||
|===
|
||
|
||
List of incomplete events (only for buttons, useful for plugins/scripts):
|
||
|
||
[width="100%",cols="2m,3",options="header"]
|
||
|===
|
||
| Event | Description
|
||
| event-down | Button was pressed but not released yet
|
||
| event-drag | Mouse was moved with button pressed down
|
||
|===
|
||
|
||
Example of events:
|
||
|
||
* `button1`
|
||
* `ctrl-button1`
|
||
* `button1-gesture-right`
|
||
* `button1-event-down`
|
||
* `button1-event-drag`
|
||
* `alt-button2-gesture-down-long`
|
||
* `wheelup`
|
||
* `ctrl-alt-wheeldown`
|
||
* ...
|
||
|
||
[TIP]
|
||
When binding a key in context "mouse", it's possible to match many events using
|
||
`+*+` at beginning or end of name, for example `+button1-gesture-*+` will match
|
||
any gesture made using left button.
|
||
|
||
[TIP]
|
||
You can find an event name with command `+/input grab_mouse+` then doing event
|
||
with mouse. This will insert event name on command line.
|
||
|
||
[[secured_data]]
|
||
=== Secured data
|
||
|
||
[[secured_data_storage]]
|
||
==== Storage
|
||
|
||
WeeChat can encrypt passwords or private data using secured data, stored in file
|
||
_sec.conf_.
|
||
|
||
This configuration file is read before any other file, and the values stored
|
||
inside can be used in various WeeChat or plugins/scripts options.
|
||
|
||
You can set a passphrase to encrypt data in _sec.conf_. This is not mandatory
|
||
but highly recommended, otherwise data is stored as plain text in file.
|
||
|
||
----
|
||
/secure passphrase this is my passphrase
|
||
----
|
||
|
||
[[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]]
|
||
===== Encryption
|
||
|
||
The encryption of data is made in 3 steps:
|
||
|
||
. Derive a key from the passphrase (with optional salt).
|
||
. Compute hash of data to encrypt.
|
||
. Encrypt the hash + data (output is: salt + encrypted hash/data).
|
||
|
||
[NOTE]
|
||
The cipher block mode is _CFB_.
|
||
|
||
The result is put as hexadecimal string in file _sec.conf_, for example:
|
||
|
||
----
|
||
[data]
|
||
__passphrase__ = on
|
||
libera = "53B1C86FCDA28FC122A95B0456ABD79B5AB74654F21C3D099A6CCA8173239EEA59533A1D83011251F96778AC3F5166A394"
|
||
----
|
||
|
||
[[secured_data_decryption]]
|
||
===== Decryption
|
||
|
||
The decryption of data is made in 3 steps:
|
||
|
||
. Derive a key using salt and passphrase.
|
||
. Decrypt hash + data.
|
||
. Check that decrypted hash == hash of data.
|
||
|
||
[[secured_data_manage]]
|
||
==== Manage secured data
|
||
|
||
To add secured data, use `/secure set`, for example a password for _libera_
|
||
IRC server:
|
||
|
||
----
|
||
/secure set libera mypassword
|
||
----
|
||
|
||
For comfort, secured data can be displayed in a dedicated buffer (kbd:[Alt+v] on
|
||
buffer to see values), just do:
|
||
|
||
----
|
||
/secure
|
||
----
|
||
|
||
Secured data can be used in some options that can contain private data like
|
||
password, using this format: "${sec.data.xxx}" where "xxx" is the name of
|
||
secured data (used with `/secure set xxx ...`). +
|
||
For a complete list of supported options, see `/help secure`.
|
||
|
||
To use the _libera_ password, for example with
|
||
<<irc_sasl_authentication,SASL authentication>>:
|
||
|
||
----
|
||
/set irc.server.libera.sasl_password "${sec.data.libera}"
|
||
----
|
||
|
||
[[commands_and_options]]
|
||
=== Commands and options
|
||
|
||
[[weechat_commands]]
|
||
==== WeeChat commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=weechat_commands]
|
||
|
||
[[sec_options]]
|
||
==== Secured data options
|
||
|
||
Sections in file _sec.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| crypt | /set sec.crypt.* | Options for encryption.
|
||
| data | <<command_weechat_secure,/secure>> | Secured data.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=sec_options]
|
||
|
||
[[weechat_options]]
|
||
==== WeeChat options
|
||
|
||
Sections in file _weechat.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| debug | <<command_weechat_debug,/debug set>> +
|
||
/set weechat.debug.* | Debug level, for core and plugins (options can be added/removed in section).
|
||
| startup | /set weechat.startup.* | Startup options.
|
||
| look | /set weechat.look.* | Look and feel.
|
||
| palette | <<command_weechat_color,/color alias>> +
|
||
/set weechat.palette.* | Color aliases (options can be added/removed in section).
|
||
| color | /set weechat.color.* | Colors.
|
||
| completion | /set weechat.completion.* | Completion options.
|
||
| history | /set weechat.history.* | History options (commands and buffers).
|
||
| proxy | <<command_weechat_proxy,/proxy>> +
|
||
/set weechat.proxy.* | Proxy options.
|
||
| network | /set weechat.network.* | Network/SSL options.
|
||
| plugin | /set weechat.plugin.* | Options on plugins.
|
||
| signal | /set weechat.signal.* | Options on signals.
|
||
| bar | <<command_weechat_bar,/bar>> +
|
||
/set weechat.bar.* | Bar options.
|
||
| layout | <<command_weechat_layout,/layout>> | Layouts.
|
||
| notify | <<command_weechat_buffer,/buffer notify>> | Notify levels for buffers (options can be added/removed in section).
|
||
| filter | <<command_weechat_filter,/filter>> | Filters.
|
||
| key | <<command_weechat_key,/key>> | Keys in default context.
|
||
| key_search | <<command_weechat_key,/key>> | Keys in search context.
|
||
| key_cursor | <<command_weechat_key,/key>> | Keys in cursor context.
|
||
| key_mouse | <<command_weechat_key,/key>> | Keys in mouse context.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=weechat_options]
|
||
|
||
[[plugins]]
|
||
== Plugins
|
||
|
||
A plugin is a dynamic library, written in C and compiled, which is loaded by
|
||
WeeChat.
|
||
Under GNU/Linux, the file has ".so" extension, ".dll" under Windows.
|
||
|
||
Plugins found are automatically loaded when WeeChat is starting, and it is
|
||
possible to load or unload plugins while WeeChat is running.
|
||
|
||
It's important to make difference between a _plugin_ and a _script_: a
|
||
_plugin_ is a binary file compiled and loaded with command `/plugin`, whereas
|
||
a _script_ is a text file loaded with a plugin like _python_ with command
|
||
`/python`.
|
||
|
||
You can use command `/plugin` to load/unload a plugin, or list all loaded
|
||
plugins.
|
||
|
||
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.
|
||
|
||
Examples to load, unload or list plugins:
|
||
|
||
----
|
||
/plugin load irc
|
||
/plugin unload irc
|
||
/plugin list
|
||
----
|
||
|
||
Default plugins are:
|
||
|
||
[width="100%",cols="1,5",options="header"]
|
||
|===
|
||
| Plugin | Description
|
||
| alias | Define alias for commands.
|
||
| buflist | Bar item with list of buffers.
|
||
| charset | Charset decoding/encoding for buffers.
|
||
| exec | Execution of external commands in WeeChat.
|
||
| fifo | FIFO pipe used to remotely send commands to WeeChat.
|
||
| fset | Fast set of WeeChat and plugins options.
|
||
| irc | IRC chat protocol.
|
||
| logger | Log buffers to files.
|
||
| relay | Relay data via network.
|
||
| script | Script manager.
|
||
| python | Python scripting API.
|
||
| perl | Perl scripting API.
|
||
| ruby | Ruby scripting API.
|
||
| lua | Lua scripting API.
|
||
| tcl | Tcl scripting API.
|
||
| guile | Guile (scheme) scripting API.
|
||
| javascript | JavaScript scripting API.
|
||
| php | PHP scripting API.
|
||
| spell | Spell checking for command line.
|
||
| trigger | Text replacement and command execution on events triggered by WeeChat/plugins.
|
||
| xfer | File transfer and direct chat.
|
||
|===
|
||
|
||
To learn more about plugin or script development (through API), please read the
|
||
link:weechat_plugin_api.en.html[WeeChat plugin API reference] or the
|
||
link:weechat_scripting.en.html[WeeChat scripting guide].
|
||
|
||
[[alias_plugin]]
|
||
=== Alias
|
||
|
||
Alias plugin lets you create alias for commands (from WeeChat or other
|
||
plugins).
|
||
|
||
Some aliases are created by default, with name in upper case (to make them
|
||
different from standard commands); commands are not case sensitive in WeeChat,
|
||
so for example `/close` runs the alias `/CLOSE`.
|
||
|
||
List of default aliases:
|
||
|
||
include::includes/autogen_user_default_aliases.en.adoc[tag=default_aliases]
|
||
|
||
[[alias_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=alias_commands]
|
||
|
||
[[alias_options]]
|
||
==== Options
|
||
|
||
Sections in file _alias.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| cmd | <<command_alias_alias,/alias>> +
|
||
/set alias.cmd.* | Commands for aliases.
|
||
| completion | <<command_alias_alias,/alias>> +
|
||
/set alias.completion.* | Completions for aliases.
|
||
|===
|
||
|
||
[[buflist_plugin]]
|
||
=== Buflist
|
||
|
||
Buflist plugin displays a list of buffers in a bar item called "buflist"
|
||
(two other bar items "buflist2" and "buflist3" are available as well). +
|
||
A default bar "buflist" is created on startup with this item.
|
||
|
||
[[buflist_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=buflist_commands]
|
||
|
||
[[buflist_options]]
|
||
==== Options
|
||
|
||
Sections in file _buflist.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| format | /set buflist.format.* | Formats used to display list of buffers.
|
||
| look | /set buflist.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=buflist_options]
|
||
|
||
[[charset_plugin]]
|
||
=== Charset
|
||
|
||
Charset plugin lets you decode or encode data using charsets.
|
||
|
||
There is default charset for decode/encode, and specific charsets for buffers
|
||
(or group of buffers).
|
||
|
||
This plugin is optional, but recommended: if it's not loaded, WeeChat
|
||
can only read/write UTF-8 data.
|
||
|
||
Charset plugin should be autoloaded by WeeChat. To be sure plugin is loaded,
|
||
try:
|
||
|
||
----
|
||
/charset
|
||
----
|
||
|
||
If command is not found, then load plugin with command:
|
||
|
||
----
|
||
/plugin load charset
|
||
----
|
||
|
||
If plugin is not found, then you should compile again WeeChat with
|
||
plugins and Charset support.
|
||
|
||
When Charset plugin starts, it displays terminal and internal charsets.
|
||
Terminal charset depends on your locale, and internal is UTF-8.
|
||
|
||
For example:
|
||
|
||
....
|
||
charset: terminal: ISO-8859-15, internal: UTF-8
|
||
....
|
||
|
||
[[charset_set]]
|
||
==== Set charset
|
||
|
||
To set global decode and encode charsets, use command `/set`.
|
||
|
||
For example:
|
||
|
||
----
|
||
/set charset.default.decode ISO-8859-15
|
||
/set charset.default.encode ISO-8859-15
|
||
----
|
||
|
||
If global decode charset is not set (for example during first
|
||
load of Charset plugin), it will be automatically set to terminal
|
||
charset (if it's different from UTF-8), or by default to _ISO-8859-1_.
|
||
|
||
Default encode value is empty, so it sends by default with
|
||
internal charset (UTF-8).
|
||
|
||
To set IRC server charset, use command `/charset` on server buffer.
|
||
If you give only charset, then it will set decoding and encoding values.
|
||
|
||
For example:
|
||
|
||
----
|
||
/charset ISO-8859-15
|
||
----
|
||
|
||
It's equivalent to:
|
||
|
||
----
|
||
/charset decode ISO-8859-15
|
||
/charset encode ISO-8859-15
|
||
----
|
||
|
||
To set IRC channel (or private) charset, use same commands as server,
|
||
but on channel (or private) buffer.
|
||
|
||
To set charset for all channels/privates of an IRC server:
|
||
|
||
----
|
||
/set charset.encode.irc.libera ISO-8859-15
|
||
----
|
||
|
||
To see all charsets used, use following command:
|
||
|
||
----
|
||
/set charset.*
|
||
----
|
||
|
||
[[charset_troubleshooting]]
|
||
==== Troubleshooting
|
||
|
||
For any problem with charsets, please look at
|
||
link:weechat_faq.en.html#charset[WeeChat FAQ / Charset].
|
||
|
||
[[charset_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=charset_commands]
|
||
|
||
[[charset_options]]
|
||
==== Options
|
||
|
||
Sections in file _charset.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| default | /set charset.default.* | Default decoding/encoding charset.
|
||
| decode | <<command_charset_charset,/charset decode>> +
|
||
/set charset.decode.* | Decoding charset by buffer (options can be added/removed in section).
|
||
| encode | <<command_charset_charset,/charset encode>> +
|
||
/set charset.encode.* | Encoding charset by buffer (options can be added/removed in section).
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=charset_options]
|
||
|
||
[[exec_plugin]]
|
||
=== Exec
|
||
|
||
The `/exec` command lets you execute external commands inside WeeChat and
|
||
display the output locally, or send it to a buffer.
|
||
|
||
[[exec_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=exec_commands]
|
||
|
||
[[exec_options]]
|
||
==== Options
|
||
|
||
Sections in file _exec.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| command | /set exec.command.* | Options for commands.
|
||
| color | /set exec.color.* | Colors.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=exec_options]
|
||
|
||
[[fifo_plugin]]
|
||
=== Fifo
|
||
|
||
You can remote control WeeChat, by sending commands or text to a FIFO pipe (if
|
||
option "fifo.file.enabled" is enabled, it is by default).
|
||
|
||
The FIFO pipe is located in WeeChat runtime directory and is called
|
||
_weechat_fifo_12345_ by default (where _12345_ is the WeeChat process id).
|
||
|
||
Syntax for the FIFO pipe commands/text is one of following:
|
||
|
||
....
|
||
plugin.buffer *text or command here
|
||
*text or command here
|
||
....
|
||
|
||
Some examples:
|
||
|
||
* Change nick on IRC server libera to "newnick":
|
||
|
||
----
|
||
$ echo 'irc.server.libera */nick newnick' >/run/user/1000/weechat/weechat_fifo_12345
|
||
----
|
||
|
||
* Send a message on IRC #weechat channel:
|
||
|
||
----
|
||
$ echo 'irc.libera.#weechat *hello!' >/run/user/1000/weechat/weechat_fifo_12345
|
||
----
|
||
|
||
* Send a message on current buffer:
|
||
|
||
----
|
||
$ echo '*hello!' >/run/user/1000/weechat/weechat_fifo_12345
|
||
----
|
||
|
||
* Send two commands to unload/reload Python scripts (you have to separate them
|
||
with "\n"):
|
||
|
||
----
|
||
$ printf '%b' '*/python unload\n*/python autoload\n' >/run/user/1000/weechat/weechat_fifo_12345
|
||
----
|
||
|
||
[[fifo_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=fifo_commands]
|
||
|
||
[[fifo_options]]
|
||
==== Options
|
||
|
||
Sections in file _fifo.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| file | /set fifo.file.* | FIFO pipe control.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=fifo_options]
|
||
|
||
[[fset_plugin]]
|
||
=== Fset
|
||
|
||
Fast Set plugin displays a list of options in a buffer, and helps to set WeeChat
|
||
and plugin options.
|
||
|
||
[[fset_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=fset_commands]
|
||
|
||
[[fset_options]]
|
||
==== Options
|
||
|
||
Sections in file _fset.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| color | /set fset.color.* | Colors.
|
||
| format | /set fset.format.* | Formats used to display list of options.
|
||
| look | /set fset.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=fset_options]
|
||
|
||
[[irc_plugin]]
|
||
=== IRC
|
||
|
||
The IRC plugin is designed to chat through IRC protocol with other people.
|
||
|
||
It is multi-servers, and offers all supported IRC commands including DCC chat
|
||
and file transfer (via xfer plugin, see <<xfer_plugin,Xfer plugin>>).
|
||
|
||
[[irc_command_line_options]]
|
||
==== Command line options
|
||
|
||
It is possible to give URL for one or many IRC servers, as follow:
|
||
|
||
----
|
||
irc[6][s]://[nick[:password]@]irc.example.org[:port][/channel][,channel[...]]
|
||
----
|
||
|
||
Example to join _#weechat_ and _#toto_ on server _irc.libera.chat_ server,
|
||
default port (6667), with nick _nono_:
|
||
|
||
----
|
||
$ weechat irc://nono@irc.libera.chat/#weechat,#toto
|
||
----
|
||
|
||
[[irc_ssl_certificates]]
|
||
==== SSL certificates
|
||
|
||
When connecting to IRC server with SSL, WeeChat checks by default that the
|
||
connection is fully trusted.
|
||
|
||
Some options are used to control SSL connection:
|
||
|
||
weechat.network.gnutls_ca_system::
|
||
load system's default trusted certificate authorities on startup
|
||
|
||
weechat.network.gnutls_ca_user::
|
||
extra file(s) with certificate authorities
|
||
|
||
irc.server.xxx.ssl_cert::
|
||
SSL certificate file used to automatically identify your nick (for example
|
||
CertFP on oftc, see below)
|
||
|
||
irc.server.xxx.ssl_dhkey_size::
|
||
size of the key used during the Diffie-Hellman Key Exchange (by default:
|
||
2048)
|
||
|
||
irc.server.xxx.ssl_verify::
|
||
check that the SSL connection is fully trusted (on by default)
|
||
|
||
[NOTE]
|
||
Option "ssl_verify" is on by default, so verification is strict and may fail,
|
||
even if it was OK with versions prior to 0.3.1.
|
||
|
||
[[irc_connect_oftc_with_certificate]]
|
||
===== First example: connect to oftc and check certificate
|
||
|
||
* Import certificate in shell:
|
||
|
||
----
|
||
$ mkdir -p ~/.config/weechat/ssl
|
||
$ wget -O ~/.config/weechat/ssl/CAs.pem https://www.spi-inc.org/ca/spi-cacert.crt
|
||
----
|
||
|
||
[NOTE]
|
||
You must replace `~/.config/weechat` by the path to your WeeChat config directory
|
||
which can also be for example `~/.weechat`.
|
||
|
||
[NOTE]
|
||
It is possible to concatenate many certificates in file CAs.pem.
|
||
|
||
* In WeeChat, with "oftc" server already added:
|
||
|
||
----
|
||
/connect oftc
|
||
----
|
||
|
||
[[irc_connect_oftc_with_certfp]]
|
||
===== Second example: connect to oftc using CertFP
|
||
|
||
* Create certificate in shell:
|
||
|
||
----
|
||
$ mkdir -p ~/.config/weechat/ssl
|
||
$ cd ~/.config/weechat/ssl
|
||
$ openssl req -nodes -newkey rsa:2048 -keyout nick.pem -x509 -days 365 -out nick.pem
|
||
----
|
||
|
||
[NOTE]
|
||
You must replace `~/.config/weechat` by the path to your WeeChat config directory
|
||
which can also be for example `~/.weechat`.
|
||
|
||
* In WeeChat, with "oftc" server already added:
|
||
|
||
----
|
||
/set irc.server.oftc.ssl_cert "${weechat_config_dir}/ssl/nick.pem"
|
||
/connect oftc
|
||
/msg nickserv cert add
|
||
----
|
||
|
||
For more information, look at https://www.oftc.net/NickServ/CertFP
|
||
|
||
[[irc_sasl_authentication]]
|
||
==== SASL authentication
|
||
|
||
WeeChat supports SASL authentication, using different mechanisms:
|
||
|
||
* _plain_: plain text password (default)
|
||
* _scram-sha-1_: SCRAM with SHA-1 digest algorithm
|
||
* _scram-sha-256_: SCRAM with SHA-256 digest algorithm
|
||
* _scram-sha-512_: SCRAM with SHA-512 digest algorithm
|
||
* _ecdsa-nist256p-challenge_: challenge with public/private key
|
||
* _external_: client side SSL cert
|
||
|
||
Options in servers are:
|
||
|
||
* _sasl_mechanism_: mechanism to use (see above)
|
||
* _sasl_timeout_: timeout (in seconds) for authentication
|
||
* _sasl_fail_: action to perform if authentication fails
|
||
* _sasl_username_: username (nick)
|
||
* _sasl_password_: password
|
||
* _sasl_key_: file with ECC private key (for mechanism
|
||
_ecdsa-nist256p-challenge_)
|
||
|
||
[[irc_sasl_ecdsa_nist256p_challenge]]
|
||
===== SASL ECDSA-NIST256P-CHALLENGE
|
||
|
||
You must generate a private key in order to authentify with the
|
||
ECDSA-NIST256P-CHALLENGE mechanism (no password is required on connection).
|
||
|
||
You can generate the key with this command:
|
||
|
||
----
|
||
$ openssl ecparam -genkey -name prime256v1 -out ~/.config/weechat/ecdsa.pem
|
||
----
|
||
|
||
[NOTE]
|
||
You must replace `~/.config/weechat` by the path to your WeeChat config directory
|
||
which can also be for example `~/.weechat`.
|
||
|
||
Get the public key (encoded as base64) with this command:
|
||
|
||
----
|
||
$ 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
|
||
----
|
||
|
||
Connect to the server, identify (for example with "nickserv identify") and set
|
||
your public key in your account, using nickserv (replace the base64 value with
|
||
your public key):
|
||
|
||
----
|
||
/connect libera
|
||
/msg nickserv identify your_password
|
||
/msg nickserv set pubkey Av8k1FOGetUDq7sPMBfufSIZ5c2I/QYWgiwHtNXkVe/q
|
||
----
|
||
|
||
Configure the SASL options in the server:
|
||
|
||
----
|
||
/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 to the server:
|
||
|
||
----
|
||
/reconnect libera
|
||
----
|
||
|
||
[[irc_tor_sasl]]
|
||
==== Connect with TOR and SASL
|
||
|
||
Some servers support connections with TOR (https://www.torproject.org/),
|
||
a network of virtual tunnels that allows people and groups to improve their
|
||
privacy and security on the Internet.
|
||
|
||
In first place, install TOR. For Debian (and derived):
|
||
|
||
----
|
||
$ sudo apt-get install tor
|
||
----
|
||
|
||
In WeeChat you need to add a socks5 proxy for TOR service (hostname/IP and
|
||
port depend on your TOR configuration):
|
||
|
||
----
|
||
/proxy add tor socks5 127.0.0.1 9050
|
||
----
|
||
|
||
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
|
||
----
|
||
|
||
Set proxy for TOR:
|
||
|
||
----
|
||
/set irc.server.irc-tor.proxy "tor"
|
||
----
|
||
|
||
Set SASL authentication with ECDSA-NIST256P-CHALLENGE (see the chapter
|
||
<<irc_sasl_ecdsa_nist256p_challenge,SASL ECDSA-NIST256P-CHALLENGE>> to generate
|
||
a private key):
|
||
|
||
----
|
||
/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"
|
||
----
|
||
|
||
And finally, connect to the server:
|
||
|
||
----
|
||
/connect irc-tor
|
||
----
|
||
|
||
[[irc_smart_filter_join_part_quit]]
|
||
==== Smart filter for join/part/quit messages
|
||
|
||
A smart filter is available to filter join/part/quit messages when nick did not
|
||
say something during past X minutes on channel.
|
||
|
||
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 *
|
||
----
|
||
|
||
It is possible to create filter for one channel only or channels beginning with
|
||
same name (see `/help filter`):
|
||
|
||
----
|
||
/filter add irc_smart_weechat irc.libera.#weechat irc_smart_filter *
|
||
/filter add irc_smart_weechats irc.libera.#weechat* irc_smart_filter *
|
||
----
|
||
|
||
You can hide only join or part/quit with following options:
|
||
|
||
----
|
||
/set irc.look.smart_filter_join on
|
||
/set irc.look.smart_filter_quit on
|
||
----
|
||
|
||
You can setup delay (in minutes):
|
||
|
||
----
|
||
/set irc.look.smart_filter_delay 5
|
||
----
|
||
|
||
If a nick did not speak during last 5 minutes, its join and/or part/quit will be
|
||
hidden on channel.
|
||
|
||
[[irc_ctcp_replies]]
|
||
==== CTCP replies
|
||
|
||
It is possible to customize CTCP replies, or block some CTCP queries (do not
|
||
reply).
|
||
|
||
For example, to customize reply to CTCP "VERSION", use following command:
|
||
|
||
----
|
||
/set irc.ctcp.version "I'm running WeeChat $version, it rocks!"
|
||
----
|
||
|
||
If you want to block CTCP "VERSION" (do not reply to a query), then set empty
|
||
string:
|
||
|
||
----
|
||
/set irc.ctcp.version ""
|
||
----
|
||
|
||
Even unknown CTCP can be customized, for example you can reply to
|
||
CTCP "BLABLA":
|
||
|
||
----
|
||
/set irc.ctcp.blabla "This is my answer to CTCP BLABLA"
|
||
----
|
||
|
||
It is possible to customize CTCP for one server only, using its internal name
|
||
before CTCP name:
|
||
|
||
----
|
||
/set irc.ctcp.libera.version "WeeChat $version (for libera)"
|
||
----
|
||
|
||
If you want to restore standard CTCP reply, then remove option:
|
||
|
||
----
|
||
/unset irc.ctcp.version
|
||
----
|
||
|
||
Following codes can be used in strings and are automatically expanded by WeeChat
|
||
when replying to CTCP:
|
||
|
||
[width="100%",cols="2l,4,8",options="header"]
|
||
|===
|
||
| Code | Description | Value/example
|
||
| $clientinfo | List of supported CTCP | `+ACTION DCC CLIENTINFO FINGER PING SOURCE TIME USERINFO VERSION+`
|
||
| $version | WeeChat version | `+0.4.0-dev+`
|
||
| $versiongit | WeeChat version + git version ^(1)^ | `+0.4.0-dev (git: v0.3.9-104-g7eb5cc4)+`
|
||
| $git | Git version ^(1)^ | `+v0.3.9-104-g7eb5cc4+`
|
||
| $compilation | WeeChat compilation date | `+Dec 16 2012+`
|
||
| $osinfo | Info about OS | `+Linux 2.6.32-5-amd64 / x86_64+`
|
||
| $site | WeeChat site | `+https://weechat.org/+`
|
||
| $download | WeeChat site, download page | `+https://weechat.org/download+`
|
||
| $time | Current date/time | `+Sun, 16 Dec 2012 10:40:48 +0100+`
|
||
| $username | User name on IRC server | `+name+`
|
||
| $realname | Real name on IRC server | `+John Doe+`
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ The git version is the output of command `git describe`. It is known only
|
||
if WeeChat has been compiled inside the git repository and if git was installed.
|
||
|
||
If CTCP options are not defined (by default), CTCP replies are:
|
||
|
||
[width="100%",cols="2,4,8",options="header"]
|
||
|===
|
||
| CTCP | Reply format | Example
|
||
| CLIENTINFO | `+$clientinfo+` | `+ACTION DCC CLIENTINFO FINGER PING SOURCE TIME USERINFO VERSION+`
|
||
| FINGER | `+WeeChat $versiongit+` | `+WeeChat 0.4.0-dev (git: v0.3.9-104-g7eb5cc4)+`
|
||
| SOURCE | `+$download+` | `+https://weechat.org/download+`
|
||
| TIME | `+$time+` | `+Sun, 16 Dec 2012 10:40:48 +0100+`
|
||
| USERINFO | `+$username ($realname)+` | `+name (John Doe)+`
|
||
| VERSION | `+WeeChat $versiongit ($compilation)+` | `+WeeChat 0.4.0-dev (git: v0.3.9-104-g7eb5cc4) (Dec 16 2012)+`
|
||
|===
|
||
|
||
[[irc_target_buffer]]
|
||
==== Target buffer for IRC messages
|
||
|
||
It is possible to customize target buffer for IRC messages (buffer used to
|
||
display message) with options `+irc.msgbuffer.*+`.
|
||
|
||
For some IRC messages (see list below), you can use value:
|
||
|
||
current::
|
||
current buffer (if it's IRC buffer, or on server buffer by default)
|
||
|
||
private::
|
||
private buffer for nick, or current/server buffer if not found (according
|
||
to option _irc.look.msgbuffer_fallback_)
|
||
|
||
server::
|
||
server buffer
|
||
|
||
weechat::
|
||
WeeChat "core" buffer
|
||
|
||
When option is not set (default), WeeChat chooses appropriate buffer, commonly
|
||
server or channel buffer.
|
||
|
||
Non-comprehensive list of IRC messages or alias that you can customize:
|
||
|
||
[width="100%",cols="^1m,^3m,8",options="header"]
|
||
|===
|
||
| message | alias | description
|
||
| error | | error
|
||
| invite | | invited on a channel
|
||
| join | | join
|
||
| kick | | kick
|
||
| kill | | kill
|
||
| mode | | mode
|
||
| notice | | notice
|
||
| part | | part
|
||
| quit | | quit
|
||
| topic | | topic
|
||
| wallops | | wallops
|
||
| | ctcp | ctcp (sent or received, in a privmsg or notice message)
|
||
| 221 | | user mode string
|
||
| 275 | whois | whois (secure connection)
|
||
| 301 | whois | whois (away)
|
||
| 303 | | ison
|
||
| 305 | unaway | unaway
|
||
| 306 | away | away
|
||
| 307 | whois | whois (registered nick)
|
||
| 310 | whois | whois (help mode)
|
||
| 311 | whois | whois (user)
|
||
| 312 | whois | whois (server)
|
||
| 313 | whois | whois (operator)
|
||
| 314 | whowas | whowas
|
||
| 315 | who | who (end)
|
||
| 317 | whois | whois (idle)
|
||
| 318 | whois | whois (end)
|
||
| 319 | whois | whois (channels)
|
||
| 320 | whois | whois (identified user)
|
||
| 321 | list | list (start)
|
||
| 322 | list | list (channel)
|
||
| 323 | list | list (end)
|
||
| 326 | whois | whois (has oper privs)
|
||
| 327 | whois | whois (host)
|
||
| 328 | | channel URL
|
||
| 329 | | channel creation date
|
||
| 330 | whois | whois (logged in as)
|
||
| 331 | | no topic for channel
|
||
| 332 | | topic of channel
|
||
| 333 | | infos about topic
|
||
| 335 | whois | whois (is a bot on)
|
||
| 338 | whois | whois (host)
|
||
| 341 | | inviting
|
||
| 343 | whois | whois (is opered as)
|
||
| 344 | reop | channel reop
|
||
| 345 | reop | channel reop (end)
|
||
| 346 | invitelist | invite list
|
||
| 347 | invitelist | invite list (end)
|
||
| 348 | exceptionlist | exception list
|
||
| 349 | exceptionlist | exception list (end)
|
||
| 351 | | server version
|
||
| 352 | who | who
|
||
| 353 | names | list of users on channel
|
||
| 366 | names | end of /names list
|
||
| 367 | banlist | ban list
|
||
| 368 | banlist | end of ban list
|
||
| 369 | whowas | whowas (end)
|
||
| 378 | whois | whois (connecting from)
|
||
| 379 | whois | whois (using modes)
|
||
| 401 | whois | no such nick/channel
|
||
| 402 | whois | no such server
|
||
| 432 | | erroneous nickname
|
||
| 433 | | nickname already in use
|
||
| 438 | | not authorized to change nickname
|
||
| 671 | whois | whois (secure connection)
|
||
| 728 | quietlist | quiet list
|
||
| 729 | quietlist | end of quiet list
|
||
| 732 | monitor | list of monitored nicks
|
||
| 733 | monitor | list of monitored nicks (end)
|
||
| 901 | | you are now logged in
|
||
|===
|
||
|
||
Other numeric commands can be customized as well.
|
||
|
||
Message can be prefixed by server name to be specific to an irc server
|
||
(for example: `libera.whois`).
|
||
|
||
Some examples:
|
||
|
||
* Display result of `/whois` on private buffer:
|
||
|
||
----
|
||
/set irc.msgbuffer.whois private
|
||
----
|
||
|
||
* Restore default buffer for whois (server buffer):
|
||
|
||
----
|
||
/unset irc.msgbuffer.whois
|
||
----
|
||
|
||
* Display invitation on current buffer, only for "libera" server:
|
||
|
||
----
|
||
/set irc.msgbuffer.libera.invite current
|
||
----
|
||
|
||
* Display message "303" (ison) on WeeChat "core" buffer:
|
||
|
||
----
|
||
/set irc.msgbuffer.303 weechat
|
||
----
|
||
|
||
[[irc_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=irc_commands]
|
||
|
||
[[irc_options]]
|
||
==== Options
|
||
|
||
Sections in file _irc.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set irc.look.* | Look and feel.
|
||
| color | /set irc.color.* | Colors.
|
||
| network | /set irc.network.* | Network options.
|
||
| msgbuffer | /set irc.msgbuffer.* | <<irc_target_buffer,Target buffer for IRC messages>> (options can be added/removed in section).
|
||
| ctcp | /set irc.ctcp.* | <<irc_ctcp_replies,CTCP replies>> (options can be added/removed in section).
|
||
| ignore | <<command_irc_ignore,/ignore>> | Ignore people.
|
||
| server_default | /set irc.server_default.* | Default values for servers (used when options in server are not defined).
|
||
| server | <<command_irc_server,/server>> +
|
||
/set irc.server.* | Servers.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=irc_options]
|
||
|
||
[[logger_plugin]]
|
||
=== Logger
|
||
|
||
The Logger plugin lets you save content of buffers to files, with options
|
||
about what and how it is saved.
|
||
|
||
[[logger_log_levels]]
|
||
==== Log levels
|
||
|
||
Logging is made with a level for each buffer. Default level is 9 (log
|
||
all messages displayed on buffer).
|
||
You can change level for one buffer, or a group of buffers.
|
||
|
||
Possible levels are 0 to 9. Zero means "do not log anything" and 9 means
|
||
"log all messages".
|
||
|
||
Plugins are using different levels for messages displayed.
|
||
IRC plugin uses following levels:
|
||
|
||
* level 1: message from user (on channel or private)
|
||
* level 2: nick change (you or someone else)
|
||
* level 3: any server message (except join/part/quit)
|
||
* level 4: server message join/part/quit
|
||
|
||
So if you set level 3 for an IRC channel, WeeChat will log all messages,
|
||
but not join/part/quit.
|
||
|
||
Some examples:
|
||
|
||
* Set level 3 for IRC channel #weechat:
|
||
|
||
----
|
||
/set logger.level.irc.libera.#weechat 3
|
||
----
|
||
|
||
* Set level 3 for libera server buffer:
|
||
|
||
----
|
||
/set logger.level.irc.server.libera 3
|
||
----
|
||
|
||
* Set level 3 for all channels on server libera:
|
||
|
||
----
|
||
/set logger.level.irc.libera 3
|
||
----
|
||
|
||
* Set level 2 for all IRC buffers:
|
||
|
||
----
|
||
/set logger.level.irc 2
|
||
----
|
||
|
||
[[logger_filenames_masks]]
|
||
==== Filenames masks
|
||
|
||
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
|
||
----
|
||
|
||
Masks will be matched on options in descending order of specificity on
|
||
`logger.mask.$plugin.*`, with `logger.file.mask` as fallback option.
|
||
|
||
For example, on buffer "irc.libera.#weechat", WeeChat will search a mask with
|
||
option name, in this order:
|
||
|
||
----
|
||
logger.mask.irc.libera.#weechat
|
||
logger.mask.irc.libera
|
||
logger.mask.irc
|
||
logger.file.mask
|
||
----
|
||
|
||
That means you can have masks specific for some IRC servers
|
||
("logger.mask.irc.libera") or for a plugin ("logger.mask.irc").
|
||
|
||
[[logger_files_by_date]]
|
||
===== Log files by date
|
||
|
||
To have log files by date, you can use date/time specifiers in mask (see
|
||
`man strftime` for formats), for example:
|
||
|
||
----
|
||
/set logger.file.mask "%Y/%m/$plugin.$name.weechatlog"
|
||
----
|
||
|
||
You'll have following files:
|
||
|
||
....
|
||
~/.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 log files by server and channel
|
||
|
||
If you want one directory by IRC server and one file by channel inside:
|
||
|
||
----
|
||
/set logger.mask.irc "irc/$server/$channel.weechatlog"
|
||
----
|
||
|
||
You'll have following files:
|
||
|
||
....
|
||
~/.local/share/weechat
|
||
└── logs
|
||
└── irc
|
||
├── libera
|
||
│ ├── libera.weechatlog
|
||
│ ├── #weechat.weechatlog
|
||
│ └── #mychan.weechatlog
|
||
├── oftc
|
||
│ ├── oftc.weechatlog
|
||
│ ├── #chan1.weechatlog
|
||
│ └── #chan2.weechatlog
|
||
...
|
||
....
|
||
|
||
[[logger_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=logger_commands]
|
||
|
||
[[logger_options]]
|
||
==== Options
|
||
|
||
Sections in file _logger.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set logger.look.* | Look and feel.
|
||
| color | /set logger.color.* | Colors.
|
||
| file | /set logger.file.* | Options for log files.
|
||
| level | /set logger.level.* | Log level by buffer (options can be added/removed in section).
|
||
| mask | /set logger.mask.* | Filename mask by buffer (options can be added/removed in section).
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=logger_options]
|
||
|
||
[[relay_plugin]]
|
||
=== Relay
|
||
|
||
The Relay plugin is used to relay data via network, using different protocols:
|
||
|
||
* _irc_: IRC proxy: used to share connections to IRC servers with one or many
|
||
other IRC clients
|
||
* _weechat_: protocol used by remote interfaces to display and interact with
|
||
WeeChat, for example:
|
||
** Glowing Bear (HTML5): https://www.glowing-bear.org/
|
||
** QWeeChat (Qt): https://weechat.org/download
|
||
** WeeChat-Android (Android): https://github.com/ubergeek42/weechat-android
|
||
** weechat.el (Emacs): https://github.com/the-kenny/weechat.el
|
||
** WeeCloud (JavaScript): https://github.com/eirikb/weecloud
|
||
|
||
[[relay_password]]
|
||
==== Password
|
||
|
||
It is highly recommended to set a password for relay, with these commands:
|
||
|
||
----
|
||
/secure set relay mypassword
|
||
/set relay.network.password "${sec.data.relay}"
|
||
----
|
||
|
||
This password is used for _irc_ and _weechat_ protocols.
|
||
|
||
[[relay_totp]]
|
||
==== TOTP
|
||
|
||
TOTP (Time-based One-Time Password) can be used as secondary authentication
|
||
factor for _weechat_ protocol, in addition to the password.
|
||
|
||
This is optional and increases the security level.
|
||
|
||
One-time passwords can be generated with applications, for example:
|
||
|
||
* FreeOTP:
|
||
https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp[Android],
|
||
https://itunes.apple.com/fr/app/freeotp-authenticator/id872559395[iOS]
|
||
(https://freeotp.github.io/[website])
|
||
* Google Authenticator:
|
||
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2[Android],
|
||
https://itunes.apple.com/fr/app/google-authenticator/id388497605[iOS]
|
||
|
||
The TOTP secret must be set in WeeChat and the application used to generate
|
||
one-time passwords.
|
||
|
||
It must be a string encoded in base32, with only letters and digits from 2 to 7,
|
||
for example:
|
||
|
||
----
|
||
/secure set relay_totp secretpasswordbase32
|
||
/set relay.network.totp_secret "${sec.data.relay_totp}"
|
||
----
|
||
|
||
[[relay_ssl]]
|
||
==== SSL
|
||
|
||
You can use SSL by creating a certificate and private key, and by using prefix
|
||
"ssl." in the name of protocol.
|
||
|
||
The default path to certificate/key is defined by option
|
||
<<option_relay.network.ssl_cert_key,relay.network.ssl_cert_key>>.
|
||
|
||
You can create a certificate and private key with following commands:
|
||
|
||
----
|
||
$ mkdir -p ~/.config/weechat/ssl
|
||
$ cd ~/.config/weechat/ssl
|
||
$ openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 365 -out relay.pem
|
||
----
|
||
|
||
[NOTE]
|
||
You must replace `~/.config/weechat` by the path to your WeeChat config directory
|
||
which can also be for example `~/.weechat`.
|
||
|
||
If WeeChat is already running, you can reload the certificate and private key
|
||
with command:
|
||
|
||
----
|
||
/relay sslcertkey
|
||
----
|
||
|
||
[[relay_irc_proxy]]
|
||
==== IRC proxy
|
||
|
||
The Relay plugin can act as an IRC proxy: it will simulate an IRC server, and
|
||
you can connect to WeeChat with any other IRC client (including WeeChat itself).
|
||
|
||
You can define one port by IRC server, or one generic port for all servers.
|
||
|
||
When using one port for all servers, the client must send the internal name of
|
||
server in the IRC "PASS" command, with this format (see example below):
|
||
|
||
----
|
||
PASS server:password
|
||
----
|
||
|
||
Example: IRC proxy with SSL for any server (client will choose):
|
||
|
||
----
|
||
/relay add ssl.irc 8000
|
||
----
|
||
|
||
Example: IRC proxy without SSL only for server "libera":
|
||
|
||
----
|
||
/relay add irc.libera 8000
|
||
----
|
||
|
||
Now you can connect on port 8000 with any IRC client using server password
|
||
"mypassword" (or "libera:mypassword" if no server was specified in the relay).
|
||
|
||
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}"
|
||
----
|
||
|
||
[[relay_weechat_protocol]]
|
||
==== WeeChat protocol
|
||
|
||
The Relay plugin can send data to remote interface using WeeChat protocol.
|
||
|
||
You can connect with a remote interface, see the list in <<relay_plugin>>.
|
||
|
||
[IMPORTANT]
|
||
WeeChat itself can NOT connect to another WeeChat with this protocol.
|
||
|
||
For example:
|
||
|
||
----
|
||
/relay add weechat 9000
|
||
----
|
||
|
||
Now you can connect on port 9000 with a remote interface using password
|
||
"mypassword".
|
||
|
||
[[relay_websocket]]
|
||
==== WebSocket
|
||
|
||
WebSocket protocol (https://tools.ietf.org/html/rfc6455[RFC 6455]) is supported
|
||
in Relay plugin for all protocols.
|
||
|
||
The WebSocket handshake is automatically detected and socket becomes ready for
|
||
WebSocket if required headers are found in handshake and if origin is allowed
|
||
(see option
|
||
<<option_relay.network.websocket_allowed_origins,relay.network.websocket_allowed_origins>>).
|
||
|
||
A WebSocket can be opened in a HTML5 with a single line of JavaScript:
|
||
|
||
[source,js]
|
||
----
|
||
websocket = new WebSocket("ws://server.com:9000/weechat");
|
||
----
|
||
|
||
The port (9000 in example) is the port defined in Relay plugin.
|
||
The URI must always end with "/weechat" (for _irc_ and _weechat_ protocols).
|
||
|
||
[[relay_unix_socket]]
|
||
==== UNIX domain sockets
|
||
|
||
Using the protocol option "unix" with the `/relay add` command, you can listen
|
||
using any protocol on a UNIX domain socket at a given path. For example:
|
||
|
||
----
|
||
/relay add unix.weechat ${weechat_runtime_dir}/relay_socket
|
||
----
|
||
|
||
This allows clients to connect using the weechat protocol to
|
||
_/run/user/1000/weechat/relay_socket_. This is particularly useful to allow
|
||
SSH forwarding for relay clients, when other ports cannot be opened.
|
||
|
||
Using OpenSSH:
|
||
|
||
----
|
||
$ ssh -L 9000:.weechat/relay_socket user@hostname
|
||
----
|
||
|
||
This redirects local relay clients connecting on port 9000 to the WeeChat
|
||
instance running on "hostname".
|
||
|
||
[[relay_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=relay_commands]
|
||
|
||
[[relay_options]]
|
||
==== Options
|
||
|
||
Sections in file _relay.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set relay.look.* | Look and feel.
|
||
| color | /set relay.color.* | Colors.
|
||
| network | /set relay.network.* | Network options.
|
||
| irc | /set relay.irc.* | Options specific to irc protocol (irc proxy).
|
||
| port | <<command_relay_relay,/relay add>> +
|
||
/set relay.port.* | Ports used for relay (irc and weechat protocols) (options can be added/removed in section).
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=relay_options]
|
||
|
||
[[scripts_plugins]]
|
||
=== Scripts
|
||
|
||
WeeChat provides 8 scripting plugins: Python, Perl, Ruby, Lua, Tcl, Guile
|
||
(scheme), JavaScript and PHP.
|
||
These plugins can load, execute and unload scripts for these languages.
|
||
|
||
Another plugin called "script" is a script manager and is used to load/unload
|
||
scripts of any language, and install/remove scripts of WeeChat scripts
|
||
repository, which are visible at this URL: https://weechat.org/scripts
|
||
|
||
For more information about how to write scripts, or WeeChat API for
|
||
scripts, please read the link:weechat_scripting.en.html[WeeChat scripting guide].
|
||
|
||
[[script_commands]]
|
||
==== Script commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=script_commands]
|
||
|
||
[[python_commands]]
|
||
==== Python commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=python_commands]
|
||
|
||
[[perl_commands]]
|
||
==== Perl commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=perl_commands]
|
||
|
||
[[ruby_commands]]
|
||
==== Ruby commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=ruby_commands]
|
||
|
||
[[lua_commands]]
|
||
==== Lua commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=lua_commands]
|
||
|
||
[[tcl_commands]]
|
||
==== Tcl commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=tcl_commands]
|
||
|
||
[[guile_commands]]
|
||
==== Guile commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=guile_commands]
|
||
|
||
[[javascript_commands]]
|
||
==== JavaScript commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=javascript_commands]
|
||
|
||
[[php_commands]]
|
||
==== PHP commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=php_commands]
|
||
|
||
[[script_options]]
|
||
==== Script options
|
||
|
||
Sections in file _script.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set script.look.* | Look and feel.
|
||
| color | /set script.color.* | Colors.
|
||
| scripts | /set script.scripts.* | Options for download of scripts.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=script_options]
|
||
|
||
[[python_options]]
|
||
==== Python options
|
||
|
||
Sections in file _python.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set python.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=python_options]
|
||
|
||
[[perl_options]]
|
||
==== Perl options
|
||
|
||
Sections in file _perl.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set perl.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=perl_options]
|
||
|
||
[[ruby_options]]
|
||
==== Ruby options
|
||
|
||
Sections in file _ruby.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set ruby.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=ruby_options]
|
||
|
||
[[lua_options]]
|
||
==== Lua options
|
||
|
||
Sections in file _lua.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set lua.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=lua_options]
|
||
|
||
[[tcl_options]]
|
||
==== Tcl options
|
||
|
||
Sections in file _tcl.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set tcl.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=tcl_options]
|
||
|
||
[[guile_options]]
|
||
==== Guile options
|
||
|
||
Sections in file _guile.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set guile.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=guile_options]
|
||
|
||
[[javascript_options]]
|
||
==== Javascript options
|
||
|
||
Sections in file _javascript.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set javascript.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=javascript_options]
|
||
|
||
[[php_options]]
|
||
==== PHP options
|
||
|
||
Sections in file _php.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set php.look.* | Look and feel.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=php_options]
|
||
|
||
[[spell_plugin]]
|
||
=== Spell
|
||
|
||
Spell plugin lets you check spelling in command line. It is possible to use
|
||
many languages by buffer.
|
||
|
||
Spell checking is disabled by default and can be toggled with key kbd:[Alt+s].
|
||
|
||
[[spell_dictionaries]]
|
||
==== Dictionaries
|
||
|
||
Before using spell checking, dictionaries must be defined, either globally or
|
||
specific to buffers.
|
||
|
||
Multiple dictionaries can be used at same time: WeeChat will check words in all
|
||
dictionaries.
|
||
|
||
For example to use English and French:
|
||
|
||
----
|
||
/set spell.check.default_dict "en,fr"
|
||
----
|
||
|
||
It is possible to use a different dictionary on a specific buffer, for example
|
||
on a German channel:
|
||
|
||
----
|
||
/spell setdict de
|
||
----
|
||
|
||
You can also specify a dictionary for a group of buffers, for example English
|
||
for all channels on libera IRC server:
|
||
|
||
----
|
||
/set spell.dict.irc.libera en
|
||
----
|
||
|
||
For more information, see the command <<command_spell_spell,/spell>>.
|
||
|
||
[[spell_speller_options]]
|
||
==== Speller options
|
||
|
||
Speller options can be defined by adding options in section "option" of aspell
|
||
configuration.
|
||
|
||
The option name is an aspell configuration option. List of options can be found
|
||
in a shell with following command:
|
||
|
||
----
|
||
$ aspell config
|
||
----
|
||
|
||
For example, to enable option "ignore-case":
|
||
|
||
----
|
||
/set spell.option.ignore-case "true"
|
||
----
|
||
|
||
[[spell_suggestions]]
|
||
==== Suggestions
|
||
|
||
Suggestions are displayed in a bar item called "spell_suggest". The number of
|
||
suggestions is set in option _spell.check.suggestions_.
|
||
|
||
To enable suggestions you must set option _spell.check.suggestions_ to an
|
||
integer ≥ 0 and add the bar item "spell_suggest" to a bar, like _status_.
|
||
|
||
Example of suggestions with English dictionary (`en`):
|
||
|
||
....
|
||
│[12:55] [6] [irc/libera] 3:#test(+n){4} [print,prone,prune] │
|
||
│[@Flashy] prinr █ │
|
||
└─────────────────────────────────────────────────────────────────────────────────┘
|
||
....
|
||
|
||
Example of suggestions with English and French dictionaries (`en,fr`):
|
||
|
||
....
|
||
│[12:55] [6] [irc/libera] 3:#test(+n){4} [print,prone,prune/prime,primer,primé] │
|
||
│[@Flashy] prinr █ │
|
||
└─────────────────────────────────────────────────────────────────────────────────┘
|
||
....
|
||
|
||
[[spell_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=spell_commands]
|
||
|
||
[[spell_options]]
|
||
==== Options
|
||
|
||
Sections in file _spell.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| color | /set spell.color.* | Colors.
|
||
| check | /set spell.check.* | Options to control spell checking.
|
||
| dict | <<command_spell_spell,/spell setdict>> +
|
||
/set spell.dict.* | Dictionaries used by buffer (options can be added/removed in section).
|
||
| look | /set spell.look.* | Look and feel.
|
||
| option | /set spell.option.* | <<spell_speller_options,Speller options>> (options can be added/removed in section).
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=spell_options]
|
||
|
||
[[trigger_plugin]]
|
||
=== Trigger
|
||
|
||
Trigger is the Swiss Army knife for WeeChat: it can hook many things (signal,
|
||
modifier, print, etc.), change the content of data, and execute one or more
|
||
commands. A condition can be used to prevent the trigger to run in some
|
||
circumstances.
|
||
|
||
Using triggers require you to know how the signals, modifiers, ... are working.
|
||
So you might consider reading the
|
||
link:weechat_plugin_api.en.html#hooks[WeeChat plugin API reference / Hooks].
|
||
|
||
[[trigger_default]]
|
||
==== Default triggers
|
||
|
||
WeeChat creates 5 triggers by default, which can be disabled, updated or
|
||
deleted:
|
||
|
||
* a _beep_ trigger for notifications
|
||
* four other triggers to hide passwords on screen
|
||
|
||
List of default triggers:
|
||
|
||
[width="100%",cols="5m,3,22",options="header"]
|
||
|===
|
||
| Name | Hook | Description
|
||
|
||
| beep | print |
|
||
Beep on highlight/private message.
|
||
|
||
| cmd_pass | modifier |
|
||
Hide password in commands:
|
||
`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 |
|
||
Hide password in command `pass:[/msg nickserv register]`.
|
||
|
||
| msg_auth | modifier |
|
||
Hide password in IRC auth message displayed (message received from server
|
||
after the user issued the command).
|
||
|
||
| server_pass | modifier |
|
||
Hide server password in commands `/server` and `/connect`.
|
||
|===
|
||
|
||
[[trigger_anatomy]]
|
||
==== Anatomy of a trigger
|
||
|
||
A trigger has the following options (names are
|
||
`trigger.trigger.<name>.<option>`):
|
||
|
||
[width="100%",cols="2m,3,10",options="header"]
|
||
|===
|
||
| Option | Values | Description
|
||
|
||
| enabled | `on`, `off` |
|
||
When option is `off`, the trigger is disabled and actions are not executed
|
||
any more.
|
||
|
||
| hook | `+signal+`, `+hsignal+`, `+modifier+`, `+line+`, `+print+`, `+command+`,
|
||
`+command_run+`, `+timer+`, `+config+`, `+focus+`, `+info+`, `+info_hashtable+` |
|
||
The hook used in trigger. For more information, see
|
||
link:weechat_plugin_api.en.html#hooks[WeeChat plugin API reference / Hooks].
|
||
|
||
| arguments | string |
|
||
The arguments for the hook, it depends on the hook type used.
|
||
|
||
| conditions | string |
|
||
Conditions to execute the trigger; they are evaluated (see command
|
||
<<command_weechat_eval,/eval>>).
|
||
|
||
| regex | string |
|
||
One or more POSIX extended regular expressions, to change data received in the
|
||
hook callback (and some stuff added by trigger plugin), see
|
||
<<trigger_regex,regular expression>>.
|
||
|
||
| command | string |
|
||
Command to execute (many commands can be separated by semicolons); it is
|
||
evaluated (see command <<command_weechat_eval,/eval>>).
|
||
|
||
| return_code | `+ok+`, `+ok_eat+`, `+error+` |
|
||
The return code of callback (default is `ok`, which should be used in almost
|
||
all triggers, the other values are rarely used).
|
||
|
||
| post_action | `none`, `disable`, `delete` |
|
||
Action to take on the trigger after execution (default is `none` which should
|
||
be used in almost all triggers, the other values are rarely used).
|
||
|===
|
||
|
||
For example, the default _beep_ trigger has following options:
|
||
|
||
----
|
||
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]]
|
||
==== Execution
|
||
|
||
When a trigger callback is called, following actions are executed, in this
|
||
order, if triggers are globally enabled and if the trigger itself is enabled:
|
||
|
||
. check trigger conditions: if false, exit
|
||
. replace text in trigger using regular expression(s)
|
||
. execute command(s)
|
||
. exit with a return code (except for hooks _modifier_, _line_, _focus_,
|
||
_info_ and _info_hashtable_)
|
||
. perform post action (if different from `none`).
|
||
|
||
[[trigger_hook_arguments]]
|
||
==== Hook arguments
|
||
|
||
The arguments depend on the hook used. They are separated by semicolons.
|
||
|
||
[width="100%",cols="2,6,7,2",options="header"]
|
||
|===
|
||
| Hook | Arguments | Examples | Documentation (API)
|
||
|
||
| signal |
|
||
1. signal name (priority allowed) (required) +
|
||
2. signal name (priority allowed) +
|
||
3. ... |
|
||
`+*,irc_in_privmsg+` +
|
||
`+*,irc_in_privmsg;*,irc_in_notice+` +
|
||
`+signal_sigwinch+` |
|
||
link:weechat_plugin_api.en.html#_hook_signal[hook_signal]
|
||
|
||
| hsignal |
|
||
1. signal name (priority allowed) (required) +
|
||
2. signal name (priority allowed) +
|
||
3. ... |
|
||
`+nicklist_nick_added+` |
|
||
link:weechat_plugin_api.en.html#_hook_hsignal[hook_hsignal]
|
||
|
||
| modifier |
|
||
1. modifier name (priority allowed) (required) +
|
||
2. modifier name (priority allowed) +
|
||
3. ... |
|
||
`+weechat_print+` +
|
||
`+5000\|input_text_display;5000\|history_add+` |
|
||
link:weechat_plugin_api.en.html#_hook_modifier[hook_modifier]
|
||
|
||
| line |
|
||
1. buffer type +
|
||
2. buffer name +
|
||
3. tags |
|
||
`+formatted+` +
|
||
`+free+` +
|
||
`+*;irc.libera.*+` +
|
||
`+*;irc.libera.#weechat+` +
|
||
`+formatted;irc.libera.#weechat;irc_notice+` |
|
||
link:weechat_plugin_api.en.html#_hook_line[hook_line]
|
||
|
||
| print |
|
||
1. buffer name +
|
||
2. tags +
|
||
3. message +
|
||
4. strip colors (0/1) |
|
||
`+irc.libera.*+` +
|
||
`+irc.libera.#weechat+` +
|
||
`+irc.libera.#weechat;irc_notice+` +
|
||
`+*;;;1+` |
|
||
link:weechat_plugin_api.en.html#_hook_print[hook_print]
|
||
|
||
| command |
|
||
1. command name (priority allowed) (required) +
|
||
2. description (evaluated, see command <<command_weechat_eval,/eval>>) +
|
||
3. arguments (evaluated, see command <<command_weechat_eval,/eval>>) +
|
||
4. description of arguments (evaluated, see command <<command_weechat_eval,/eval>>) +
|
||
5. completion (evaluated, see command <<command_weechat_eval,/eval>>) |
|
||
`+test+` +
|
||
`+5000\|test+` +
|
||
`+test;test command;arg1 arg2;arg1: description 1${\n}arg2: description 2+` |
|
||
link:weechat_plugin_api.en.html#_hook_command[hook_command]
|
||
|
||
| command_run |
|
||
1. command (priority allowed) (required) +
|
||
2. command (priority allowed) +
|
||
3. ... |
|
||
`+/cmd arguments+` |
|
||
link:weechat_plugin_api.en.html#_hook_command_run[hook_command_run]
|
||
|
||
| timer |
|
||
1. interval in milliseconds (required) +
|
||
2. alignment on second (default: 0) +
|
||
3. max number of calls (default: 0, which means "no end") |
|
||
`+3600000+` +
|
||
`+60000;0;5+` |
|
||
link:weechat_plugin_api.en.html#_hook_timer[hook_timer]
|
||
|
||
| config |
|
||
1. option name (priority allowed) (required) +
|
||
2. option name (priority allowed) +
|
||
3. ... |
|
||
`+weechat.look.*+` |
|
||
link:weechat_plugin_api.en.html#_hook_config[hook_config]
|
||
|
||
| focus |
|
||
1. area name (priority allowed) (required) +
|
||
2. area name (priority allowed) +
|
||
3. ... |
|
||
`+buffer_nicklist+` |
|
||
link:weechat_plugin_api.en.html#_hook_focus[hook_focus]
|
||
|
||
| info |
|
||
1. info name (priority allowed) (required) +
|
||
2. info name (priority allowed) +
|
||
3. ... |
|
||
`+my_info+` |
|
||
link:weechat_plugin_api.en.html#_hook_info[hook_info]
|
||
|
||
| info_hashtable |
|
||
1. info name (priority allowed) (required) +
|
||
2. info name (priority allowed) +
|
||
3. ... |
|
||
`+my_info+` |
|
||
link:weechat_plugin_api.en.html#_hook_info_hashtable[hook_info_hashtable]
|
||
|===
|
||
|
||
[[trigger_conditions]]
|
||
==== Conditions
|
||
|
||
The conditions are used to continue processing in trigger, or stop everything.
|
||
|
||
They are evaluated, and data available in callback can be used
|
||
(see <<trigger_callback_data,data in callbacks>> and command
|
||
<<command_weechat_eval,/eval>>).
|
||
|
||
Example: the default _beep_ trigger uses this condition to make a beep only on
|
||
highlight or private message:
|
||
|
||
----
|
||
${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})
|
||
----
|
||
|
||
[[trigger_regex]]
|
||
==== Regular expression
|
||
|
||
The regular expression is used to change variables in callback hashtable.
|
||
|
||
The format is: "/regex/replace" or "/regex/replace/var" (where _var_ is a
|
||
variable of the hashtable).
|
||
|
||
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"]
|
||
|===
|
||
| Hook | Default variable | Update allowed ^(1)^
|
||
| signal | tg_signal_data |
|
||
| hsignal | |
|
||
| modifier | tg_string | tg_string
|
||
| line | message | buffer, buffer_name, y, date, date_printed, str_time, tags, notify_level, highlight, prefix, message
|
||
| print | tg_message |
|
||
| command | tg_argv_eol1 |
|
||
| command_run | tg_command |
|
||
| timer | tg_remaining_calls |
|
||
| config | tg_value |
|
||
| focus | |
|
||
| info | tg_info | tg_info
|
||
| info_hashtable | | all variables received in hashtable
|
||
|===
|
||
|
||
[NOTE]
|
||
^(1)^ All variables can be updated in the trigger, but only these variables
|
||
have an effect on the value returned by the trigger and used by WeeChat.
|
||
|
||
Many regular expressions can be separated by a space, for example:
|
||
"/regex1/replace1/var1 /regex2/replace2/var2".
|
||
|
||
The char "/" can be replaced by any char (one or more identical chars).
|
||
|
||
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
|
||
* `+${re:+}+`: the last match (with highest number)
|
||
* `+${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 `+*+`:
|
||
|
||
----
|
||
/\*([^ ]+)\*/*${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 `+*+`):
|
||
|
||
----
|
||
==^(/(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.
|
||
|
||
[[trigger_command]]
|
||
==== Command
|
||
|
||
The command is executed after replacement of text with the regular expression.
|
||
Many commands can be separated by semicolons.
|
||
|
||
It is evaluated (see command <<command_weechat_eval,/eval>>) and text replaced
|
||
with a regular expression can be used in the command.
|
||
|
||
Example: default _beep_ trigger uses this command to make a beep (BEL):
|
||
|
||
----
|
||
/print -beep
|
||
----
|
||
|
||
[[trigger_callback_data]]
|
||
==== Data in callbacks
|
||
|
||
Data received in callbacks are stored in hashtables (pointers and strings) and
|
||
can be used in following options:
|
||
|
||
* _conditions_
|
||
* _regex_
|
||
* _command_
|
||
|
||
The content of hashtables depends on the hook type.
|
||
|
||
A convenient way to see data in a trigger is to open trigger monitor buffer,
|
||
using the command:
|
||
|
||
----
|
||
/trigger monitor
|
||
----
|
||
|
||
All callbacks set following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_trigger_name | string | Name of trigger.
|
||
|===
|
||
|
||
[[trigger_data_signal]]
|
||
===== Signal
|
||
|
||
The "signal" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_signal | string | Name of signal.
|
||
| tg_signal_data | string | Data sent with the signal.
|
||
|===
|
||
|
||
If the signal contains an IRC message, the message is parsed and following data
|
||
is added in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| irc_server | pointer | Pointer to IRC server (variables in hdata of type "irc_server" can be used, like `+${irc_server.name}+`).
|
||
| irc_channel | pointer | Pointer to IRC channel (variables in hdata of type "irc_channel" can be used, like `+${irc_channel.name}+`).
|
||
| server | string | Name of server (example: "libera").
|
||
| tags | string | Tags in message (rarely used).
|
||
| message_without_tags | string | Message without tags.
|
||
| nick | string | Nick.
|
||
| host | string | Hostname.
|
||
| command | string | IRC command (example: "PRIVMSG", "NOTICE", ...).
|
||
| channel | string | IRC channel.
|
||
| arguments | string | Arguments of command (includes value of _channel_).
|
||
| text | string | Text (for example user message).
|
||
| pos_command | string | The index of _command_ in message ("-1" if _command_ was not found).
|
||
| pos_arguments | string | The index of _arguments_ in message ("-1" if _arguments_ was not found).
|
||
| pos_channel | string | The index of _channel_ in message ("-1" if _channel_ was not found).
|
||
| pos_text | string | The index of _text_ in message ("-1" if _text_ was not found).
|
||
|===
|
||
|
||
When the data is a pointer, the variable `+tg_signal_data+` can be used like this
|
||
to read a hdata property (in this example this is a pointer on a buffer):
|
||
|
||
----
|
||
${buffer[${tg_signal_data}].full_name}
|
||
----
|
||
|
||
[[trigger_data_hsignal]]
|
||
===== Hsignal
|
||
|
||
The "hsignal" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_signal | string | Name of signal
|
||
|===
|
||
|
||
The hashtable contains all keys/values from hashtable received (type:
|
||
string/string).
|
||
|
||
[[trigger_data_modifier]]
|
||
===== Modifier
|
||
|
||
The "modifier" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_modifier | string | Name of modifier.
|
||
| tg_modifier_data | string | Data sent with modifier.
|
||
| tg_string | string | The string that can be modified.
|
||
| tg_string_nocolor | string | The string without color codes.
|
||
|===
|
||
|
||
For the _weechat_print_ modifier, variables using message tags are added (see
|
||
<<trigger_data_print,hook print>> below), and following variables:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| buffer | pointer | Buffer where message is printed.
|
||
| tg_plugin | string | Plugin of buffer where message is printed.
|
||
| tg_buffer | string | Full name of buffer where message is printed.
|
||
| tg_prefix | string | Prefix of message printed.
|
||
| tg_prefix_nocolor | string | Prefix without color codes.
|
||
| tg_message | string | Message printed.
|
||
| tg_message_nocolor | string | Message without color codes.
|
||
|===
|
||
|
||
If the modifier contains an IRC message, the message is parsed and extra data is
|
||
added in hashtable (see <<trigger_data_signal,hook signal>>).
|
||
|
||
[[trigger_data_line]]
|
||
===== Line
|
||
|
||
The "line" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| buffer | pointer | Buffer.
|
||
| buffer_name | string | Buffer name.
|
||
| buffer_type | string | Buffer type ("formatted" or "free").
|
||
| y | string | Line number for a buffer with free content (≥ 0), -1 for a buffer with formatted content.
|
||
| date | string | Line date (timestamp).
|
||
| date_printed | string | Date when line was displayed (timestamp).
|
||
| str_time | string | Date for display. It may contain color codes.
|
||
| tags | string | Tags of message (with comma added at beginning/end of string).
|
||
| displayed | string | "1" if displayed, "0" if line filtered.
|
||
| notify_level | string | "-1" = no notify, "0" = low level, "1" = message, "2" = private message, "3" = highlight
|
||
| highlight | string | "1" if highlight, otherwise "0".
|
||
| prefix | string | Prefix.
|
||
| tg_prefix_nocolor | string | Prefix without color codes.
|
||
| message | string | Message.
|
||
| tg_message_nocolor | string | Message without color codes.
|
||
|===
|
||
|
||
Variables set using tags in message:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_tags_count | string | Number of tags in message.
|
||
| tg_tag_nick | string | Nick (from tag "nick_xxx").
|
||
| tg_tag_prefix_nick | string | Color of nick in prefix (from tag "prefix_nick_ccc").
|
||
| tg_tag_host | string | User name and host, format: username@host (from tag "host_xxx").
|
||
| tg_tag_notify | string | Notify level (_none_, _message_, _private_, _highlight_).
|
||
| tg_notify | string | Notify level, if different from _none_.
|
||
| tg_msg_pv | string | "1" for a private message, otherwise "0".
|
||
|===
|
||
|
||
[[trigger_data_print]]
|
||
===== Print
|
||
|
||
The "print" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| buffer | pointer | Buffer.
|
||
| tg_date | string | Message date/time (format: `YYYY-MM-DD hh:mm:ss`).
|
||
| tg_displayed | string | "1" if displayed, "0" if line filtered.
|
||
| tg_highlight | string | "1" if highlight, otherwise "0".
|
||
| tg_prefix | string | Prefix.
|
||
| tg_prefix_nocolor | string | Prefix without color codes.
|
||
| tg_message | string | Message.
|
||
| tg_message_nocolor | string | Message without color codes.
|
||
|===
|
||
|
||
Variables set using tags in message:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_tags | string | Tags of message (with comma added at beginning/end of string).
|
||
| tg_tags_count | string | Number of tags in message.
|
||
| tg_tag_nick | string | Nick (from tag "nick_xxx").
|
||
| tg_tag_prefix_nick | string | Color of nick in prefix (from tag "prefix_nick_ccc").
|
||
| tg_tag_host | string | User name and host, format: username@host (from tag "host_xxx").
|
||
| tg_tag_notify | string | Notify level (_none_, _message_, _private_, _highlight_).
|
||
| tg_notify | string | Notify level, if different from _none_.
|
||
| tg_msg_pv | string | "1" for a private message, otherwise "0".
|
||
|===
|
||
|
||
[[trigger_data_command]]
|
||
===== Command
|
||
|
||
The "command" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| buffer | pointer | Buffer.
|
||
| tg_argc | string | The number of arguments (the command itself counts for one).
|
||
| tg_argvN | string | Argument #N (`+tg_argv0+` is the command itself, the others are command arguments).
|
||
| tg_argv_eolN | string | From argument #N until end of arguments (`+tg_argv_eol0+` includes the command itself).
|
||
| tg_shell_argc | string | The number of arguments with a split like the shell does (the command itself counts for one).
|
||
| 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
|
||
|
||
The "command_run" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| buffer | pointer | Buffer.
|
||
| tg_command | string | Command executed.
|
||
|===
|
||
|
||
[[trigger_data_timer]]
|
||
===== Timer
|
||
|
||
The "timer" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_remaining_calls | string | Number of remaining calls.
|
||
| tg_date | string | Current date/time (format: `YYYY-MM-DD hh:mm:ss`).
|
||
|===
|
||
|
||
[[trigger_data_config]]
|
||
===== Config
|
||
|
||
The "config" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_option | string | Option.
|
||
| tg_value | string | Value.
|
||
|===
|
||
|
||
[[trigger_data_focus]]
|
||
===== Focus
|
||
|
||
The "focus" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| window | pointer | Window.
|
||
| buffer | pointer | Buffer.
|
||
|===
|
||
|
||
The hashtable contains all keys/values from hashtable received (type:
|
||
string/string).
|
||
|
||
[[trigger_data_info]]
|
||
===== Info
|
||
|
||
The "info" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_info_name | string | Name of info.
|
||
| tg_arguments | string | Arguments.
|
||
| tg_info | string | Empty string (the info to return).
|
||
|===
|
||
|
||
[[trigger_data_info_hashtable]]
|
||
===== Info_hashtable
|
||
|
||
The "info_hashtable" callback sets following variables in hashtable:
|
||
|
||
[width="100%",cols="3m,2,14",options="header"]
|
||
|===
|
||
| Variable | Type | Description
|
||
| tg_info_name | string | Name of info.
|
||
|===
|
||
|
||
The hashtable contains all keys/values from hashtable received (type:
|
||
string/string).
|
||
|
||
[[trigger_examples]]
|
||
==== Examples
|
||
|
||
[[trigger_example_url_color]]
|
||
===== Color for URLs
|
||
|
||
Display URLs in green:
|
||
|
||
----
|
||
/trigger add url_color modifier weechat_print "${tg_notify}" "==[a-zA-Z0-9_]+://[^ ]+==${color:green}${re:0}${color:reset}=="
|
||
----
|
||
|
||
[NOTE]
|
||
The simple regex used to detect URL may not catch well all URLs, but it is
|
||
faster than a complex regex.
|
||
|
||
[[trigger_example_auto_pong]]
|
||
===== Auto pong on ping queries
|
||
|
||
When someone sends a "ping" in a private buffer, this trigger will auto-reply
|
||
with `pong`:
|
||
|
||
----
|
||
/trigger add pong print "" "${type} == private && ${tg_message} == ping" "" "pong"
|
||
----
|
||
|
||
[[trigger_example_responsive_layout]]
|
||
===== Responsive layout
|
||
|
||
Following triggers can be used to customize things displayed when the size of
|
||
terminal is changed:
|
||
|
||
----
|
||
/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"
|
||
----
|
||
|
||
The triggers catch the signal "signal_sigwinch", which is sent by WeeChat when
|
||
signal SIGWINCH is received (when terminal size is changed).
|
||
|
||
The condition with `+${info:term_width}+` checks the width of terminal (you can
|
||
also use `+${info:term_height}+` if needed).
|
||
|
||
In the example, when the terminal becomes small, the nicklist is hidden. And the
|
||
bar is restored when the width is greater or equal to 100 chars.
|
||
|
||
[[trigger_example_config_save]]
|
||
===== Automatic save of configuration
|
||
|
||
You can automatically save configuration files (`+*.conf+`), for example each
|
||
hour:
|
||
|
||
----
|
||
/trigger add cfgsave timer 3600000;0;0 "" "" "/mute /save"
|
||
----
|
||
|
||
Arguments for the timer hook are:
|
||
|
||
* _3600000_: 3600 * 1000 milliseconds, the callback is called each hour
|
||
* _0_: alignment on second (not aligned here)
|
||
* _0_: max number of calls (0 = no end for the timer)
|
||
|
||
The command `/mute /save` will silently save configuration files (nothing
|
||
displayed on core buffer).
|
||
|
||
[[trigger_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=trigger_commands]
|
||
|
||
[[trigger_options]]
|
||
==== Options
|
||
|
||
Sections in file _trigger.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set trigger.look.* | Look and feel.
|
||
| color | /set trigger.color.* | Colors.
|
||
| trigger | <<command_trigger_trigger,/trigger add>> +
|
||
<<command_trigger_trigger,/trigger set>> +
|
||
/set trigger.trigger.* | Trigger options.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=trigger_options]
|
||
|
||
[[xfer_plugin]]
|
||
=== Xfer
|
||
|
||
Xfer plugin brings:
|
||
|
||
* direct chat (between two hosts, without server): for example "DCC Chat" via
|
||
IRC plugin
|
||
* file transfer, for example "DCC" via IRC plugin
|
||
|
||
[[xfer_commands]]
|
||
==== Commands
|
||
|
||
include::includes/autogen_user_commands.en.adoc[tag=xfer_commands]
|
||
|
||
[[xfer_options]]
|
||
==== Options
|
||
|
||
Sections in file _xfer.conf_:
|
||
|
||
[width="100%",cols="3m,6m,16",options="header"]
|
||
|===
|
||
| Section | Control command | Description
|
||
| look | /set xfer.look.* | Look and feel.
|
||
| color | /set xfer.color.* | Colors.
|
||
| network | /set xfer.network.* | Network options.
|
||
| file | /set xfer.file.* | Options for files sent/received.
|
||
|===
|
||
|
||
Options:
|
||
|
||
include::includes/autogen_user_options.en.adoc[tag=xfer_options]
|
||
|
||
[[support]]
|
||
== Support
|
||
|
||
Before asking for support, be sure you've read documentation and FAQ provided
|
||
with WeeChat.
|
||
|
||
For support with IRC, on server _irc.libera.chat_:
|
||
|
||
* official channels (with developers):
|
||
** _#weechat_ (English)
|
||
** _#weechat-fr_ (French)
|
||
* non-official channels:
|
||
** _#weechat-de_ (German)
|
||
** _#weechat-fi_ (Finnish)
|
||
|
||
For other ways of support, see: https://weechat.org/about/support
|