doc: add trigger doc in user's guide

v2.8-utf8proc
Sebastien Helleu 2014-03-02 09:29:14 +01:00
parent cc5ab76186
commit 0329cb65f3
6 changed files with 3030 additions and 0 deletions

View File

@ -2916,6 +2916,509 @@ include::autogen/user/tcl_commands.txt[]
include::autogen/user/guile_commands.txt[]
// TRANSLATION MISSING
[[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 | Beschreibung
| look | /set trigger.look.* | Erscheinungsbild
| color | /set trigger.color.* | Farben
| trigger | <<command_trigger_trigger,/trigger add>> +
<<command_trigger_trigger,/trigger set>> +
/set trigger.trigger.* | Trigger options
|===
Options:
include::autogen/user/trigger_options.txt[]
[[trigger_commands]]
==== Commands
include::autogen/user/trigger_commands.txt[]
[[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:
. check if triggers are globally enabled: if not, exit
. check if trigger is enabled: if not, exit
. 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 |
| 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":
* `$0` to `$99`: `$0` is the whole match, `$1` to `$99` are groups captured
* `$+`: the last match (with highest number)
* `$.cN`: match "N" with all chars replaced by "c" (example: `$.*2` is the group
#2 with all chars replaced by `*`).
Example: use bold for words between "*":
----
/\*(\S+)\*/*${color:bold}$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+)(.*)==$1$.*4$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')
|===
[[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_notify | string | Notify level ('none', 'message', 'private', 'highlight')
| 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_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_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 Erweiterung

View File

@ -2857,6 +2857,508 @@ include::autogen/user/tcl_commands.txt[]
include::autogen/user/guile_commands.txt[]
[[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.txt[]
[[trigger_commands]]
==== Commands
include::autogen/user/trigger_commands.txt[]
[[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:
. check if triggers are globally enabled: if not, exit
. check if trigger is enabled: if not, exit
. 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 |
| 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":
* `$0` to `$99`: `$0` is the whole match, `$1` to `$99` are groups captured
* `$+`: the last match (with highest number)
* `$.cN`: match "N" with all chars replaced by "c" (example: `$.*2` is the group
#2 with all chars replaced by `*`).
Example: use bold for words between "*":
----
/\*(\S+)\*/*${color:bold}$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+)(.*)==$1$.*4$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')
|===
[[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_notify | string | Notify level ('none', 'message', 'private', 'highlight')
| 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_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_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

View File

@ -2956,6 +2956,522 @@ include::autogen/user/tcl_commands.txt[]
include::autogen/user/guile_commands.txt[]
[[trigger_plugin]]
=== Extension Trigger
Trigger est le couteau suisse de WeeChat : il peut accrocher différentes choses
(signal, modificateur, print, ...), changer le contenu des données, et exécuter
une ou plusieurs commandes. Une condition peut être utilisée pour empêcher le
trigger de s'exécuter dans certaines circonstances.
Utiliser les triggers nécessite de connaître le fonctionnement des signaux,
modificateurs, etc... Il peut être utile de lire le chapitre sur les 'Hooks'
dans la 'Référence API Extension WeeChat'.
[[trigger_options]]
==== Options (trigger.conf)
Sections:
[width="100%",cols="3m,6m,16",options="header"]
|===
| Section | Commande de contrôle | Description
| look | /set trigger.look.* | Aspect/présentation
| color | /set trigger.color.* | Couleurs
| trigger | <<command_trigger_trigger,/trigger add>> +
<<command_trigger_trigger,/trigger set>> +
/set trigger.trigger.* | Options des triggers
|===
Options:
include::autogen/user/trigger_options.txt[]
[[trigger_commands]]
==== Commandes
include::autogen/user/trigger_commands.txt[]
[[trigger_anatomy]]
==== Anatomie d'un trigger
Un trigger a les options suivantes (les noms sont
`trigger.trigger.<nom>.<option>`):
[width="100%",cols="2m,2,10",options="header"]
|===
| Option | Valeurs | Description
| enabled | `on`, `off` |
Lorsque l'option est `off`, le trigger est désactivé et les actions ne sont
plus exécutées.
| hook | `signal`, `hsignal`, `modifier`, `print`, `command`, `command_run`,
`timer`, `config`, `focus` |
Le "hook" utilisé dans le trigger. Pour plus d'information, voir le chapitre
'Hooks' dans la 'Référence API Extension WeeChat'.
| arguments | chaîne |
Les paramètres pour le "hook", ils dépendent du type de hook utilisé.
| conditions | chaîne |
Conditions pour exécuter le trigger : elles sont évaluées (voir la commande
<<command_weechat_eval,/eval>>).
| regex | chaîne |
Une ou plusieurs expressions régulières POSIX étendues, pour modifier les
données reçues dans le callback du "hook" (et d'autres choses ajoutées par
l'extension trigger), voir <<trigger_regex,expression régulière>>.
| command | chaîne |
Commande à exécuter (plusieurs commandes peuvent être séparées par des
points-virgules); elle est évaluée (voir la commande
<<command_weechat_eval,/eval>>).
| return_code | `ok`, `ok_eat`, `error` |
Le code retour du callback (`ok` par défaut, qui devrait être utilisé dans
quasiment tous les triggers, les autres valeurs sont rarement utilisées).
|===
Par exemple, le trigger 'beep' par défaut a les options suivantes :
----
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]]
==== Exécution
Lorsque le callback d'un trigger est appelé, les actions suivantes sont
exécutées, dans cet ordre :
. vérifier si les triggers sont globalement activés: si non, sortir
. vérifier si le trigger est activé: si non, sortir
. vérifier les conditions du trigger: si faux, sortir
. remplacer du texte dans le trigger en utilisant des expressions régulières
. exécuter la/les commande(s)
. sortir avec un code retour (sauf pour les "hooks" 'modifier' et 'focus').
[[trigger_hook_arguments]]
==== Paramètres du hook
Les paramètres dépendent du type de "hook" utilisé. Ils sont séparés par des
points-virgules.
[width="100%",cols="2,6,7",options="header"]
|===
| Hook | Paramètres | Exemples
| signal |
1. nom de signal (priorité autorisée) (obligatoire) +
2. nom de signal (priorité autorisée) +
3. ... |
`*,irc_in_privmsg` +
`*,irc_in_privmsg;*,irc_in_notice` +
`signal_sigwinch`
| hsignal |
1. nom de signal (priorité autorisée) (obligatoire) +
2. nom de signal (priorité autorisée) +
3. ... |
`nicklist_nick_added`
| modifier |
1. nom de modificateur (priorité autorisée) (obligatoire) +
2. nom de modificateur (priorité autorisée) +
3. ... |
`weechat_print` +
`5000\|input_text_display;5000\|history_add`
| print |
1. nom de tampon +
2. étiquettes +
3. message +
4. suppression des couleurs (0/1) |
`irc.freenode.*` +
`irc.freenode.#weechat` +
`irc.freenode.#weechat;irc_notice` +
`*;;;1`
| command |
1. nom de commande (priorité autorisée) (obligatoire) +
2. description +
3. paramètres +
4. description des paramètres +
5. complétion |
`test` +
`5000\|test`
| command_run |
1. commande (priorité autorisée) (obligatoire) +
2. commande (priorité autorisée) +
3. ... |
`/cmd paramètres`
| timer |
1. intervalle, en millisecondes (obligatoire) +
2. alignement sur la seconde (par défaut : 0) +
3. nombre maximum d'appels (par défaut : 0, qui signifie "sans fin") |
`3600000` +
`60000;0;5`
| config |
1. nom d'option (priorité autorisée) (obligatoire) +
2. nom d'option (priorité autorisée) +
3. ... |
`weechat.look.*`
| focus |
1. nom d'aire (priorité autorisée) (obligatoire) +
2. nom d'aire (priorité autorisée) +
3. ... |
`buffer_nicklist`
|===
[[trigger_conditions]]
==== Conditions
Les conditions sont utilisées pour continuer l'exécution du trigger, ou tout
stopper.
Elles sont évaluées, et les données disponibles dans le callback peuvent être
utilisées (voir <<trigger_callback_data,données dans les callbacks>> et la
commande <<command_weechat_eval,/eval>>).
Exemple : le trigger 'beep' par défaut utilise cette condition pour faire un
beep seulement sur un highlight ou un message privé :
----
${tg_highlight} || ${tg_msg_pv}
----
[[trigger_regex]]
==== Expression régulière
L'expression régulière est utilisée pour modifier des variables dans la table de
hachage du callback.
Le format est : "/regex/remplacement" ou "/regex/remplacement/var" (où 'var' est
une variable de la table de hachage). +
Si 'var' n'est pas spécifiée, la variable par défaut est utilisée, elle dépend
du type de hook :
[width="50%",cols="4,5m",options="header"]
|===
| Hook | Variable par défaut
| signal | tg_signal_data
| hsignal |
| modifier | tg_string
| print | tg_message
| command | tg_argv_eol1
| command_run | tg_command
| timer |
| config | tg_value
| focus |
|===
Plusieurs expressions régulières peuvent être séparées par un espace, par
exemple : "/regex1/remplacement1/var1 /regex2/remplacement2/var2".
Le caractère "/" peut être remplacé par tout caractère (un ou plusieurs
caractères identiques).
Les groupes de correspondance peuvent être utilisés dans le "remplacement" :
* `$0` à `$99` : `$0` est la correspondance complète, `$1` à `$99` sont les
groupes capturés
* `$+` : la dernière correspondance (avec le numéro le plus élevé)
* `$.cN` : la correspondance "N" avec tous les caractères remplacés par "c"
(exemple : `$.*2` est le groupe n°2 avec tous les caractères remplacés par
`*`).
Exemple : utiliser du gras pour les mots entre "*" :
----
/\*(\S+)\*/*${color:bold}$1${color:-bold}*/
----
Exemple : le trigger par défaut 'server_pass' utilise cette expression régulière
pour cacher le mot de passe dans les commandes `/server` et `/connect` (les
caractères des mots de passe sont remplacés par `*`) :
----
==^(/(server|connect) .*-(sasl_)?password=)(\S+)(.*)==$1$.*4$5
----
[NOTE]
Dans cet exemple, le séparateur utilisé est "==" car il y a "/" dans
l'expression régulière.
[[trigger_command]]
==== Commande
La commande est exécutée après le remplacement du texte avec l'expression
régulière.
Plusieurs commandes peuvent être séparées par des points-virgules.
Elle est évaluée (voir la commande <<command_weechat_eval,/eval>>) et le texte
remplacé avec l'expression régulière peut être utilisé dans la commande.
Exemple : le trigger par défaut 'beep' utilise cette commande pour produire un
beep (BEL) :
----
/print -beep
----
[[trigger_callback_data]]
==== Données dans les callbacks
Les données reçues dans les callbacks sont stockées dans des tables de hachage
(pointeurs et chaînes) et peuvent être utilisées dans les options suivantes :
* 'conditions'
* 'regex'
* 'command'
Le contenu des tables de hachage dépend du type de hook.
Une manière pratique de voir les données dans le trigger est d'ouvrir le tampon
moniteur des triggers :
----
/trigger monitor
----
[[trigger_data_signal]]
===== Signal
Le callback "signal" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_signal | chaîne | Nom du signal
| tg_signal_data | chaîne | Données envoyées avec le signal
|===
Si le signal contient un message IRC, le message est analysé et les données
suivantes sont ajoutées dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| server | chaîne | Nom du serveur (exemple : "freenode")
| tags | chaîne | Étiquettes dans le message (rarement utilisées)
| message_without_tags | chaîne | Message sans les étiquettes
| nick | chaîne | Pseudo
| host | chaîne | Nom d'hôte
| command | chaîne | Commane IRC (exemple : "PRIVMSG", "NOTICE", ...)
| channel | chaîne | Canal IRC
| arguments | chaîne | Paramètres de la commande (inclut la valeur de 'channel')
|===
[[trigger_data_hsignal]]
===== Hsignal
Le callback "hsignal" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_signal | chaîne | Nom du signal
|===
La table de hachage contient toutes les clés/valeurs de la table de hachage
reçue (type : chaîne/chaîne).
[[trigger_data_modifier]]
===== Modifier
Le callback "modifier" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_modifier | chaîne | Nom du modificateur
| tg_modifier_data | chaîne | Données envoyées avec le modificateur
| tg_string | chaîne | La chaîne qui peut être modifiée
| tg_string_nocolor | chaîne | La chaîne sans les codes couleur
|===
Pour le modificateur 'weechat_print', les variables en utilisant les étiquettes
du message sont ajoutées (voir le <<trigger_data_print,hook print>> ci-dessous),
ainsi que les variables suivantes :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon où le message est affiché
| tg_plugin | chaîne | Extension du tampon où le message est affiché
| tg_buffer | chaîne | Nom complet du tampon où le message est affiché
| tg_prefix | chaîne | Préfixe du message affiché
| tg_prefix_nocolor | chaîne | Préfixe sans les codes couleur
| tg_message | chaîne | Message affiché
| tg_message_nocolor | chaîne | Message sans les codes couleur
|===
Si le modificateur contient un message IRC, le message est analysé et des
données supplémentaires sont ajoutées dans la table de hachage (voir le
<<trigger_data_signal,"hook" signal>>).
[[trigger_data_print]]
===== Print
Le callback "print" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Buffer
| tg_date | chaîne | Date/heure du message (format : `YYYY-MM-DD hh:mm:ss`)
| tg_displayed | chaîne | "1" si affiché, "0" si ligne filtrée
| tg_highlight | chaîne | "1" si highlight, sinon "0"
| tg_prefix | chaîne | Préfixe
| tg_prefix_nocolor | chaîne | Préfixe sans les codes couleur
| tg_message | chaîne | Message
| tg_message_nocolor | chaîne | Message sans les codes couleur
|===
Variables définies avec les étiquettes du message (elles sont définies aussi
pour le modificateur 'weechat_print') :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_tags | chaîne | Étiquettes du message (avec une virgule en début/fin de chaîne)
| tg_tags_count | chaîne | Nombre d'étiquettes dans le message
| tg_tag_notify | chaîne | Niveau de notification ('none', 'message', 'private', 'highlight')
| tg_tag_nick | chaîne | Pseudo (depuis l'étiquette "nick_xxx")
| tg_tag_prefix_nick | chaîne | Couleur du pseudo dans le préfixe (depuis l'étiquette "prefix_nick_ccc")
| tg_msg_pv | chaîne | "1" pour un message privé, sinon "0"
|===
[[trigger_data_command]]
===== Command
Le callback "command" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon
| tg_argvN | chaîne | Paramètre n°N
| tg_argv_eolN | chaîne | Depuis le paramètre n°N jusqu'à la fin des paramètres
|===
[[trigger_data_command_run]]
===== Command_run
Le callback "command_run" définit les variables suivantes dans la table de
hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| buffer | pointeur | Tampon
| tg_command | chaîne | Commande exécutée
|===
[[trigger_data_timer]]
===== Timer
Le callback "timer" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_remaining_calls | chaîne | Nombre d'appels restants
| tg_date | chaîne | Date/heure courante (format : `YYYY-MM-DD hh:mm:ss`)
|===
[[trigger_data_config]]
===== Config
Le callback "config" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| tg_option | chaîne | Option
| tg_value | chaîne | Valeur
|===
[[trigger_data_focus]]
===== Focus
Le callback "focus" définit les variables suivantes dans la table de hachage :
[width="100%",cols="3m,2,14",options="header"]
|===
| Variable | Type | Description
| window | pointeur | Fenêtre
| buffer | pointeur | Tampon
|===
La table de hachage contient toutes les clés/valeurs de la table de hachage
reçue (type : chaîne/chaîne).
[[trigger_examples]]
==== Exemples
[[trigger_example_auto_pong]]
===== Pong auto sur les requêtes ping
Lorsque quelqu'un envoie un "ping" dans un tampon privé, le trigger répondra
automatiquement avec un `pong` :
----
/trigger add pong print "" "${type} == private && ${tg_message} == ping" "" "pong"
----
[[trigger_example_responsive_layout]]
===== Disposition réceptive
Les triggers suivants peuvent être utilisées pour personnaliser l'affichage
lorsque la taille du terminal change :
----
/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"
----
Les triggers attrapent le signal "signal_sigwinch", qui et envoyé par WeeChat
lorsque le signal SIGWINCH est reçu (lorsque la taille du terminal a changé).
La condition avec `${info:term_width}` vérifie la largeur du terminal (vous
pouvez aussi utiliser `${info:term_height}` si besoin).
Dans l'exemple, si le terminal devient petit, la liste de pseudos est cachée.
Et la barre est restaurée lorsque la largeur du terminal est supérieure ou
égale à 100 caractères.
[[trigger_example_config_save]]
===== Sauvegarde automatique de la configuration
Vous pouvez sauvegarder automatiquement les fichiers de configuration
(`*.conf`), par example chaque heure :
----
/trigger add cfgsave timer 3600000;0;0 "" "" "/mute /save"
----
Les paramètres pour le minuteur sont :
* '3600000' : 3600 * 1000 millisecondes, le callback est appelé toutes les
heures
* '0' : alignement sur la seconde (pas d'alignement ici)
* '0' : nombre maximum d'appels (0 = pas de fin pour le minuteur)
La commande `/mute /save` sauvegarde silencieusement les fichiers de
configuration (rien n'est affiché sur le tampon "core").
[[xfer_plugin]]
=== Extension Xfer

View File

@ -2989,6 +2989,509 @@ include::autogen/user/tcl_commands.txt[]
include::autogen/user/guile_commands.txt[]
// TRANSLATION MISSING
[[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.txt[]
[[trigger_commands]]
==== Commands
include::autogen/user/trigger_commands.txt[]
[[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:
. check if triggers are globally enabled: if not, exit
. check if trigger is enabled: if not, exit
. 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 |
| 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":
* `$0` to `$99`: `$0` is the whole match, `$1` to `$99` are groups captured
* `$+`: the last match (with highest number)
* `$.cN`: match "N" with all chars replaced by "c" (example: `$.*2` is the group
#2 with all chars replaced by `*`).
Example: use bold for words between "*":
----
/\*(\S+)\*/*${color:bold}$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+)(.*)==$1$.*4$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')
|===
[[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_notify | string | Notify level ('none', 'message', 'private', 'highlight')
| 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_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_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]]
=== Plugin Xfer

View File

@ -2860,6 +2860,509 @@ include::autogen/user/tcl_commands.txt[]
include::autogen/user/guile_commands.txt[]
// TRANSLATION MISSING
[[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"]
|===
| セクション | 操作コマンド | 説明
| look | /set trigger.look.* | 外観
| color | /set trigger.color.* | 色
| trigger | <<command_trigger_trigger,/trigger add>> +
<<command_trigger_trigger,/trigger set>> +
/set trigger.trigger.* | Trigger options
|===
Options:
include::autogen/user/trigger_options.txt[]
[[trigger_commands]]
==== Commands
include::autogen/user/trigger_commands.txt[]
[[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:
. check if triggers are globally enabled: if not, exit
. check if trigger is enabled: if not, exit
. 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 |
| 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":
* `$0` to `$99`: `$0` is the whole match, `$1` to `$99` are groups captured
* `$+`: the last match (with highest number)
* `$.cN`: match "N" with all chars replaced by "c" (example: `$.*2` is the group
#2 with all chars replaced by `*`).
Example: use bold for words between "*":
----
/\*(\S+)\*/*${color:bold}$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+)(.*)==$1$.*4$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')
|===
[[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_notify | string | Notify level ('none', 'message', 'private', 'highlight')
| 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_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_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 プラグイン

View File

@ -2881,6 +2881,509 @@ include::autogen/user/tcl_commands.txt[]
include::autogen/user/guile_commands.txt[]
// TRANSLATION MISSING
[[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"]
|===
| Sekcja | Komenda | Opis
| look | /set trigger.look.* | Wygląd
| color | /set trigger.color.* | Kolory
| trigger | <<command_trigger_trigger,/trigger add>> +
<<command_trigger_trigger,/trigger set>> +
/set trigger.trigger.* | Trigger options
|===
Options:
include::autogen/user/trigger_options.txt[]
[[trigger_commands]]
==== Commands
include::autogen/user/trigger_commands.txt[]
[[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:
. check if triggers are globally enabled: if not, exit
. check if trigger is enabled: if not, exit
. 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 |
| 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":
* `$0` to `$99`: `$0` is the whole match, `$1` to `$99` are groups captured
* `$+`: the last match (with highest number)
* `$.cN`: match "N" with all chars replaced by "c" (example: `$.*2` is the group
#2 with all chars replaced by `*`).
Example: use bold for words between "*":
----
/\*(\S+)\*/*${color:bold}$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+)(.*)==$1$.*4$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')
|===
[[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_notify | string | Notify level ('none', 'message', 'private', 'highlight')
| 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_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_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]]
=== Wtyczka xfer