summaryrefslogtreecommitdiff
path: root/doc/en/weechat_user.en.asciidoc
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2016-05-15 08:52:19 +0200
committerSébastien Helleu <flashcode@flashtux.org>2016-05-15 08:52:19 +0200
commitb7bdbbdc505879450494bc75b706e2997e25120f (patch)
treebe3b6716c2706a9505278d05ae9cfbec5ffbdac5 /doc/en/weechat_user.en.asciidoc
parent81fa60a23a29e3bb6525494587008d75eae44f28 (diff)
downloadweechat-b7bdbbdc505879450494bc75b706e2997e25120f.zip
core: rename .asciidoc files to .adoc (issue #722)
Diffstat (limited to 'doc/en/weechat_user.en.asciidoc')
-rw-r--r--doc/en/weechat_user.en.asciidoc3487
1 files changed, 0 insertions, 3487 deletions
diff --git a/doc/en/weechat_user.en.asciidoc b/doc/en/weechat_user.en.asciidoc
deleted file mode 100644
index 49e297aae..000000000
--- a/doc/en/weechat_user.en.asciidoc
+++ /dev/null
@@ -1,3487 +0,0 @@
-= 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: IRC and Jabber (with script jabber.py or bitlbee/minbif)
-* multi-servers connection (with SSL, IPv6, proxy)
-* small, fast and light
-* customizable and extensible with plugins and scripts
-* compliant with IRC RFCs http://tools.ietf.org/html/rfc1459[1459],
- http://tools.ietf.org/html/rfc2810[2810],
- http://tools.ietf.org/html/rfc2811[2811],
- http://tools.ietf.org/html/rfc2812[2812] and
- http://tools.ietf.org/html/rfc2813[2813]
-* IRC proxy and relay for remote interfaces
-* multi-platform (GNU/Linux, *BSD, MacOS X, 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 (or any Debian compatible distribution):
- `apt-get install weechat-curses`
-* 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 OS X, you can use http://brew.sh/[Homebrew]:
-`brew install weechat --with-python --with-perl`
-(for help: `brew info weechat`).
-
-[[dependencies]]
-==== Dependencies
-
-Following table shows list of packages that are required or optional to
-compile WeeChat.
-
-[width="100%",cols="5,^3,^3,.^13",options="header"]
-|===
-| Package ^(1)^ | Version | Required | Feature
-| cmake | | *yes* | Build (autotools still possible, but cmake is recommended)
-| pkg-config | | *yes* | Detect installed libraries
-| libncursesw5-dev ^(2)^ | | *yes* | Ncurses interface
-| libcurl4-gnutls-dev | | *yes* | URL transfer
-| zlib1g-dev | | *yes* | Compression of packets in relay plugin (weechat protocol), script plugin
-| libgcrypt20-dev | | *yes* | Secured data, IRC SASL authentication (DH-BLOWFISH/DH-AES), script plugin
-| libgnutls28-dev | ≥ 2.2.0 ^(3)^ | | SSL connection to IRC server, support of SSL in relay plugin, IRC SASL authentication (ECDSA-NIST256P-CHALLENGE)
-| gettext | | | Internationalization (translation of messages; base language is English)
-| ca-certificates | | | Certificates for SSL connections
-| libaspell-dev
- ∥ libenchant-dev | | | Aspell plugin
-| python-dev | ≥ 2.5 ^(4)^ | | Python plugin
-| libperl-dev | | | Perl plugin
-| ruby2.3-dev | ≥ 1.8 | | 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
-| asciidoctor | ≥ 1.5.4 | | Build man page and documentation
-| libcpputest-dev | ≥ 3.4 | | Run tests
-| C++ compiler | | | Run tests, javascript plugin
-|===
-
-[NOTE]
-^(1)^ Name comes from the Debian GNU/Linux distribution, versions and package
-names may be different in different distributions and versions. +
-^(2)^ WeeChat can compile with libncurses5-dev, but it is *NOT* recommended (you
-will have display bugs with wide chars). +
-^(3)^ Gnutls ≥ 3.0.21 is required for IRC SASL authentication with mechanism
-ECDSA-NIST256P-CHALLENGE. +
-^(4)^ Recommended Python version is 2.7 (all scripts run fine with version 2.7,
-but not with versions ≤ 2.6 or ≥ 3.0).
-
-[[compile_with_cmake]]
-==== Compile with cmake
-
-* Installation in system directories (requires _root_ privileges):
-
-----
-$ mkdir build
-$ cd build
-$ cmake ..
-$ make
-% make install (as root)
-----
-
-* Installation in custom directory:
-
-----
-$ 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 | ~/.weechat |
- The default home directory when running WeeChat.
-
-| CA_FILE | file | /etc/ssl/certs/ca-certificates.crt |
- File containing the certificate authorities.
- This is the default value of option
- <<option_weechat.network.gnutls_ca_file,weechat.network.gnutls_ca_file>>.
-
-| ENABLE_ALIAS | `ON`, `OFF` | ON |
- Compile <<alias_plugin,Alias plugin>>.
-
-| ENABLE_ASPELL | `ON`, `OFF` | ON |
- Compile <<aspell_plugin,Aspell plugin>>.
-
-| ENABLE_CHARSET | `ON`, `OFF` | ON |
- Compile <<charset_plugin,Charset plugin>>.
-
-| ENABLE_MAN | `ON`, `OFF` | OFF |
- Compile man page.
-
-| ENABLE_DOC | `ON`, `OFF` | OFF |
- Compile documentation (it takes a long time, recommended only if you build
- a binary package embedding documentation or if you can't browse documentation
- online).
-
-| ENABLE_ENCHANT | `ON`, `OFF` | OFF |
- Compile <<aspell_plugin,Aspell plugin>> with Enchant.
-
-| ENABLE_EXEC | `ON`, `OFF` | ON |
- Compile <<exec_plugin,Exec plugin>>.
-
-| ENABLE_FIFO | `ON`, `OFF` | ON |
- Compile <<fifo_plugin,Fifo plugin>>.
-
-| ENABLE_GNUTLS | `ON`, `OFF` | ON |
- Enable Gnutls (for SSL).
-
-| 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` | ON |
- 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_PYTHON | `ON`, `OFF` | ON |
- Compile <<scripts_plugins,Python plugin>>.
-
-| ENABLE_PYTHON3 | `ON`, `OFF` | OFF |
- Compile <<scripts_plugins,Python plugin>> using Python 3 (*NOT* recommended
- because many scripts are not compatible with 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).
-
-| 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.
-|===
-
-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
-% make install (as root)
-----
-
-* Installation in custom directory:
-
-----
-$ ./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
-----
-
-[[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 it with debug info (or install binary package with debug info)
-* enable _core_ files on your system
-* install gdb
-
-[[debug_info]]
-==== Debug info
-
-If you're compiling with cmake:
-
-----
-$ cmake .. -DCMAKE_BUILD_TYPE=Debug
-----
-
-If you're compiling with autotools, debug is default (`--with-debug=1`).
-
-If you installed a binary package, then install package _weechat-dbg_.
-
-[[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).
-This file is created in directory where you have run WeeChat (this is *not*
-directory where WeeChat is installed!).
-
-For example if _weechat_ is installed in _/usr/bin/_ and _core_ file is
-in _/home/xxx/_, then run gdb with this command:
-
-----
-gdb /usr/bin/weechat /home/xxx/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
-----
-
-[[usage]]
-== Usage
-
-[[running_weechat]]
-=== Running WeeChat
-
-Command line arguments:
-
-include::cmdline_options.en.asciidoc[]
-
-To start WeeChat, issue this command:
-
-----
-$ weechat
-----
-
-When you run WeeChat for the first time, a default configuration file is
-created, with default options. The default configuration file is:
-_~/.weechat/weechat.conf_.
-
-You can edit this file at your convenience to configure WeeChat or you can set
-parameters with `/set` command in WeeChat (see
-<<weechat_commands,WeeChat commands>>).
-
-[[screen_layout]]
-=== Screen layout
-
-Example of terminal with WeeChat:
-
-....
- ▼ bar "title"
-┌───────────────────────────────────────────────────────────────────────────┐
-│Welcome to #test, this is a test channel │
-│12:52:27 --> | Flashy (flashcode@weechat.org) has joined #test │@Flashy│
-│12:52:27 -- | Nicks #test: [@Flashy @joe +weebot peter] │@joe │
-│12:52:27 -- | Channel #test: 4 nicks (2 ops, 1 voice, 1 normal) │+weebot│
-│12:52:27 -- | Channel created on Tue Jan 27 06:30:17 2009 │peter │
-│12:54:15 peter | hey! │ │
-│12:55:01 @joe | hello │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│[12:55] [6] [irc/freenode] 3:#test(+n){4}* [H: 4:#abc(2,5), 6] │
-│[@Flashy(i)] hi peter!█ │
-└───────────────────────────────────────────────────────────────────────────┘
- ▲ bars "status" and "input" bar "nicklist" ▲
-....
-
-Screen is composed by 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:
-** _title_ bar, above chat area
-** _status_ bar, below chat area
-** _input_ bar, below status bar
-** _nicklist_ bar, on the right
-
-Bar _status_ has following default items:
-
-[width="100%",cols="^3,^4,10",options="header"]
-|===
-| Item | Example | Description
-| time | `[12:55]` | Time
-| buffer_last_number | `[6]` | Number of last buffer in list
-| buffer_plugin | `[irc/freenode]` | Plugin of current buffer (irc plugin can add IRC server name used by buffer)
-| buffer_number | `3` | Current buffer number
-| buffer_name | `#test` | Current buffer name
-| buffer_modes | `+n` | IRC channel modes
-| buffer_nicklist_count | `{4}` | Number of nicks 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: 4:#abc(2,5), 6]` | List of buffers with activity (unread messages) (in example, 2 highlights and 5 unread messages on _#abc_, one unread message on buffer #6)
-| 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,^4,10",options="header"]
-|===
-| Item | Example | Description
-| input_prompt | `[@Flashy(i)]` | Input prompt, for irc: nick and modes (mode "+i" means invisible on freenode)
-| 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
-|===
-
-Other items available (not used in bars by default):
-
-[width="100%",cols="^3,^4,10",options="header"]
-|===
-| Item | Example | Description
-| aspell_dict | `fr,en` | Spelling dictionaries used on current buffer
-| aspell_suggest | `print,prone,prune` | Spelling suggestions for word under cursor (if misspelled)
-| buffer_count | `10` | Total number of buffers opened
-| buffer_short_name | `#test` | Current buffer short name
-| irc_channel | `#test` | Current IRC channel name
-| irc_nick_modes | `@` | IRC modes for self nick
-| mouse_status | `M` | Mouse status (empty if mouse is disabled)
-| window_number | `2` | Current window number
-|===
-
-[[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
-
-A _window_ is a screen area which displays a buffer. It is possible to split
-your screen into many windows.
-
-Each window displays one buffer. A buffer can be hidden (not displayed by a
-window) or displayed by one or more windows.
-
-Example of horizontal split (`/window splith`):
-
-....
- ▼ window #2 (buffer #4)
-┌───────────────────────────────────────────────────────────────────────────┐
-│Welcome to #abc │
-│12:55:12 Max | hi │@Flashy│
-│12:55:20 @Flashy | hi Max! │Max │
-│12:55:32 Max | how are you? │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│[12:55] [6] [irc/freenode] 4:#abc(+n){2} │
-│[@Flashy] │
-│───────────────────────────────────────────────────────────────────────────│
-│Welcome to #test │
-│12:54:15 peter | hey! │@Flashy│
-│12:55:01 @joe | hello │@joe │
-│ │+weebot│
-│ │peter │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│[12:55] [6] [irc/freenode] 3:#test(+n){4} │
-│[@Flashy] hi peter!█ │
-└───────────────────────────────────────────────────────────────────────────┘
- ▲ window #1 (buffer #3)
-....
-
-Example of vertical split (`/window splitv`):
-
-....
-┌───────────────────────────────────────────────────────────────────────────┐
-│Welcome to #test │Welcome to #abc │
-│12:54:15 peter | hey! │@Flashy│12:55:12 Max | hi │@Flashy│
-│12:55:01 @joe | hello │@joe │12:55:20 @Flashy | hi Max! │Max │
-│ │+weebot│ │ │
-│ │peter │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│[12:55] [irc/oftc] 3:#test(+n){4} │[12:55] [irc/oftc] 4:#abc(+n){2} │
-│[@Flashy] hi peter!█ │[@Flashy] │
-└───────────────────────────────────────────────────────────────────────────┘
- ▲ window #1 (buffer #3) ▲ window #2 (buffer #4)
-....
-
-Example of vertical + horizontal splits:
-
-....
- ▼ window #3 (buffer #5)
-┌───────────────────────────────────────────────────────────────────────────┐
-│Welcome to #test │Welcome to #def │
-│12:54:15 peter | hey! │@Flashy│12:55:42 @Flashy | hi │@Flashy│
-│12:55:01 @joe | hello │@joe │12:55:56 alex | hi Flashy │alex │
-│ │+weebot│ │ │
-│ │peter │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │[12:55] [irc/oftc] 5:#def(+n){2} │
-│ │ │[@Flashy] │
-│ │ │─────────────────────────────────────│
-│ │ │Welcome to #abc │
-│ │ │12:55:12 Max | hi │@Flashy│
-│ │ │12:55:20 @Flashy | hi Max! │Max │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│ │ │ │ │
-│[12:55] [irc/oftc] 3:#test(+n){4} │[12:55] [irc/oftc] 4:#abc(+n){2} │
-│[@Flashy] hi peter!█ │[@Flashy] │
-└───────────────────────────────────────────────────────────────────────────┘
- ▲ window #1 (buffer #3) ▲ window #2 (buffer #4)
-....
-
-[[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. There is no root bar by default, but an example is the bar _buffers_
- created by script _buffers.pl_ (sidebar with list of buffers). +
- 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 four default bars (_title_, _status_,
- _input_, _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/freenode.#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/freenode] 3:#test(+n){24} │
-│[@carl] █ │
-└───────────────────────────────────────────────────────────────────────┘
- filling_left_right = vertical ▲
-
-┌───────────────────────────────────────────────────────────────────────┐
-│Welcome to #test, this is a test channel │
-│12:54:15 peter | hey! │@carl lee │
-│12:55:01 +Max | hello │@jessika louise │
-│ │@maddy mario │
-│ │%Diego mark │
-│ │%Melody peter │
-│ │+Max Rachel │
-│ │ celia richard│
-│ │ Eva sheryl │
-│ │ freddy Vince │
-│ │ Harold^ warren │
-│ │ henry4 zack │
-│ │ jimmy17 │
-│ │ jodie │
-│[12:55] [6] [irc/freenode] 3:#test(+n){24} │
-│[@carl] █ │
-└───────────────────────────────────────────────────────────────────────┘
- filling_left_right = columns_vertical ▲
-
-┌───────────────────────────────────────────────────────────────────────┐
-│@carl %Diego celia Harold^ jodie mario Rachel Vince │
-│@jessika %Melody Eva henry4 lee mark richard warren │
-│@maddy +Max freddy jimmy17 louise peter sheryl zack │
-│───────────────────────────────────────────────────────────────────────│
-│ │
- filling_top_bottom = columns_vertical ▲
-
-┌───────────────────────────────────────────────────────────────────────┐
-│@carl @jessika @maddy %Diego %Melody +Max celia Eva │
-│ freddy Harold^ henry4 jimmy17 jodie lee louise mario │
-│ mark peter Rachel richard sheryl Vince warren zack │
-│───────────────────────────────────────────────────────────────────────│
-│ │
- filling_top_bottom = columns_horizontal ▲
-....
-
-[[bar_conditions]]
-==== Conditions
-
-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 window is > 100 :
-
-----
-/set weechat.bar.nicklist.conditions "${nicklist} && ${window.win_width} > 100"
-----
-
-Same condition, but always display nicklist on buffer _&bitlbee_ (even if window
-is small):
-
-----
-/set weechat.bar.nicklist.conditions "${nicklist} && (${window.win_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 enabled bare display is kbd:[Alt+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:
-
-....
-┌───────────────────────────────────────────────────────────────────────────┐
-│Welcome to #test, this is a test channel │
-│12:52:27 --> | Flashy (flashcode@weechat.org) has joined #test │@Flashy│
-│12:52:27 -- | Nicks #test: [@Flashy @joe +weebot peter] │@joe │
-│12:52:27 -- | Channel #test: 4 nicks (2 ops, 1 voice, 1 normal) │+weebot│
-│12:52:27 -- | Channel created on Tue Jan 27 06:30:17 2009 │peter │
-│12:54:15 peter | hey! │ │
-│12:55:01 @joe | peter: hook_process: https://weechat.org/files/do │ │
-│ | c/devel/weechat_plugin_api.en.html#_weechat_hook_ │ │
-│ | process │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│ │ │
-│[12:55] [6] [irc/freenode] 3:#test(+n){4}* [H: 4:#abc(2,5), 6] │
-│[@Flashy(i)] hi peter!█ │
-└───────────────────────────────────────────────────────────────────────────┘
-....
-
-The screen will look like that in bare display:
-
-....
-┌───────────────────────────────────────────────────────────────────────────┐
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│ │
-│12:52 --> Flashy (flashcode@weechat.org) has joined #test │
-│12:52 -- Nicks #test: [@Flashy @joe +weebot peter] │
-│12:52 -- Channel #test: 4 nicks (2 ops, 1 voice, 1 normal) │
-│12:52 -- Channel created on Tue Jan 27 06:30:17 2009 │
-│12:54 <peter> hey! │
-│12:55 <@joe> peter: hook_process: https://weechat.org/files/doc/devel/weech│
-│at_plugin_api.en.html#_weechat_hook_process │
-└───────────────────────────────────────────────────────────────────────────┘
-....
-
-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
-
-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="50%",cols="3m,10",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 "freenode":
-
-----
-/set weechat.notify.irc.freenode message
-----
-
-Set notify level _highlight_ on channel "#weechat" only:
-
-----
-/set weechat.notify.irc.freenode.#weechat highlight
-----
-
-The notify level for a buffer can be set with command `/buffer`:
-
-----
-/buffer notify highlight
-----
-
-[[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 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 clipboard) | `/input delete_beginning_of_line`
-| kbd:[Ctrl+w] | Delete previous word of command line (deleted string is copied to clipboard) | `/input delete_previous_word`
-| kbd:[Ctrl+y] | Paste 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:[↑] | 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 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 aspell | `/mute aspell toggle`
-|===
-
-[[key_bindings_buffers_windows]]
-==== Keys for buffers / windows
-
-[width="100%",cols="^.^3,.^8,.^5",options="header"]
-|===
-| Key | Description | Command
-| kbd:[Ctrl+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:[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] | Scroll up one page in nicklist | `/bar scroll nicklist * -100%`
-| kbd:[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+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] | 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] | Toggle bare display on/off | `/window bare`
-| kbd:[Alt+m] | Toggle mouse | `/mouse toggle`
-| kbd:[Alt+n] | Scroll to next highlight | `/window scroll_next_highlight`
-| 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 on/off | `/filter toggle`
-| kbd:[Alt+-] | Toggle filters on/off 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 ^(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`
-| ◾◽◽ | - | 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}`
-| ⇑ | - | chat | Scroll up a few lines in buffer history | `/window scroll_up -window ${_window_number}`
-| ⇓ | - | chat | Scroll down a few lines in buffer history | `/window scroll_down -window ${_window_number}`
-| ⇑ | - | chat (script buffer) | Move 5 lines up in script buffer | `/script up 5`
-| ⇓ | - | chat (script buffer) | Move 5 lines down in script buffer | `/script down 5`
-| 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%`
-| ◾◽◽ | 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`
-| ⇑ | - | any bar | Scroll bar by -20% | `/bar scroll ${_bar_name} ${_window_number} -20%`
-| ⇓ | - | 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)^ "⇑" and "⇓" are wheel up and down.
-
-[[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 _WeeChat FAQ_.
-
-[[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="50%",cols="3m,4",options="header"]
-|===
-| Modifier | Description
-| ctrl | Key kbd:[Ctrl]
-| alt | Key kbd:[Alt]
-| ctrl-alt | Keys kbd:[Ctrl] + kbd:[Alt]
-|===
-
-List of buttons/wheel:
-
-[width="50%",cols="3m,4",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="50%",cols="3m,4",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="50%",cols="3m,4",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.
-
-[[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="60%",cols="3,5",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::autogen/user/irc_colors.asciidoc[]
-
-[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 everybody!" with "hello" in light blue bold and
-"everybody" in light red underlined:
-
-----
-^Cc12^Cbhello ^Cb^Cc04^C_everybody^C_^Cc!
-----
-
-[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 256 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="50%",cols="8,>2,>2",options="header"]
-|===
-| $TERM | Colors | Pairs
-| "rxvt-unicode", "xterm", ... | 88 | 256
-| "rxvt-256color", "xterm-256color", ... | 256 | 256
-| "screen" | 8 | 64
-| "screen-256color" | 256 | 256
-| "tmux" | 8 | 64
-| "tmux-256color" | 256 | 256
-|===
-
-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="50%",cols="^3m,8",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
-----
-
-[[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
-----
-
-When a passphrase is set, WeeChat will ask you to enter it on startup (but not
-on `/upgrade`).
-
-You can change this behavior and use a file with the passphrase (see option
-<<option_sec.crypt.passphrase_file,sec.crypt.passphrase_file>>).
-
-[[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
-freenode = "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 _freenode_
-IRC server:
-
-----
-/secure set freenode 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 _freenode_ password, for example with
-<<irc_sasl_authentication,SASL authentication>>:
-
-----
-/set irc.server.freenode.sasl_password "${sec.data.freenode}"
-----
-
-[[options_and_commands]]
-=== Options and commands
-
-[[sec_options]]
-==== Secured data options (sec.conf)
-
-Sections:
-
-[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::autogen/user/sec_options.asciidoc[]
-
-[[weechat_options]]
-==== WeeChat options (weechat.conf)
-
-Sections:
-
-[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
-| 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::autogen/user/weechat_options.asciidoc[]
-
-[[weechat_commands]]
-==== WeeChat commands
-
-include::autogen/user/weechat_commands.asciidoc[]
-
-[[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, all buffers created by this plugin are
-automatically closed.
-
-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
-| aspell | Spell checking for command line
-| charset | Charset decoding/encoding for buffers
-| exec | Execution of external commands in WeeChat
-| fifo | FIFO pipe used to remotely send commands to WeeChat
-| irc | IRC chat protocol
-| logger | Log buffers to files
-| relay | Relay data via network
-| script | Scripts 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
-| 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
-_WeeChat Plugin API Reference_ or _WeeChat Scripting Guide_.
-
-[[alias_plugin]]
-=== Alias plugin
-
-Alias plugin lets you create alias for commands (from WeeChat or other
-plugins).
-
-[[alias_commands]]
-==== Commands
-
-include::autogen/user/alias_commands.asciidoc[]
-
-[[aspell_plugin]]
-=== Aspell plugin
-
-Aspell plugin lets you check spelling in command line. It is possible to use
-many languages by buffer.
-
-[[aspell_options]]
-==== Options (aspell.conf)
-
-Sections:
-
-[width="100%",cols="3m,6m,16",options="header"]
-|===
-| Section | Control command | Description
-| color | /set aspell.color.* | Colors
-| check | /set aspell.check.* | Options to control spell checking
-| dict | <<command_aspell_aspell,/aspell setdict>> +
- /set aspell.dict.* | Dictionaries used by buffer (options can be added/removed in section)
-| option | /set aspell.option.* | <<aspell_speller_options,Speller options>> (options can be added/removed in section)
-|===
-
-Options:
-
-include::autogen/user/aspell_options.asciidoc[]
-
-[[aspell_commands]]
-==== Commands
-
-include::autogen/user/aspell_commands.asciidoc[]
-
-[[aspell_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 aspell.option.ignore-case "true"
-----
-
-[[aspell_suggestions]]
-==== Suggestions
-
-Suggestions are displayed in a bar item called "aspell_suggest". The number of
-suggestions is set in option _aspell.check.suggestions_.
-
-To enable suggestions you must set option _aspell.check.suggestions_ to an
-integer ≥ 0 and add the bar item "aspell_suggest" to a bar, like _status_.
-
-Example of suggestions with English dictionary (`en`):
-
-....
-│[12:55] [6] [irc/freenode] 3:#test(+n){4} [print,prone,prune] │
-│[@Flashy] prinr █ │
-└─────────────────────────────────────────────────────────────────────────────────┘
-....
-
-Example of suggestions with English and French dictionaries (`en,fr`):
-
-....
-│[12:55] [6] [irc/freenode] 3:#test(+n){4} [print,prone,prune/prime,primer,primé] │
-│[@Flashy] prinr █ │
-└─────────────────────────────────────────────────────────────────────────────────┘
-....
-
-[[charset_plugin]]
-=== Charset plugin
-
-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_options]]
-==== Options (charset.conf)
-
-Sections:
-
-[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::autogen/user/charset_options.asciidoc[]
-
-[[charset_commands]]
-==== Commands
-
-include::autogen/user/charset_commands.asciidoc[]
-
-[[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.freenode ISO-8859-15
-----
-
-To see all charsets used, use following command:
-
-----
-/set charset.*
-----
-
-[[charset_troubleshooting]]
-==== Troubleshooting
-
-For any problem with charsets, please look at _WeeChat FAQ_.
-
-[[exec_plugin]]
-=== Exec plugin
-
-The `/exec` command lets you execute external commands inside WeeChat and
-display the output locally, or send it to a buffer.
-
-[[exec_options]]
-==== Options (exec.conf)
-
-Sections:
-
-[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::autogen/user/exec_options.asciidoc[]
-
-[[exec_commands]]
-==== Commands
-
-include::autogen/user/exec_commands.asciidoc[]
-
-[[fifo_plugin]]
-=== Fifo plugin
-
-You can remote control WeeChat, by sending commands or text to a FIFO pipe (if
-option "plugins.var.fifo.fifo" is enabled, it is by default).
-
-The FIFO pipe is located in _~/.weechat/_ and is called _weechat_fifo_xxxx_
-(where _xxxx_ is the process ID (PID) of running WeeChat).
-
-Syntax for the FIFO pipe commands/text is one of following:
-
-....
- plugin.buffer *text or command here
- *text or command here
-....
-
-Some examples:
-
-* nick change on IRC server freenode to "newnick":
-
-----
-$ echo 'irc.server.freenode */nick newnick' >~/.weechat/weechat_fifo_12345
-----
-
-* display text on IRC #weechat channel:
-
-----
-$ echo 'irc.freenode.#weechat *hello!' >~/.weechat/weechat_fifo_12345
-----
-
-* display text on current buffer:
-
-----
-$ echo '*hello!' >~/.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' >~/.weechat/weechat_fifo_12345
-----
-
-You can write a script to send command to all running WeeChat at same time,
-for example:
-
-[source,shell]
-----
-#!/bin/sh
-if [ $# -eq 1 ]; then
- for fifo in ~/.weechat/weechat_fifo_*
- do
- printf '%b\n' "$1" >"$fifo"
- done
-fi
-----
-
-If the script is called "auto_weechat_command", you can run it with:
-
-----
-$ ./auto_weechat_command 'irc.freenode.#weechat *hello'
-----
-
-[[fifo_commands]]
-==== Commands
-
-include::autogen/user/fifo_commands.asciidoc[]
-
-[[irc_plugin]]
-=== IRC plugin
-
-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 _chat.freenode.net_ server,
-default port (6667), with nick _nono_:
-
-----
-$ weechat irc://nono@chat.freenode.net/#weechat,#toto
-----
-
-[[irc_options]]
-==== Options (irc.conf)
-
-Sections:
-
-[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::autogen/user/irc_options.asciidoc[]
-
-[[irc_commands]]
-==== Commands
-
-include::autogen/user/irc_commands.asciidoc[]
-
-[[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_file::
- path to file with certificate authorities (by default: "%h/ssl/CAs.pem")
-
-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 ~/.weechat/ssl
-$ wget -O ~/.weechat/ssl/CAs.pem http://www.spi-inc.org/ca/spi-cacert.crt
-----
-
-[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 ~/.weechat/ssl
-$ cd ~/.weechat/ssl
-$ openssl req -nodes -newkey rsa:2048 -keyout nick.pem -x509 -days 365 -out nick.pem
-----
-
-* In WeeChat, with "oftc" server already added:
-
-----
-/set irc.server.oftc.ssl_cert "%h/ssl/nick.pem"
-/connect oftc
-/msg nickserv cert add
-----
-
-For more information, look at http://www.oftc.net/oftc/NickServ/CertFP
-
-[[irc_sasl_authentication]]
-==== SASL authentication
-
-WeeChat supports SASL authentication, using different mechanisms:
-
-* _plain_: plain text password (default)
-* _ecdsa-nist256p-challenge_: challenge with public/private key
-* _external_: client side SSL cert
-* _dh-blowfish_: blowfish encrypted password (*insecure*, not recommended)
-* _dh-aes_: AES encrypted password (*insecure*, not recommended)
-
-[NOTE]
-The "gcrypt" library is required when compiling WeeChat in order to use
-"dh-blowfish" and "dh-aes" mechanisms (see <<dependencies,dependencies>>).
-
-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 >~/.weechat/ecdsa.pem
-----
-
-Get the public key (encoded as base64) with this command:
-
-----
-$ openssl ec -noout -text -conv_form compressed -in ~/.weechat/ecdsa.pem | grep '^pub:' -A 3 | tail -n 3 | tr -d ' \n:' | xxd -r -p | base64
-----
-
-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 freenode
-/msg nickserv identify your_password
-/msg nickserv set pubkey Av8k1FOGetUDq7sPMBfufSIZ5c2I/QYWgiwHtNXkVe/q
-----
-
-Configure the SASL options in the server:
-
-----
-/set irc.server.freenode.sasl_mechanism ecdsa-nist256p-challenge
-/set irc.server.freenode.sasl_username "your_nickname"
-/set irc.server.freenode.sasl_key "%h/ecdsa.pem"
-----
-
-Reconnect to the server:
-
-----
-/reconnect freenode
-----
-
-[[irc_tor_freenode]]
-==== Connect to Freenode with TOR/SASL
-
-In addition to SSL, Freenode 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, for example:
-
-----
-/server add freenode-tor p4fsi4ockecnea7l.onion
-----
-
-Set proxy for TOR:
-
-----
-/set irc.server.freenode-tor.proxy "tor"
-----
-
-Set SASL authentication:
-
-----
-/set irc.server.freenode-tor.sasl_username "your_nickname"
-/set irc.server.freenode-tor.sasl_password "your_password"
-----
-
-And finally, connection to server:
-
-----
-/connect freenode-tor
-----
-
-For more info about Freenode and TOR: http://freenode.net/irc_servers.shtml#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.freenode.#weechat irc_smart_filter *
-/filter add irc_smart_weechats irc.freenode.#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.freenode.version "WeeChat $version (for freenode)"
-----
-
-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="60%",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: `freenode.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 "freenode" server:
-
-----
-/set irc.msgbuffer.freenode.invite current
-----
-
-* display message "303" (ison) on WeeChat "core" buffer:
-
-----
-/set irc.msgbuffer.303 weechat
-----
-
-[[logger_plugin]]
-=== Logger plugin
-
-The Logger plugin lets you save content of buffers to files, with options
-about what and how it is saved.
-
-[[logger_options]]
-==== Options (logger.conf)
-
-Sections:
-
-[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::autogen/user/logger_options.asciidoc[]
-
-[[logger_commands]]
-==== Commands
-
-include::autogen/user/logger_commands.asciidoc[]
-
-[[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.freenode.#weechat 3
-----
-
-* set level 3 for freenode server buffer:
-
-----
-/set logger.level.irc.server.freenode 3
-----
-
-* set level 3 for all channels on server freenode:
-
-----
-/set logger.level.irc.freenode 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 local variables for current buffer:
-
-----
-/buffer localvar
-----
-
-For example, on buffer "irc.freenode.#weechat", WeeChat will search a mask with
-option name, in this order:
-
-----
-logger.mask.irc.freenode.#weechat
-logger.mask.irc.freenode
-logger.mask.irc
-logger.file.mask
-----
-
-That means you can have masks specific for some IRC servers
-("logger.mask.irc.freenode") 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:
-
-....
-~/.weechat/
- |--- logs/
- |--- 2010/
- |--- 11/
- | irc.server.freenode.weechatlog
- | irc.freenode.#weechat.weechatlog
- |--- 2010/
- |--- 12/
- | irc.server.freenode.weechatlog
- | irc.freenode.#weechat.weechatlog
-....
-
-[[logger_irc_files_by_server_channel]]
-===== IRC 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:
-
-....
-~/.weechat/
- |--- logs/
- |--- irc/
- |--- freenode/
- | freenode.weechatlog
- | #weechat.weechatlog
- | #mychan.weechatlog
- |--- oftc/
- | oftc.weechatlog
- | #chan1.weechatlog
- | #chan2.weechatlog
-....
-
-[[relay_plugin]]
-=== Relay plugin
-
-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 QWeeChat or weechat-android)
-
-[[relay_options]]
-==== Options (relay.conf)
-
-Sections:
-
-[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::autogen/user/relay_options.asciidoc[]
-
-[[relay_commands]]
-==== Commands
-
-include::autogen/user/relay_commands.asciidoc[]
-
-[[relay_password]]
-==== Password
-
-It is highly recommended to set a password for relay, with command:
-
-----
-/set relay.network.password "mypassword"
-----
-
-This password is used for _irc_ and _weechat_ protocols.
-
-[[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 file for certificate/key is _~/.weechat/ssl/relay.pem_
-(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 ~/.weechat/ssl
-$ cd ~/.weechat/ssl
-$ openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 365 -out relay.pem
-----
-
-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:
-
-----
-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 "freenode":
-
-----
-/relay add irc.freenode 8000
-----
-
-Now you can connect on port 8000 with any IRC client using server password
-"mypassword" (or "freenode:mypassword" if no server was specified in the relay).
-
-[[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 on download page:
-https://weechat.org/download
-
-[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 (http://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).
-
-[[scripts_plugins]]
-=== Scripts plugins
-
-WeeChat provides 7 scripting plugins: Python, Perl, Ruby, Lua, Tcl, Guile
-(scheme) and Javascript.
-These plugins can load, execute and unload scripts for these languages.
-
-Another plugin called "script" is a scripts 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 _WeeChat Scripting Guide_.
-
-[[script_options]]
-==== Script options (script.conf)
-
-Sections:
-
-[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::autogen/user/script_options.asciidoc[]
-
-[[script_commands]]
-==== Script commands
-
-include::autogen/user/script_commands.asciidoc[]
-
-[[python_commands]]
-==== Python commands
-
-include::autogen/user/python_commands.asciidoc[]
-
-[[perl_commands]]
-==== Perl commands
-
-include::autogen/user/perl_commands.asciidoc[]
-
-[[ruby_commands]]
-==== Ruby commands
-
-include::autogen/user/ruby_commands.asciidoc[]
-
-[[lua_commands]]
-==== Lua commands
-
-include::autogen/user/lua_commands.asciidoc[]
-
-[[tcl_commands]]
-==== Tcl commands
-
-include::autogen/user/tcl_commands.asciidoc[]
-
-[[guile_commands]]
-==== Guile commands
-
-include::autogen/user/guile_commands.asciidoc[]
-
-[[javascript_commands]]
-==== Javascript commands
-
-include::autogen/user/javascript_commands.asciidoc[]
-
-[[trigger_plugin]]
-=== Trigger plugin
-
-Trigger is the Swiss Army knife for WeeChat: it can hook many things (signal,
-modifier, print, ...), 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 _Hooks_ chapter in the
-_WeeChat Plugin API Reference_.
-
-[[trigger_options]]
-==== Options (trigger.conf)
-
-Sections:
-
-[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::autogen/user/trigger_options.asciidoc[]
-
-[[trigger_commands]]
-==== Commands
-
-include::autogen/user/trigger_commands.asciidoc[]
-
-[[trigger_anatomy]]
-==== Anatomy of a trigger
-
-A trigger has the following options (names are
-`trigger.trigger.<name>.<option>`):
-
-[width="100%",cols="2m,2,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`, `print`, `command`, `command_run`,
- `timer`, `config`, `focus` |
- The hook used in trigger. For more information, see
- _WeeChat Plugin API Reference_, chapter _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).
-|===
-
-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_highlight} || ${tg_msg_pv}"
-trigger.trigger.beep.regex = ""
-trigger.trigger.beep.command = "/print -beep"
-trigger.trigger.beep.return_code = ok
-----
-
-[[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_ and _focus_).
-
-[[trigger_hook_arguments]]
-==== Hook arguments
-
-The arguments depend on the hook used. They are separated by semicolons.
-
-[width="100%",cols="2,6,7",options="header"]
-|===
-| Hook | Arguments | Examples
-
-| signal |
- 1. signal name (priority allowed) (required) +
- 2. signal name (priority allowed) +
- 3. ... |
- `*,irc_in_privmsg` +
- `*,irc_in_privmsg;*,irc_in_notice` +
- `signal_sigwinch`
-
-| hsignal |
- 1. signal name (priority allowed) (required) +
- 2. signal name (priority allowed) +
- 3. ... |
- `nicklist_nick_added`
-
-| modifier |
- 1. modifier name (priority allowed) (required) +
- 2. modifier name (priority allowed) +
- 3. ... |
- `weechat_print` +
- `5000\|input_text_display;5000\|history_add`
-
-| print |
- 1. buffer name +
- 2. tags +
- 3. message +
- 4. strip colors (0/1) |
- `irc.freenode.*` +
- `irc.freenode.#weechat` +
- `irc.freenode.#weechat;irc_notice` +
- `*;;;1`
-
-| command |
- 1. command name (priority allowed) (required) +
- 2. description +
- 3. arguments +
- 4. description of arguments +
- 5. completion |
- `test` +
- `5000\|test`
-
-| command_run |
- 1. command (priority allowed) (required) +
- 2. command (priority allowed) +
- 3. ... |
- `/cmd arguments`
-
-| 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`
-
-| config |
- 1. option name (priority allowed) (required) +
- 2. option name (priority allowed) +
- 3. ... |
- `+weechat.look.*+`
-
-| focus |
- 1. area name (priority allowed) (required) +
- 2. area name (priority allowed) +
- 3. ... |
- `buffer_nicklist`
-|===
-
-[[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_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_ is not specified, the default variable is used, it depends on hook
-type:
-
-[width="50%",cols="4,5m",options="header"]
-|===
-| Hook | Default variable
-| signal | tg_signal_data
-| hsignal |
-| modifier | tg_string
-| print | tg_message
-| command | tg_argv_eol1
-| command_run | tg_command
-| timer | tg_remaining_calls
-| config | tg_value
-| focus |
-|===
-
-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 "*":
-
-----
-/\*(\S+)\*/*${color:bold}${re:1}${color:-bold}*/
-----
-
-Example: default trigger _server_pass_ uses this regular expression to hide
-password in commands `/server` and `/connect` (chars in passwords are replaced
-by `+*+`):
-
-----
-==^(/(server|connect) .*-(sasl_)?password=)(\S+)(.*)==${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 depend on the hook type.
-
-A convenient way to see data in a trigger is to open trigger monitor buffer,
-using the command:
-
-----
-/trigger monitor
-----
-
-[[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
-| server | string | Name of server (example: "freenode")
-| 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_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 (they are set in modifier _weechat_print_
-too):
-
-[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_argvN | string | Argument #N
-| tg_argv_eolN | string | From argument #N until end of 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_examples]]
-==== Examples
-
-[[trigger_example_url_color]]
-===== Color for URLs
-
-Display URLs in green:
-
-----
-/trigger add url_color modifier weechat_print "${tg_notify}" "==\S+://\S+==${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).
-
-[[xfer_plugin]]
-=== Xfer plugin
-
-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_options]]
-==== Options (xfer.conf)
-
-Sections:
-
-[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::autogen/user/xfer_options.asciidoc[]
-
-[[xfer_commands]]
-==== Commands
-
-include::autogen/user/xfer_commands.asciidoc[]
-
-[[support]]
-== Support
-
-Before asking for support, be sure you've read documentation and FAQ provided
-with WeeChat.
-
-For support with IRC, on server _chat.freenode.net_:
-
-* official channels (with developers):
-** _#weechat_ (English)
-** _#weechat-fr_ (French)
-* non-official channels:
-** _#weechat-de_ (German)
-
-For other ways of support, see: https://weechat.org/dev/support