// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2021-2025 Иван Пешић <ivan.pesic@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later

= WeeChat корисничко упутство
:author: Sébastien Helleu
:email: flashcode@flashtux.org
:lang: sr
include::includes/attributes-sr.adoc[]

Ово упутство описује WeeChat чет клијент и део је програма WeeChat.

Последња верзија овог документа се налази на
https://weechat.org/doc/[овој страници ^↗^^].

[[introduction]]
== Увод

WeeChat (Wee Enhanced Environment for Chat) је бесплатни чет клијент, једноставан и брз, дизајниран за многе оперативне системе.

[[features]]
=== Могућности

Основне могућности програма су:

* подржавање разне протоколе (углавном IRC)
* разни начини повезивања са сервером (преко TLS, IPv6, прокси)
* мали је, брз и не оптерећује систем
* прилагођавање и проширивање помоћу додатака и скрипти
* сагласност са IRC RFC документима
  https://datatracker.ietf.org/doc/html/rfc1459[1459 ^↗^^],
  https://datatracker.ietf.org/doc/html/rfc2810[2810 ^↗^^],
  https://datatracker.ietf.org/doc/html/rfc2811[2811 ^↗^^],
  https://datatracker.ietf.org/doc/html/rfc2812[2812 ^↗^^],
  https://datatracker.ietf.org/doc/html/rfc2813[2813 ^↗^^] и
  https://datatracker.ietf.org/doc/html/rfc7194[7194 ^↗^^],
* IRC прокси и релеј за WeeChat и удаљене интерфејсе
* подржавање различитих платформи (GNU/Linux, *BSD, macOS, Windows и остале)
* 100% GPL, слободан софтвер

Листа свих могућности може да се пронађе на
https://weechat.org/about/features/[овој страници ^↗^^].

[[prerequisites]]
=== Потребно је да имате

Да бисте инсталирали програм WeeChat, потребно је да поседујете:

* инсталиран GNU/Linux систем (са алатима компајлера за пакет изворних фајлова), или компатибилни оперативни систем
* _root_ привилегије (да се програм WeeChat инсталира у системски директоријум)
* неке библиотеке (погледајте <<dependencies,зависности>>)

[[install]]
== Инсталација

[[binary_packages]]
=== Бинарни пакети

Бинарни пакети су доступни за многе дистрибуције, укључујући:

* Arch Linux: `pacman -S weechat`
* Cygwin (Windows): изаберите WeeChat пакете у setup.exe
* Debian/Ubuntu (или било која Debian компатибилна дистрибуција): `apt-get install weechat-curses weechat-plugins` +
За најновије верзије и ноћне изградње:
  https://weechat.org/download/debian/[Debian репозиторијуми ^↗^^]
* Fedora Core: `dnf install weechat`
* FreeBSD: `pkg install weechat`
* Gentoo: `emerge weechat`
* Mandriva/RedHat (или било која RPM компатибилна дистрибуција): `rpm -i /путања//до/weechat-x.y.z-1.i386.rpm`
* openSUSE: `zypper in weechat`
* Sourcemage: `cast weechat`
* macOS (са https://brew.sh/[Homebrew ^↗^^]): `brew install weechat`
  (за помоћ: `brew info weechat`)

Још неки пакети вам могу бити од користи, као што је weechat-plugins.

За остале дистрибуције, молимо вас да погледајте своје упутство у вези начина за инсталирање.

[[containers]]
=== Контејнери

Можете да изградите контејнере са WeeChat или да их инсталирате директно са
https://hub.docker.com/r/weechat/weechat[Docker Hub ^↗^^]. +
За више информација, погледајте README фајл у
https://github.com/weechat/weechat-container[weechat-container ^↗^^]
репозиторијуму.

[[source_package]]
=== Пакет са изворним кодом

WeeChat мора да се изгради са CMake.

[NOTE]
На macOS можете да употребите https://brew.sh/[Homebrew ^↗^^]: `brew install --build-from-source weechat`.

[[dependencies]]
==== Зависности

Следећа табела приказује листу пакета који су *неопходни* да се изгради
програм WeeChat:

[width="100%", cols="5,^3,.^15", options="header"]
|===
| Пакет ^(1)^ | Верзија | Могућности

| C компајлер (gcc / clang) |
| Превођење C изворних фајлова.

| cmake | ≥ 3.0
| Изградњу.

| pkgconf / pkg-config |
| Детекција инсталираних библиотека.

| libncurses-dev |
| Ncurses интерфејс.

| libcurl4-gnutls-dev |
| URL пренос.

| libgcrypt20-dev |
| Обезбеђени подаци, IRC SASL аутентификација.

| libgnutls28-dev | ≥ 2.2.0 ^(2)^
| IRC додатак: подршка за TLS везе, IRC SASL аутентификацију (ECDSA-NIST256P-CHALLENGE). +
  Relay додатак: подршка за TLS везе.

| zlib1g-dev |
| Logger додатак: компресија ротирајућих лог фајлова (gzip). +
  Релеј додатак: компресија порука (WeeChat -> клијент) са https://zlib.net/[zlib ^↗^^]
  (api и weechat протоколи). +
  Script додатак: читање индекс фајла репозиторијума (gzip).
|===

[NOTE]
^(1)^ Име долази из Debian GNU/Linux Bookworm дистрибуције, верзија и
име могу да буду другачији у осталим дистрибуцијама. +
^(2)^ GnuTLS ≥ 3.0.21 је неопходан за IRC SASL аутентификацију механизмом ECDSA-NIST256P-CHALLENGE.

Следећа табела приказује листу пакета који нису обавезни за компајлирање програма WeeChat:

[width="100%", cols="5,^3,.^15", options="header"]
|===
| Пакет ^(1)^ | Верзија | Могућности

| {cpp} компајлер (pass:[g++ / clang++]) |
| Изградња и покретање тестова, JavaScript додатак.

| gettext |
| Интернационализација (превод порука; основни језик је енглески).

| ca-certificates |
| Сертификати за TLS везе.

| libcjson-dev |
| Relay додатак: протокол „api” (HTTP REST API).

| libzstd-dev | ≥ 0.8.1
| Logger додатак: компресија ротирајућих лог фајлова (zstandard). +
  Релеј додатак: компресија порука (WeeChat -> клијент) са https://facebook.github.io/zstd/[Zstandard ^↗^^]
  (api и weechat протоколи).

| libaspell-dev / libenchant-dev |
| Spell додатак.

| python3-dev | ≥ 3.0
| Python додатак.

| libperl-dev |
| Perl додатак.

| ruby3.1, ruby3.1-dev | ≥ 1.9.1
| Ruby додатак.

| liblua5.4-dev |
| Lua додатак.

| tcl-dev | ≥ 8.5
| Tcl додатак.

| guile-3.0-dev | ≥ 2.0
| Guile (scheme) додатак.

| libv8-dev | ≤ 3.24.3
| JavaScript додатак.

| php-dev | ≥ 7.0
| PHP додатак.

| libphp-embed | ≥ 7.0
| PHP додатак.

| libxml2-dev |
| PHP додатак.

| libargon2-dev |
| PHP додатак (ако је PHP ≥ 7.2).

| libsodium-dev |
| PHP додатак (ако је PHP ≥ 7.2).

| asciidoctor | ≥ 1.5.4
| Изградња man странице и документације.

| python3-pygments, ruby-pygments.rb |
| Документација изградње.

| libcpputest-dev | ≥ 3.4
| Изградња и покретање тестова.
|===

[NOTE]
^(1)^ Име долази из Debian GNU/Linux Bookworm дистрибуције, верзија и
име могу да буду другачији у осталим дистрибуцијама.

Ако користите дистрибуцију базирану на Debian/Ubuntu и ако имате неке „deb-src” изворне ставке у фајлу _/etc/apt/sources.list_, можете инсталирати све зависности командом:

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

[[build]]
==== Изградња

* Инсталација у системске директоријуме (неопходне су _root_ привилегије):

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

* Инсталација у директоријум по жељи (на пример, у ваш почетни):

[source,shell]
----
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/путања/до/директоријума
make
make install
----

Можете да користите опције за CMake, у формату: `-DОПЦИЈА=ВРЕДНОСТ`.

Листа доступних опција:

[width="100%", cols="3m,3,3m,10", options="header"]
|===
| Опција | Вредности | Подразумевана вредност | Опис

| CMAKE_BUILD_TYPE | `Debug`, `Release`, `RelWithDebInfo`, `MinSizeRel` |
| Тип изградње: `Debug` (или `RelWithDebInfo`) се препоручује ако покрећете
  развојну верзију програма WeeChat.

| CMAKE_INSTALL_PREFIX | директоријум | /usr/local
| Директоријум у који ће се инсталирати програм WeeChat.

| WEECHAT_HOME | директоријум | (празан стринг)
| Подразумевани почетни директоријум када се извршава програм WeeChat. +
  Са празном вредности (подразумевано), подразумевано се користе XDG директоријуми.
  Ако није празна, за све фајлове се користи један директоријум.
  Вредност такође може да буде и 4 директоријума раздвојена са две тачке, у следећем редоследу:
  config, data, cache, runtime.

| ENABLE_ALIAS | `ON`, `OFF` | ON
| Компајлира <<command_aliases,Alias додатак>>.

| ENABLE_BUFLIST | `ON`, `OFF` | ON
| Компајлира <<buflist,Buflist додатак>>.

| ENABLE_CHARSET | `ON`, `OFF` | ON
| Компајлира <<charset,Charset додатак>>.

| ENABLE_CJSON | `ON`, `OFF` | ON
| Подршка за JSON са https://github.com/DaveGamble/cJSON[cJSON ^↗^^] библиотеком.

| ENABLE_MAN | `ON`, `OFF` | OFF
| Изграђује man страницу.

| ENABLE_DOC | `ON`, `OFF` | OFF
| Изграђује HTML документацију.

| ENABLE_DOC_INCOMPLETE | `ON`, `OFF` | OFF
| Форсира изградњу документације чак и ако неки додаци нису компајлирани
  (не препоручује се: документација неће бити комплетна).

| ENABLE_ENCHANT | `ON`, `OFF` | OFF
| Компајлира <<spell_checking,Spell додатак>> са Enchant.

| ENABLE_EXEC | `ON`, `OFF` | ON
| Компајлира <<external_commands,Exec додатак>>.

| ENABLE_FIFO | `ON`, `OFF` | ON
| Компајлира <<fifo_pipe,Fifo додатак>>.

| ENABLE_FSET | `ON`, `OFF` | ON
| Компајлира <<fset,Fset додатак>>.

| ENABLE_GUILE | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,Guile додатак>> (Scheme).

| ENABLE_HEADLESS | `ON`, `OFF` | ON
| Компајлира извршни фајл без корисничког интерфејса.

| ENABLE_IRC | `ON`, `OFF` | ON
| Компајлира <<irc,IRC додатак>>.

| ENABLE_JAVASCRIPT | `ON`, `OFF` | OFF
| Компајлира <<scripting_plugins,JavaScript додатак>>.

| ENABLE_LARGEFILE | `ON`, `OFF` | ON
| Подршка за велике фајлове.

| ENABLE_LOGGER | `ON`, `OFF` | ON
| Компајлира <<buffer_logging,Logger додатак>>.

| ENABLE_LUA | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,Lua додатак>>.

| ENABLE_NCURSES | `ON`, `OFF` | ON
| Компајлира Ncurses интерфејс.

| ENABLE_NLS | `ON`, `OFF` | ON
| Укључује NLS (преводе).

| ENABLE_PERL | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,Perl додатак>>.

| ENABLE_PHP | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,PHP додатак>>.

| ENABLE_PYTHON | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,Python додатак>>.

| ENABLE_RELAY | `ON`, `OFF` | ON
| Компајлира <<relay,Relay додатак>>.

| ENABLE_RUBY | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,Ruby додатак>>.

| ENABLE_SCRIPT | `ON`, `OFF` | ON
| Компајлира <<script_manager,Script додатак>>.

| ENABLE_SCRIPTS | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,script додатке>> (Python, Perl, Ruby, Lua, Tcl,
  Guile, PHP).

| ENABLE_SPELL | `ON`, `OFF` | ON
| Компајлира <<spell_checking,Spell додатак>>.

| ENABLE_TCL | `ON`, `OFF` | ON
| Компајлира <<scripting_plugins,Tcl додатак>>.

| ENABLE_TRIGGER | `ON`, `OFF` | ON
| Компајлира <<trigger,Trigger додатак>>.

| ENABLE_TYPING | `ON`, `OFF` | ON
| Компајлира <<typing_notifications,Typing додатак>>.

| ENABLE_XFER | `ON`, `OFF` | ON
| Компајлира <<xfer,Xfer додатак>>.

| ENABLE_ZSTD | `ON`, `OFF` | ON
| Укључује https://facebook.github.io/zstd/[Zstandard ^↗^^] компресију.

| ENABLE_TESTS | `ON`, `OFF` | OFF
| Компајлира тестове.

| ENABLE_CODE_COVERAGE | `ON`, `OFF` | OFF
| Компајлира са опцијама за покривеност кода. +
  Ова опција би требало да се се користи само за тестирање, да се измери покривеност теста.
|===

Остале команде могу да се прикажу следећом командом:

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

или са Curses интерфејсом:

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

[[tests]]
==== Тестови

За компајлирање тестова су *неопходни* следећи пакети:

* libcpputest-dev
* C++ компајлер

Када се компајлира програм WeeChat, тестови морају да се укључе:

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

Након компајлирања могу да се покрену из директоријума у који је изграђен програм:

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

[[git_sources]]
=== Git извори

Упозорење: Git извори су за напредне кориснике: можда се неће компајлирати или програм неће бити стабилан. Упозорили смо вас!

Да бисте преузели Git изворе, извршите следећу команду:

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

Затим следите инструкције за <<source_package,пакет са изворима>>).

[[report_crashes]]
=== Извештавање о рушењу програма

Ако вам се програм руши, или ако желите да известите о евентуалном будућем краху програма WeeChat, потребно је да:

* Програм компајлирате са:
** дибаг инфо (или да инсталирате бинарни пакет са дибаг инфо),
** чистач адресе (није обавезан).
* Укључите _core_ фајлове на свом систему.
* Инсталирате gdb.

[[debug_build]]
==== Дибаг изградња

Ако компајлирате са CMake:

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

[[address_sanitizer]]
==== Чистач адресе

Можете и да укључите чистач адресе, помоћу кога се програм WeeChat тренутно руши чим дође до неког проблема:

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

[CAUTION]
Чистач адресе би требало да укључите само ако покушавате да откријете узрок краха, то се не препоручује за програм који се нормално користи.

Затим када се компајлира и инсталира, програм WeeChat морате покренути на следећи начин:

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

У случају краха, дневник се налази у фајлу `asan.log`.

[[core_files]]
==== Core фајлови

Да бисте укључили _core_ фајлове, употребите опцију <<option_weechat.startup.sys_rlimit,weechat.startup.sys_rlimit>>:

----
/set weechat.startup.sys_rlimit "core:-1"
----

У верзијама програма WeeChat ≤ 0.3.8, или ако желите да укључите core фајлове и пре него што се програм WeeChat покрене, употребите команду `ulimit`.

На пример, на Linux систему са _bash_ командним окружењем, додајте следећу линију у свој `~/.bashrc`:

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

Или поставите макс величину:

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

[[gdb_backtrace]]
==== Добијање дневника са gdb

Када се програм WeeChat сруши, ваш систем ће креирате _core_ фајл или _core.12345_ (_12345_ је id процеса) ако је <<core_files,опција укључена>>. Овај фајл се креира у директоријуму из којег сте покренули програм WeeChat (то *није* директоријум у који је програм WeeChat инсталиран!).

[NOTE]
На неким системима као што је Archlinux, core извештаји могу бити у неком другом директоријуму као што је _/var/lib/systemd/coredump_ и морате да употребите команду `coredumpctl` да их прочитате. +
За више информација, погледајте ову
https://wiki.archlinux.org/title/Core_dump[вики страницу ^↗^^].

На пример, ако је _weechat_ инсталиран у _/usr/bin/_ а _core_ фајл се налази у _/home/user/_, онда покрените gdb следећом командом:

[source,shell]
----
gdb /usr/bin/weechat /home/user/core
----

Затим у gdb, употребите команду `bt full` којом се приказује дневник. Видећете нешто слично овоме:

----
(gdb) set logging file /tmp/crash.txt
(gdb) set logging on
Copying output to /tmp/crash.txt.
(gdb) bt full
#0  0x00007f9dfb04a465 in raise () from /lib/libc.so.6
#1  0x00007f9dfb04b8e6 in abort () from /lib/libc.so.6
#2  0x0000000000437f66 in weechat_shutdown (return_code=1, crash=1)
    at /some_path/src/core/weechat.c:351
#3  <signal handler called>
#4  0x000000000044cb24 in hook_process_timer_cb (arg_hook_process=0x254eb90,
    remaining_calls=<value optimized out>) at /some_path/src/core/core-hook.c:1364
        hook_process = 0x254eb90
        status = <value optimized out>
#5  0x000000000044cc7d in hook_timer_exec ()
    at /some_path/src/core/core-hook.c:1025
        tv_time = {tv_sec = 1272693881, tv_usec = 212665}
        ptr_hook = 0x2811f40
        next_hook = 0x0
#6  0x000000000041b5b0 in gui_main_loop ()
    at /some_path/src/gui/curses/gui-curses-main.c:319
        hook_fd_keyboard = 0x173b600
        tv_timeout = {tv_sec = 0, tv_usec = 0}
        read_fds = {fds_bits = {0 <repeats 16 times>}}
        write_fds = {fds_bits = {0 <repeats 16 times>}}
        except_fds = {fds_bits = {0 <repeats 16 times>}}
        max_fd = <value optimized out>
----

Овај дневник морате пријавити програмерима, и навести која акција је изазвала овај крах.

Хвала вам на помоћи!

[[debug_running_weechat]]
==== Дибаг програма WeeChat који се извршава

Ако желите да вршите дибаг програма WeeChat који се извршава (на пример, ако изгледа да је програм WeeChat блокиран), можете употребите gdb са id процеса (замените _12345_ са PID weechat процеса):

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

Затим, као и у случају краха, употребите команду `bt full`:

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

[[running_weechat]]
== Покретање програма WeeChat

Ако желите да покренете програм WeeChat, задајте следећу команду:

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

Када по први пут покренете програм WeeChat, у директоријуму _~/.config/weechat_ се креирају подразумевани конфигурациони фајлови са подразумеваним опцијама и вредностима (погледајте <<files_and_directories,Фајлови и директоријуми>>).

[[command_line_options]]
=== Опције командне линије

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

Неке додатне опције су доступне само за потребе откањања грешака:

[CAUTION]
Ниједну од ових опција *НЕМОЈТЕ* користити у продукцији!

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

[[environment_variables]]
=== Променљиве окружења

У случају да су дефинисане, програм WeeChat користи неке променљиве окружења:

[width="100%", cols="1m,6", options="header"]
|===
| Име                  | Опис
| WEECHAT_HOME         | WeeChat почетни директоријум (са конфигурационим фајловима, логовима, скриптама, итд.). Исто понашање као <<build,CMake опција>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE   | Тајна реченица која се користи за дешифровање обезбеђених података.
| WEECHAT_EXTRA_LIBDIR | Додатни директоријум из кога се учитавају додаци (из „plugins” директоријума на овој путањи).
|===

[[colors_support]]
=== Подршка за боје

За приказ текста у тракама и простору за чет, програм WeeChat може да користи до 32767 парова боја (ваш терминал мора да подржава 256 боја како могле да се користе у програму WeeChat).

Сагласно са вредности променљиве окружења _TERM_, можете имати следећа ограничења за боје у програму WeeChat:

[width="75%", cols="8,>3,>3", options="header"]
|===
| $TERM                                  | Боја   | Парова
| "rxvt-unicode", "xterm", ...           |     88 | 32767
| "rxvt-256color", "xterm-256color", ... |    256 | 32767
| "screen"                               |      8 |    64
| "screen-256color"                      |    256 | 32767
| "tmux"                                 |      8 |    64
| "tmux-256color"                        |    256 | 32767
|===

Ако желите да прикажете ограничења за своје окружење, покрените `weechat --colors`, или извршите команду `/color` у програму WeeChat.

Неке од препоручених вредности за _TERM_ ако желите 256 боја:

* под screen: _screen-256color_
* под tmux: _screen-256color_ или _tmux-256color_
* ван screen/tmux: _xterm-256color_, _rxvt-256color_, _putty-256color_, ...

[NOTE]
Можда ће бити потребно да инсталирате пакет „ncurses-term” како бисте могли да у _TERM_ променљивој користите ове вредности.

Ако користите screen, можете да додате следећу линију у свој _~/.screenrc_:

----
term screen-256color
----

Ако је вредност ваше _TERM_ променљиве погрешна, а програм WeeChat се већ извршава, можете да је промените помоћу следеће две команде:

----
/set env TERM screen-256color
/upgrade
----

[[files_and_directories]]
=== Фајлови и директоријуми

[[xdg_directories]]
==== XDG директоријуми

WeeChat подразумевано користи XDG директоријуме (сагласно са https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG Base Directory Specification ^↗^^]). +
Један почетни директоријум за све фајлове може да се форсира CMake опцијом `WEECHAT_HOME`, променљивом окружења `WEECHAT_HOME` или опцијом командне линије `-d` / `--dir`.

Када се не форсира један WeeChat почетни директоријум, користе се XDG директоријуми и постављају се овако:

[width="100%", cols="1,2m,5", options="header"]
|===
| Директоријум | Подразумевана вредност   | Резервна вредност ако $XDG_XXX није дефинисано
| config       | $XDG_CONFIG_HOME/weechat | `$HOME/.config/weechat`
| data         | $XDG_DATA_HOME/weechat   | `$HOME/.local/share/weechat`
| cache        | $XDG_CACHE_HOME/weechat  | `$HOME/.cache/weechat`
| runtime      | $XDG_RUNTIME_DIR/weechat | Исто као _cache_ директоријум
|===

Конфигурациони фајлови фајлови се креирају са подразумеваним вредностима онда када по први пут покренете програм WeeChat.

[[weechat_directories]]
==== WeeChat директоријуми

Ово су директоријуми програма WeeChat:

[width="100%", cols="1m,3", options="header"]
|===
| Путања ^(1)^            | Опис
| ~/.config/weechat/      | WeeChat конфигурациони фајлови: `*.conf`, сертификати, итд.
| ~/.local/share/weechat/ | WeeChat фајлови података: логови, скрипте, подаци скрипти, xfer фајлови, итд.
|    logs/                | Лог фајлови (по један за сваки бафер).
|    python/              | Python скрипте.
|       autoload/         | Python скрипте које аутоматски учитавају при покретању ^(2)^.
|    perl/                | Perl скрипте.
|       autoload/         | Perl скрипте које се аутоматски учитавају при покретању ^(2)^.
|    ruby/                | Ruby скрипте.
|       autoload/         | Ruby скрипте које се аутоматски учитавају при покретању ^(2)^.
|    lua/                 | Lua скрипте.
|       autoload/         | Lua скрипте које се аутоматски учитавају при покретању ^(2)^.
|    tcl/                 | Tcl скрипте.
|       autoload/         | Tcl скрипте које се аутоматски учитавају при покретању ^(2)^.
|    guile/               | Guile скрипте.
|       autoload/         | Guile скрипте које се аутоматски учитавају при покретању ^(2)^.
|    javascript/          | JavaScript скрипте.
|       autoload/         | JavaScript скрипте које се аутоматски учитавају при покретању ^(2)^.
|    php/                 | PHP скрипте.
|       autoload/         | PHP скрипте које се аутоматски учитавају при покретању ^(2)^.
| ~/.cache/weechat/       | WeeChat кеш фајлови: кеш скрипти.
| /run/user/1000/weechat/ | WeeChat фајлови за време извршавања: FIFO пајп, Relay UNIX сокети.
|===

[NOTE]
^(1)^ XDG директоријуми могу да буду различити зависно од ваших вредности променљивих окружења `XDG_*`. +
^(2)^ Овај директоријум најчешће садржи само симболички линк на скрипте у родитељском директоријуму.

[[weechat_files]]
==== WeeChat фајлови

Ово су фајлови који се налазе у почетном директоријуму програма WeeChat:

[width="100%", cols="1m,3,6", options="header"]
|===
| Фајл            | Опис                                        | Осетљиви подаци
| weechat.conf    | Главни WeeChat конфигурациони фајл          | Могуће (пример: листа канала у сачуваном распореду бафера).
| sec.conf        | Конфигурациони фајл са обезбеђеним подацима | *Да, врло осетљиви*: овај фајл никада не сме да се дели са било ким.
| plugins.conf    | Конфигурациони фајл додатака                | Могуће, зависно од додатака/скрипти.
| alias.conf      | Конфигурациони фајл за _алијас_ додатак     | Могуће, зависно од алијаса.
| buflist.conf    | Конфигурациони фајл за _buflist_ додатак    | Не.
| charset.conf    | Конфигурациони фајл за _charset_ додатак    | Не.
| exec.conf       | Конфигурациони фајл за _exec_ додатак       | Не.
| fifo.conf       | Конфигурациони фајл за _fifo_ додатак       | Не.
| fset.conf       | Конфигурациони фајл за _fset_ додатак       | Не.
| guile.conf      | Конфигурациони фајл за _guile_ додатак      | Не.
| irc.conf        | Конфигурациони фајл за _irc_ додатак        | *Да*: може да садржи лозинке за сервере, nickserv и канале (ако се не чувају у `sec.conf`).
| javascript.conf | Конфигурациони фајл за _javascript_ додатак | Не.
| logger.conf     | Конфигурациони фајл за _logger_ додатак     | Не.
| lua.conf        | Конфигурациони фајл за _lua_ додатак        | Не.
| perl.conf       | Конфигурациони фајл за _perl_ додатак       | Не.
| php.conf        | Конфигурациони фајл за _php_ додатак        | Не.
| python.conf     | Конфигурациони фајл за _python_ додатак     | Не.
| relay.conf      | Конфигурациони фајл за _релеј_ додатак      | *Да*: може да садржи лозинку за релеј и TOTP тајну (ако се не чувају у `sec.conf`), дозвољене IP адресе/вебсокет порекла и отворене портове.
| ruby.conf       | Конфигурациони фајл за _ruby_ додатак       | Не.
| script.conf     | Конфигурациони фајл за _script_ додатак     | Не.
| tcl.conf        | Конфигурациони фајл за _tcl_ додатак        | Не.
| spell.conf      | Конфигурациони фајл за _spell_ додатак      | Не.
| trigger.conf    | Конфигурациони фајл за _окидач_ додатак     | Могуће, зависно од окидача.
| typing.conf     | Конфигурациони фајл за _typing_ додатак     | Не.
| xfer.conf       | Конфигурациони фајл за _xfer_ додатак       | Не.
| weechat.log     | WeeChat лог фајл                            | Не.
|===

[IMPORTANT]
*Не препоручује се* ручно уређивање конфигурационих фајлова јер програм WeeChat може да их упише у било које време (на пример приликом команде <<command_weechat_quit,/quit>>) и јер након сваке измене морате да извршите команду <<command_weechat_reload,/reload>> (уз ризик губитка осталих измена које још увек нисте сачували командом <<command_weechat_save,/save>>). +
Можете да употребљавате команду <<command_weechat_set,/set>>, која врши проверу вредности и тренутно примењује измене.

[[upgrade]]
== Ажурирање

Ако се објави нова стабилна верзија програма WeeChat, онда је време да пређете на ту верзију.

Најпре морате инсталирати нову верзију програма WeeChat, или менаџером пакета, или тако што ћете га сами компајлирати, тако да су `weechat` бинарни фајл и све потребни фајлови на истим путањама. +
Ово може да се уради и док се програм WeeChat извршава.

[[upgrade_command]]
=== Команда upgrade

Програм WeeChat у месту може да поново покрене нови бинарни фајл, употребом команде <<command_weechat_upgrade,/upgrade>>: садржаји бафера и не-TLS везе се задржавају. +
Током процеса ажурирања, TLS конекције се губе и аутоматски се обнављају
након ажурирања (са GnuTLS тренутно није могуће поновно учитавање TLS сесија).

Команда такође може да се употреби и када морате поново да покренете машину, на пример, да бисте ажурирали кернел или да преместите свој WeeChat на другу машину:

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

Ово чува тренутно стање у `*.upgrade` фајлове. Након тога можете или да поново покренете машину, или да комплетне WeeChat директоријуме (config, data, cache) преместите на неку другу машину и касније покренете програм WeeChat следећом командом:

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

[[restart_after_upgrade]]
=== Поновно покретање након ажурирања

[[restart_upgrading_notes]]
==== Напомене у вези са ажурирањем

Након ажурирања, *снажно се препоручује* да прочитате фајл
https://github.com/weechat/weechat/blob/main/UPGRADING.md[UPGRADING.md ^↗^^]
који садржи важне информације у вези са изменама које могу да покваре понашање и
неке ручне акције које могу да буду неопходне.

Морате да прочитате верзије између ваше старе (искључујући) и нове верзије (укључујући). +
На пример, ако прелазите са верзије 4.0.0 на 4.3.0, морате да прочитате верзије
4.0.1 до 4.3.0.

[[restart_configuration_upgrade]]
==== Ажурирање конфигурације

Програм WeeChat врши аутоматско ажурирање конфигурационих фајлова (`*.conf`):

* нове опције се без најаве додају са својим подразумеваним вредностима
* застареле опције се аутоматски одбацују и програм WeeChat приказује упозорење које садржи вредност прочитану из фајла.

Пример упозорења када се опција уклања:

----
=!= Упозорење: /home/user/.config/weechat/sec.conf, линија 15: непозната опција за одељак "crypt": passphrase_file = ""
----

Ово значи да је опција `sec.crypt.passphrase_file` уклоњена и да је њена вредност била постављена на празан стринг, што је и подразумевана вредност у претходној верзији (у овом случају нема потребе за ручном акцијом).

[[interface]]
== Интерфејс

[[screen_layout]]
=== Распоред екрана

Пример терминала са програмом WeeChat:

....
 ▼ трака „buflist”   ▼ трака „title”
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Добро дошли на #test, ово је тест канал                                        │
│  weechat│12:52:27   --> | Flashy (flashcode@weechat.org) је приступио у #test   │@Flashy│
│2.  #test│12:52:27    -- | Надимци #test: [@Flashy @joe +weebot peter]           │@joe   │
│3.  #abc │12:52:27    -- | Канал #test: 4 надимка (2 опа, 1 глас, 1 обичан)      │+weebot│
│4.  #def │12:52:27    -- | Канал је креиран у Уто Јан 27 06:30:17 2009           │peter  │
│5.  #ghi │12:54:15 peter | hey!                                                  │       │
│         │12:55:01  @joe | hello                                                 │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │                                                                       │       │
│         │[12:55] [5] [irc/libera] 2:#test(+n){4}* M [H: 3:#abc(2,5), 5]                 │
│         │[@Flashy(i)] hi peter!█                                                        │
└─────────────────────────────────────────────────────────────────────────────────────────┘
            ▲ траке „status” и „input”                             трака „nicklist” ▲
....

Екран је подразумевано подељен на следеће области:

* простор за разговор (чет) (средина екрана) са линијама разговора и за сваку линију:
** време
** префикс (испред „|”)
** порука (након „|”)
* траке око простора за разговор, подразумеване траке су:
** _buflist_ трака, са леве стране
** _title_ (насловна) трака, изнад простора за разговор
** _status_ (статусна) трака, испод простора за разговор
** _input_ (унос) трака, испод статусне траке
** _nicklist_ (листа надимака) трака, са десне стране

_buflist_ трака садржи следеће подразумеване ставке:

[width="100%", cols="^3,^3,9", options="header"]
|===
| Ставка  | Пример      | Опис
| buflist | `1.weechat` | Листа бафера.
|===

_title_ трака садржи следеће подразумеване ставке:

[width="100%", cols="^3,^3,9", options="header"]
|===
| Ставка       | Пример               | Опис
| buffer_title | `Добродошли у #test` | Наслов бафера.
|===

_status_ трака садржи следеће подразумеване ставке:

[width="100%", cols="^3,^3,9", options="header"]
|===
| Ставка                | Пример                 | Опис
| time                  | `12:55`                | Време.
| buffer_last_number    | `5`                    | Број најновијег бафера (може да се разликује од `buffer_count` ако је опција <<option_weechat.look.buffer_auto_renumber,weechat.look.buffer_auto_renumber>> `off`).
| buffer_plugin         | `irc/libera`           | Додатак текућег бафера (irc додатак може да дода име IRC сервера који бафер користи).
| buffer_number         | `2`                    | Број текућег бафера.
| buffer_name           | `#test`                | Име текућег бафера.
| buffer_modes          | `+n`                   | Режими IRC канала.
| buffer_nicklist_count | `4`                    | Број надимака у листи надимака.
| buffer_zoom           | !                      | `!` значи да је спојени бафер зумиран (само он се приказује), празна вредност значи да се приказују сви спојени бафери.
| buffer_filter         | `+*+`                  | Индикатор филтрирања: `+*+` значи да су неке линије филтриране (скривене), празна вредност значи да се приказују све линије.
| mouse_status          | `M`                    | Статус миша (празно ако је миш искључен), погледајте команду <<command_weechat_mouse,/mouse>> и <<key_bindings_toggle_keys,тастери преклопници>>.
| scroll                | `-ЈОШ(50)-`            | Скрол индикатор, са бројем линија испод последње приказане линије.
| lag                   | `Кашњење: 2.5`         | Индикатор кашњења, у секундама (скривен је ако је кашњење мало).
| hotlist               | `H: 3:#abc(2,5), 5`    | Листа бафера који имају активност (непрочитане поруке) (у примеру, 2 истицања и 5 непрочитаних порука на _#abc_, једна непрочитана порука у баферу #5).
| typing                | `Куца: bob, (alice)`   | Обавештење о куцању, погледајте <<typing_notifications,Обавештења о куцању>>.
| completion            | `abc(2) def(5)`        | Листа речи за довршавање, са бројем могућих довршавања за сваку реч.
|===

_input_ трака садржи следеће подразумеване ставке:

[width="100%", cols="^3,^3,9", options="header"]
|===
| Ставка       | Пример                                         | Опис
| input_prompt | `@Flashy(i)`                                   | Одзив за унос, за irc: надимак и режими (режим „+i” значи невидљив на серверу libera).
| away         | `одсутан`                                      | Индикатор одсутности.
| input_search | `Претрага линија (~ str,msg)`                  | Индикатор претраге (погледајте испод).
| input_paste  | `Да налепим 7 линија? [ctrl-y] Да [ctrl-n] Не` | Питање за корисника пре налељпивања линија.
| input_text   | `ћао петре!`                                   | Текст уноса.
|===

Постоје два режима претраге:

* претрага у линијама, на пример `[Претрага линија (~ str,msg)]`, са следећим информацијама:
** `~`: не прави се разлика у величини слова
** `==`: прави се разлика у величини слова
** `str`: стринг претраге
** `regex`: претрага по регуларном изразу
** `msg`: претрага у порукама
** `pre`: претрага у префиксима
** `pre\|msg`: претрага и у префиксима и у порукама
* претрага по историји команди, на пример `[Претрага команди (~ str,local)]`,
  са следећим информацијама:
** `~`: не прави се разлика у величини слова
** `==`: прави се разлика у величини слова
** `str`: стринг претраге
** `regex`: претрага по регуларном изразу
** `local`: претрага по локалној историји бафера
** `global`: претрага по глобалној историји.

_nicklist_ трака садржи следеће подразумеване ставке:

[width="100%", cols="^3,^3,9", options="header"]
|===
| Ставка          | Пример    | Опис
| buffer_nicklist | `@Flashy` | Листа надимака на текућем баферу.
|===

Остале доступне ставке (подразумевано се не користе у тракама):

[width="100%", cols="^3,^3,9", options="header"]
|===
| Ставка                       | Пример                   | Опис
| buffer_count                 | `5`                      | Укупан број отворених бафера.
| buffer_nicklist_count_all    | `4`                      | Број видљивих група и надимака у листи надимака.
| buffer_nicklist_count_groups | `0`                      | Број видљивих група у листи надимака.
| buffer_short_name            | `#test`                  | Кратко име текућег бафера.
| buflist2                     | `1.weechat`              | Листа бафера, друга ставка траке (погледајте опцију <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist3                     | `1.weechat`              | Листа бафера, трећа ставка траке (погледајте опцију <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist4                     | `1.weechat`              | Листа бафера, четврта ставка траке (погледајте опцију <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist5                     | `1.weechat`              | Листа бафера, пета ставка траке (погледајте опцију <<option_buflist.look.use_items,buflist.look.use_items>>).
| fset                         | `+buflist.look.sort: …+` | Помоћ у вези тренутно изабране опције у fset баферу.
| irc_channel                  | `#test`                  | Име тренутног IRC канала.
| irc_host                     | `+user@host.com+`        | Име тренутног IRC хоста.
| irc_nick                     | `+Flashy+`               | Тренутни IRC надимак.
| irc_nick_host                | `+Flashy!user@host.com+` | Тренутни IRC надимак и име хоста.
| irc_nick_modes               | `i`                      | IRC режими са ваш надимак.
| irc_nick_prefix              | `@`                      | IRC префикс надимка на каналу.
| spacer                       |                          | Специјална ставка која се користи за поравнање текста у тракама, погледајте <<item_spacer,Spacer ставка>>.
| spell_dict                   | `fr,en`                  | Речници за проверу правописа који се користе у текућем баферу.
| spell_suggest                | `print,prone,prune`      | Правописни предлози за реч под курсором (у случају да је погрешно исписана).
| tls_version                  | `TLS1.3`                 | TLS верзија која се користи за текући IRC сервер.
| window_number                | `2`                      | Број текућег прозора.
|===

Сваки аспект распореда може да се прилагоди одговарајућом <<command_line,командом>>: <<command_weechat_bar,`/bar`>> за прилагођавање трака, <<command_weechat_buffer,/buffer>> и <<command_weechat_window,`/window`>> за прилагођавање <<buffers_and_windows,бафера и прозора>> и <<command_weechat_layout,/layout>> за именовање, чување и враћање распореда екрана и придруживања прозора са баферима.

[[command_line]]
=== Командна линија

WeeChat командна линија (на дну прозора) вам омогућава извршавање команди или слање текста у бафер.

[[command_line_syntax]]
==== Синтакса

Команде почињу карактером „/”, након кога следи име команде. На пример, ако желите да видите листу свих опција:

----
/set
----

Текст који се шаље у бафер је било који текст који не почиње карактером „/”. На пример, ако у текући бафер желите да пошаљете текст _здраво_:

----
здраво
----

Међутим, можете да почнете са карактером „/” ако додате још један. На пример, ако у текући бафер желите да пошаљете текст `/set`:

----
//set
----

[[command_line_colors]]
==== Кодови боја

За неке додатке као што је IRC, можете да користите кодове боја и атрибуте, као што следи (притисните kbd:[Ctrl+c] па слово које следи, са необавезном вредности):

[width="100%", cols="1,2", options="header"]
|===
| Тастер                 | Опис
| kbd:[Ctrl+c], kbd:[b]  | Подебљани текст
| kbd:[Ctrl+c], kbd:[c],
  kbd:[xx]               | Текст у боји `xx` (погледајте листу боја испод).
| kbd:[Ctrl+c], kbd:[c],
  kbd:[xx], kbd:[,],
  kbd:[yy]               | Текст у боји `xx` и позадина у `yy` (погледајте листу боја испод).
| kbd:[Ctrl+c], kbd:[d],
  kbd:[xxxxxx]           | Текст у боји `xxxxxx` (RGB као хексадецимални број, на пример, `FF0000` за црвену).
| kbd:[Ctrl+c], kbd:[d],
  kbd:[xxxxxx], kbd:[,],
  kbd:[yyyyyy]           | Текст у боји `xxxxxx` и позадина `yyyyyy` (RGB као хексадецимални број).
| kbd:[Ctrl+c], kbd:[i]  | Текст у курзиву.
| kbd:[Ctrl+c], kbd:[o]  | Искључивање боје и атрибута.
| kbd:[Ctrl+c], kbd:[s]  | Прецртани текст (у ncurses интерфејсу се приказује као полусветао јер се не подржава прецртавање).
| kbd:[Ctrl+c], kbd:[v]  | Обрнути видео (боје текста и позадине се замењују једна са другом).
| kbd:[Ctrl+c], kbd:[_]  | Подвучени текст.
|===

[NOTE]
Исти кôд (без броја за kbd:[Ctrl+c], kbd:[c] и kbd:[Ctrl+c], kbd:[d])
може да се употреби за стопирање атрибута.

Кодови боја за kbd:[Ctrl+c], kbd:[c] су:

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

[NOTE]
Да бисте у свом терминалу видели све доступне боје, можете да у програму WeeChat извршите `/color` па затим kbd:[Alt+c], или да у терминалу покренете следећу команду: `weechat --colors`.

Пример: приказати „здраво Елена!” са „здраво” у светлоплавој боји подебљано и „Елена” у светлоцрвеној боји, подвучено:

----
^Cc12^Cbздраво ^Cb^Cc04^C_Елена^C_^Cc!
----

Тастери:

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

[NOTE]
У irc додатку можете да ремапирате ове боје употребом опције <<option_irc.color.mirc_remap,irc.color.mirc_remap>>.

[[buffers_and_windows]]
=== Бафери и прозори

_бафер_ се састоји из броја, имена, приказаних линија (и још неких података).

Примери бафера:

* бафер језгра (креира га програм WeeChat током покретања, не може да се затвори)
* irc сервер (приказује поруке од сервера)
* irc канал
* irc приватне поруке

_прозор_ је површина екрана која приказује бафер. Свој екран можете да изделите на више прозора (примери су <<window_split_examples,испод>>, погледајте команду <<command_weechat_window,/window>> за више детаља).

Сваки прозор приказује један бафер. Бафер може да буде скривен (не приказује се у прозору) или да се приказује у једном или у више прозора.

Распореди екрана и придруживање бафера прозорима могу да се <<command_weechat_layout,сачувају и обнове>>.

[[window_split_examples]]
==== Примери

Пример хоризонталне поделе (`/window splith`):

....
                               ▼ прозор #2 (бафер #4)
┌─────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Welcome to #def                                                            │
│  weechat│12:55:12     Max | hi                                              │@Flashy│
│2.  #test│12:55:20 @Flashy | hi Max!                                         │Max    │
│3.  #abc │                                                                   │       │
│4.  #def │                                                                   │       │
│5.  #ghi │                                                                   │       │
│         │                                                                   │       │
│         │                                                                   │       │
│         │                                                                   │       │
│         │[12:55] [5] [irc/libera] 4:#def(+n){2}                                     │
│         │[@Flashy]                                                                  │
│         │───────────────────────────────────────────────────────────────────────────│
│         │Welcome to #abc                                                            │
│         │12:54:15 peter | hey!                                              │@Flashy│
│         │12:55:01  @joe | hello                                             │@joe   │
│         │                                                                   │+weebot│
│         │                                                                   │peter  │
│         │                                                                   │       │
│         │                                                                   │       │
│         │                                                                   │       │
│         │                                                                   │       │
│         │[12:55] [5] [irc/libera] 3:#abc(+n){4}                                     │
│         │[@Flashy] hi peter!█                                                       │
└─────────────────────────────────────────────────────────────────────────────────────┘
                               ▲ прозор #1 (бафер #3)
....

Пример вертикалне поделе(`/window splitv`):

....
┌─────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Welcome to #abc                      │Welcome to #def                      │
│  weechat│12:54:15 peter | hey!        │@Flashy│12:55:12     Max | hi        │@Flashy│
│2.  #test│12:55:01  @joe | hello       │@joe   │12:55:20 @Flashy | hi Max!   │Max    │
│3.  #abc │                             │+weebot│                             │       │
│4.  #def │                             │peter  │                             │       │
│5.  #ghi │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │[12:55] [5] [irc/libera] 3:#abc(+n)  │[12:55] [5] [irc/libera] 4:#def(+n)  │
│         │[@Flashy] hi peter!█                 │[@Flashy]                            │
└─────────────────────────────────────────────────────────────────────────────────────┘
                 ▲ прозор #1 (бафер #3)                ▲ прозор #2 (бафер #4)
....

Пример вертикалне + хоризонталне поделе:

....
                                                       ▼ прозор #3 (бафер #5)
┌─────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Welcome to #abc                      │Welcome to #ghi                      │
│  weechat│12:54:15 peter | hey!        │@Flashy│12:55:42 @Flashy | hi        │@Flashy│
│2.  #test│12:55:01  @joe | hello       │@joe   │12:55:56    alex | hi Flashy │alex   │
│3.  #abc │                             │+weebot│                             │       │
│4.  #def │                             │peter  │                             │       │
│5.  #ghi │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │[12:55] [5] [irc/libera] 5:#ghi(+n)  │
│         │                             │       │[@Flashy]                            │
│         │                             │       │─────────────────────────────────────│
│         │                             │       │Welcome to #def                      │
│         │                             │       │12:55:12     Max | hi        │@Flashy│
│         │                             │       │12:55:20 @Flashy | hi Max!   │Max    │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │                             │       │                             │       │
│         │[12:55] [5] [irc/libera] 3:#abc(+n)  │[12:55] [5] [irc/libera] 4:#def(+n)  │
│         │[@Flashy] hi peter!█                 │[@Flashy]                            │
└─────────────────────────────────────────────────────────────────────────────────────┘
                 ▲ прозор #1 (бафер #3)                ▲ прозор #2 (бафер #4)
....

[[bare_display]]
==== Огољени приказ

Да бисте једноставно кликнули на дугачке URL адресе и бирали текст (користећи миша), можете употребити посебан приказ који се зове „огољени приказ”.

Огољени приказ има следеће особине:

* Приказује само садржај текућег бафера: нема ни подељених прозора ни трака (нема наслова, листе надимака, статуса, уноса, ...).
* Подршка за миш програма WeeChat је искључена (ако је била укључена): миш можете да користите на исти начин као у терминалу, да кликћете на URL адресе и вршите избор текста.
* Ncurses се не користи, тако да се URL адресе не секу на крају линије.

Подразумевани тастер којим се укључује огољени приказ је kbd:[Alt+l] (`L`), и истим тастером се напушта (или као што је подразумевано, било шта што мења унос ће изазвати напуштање огољеног приказа, погледајте опцију <<option_weechat.look.bare_display_exit_on_input,weechat.look.bare_display_exit_on_input>>).

Формат приказа времена може да се прилагоди опцијом <<option_weechat.look.bare_display_time_format,weechat.look.bare_display_time_format>>.

Огољени приказ може да се укључи на неко одређено време командом <<command_weechat_window,/window>>.

Ако програм WeeChat изгледа на следећи начин:

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Добродошли на #abc                                                          │
│  weechat│12:52:27   --> | Flashy (flashcode@weechat.org) је приступио у #abc │@Flashy│
│2.  #test│12:52:27    -- | Надимци #abc: [@Flashy @joe +weebot peter]         │@joe   │
│3.  #abc │12:52:27    -- | Канал #abc: 4 надимка (2 опа, 1 глас, 1 обични)    │+weebot│
│4.  #def │12:52:27    -- | Канал је креиран у Уто Јан 27 06:30:17 2009        │peter  │
│5.  #ghi │12:54:15 peter | hey!                                               │       │
│         │12:55:01  @joe | peter: hook_process: https://weechat.org/files/doc │       │
│         │               | /weechat/devel/weechat_plugin_api.en.html#_weechat │       │
│         │               | _hook_process                                      │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │[12:55] [5] [irc/libera] 3:#abc(+n){4}                                      │
│         │[@Flashy(i)] hi peter!█                                                     │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

Екран у огољеном приказу ће изгледати овако:

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│12:52 --> Flashy (flashcode@weechat.org) је приступио у #abc                          │
│12:52 -- Надимци #abc: [@Flashy @joe +weebot peter]                                   │
│12:52 -- Канал #abc: 4 надимка (2 опа, 1 глас, 1 обичан)                              │
│12:52 -- Канал је креиран у Уто Јан 27 06:30:17 2009                                  │
│12:54 <peter> hey!                                                                    │
│12:55 <@joe> peter: hook_process: https://weechat.org/files/doc/weechat/devel/weechat_│
│plugin_api.en.html#_weechat_hook_process                                              │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

Тако да у свом терминалу без проблема можете кликнути на URL адресу од надимка _joe_ (наравно, ово претпоставља да ваш терминал подржава кликове на URL адресе).

[[buffers]]
=== Бафери

[[lines_format]]
==== Формат линија

Линије које се приказују у форматираним баферима имају следећа поља:

[width="100%", cols="2,2,10", options="header"]
|===
| Поље                | Приказано          | Опис
| date/time (порука)  | Да                 | Датум/време поруке (може бити у прошлости).
| date/time (испис)   | Не                 | Датум/време када WeeChat испише поруку.
| prefix              | Да                 | Префикс поруке, обично је надимак.
| message             | Да                 | Сама порука.
| displayed           | Не                 | Логичка: истинито ако је линија приказана, неистинито ако је линија филтрирана командом <<command_weechat_filter,/filter>>.
| highlight           | Не                 | Логичка: истинито ако линија има истицање, у супротном неистинито.
| tags                | Са `/debug tags`   | Ознаке придружене линији (погледајте <<lines_tags,ознаке линија>>).
|===

Приказ линија може да се прилагоди многим опцијама изгледа (_pass:[weechat.look.*]_) и опцијама боја (_pass:[weechat.color.chat_*]_).

[[lines_tags]]
==== Ознаке линија

Програм WeeChat користи у разне сврхе ознаке у линијама:

* истицање
* ниво обавештавања
* логовање
* употреба команде <<command_weechat_filter,/filter>>

Ознаке могу да се прикажу командом `/debug tags` (иста команда их и сакрива).

Често коришћене ознаке (листа није потпуна):

[width="100%", cols="1m,4", options="header"]
|===
| Ознака           | Опис
| no_filter        | Линија не може да буде филтрирана.
| no_highlight     | У линији није могуће истицање.
| no_log           | Линија се не уписује у лог фајл.
| log0 … log9      | Ниво лога за линију (погледајте команду <<command_logger_logger,/logger>>).
| notify_none      | Линија не сме да се дода у врућу листу. ^(1)^
| notify_message   | Линија је корисничка порука. ^(1)^
| notify_private   | Линија је приватна порука. ^(1)^
| notify_highlight | Линија је порука са истицањем. ^(1)^
| self_msg         | Порука од вас.
| nick_xxx         | Порука је од надимка „xxx”.
| prefix_nick_ccc  | Префикс је надимак у боји „ccc”.
| host_xxx         | Корисничко име и хост у поруци.
| irc_xxx          | IRC порука „xxx” (може бити команда или троцифрени број).
| irc_numeric      | IRC нумеричка порука.
| irc_error        | Грешка од IRC сервера.
| irc_action       | Акција од надимка (команда `/me`).
| irc_ctcp         | CTCP порука.
| irc_ctcp_reply   | Одговор на CTCP поруку.
| irc_smart_filter | IRC порука која може да се филтрира „паметним филтером”.
| away_info        | Порука са информацији о одсутности.
|===

[NOTE]
^(1)^ Када није присутна ниједна „notify_xxx” ознака, подразумевани ниво је „low”. Ако је присутна ознака „notify_xxx”, стварни ниво обавештавања може бити различит, на пример ако се за надимак користи максимални ниво вруће листе, ниво обавештавања може бити нижи него што је наведен у ознаци.

[[local_variables]]
==== Локалне променљиве

У свим баферима можете да дефинишете локалне променљиве.

Локална променљива има:

* име (стринг)
* вредност (стринг, може бити и празан)

Локалне променљиве може да поставља програм WeeChat, додаци, скрипте, или ручно, командном линијом у баферу.

На пример, ако желите да додате локалну променљиву „completion_default_template”:

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

Ако желите да видите све локалне променљиве у текућем баферу:

----
/buffer listvar
----

Ако желите да уклоните локалну променљиву „completion_default_template”:

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

Програм WeeChat и његови додаци подразумевано интерпретирају следеће променљиве:

[width="100%", cols="2m,2,5", options="header"]
|===
| Име | Вредност | Опис

| away
| било који стринг
| Порука о одсутности на серверу, поставља је irc додатак.

| channel
| било који стринг
| Име канала, постављају је irc/xfer додаци и дибаг бафер релеј/окидач додатака.

| charset_modifier
| било који стринг
| Модификатор скупа карактера за серверски бафер, поставља је irc додатак.

| completion_default_template
| било који стринг
| Подразумевани шаблон за довршавање у баферу, премошћава опцију
  `weechat.completion.default_template`.

| filter
| било који стринг
| Филтер дефинисан у неким баферима као што су `/fset`, `/list` (irc), `/server raw` (irc)
  и `/script`.

| host
| било који стринг
| Име вашег хоста (ако је познато), поставља је irc додатак.

| lag
| било који стринг
| Кашњење у комуникацији са сервером, поставља је irc додатак.

| name
| било који стринг
| Име бафера (пазите, ово није пуно име и није довољно за идентификацију
  или претрагу бафера).

| nick
| било који стринг
| Ваш надимак, постављају је irc и xfer додаци.

| no_log
| `1` (или неки непразни стринг)
| Ако је постављена, logger додатак уопште не логује овај бафер.

| plugin
| било који стринг
| Име додатка који је креирао бафер (`core` за WeeChat бафере).

| script_close_cb
| било који стринг
| Функција повратног позива за затварање бафера коју је дефинисала скрипта.

| script_close_cb_data
| било који стринг
| Подаци за функцију повратног позива затварања бафера коју је дефинисала скрипта.

| script_input_cb
| било који стринг
| Функција повратног позива за унос у бафер коју је дефинисала скрипта.

| script_input_cb_data
| било који стринг
| Подаци за функцију повратног позива за унос у бафер коју је дефинисала скрипта.

| script_name
| било који стринг
| Име скрипте која је креирала бафер.

| server
| било који стринг
| Име сервера, поставља је irc додатак и дибаг бафер релеј/окидач додатака.

| spell_suggest
| било који стринг
| Неисправно написана реч и предлози (формат: „неисправна:предлози”), поставља
  је spell додатак.

| trigger_filter
| било који стринг
| Филтер окидача, поставља је окидач додатак.

| type
| било који стринг, на пример:
  `channel`,
  `debug`,
  `exec`,
  `option`,
  `private`,
  `relay`,
  `script`,
  `server`,
  `user`,
  `xfer`
| Тип бафера, поставља је програм WeeChat и многи додаци.

|===

[NOTE]
Спољни додаци и скрипте могу да дефинишу и користе остале локалне променљиве.

[[buflist]]
=== Листа бафера

Buflist додатак приказује листу бафера у ставки траке која се зове „buflist”
(доступне су и четири остале ставке траке "buflist2", "buflist3", "buflist4" и "buflist5"). +
Подразумевана трака „buflist” са овом ставком се креира током покретања програма.

[[buflist_commands]]
==== Команде

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

[[buflist_options]]
==== Опције

Одељци у фајлу _buflist.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу   | Опис
| format  | /set buflist.format.* | Формати који се користе за приказ листе бафера.
| look    | /set buflist.look.*   | Изглед и осећај.
|===

Опције:

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

[[cursor_mode]]
=== Режим курсора

Режим курсора вам омогућава да курсор слободно померате по целом екрану, у чет
површини и тракама, тако да на одређеној опцији можете да обављате акције. +
У режим курсора можете да уђете било командом `/cursor`, било средњим кликом
(потребно је да миш буде укључен тастером kbd:[Alt+m] или командом `/mouse enable`).

Типична употреба је за цитирање порука (чет површина) или интеракција са надимцима (трака листе надимака).

За листу акција које можете да извршите у овом режим погледајте погледајте
команду <<command_weechat_cursor,/cursor>> и
<<key_bindings_cursor_context,везивања тастера у контексту курсора.>>

[[key_bindings]]
== Тастерске пречице

WeeChat нуди доста подразумеваних тастерских пречица, наведених у следећим поглављима. +
Оне могу да се промене и нове могу да се дефинишу командом <<command_weechat_key,/key>>.

[[key_bindings_cmdline]]
=== Командна линија

[[key_bindings_cmdline_cursor_movement]]
==== Померање курсора

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер         | Опис | Команда
| kbd:[←] +
  kbd:[Shift+←] +
  kbd:[Ctrl+b]   | Одлазак на претходни карактер у командној линији. | `+/input move_previous_char+`
| kbd:[→] +
  kbd:[Shift+→] +
  kbd:[Ctrl+f]   | Одлазак на наредни карактер у командној линији. | `+/input move_next_char+`
| kbd:[Shift+↑]  | Одлазак на претходну линију. | `+/input move_previous_line+`
| kbd:[Shift+↓]  | Одлазак на наредну линију. | `+/input move_next_line+`
| kbd:[Ctrl+←] +
  kbd:[Alt+b]    | Одлазак на претходну реч у командној линији. | `+/input move_previous_word+`
| kbd:[Ctrl+→] +
  kbd:[Alt+f]    | Одлазак на наредну реч у командној линији. | `+/input move_next_word+`
| kbd:[Home] +
  kbd:[Ctrl+a]   | Одлазак на почетак текуће линије. | `+/input move_beginning_of_line+`
| kbd:[Shift+Home] | Одлазак на почетак командне линије. | `+/input move_beginning_of_input+`
| kbd:[End] +
  kbd:[Ctrl+e]   | Одлазак на крај текуће линије. | `+/input move_end_of_line+`
| kbd:[Shift+End]  | Одлазак на крај командне линије. | `+/input move_end_of_input+`
|===

[[key_bindings_cmdline_editing]]
==== Уређивање

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер              | Опис | Команда
| kbd:[Del] +
  kbd:[Ctrl+d]        | Брисање наредног карактера у командној линији. | `+/input delete_next_char+`
| kbd:[Backspace] +
  kbd:[Ctrl+h]        | Брисање претходног карактера у командној линији. | `+/input delete_previous_char+`
| kbd:[Ctrl+k]        | Брисање од курсора до краја текуће линије (обрисани стринг се копира у интерни клипборд). | `+/input delete_end_of_line+`
| kbd:[Alt+Ctrl+k]    | Брисање од курсора до краја командне линије (обрисани стринг се копира у интерни клипборд). | `+/input delete_end_of_input+`
| kbd:[Ctrl+t]        | Транспозиција карактера. | `/input transpose_chars`
| kbd:[Ctrl+u]        | Брисање од курсора до почетка текуће линије (обрисани стринг се копира у интерни клипборд). | `+/input delete_beginning_of_line+`
| kbd:[Alt+Ctrl+u]    | Брисање од курсора до почетка командне линије (обрисани стринг се копира у интерни клипборд). | `+/input delete_beginning_of_input+`
| kbd:[Alt+Backspace] | Брисање претходне речи командне линије (обрисани стринг се копира у интерни клипборд). | `+/input delete_previous_word+`
| kbd:[Ctrl+w]        | Брисање претходне речи командне линије до празног простора (обрисани стринг се копира у интерни клипборд). | `+/input delete_previous_word_whitespace+`
| kbd:[Ctrl+y]        | Налепљивање садржаја интерног клипборда. | `+/input clipboard_paste+`
| kbd:[Ctrl+_]        | Поништавање последње акције у командној линији. | `+/input undo+`
| kbd:[Alt+_]         | Враћање последње поништене акције у командној линији. | `+/input redo+`
| kbd:[Tab]           | Довршавање команде или надимка (kbd:[Tab] поново: проналажење наредног довршавања). | `+/input complete_next+`
| kbd:[Shift+Tab]     | Без довршавања: обављање парцијалног довршавања, са довршавањем на чекању: довршавање са претходно пронађеним појмом. | `+/input complete_previous+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]        | Извршавање команде или слање поруке (у режиму претраге: заустављање претраге). | `+/input return+`
| kbd:[Alt+Enter]     | Умеће прелом реда. | `+/input insert \n+`
| kbd:[Alt+d]         | Брисање наредне речи у командној линији (обрисани стринг се копира у интерни клипборд). | `+/input delete_next_word+`
| kbd:[Alt+k]         | Хвата тастер и умеће његов кôд (и комадну везану за њега, ако постоји таква пречица) у командну линију. | `+/input grab_key_command+`
| kbd:[Alt+r]         | Брисање текуће линије. | `+/input delete_line+`
| kbd:[Alt+R]         | Брисање комплетне командне линије. | `+/input delete_input+`
|===

[[key_bindings_cmdline_color_codes]]
==== Кодови боја

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер                | Опис | Команда
| kbd:[Ctrl+c], kbd:[b] | Уметање кода за подебљани текст. | `+/input insert \x02+`
| kbd:[Ctrl+c], kbd:[c] | Уметање кода за обојени текст. | `+/input insert \x03+`
| kbd:[Ctrl+c], kbd:[d] | Уметање кода за обојени текст (RGB боја, као хексадецимални број). | `+/input insert \x04+`
| kbd:[Ctrl+c], kbd:[i] | Уметање кода за текст у курзиву. | `+/input insert \x1D+`
| kbd:[Ctrl+c], kbd:[o] | Уметање кода за ресет боје. | `+/input insert \x0F+`
| kbd:[Ctrl+c], kbd:[s] | Уметање кода за прецртани текст. | `+/input insert \x1E+`
| kbd:[Ctrl+c], kbd:[v] | Уметање кода за обрнуту боју. | `+/input insert \x16+`
| kbd:[Ctrl+c], kbd:[_] | Уметање кода за подвучени текст. | `+/input insert \x1F+`
|===

[[key_bindings_cmdline_history]]
==== Историја команди

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер       | Опис | Команда
| kbd:[↑]      | Позив претходне команде/поруке (у режиму претраге: претрага навише). | `+/input history_previous+`
| kbd:[↓]      | Позив наредне команде/поруке (у режиму претраге: претрага наниже). | `+/input history_next+`
| kbd:[Ctrl+↑] | Позив претходне команде/поруке у глобалној историји (заједничкој за све бафере). | `+/input history_global_previous+`
| kbd:[Ctrl+↓] | Позив наредне команде/поруке у глобалној историји (заједничкој за све бафере). | `+/input history_global_next+`
|===

[[key_bindings_cmdline_system]]
==== Систем

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Тастер       | Опис | Команда
| kbd:[Ctrl+z] | Суспендује WeeChat процес. | `+/sys suspend+`
|===

[[key_bindings_buffers]]
=== Бафери

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер                         | Опис | Команда
| kbd:[Ctrl+r]                   | Претрага текста у историји команди (погледајте <<key_bindings_histsearch_context,тастери за контекст „histsearch”>>). | `+/input search_history+`
| kbd:[Ctrl+s]                   | Претрага текста у линијама бафера (погледајте <<key_bindings_search_context,тастери за контекст „search”>>). | `+/input search_text_here+`
| kbd:[Ctrl+x]                   | Мења текући бафер ако су бафери спојени са истим бројем, на пример, прелазак на други IRC сервер бафер. | `+/buffer switch+`
| kbd:[Alt+x]                    | Зум на спојени бафер (kbd:[Alt+x] поново: приказује све спојене бафере). | `+/buffer zoom+`
| kbd:[PgUp]                     | Скролује навише једну страну у историји бафера. | `+/window page_up+`
| kbd:[PgDn]                     | Скролује наниже једну страну у историји бафера. | `+/window page_down+`
| kbd:[Alt+PgUp]                 | Скролује навише неколико линија у историји бафера. | `+/window scroll_up+`
| kbd:[Alt+PgDn]                 | Скролује наниже неколико линија у историји бафера. | `+/window scroll_down+`
| kbd:[Alt+Home]                 | Скролује на врх бафера. | `+/window scroll_top+`
| kbd:[Alt+End]                  | Скролује на дно бафера. | `+/window scroll_bottom+`
| kbd:[Alt+←] +
  kbd:[Alt+↑] +
  kbd:[Ctrl+p] +
  kbd:[F5]                       | Пребацивање на претходни бафер. | `+/buffer -1+`
| kbd:[Alt+→] +
  kbd:[Alt+↓] +
  kbd:[Ctrl+n] +
  kbd:[F6]                       | Пребацивање на наредни бафер. | `+/buffer +1+`
| kbd:[Alt+j], kbd:[Alt+f]       | Пребацивање на први бафер. | `+/buffer -+`
| kbd:[Alt+j], kbd:[Alt+l] (`L`) | Пребацивање на последњи бафер. | `+/buffer ++`
| kbd:[Alt+j], kbd:[Alt+r]       | Пребацивање на сирови IRC бафер. | `+/server raw+`
| kbd:[Alt+j], kbd:[Alt+s]       | пребацивање на бафер IRC сервера. | `+/server jump+`
| kbd:[Alt+0...9]                | Пребацивање на бафер према броју (0 = 10). | `+/buffer *N+`
| kbd:[Alt+j], kbd:[01...99]     | Пребацивање на бафер према броју. | `+/buffer *NN+`
| kbd:[Alt+n]                    | Скроловање до наредног истицања. | `+/window scroll_next_highlight+`
| kbd:[Alt+p]                    | Скроловање на претходно истицање. | `+/window scroll_previous_highlight+`
| kbd:[Alt+u]                    | Скроловање на прву непрочитану линију у баферу. | `+/window scroll_unread+`
| kbd:[Alt+Shift+U]              | Поставља маркер непрочитано за све бафере. | `+/allbuf /buffer set unread+`
| kbd:[Alt+<]                    | Прелаз на претходни бафер у листи посећених бафера. | `+/buffer jump prev_visited+`
| kbd:[Alt+>]                    | Прелаз на наредни бафер у листи посећених бафера. | `+/buffer jump next_visited+`
| kbd:[Alt+/]                    | Прелаз на последње приказани бафер. | `+/buffer jump last_displayed+`
|===

[[key_bindings_windows]]
=== Прозори

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер                   | Опис | Команда
| kbd:[Ctrl+l] (`L`)       | Поново исцртава цео прозор. | `+/window refresh+`
| kbd:[Alt+l] (`L`)        | Пребацивање активности огољеног приказа. | `+/window bare+`
| kbd:[F7]                 | Пребацивање на претходни прозор. | `+/window -1+`
| kbd:[F8]                 | Пребацивање на наредни прозор. | `+/window +1+`
| kbd:[Alt+w], kbd:[Alt+↑] | Прелаз на прозор изнад. | `+/window up+`
| kbd:[Alt+w], kbd:[Alt+↓] | Прелаз на прозор испод. | `+/window down+`
| kbd:[Alt+w], kbd:[Alt+←] | Прелаз на прозор са леве стране. | `+/window left+`
| kbd:[Alt+w], kbd:[Alt+→] | Прелаз на прозор са десне стране. | `+/window right+`
| kbd:[Alt+w], kbd:[Alt+b] | Уједначавање величине свих прозора. | `+/window balance+`
| kbd:[Alt+w], kbd:[Alt+s] | Замена бафера два прозора. | `+/window swap+`
| kbd:[Alt+z]              | Зум на текући прозор (kbd:[Alt+z] поново: враћање почетног стања прозора, пре зумирања). | `+/window zoom+`
|===

[[key_bindings_bars]]
=== Траке

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер            | Опис | Команда
| kbd:[F1] +
  kbd:[Ctrl+F1]     | Скролује навише једну страну листе бафера. | `+/bar scroll buflist * -100%+`
| kbd:[F2] +
  kbd:[Ctrl+F2]     | Скролује наниже једну страну листе бафера. | `+/bar scroll buflist * +100%+`
| kbd:[Alt+F1]      | Скок на почетак листе бафера. | `+/bar scroll buflist * b+`
| kbd:[Alt+F2]      | Скок на крај листе бафера. | `+/bar scroll buflist * e+`
| kbd:[F9]          | Скролује наслов бафера у лево. | `+/bar scroll title * -30%+`
| kbd:[F10]         | Скролује наслов бафера у десно. | `+/bar scroll title * +30%+`
| kbd:[F11] +
  kbd:[Ctrl+F11]    | Скролује једну страну навише у листи надимака. | `+/bar scroll nicklist * -100%+`
| kbd:[F12] +
  kbd:[Ctrl+F12]    | Скролује једну страну наниже у листи надимака. | `+/bar scroll nicklist * +100%+`
| kbd:[Alt+F11]     | Скок на почетак листе надимака. | `+/bar scroll nicklist * b+`
| kbd:[Alt+F12]     | Скок на крај листе надимака. | `+/bar scroll nicklist * e+`
| kbd:[Alt+Shift+B] | Пребацивање активности листе бафера. | `+/buflist toggle+`
| kbd:[Alt+Shift+N] | Пребацивање видљивости траке листе надимака. | `+/bar toggle nicklist+`
|===

[[key_bindings_hotlist]]
=== Врућа листа

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер                         | Опис | Команда
| kbd:[Alt+a]                    | Пребацивање на следећи бафер у коме има активности (са приоритетом: истицање, порука, остало). | `+/buffer jump smart+`
| kbd:[Alt+h], kbd:[Alt+c]       | Брисање вруће листе (обавештења о активности у баферима). | `+/hotlist clear+`
| kbd:[Alt+h], kbd:[Alt+m]       | Уклањање текућег бафера из вруће листе. | `+/hotlist remove+`
| kbd:[Alt+h], kbd:[Alt+r]       | Враћање најновије вруће листе уклоњене из текућег бафера. | `+/hotlist restore+`
| kbd:[Alt+h], kbd:[Alt+Shift+R] | Враћање најновије вруће листе уклоњене из свих бафера. | `+/hotlist restore -all+`
|===

[[key_bindings_toggle_keys]]
=== Тастери преклопници

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер                 | Опис | Команда
| kbd:[Alt+m]            | Пребацивање активности миша. | `+/mouse toggle+`
| kbd:[Alt+s]            | Пребацује стање активности модула за проверу правописа. | `+/mute spell toggle+`
| kbd:[Alt+=]            | Пребацивање активности филтера. | `+/filter toggle+`
| kbd:[Alt+-]            | Пребацивање активности филтера у текућем баферу. | `+/filter toggle @+`
| kbd:[Alt+Ctrl+l] (`L`) | Пребацује између удаљених и локалних команди на удаљеном баферу (relay "api"). | `+/remote togglecmd+`
|===

[[key_bindings_search_context]]
=== Контекст претраге

Следећи тастери се користе у контексту „search” (када се притисне kbd:[Ctrl+s] за претрагу
текста у линијама бафера).

[width="100%", cols="^.^3,.^8,.^5", options="header"]
|===
| Тастер         | Опис | Команда
| kbd:[Ctrl+x]   | Пребацивање типа претраге: стринг (подраз.), регуларни израз. | `+/input search_switch_regex+`
| kbd:[Alt+c]    | Пребацивање разликовања величине слова у претраци. | `+/input search_switch_case+`
| kbd:[Tab]      | Пребацивање претраге у: порукама (подраз.), префиксима, префиксима + порукама. | `+/input search_switch_where+`
| kbd:[Ctrl+r] +
  kbd:[↑]        | Претрага претходне линије. | `+/input search_previous+`
| kbd:[Ctrl+s] +
  kbd:[↓]        | Претрага наредне линије. | `+/input search_next+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]   | Заустављање претраге на текућој позицији. | `+/input search_stop_here+`
| kbd:[Ctrl+q]   | Заустављање претраге и ресетовање скрола на стање пре почетка претраге текста. | `+/input search_stop+`
|===

[[key_bindings_histsearch_context]]
=== Контекст претраге историје

Следећи тастери се користе у контексту „histsearch” (када се притисне kbd:[Ctrl+r] за претрагу
текста у историји команди).

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Тастер         | Опис | Команда
| kbd:[Ctrl+x]   | Пребацивање типа претраге: стринг (подраз.), регуларни израз. | `+/input search_switch_regex+`
| kbd:[Alt+c]    | Пребацивање разликовања величине слова у претрази. | `+/input search_switch_case+`
| kbd:[Tab]      | Пребацивање претраге по: локалној историји бафера (подразумевано), глобалној историји. | `+/input search_switch_where+`
| kbd:[Ctrl+r] +
  kbd:[↑]        | Претрага по претходним (старијим) ставкама историје. | `+/input search_previous+`
| kbd:[Ctrl+s] +
  kbd:[↓]        | Претрага по наредним (новијим) ставкама историје. | `+/input search_next+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]   | Заустављање претраге и употреба пронађеног улаза. | `+/input search_stop_here+`
| kbd:[Ctrl+o]   | Извршавање команде пронађене у историји и уметање наредне у командну линију. | `+/input history_use_get_next+`
| kbd:[Ctrl+q]   | Заустављање претраге и враћање улаза на почетну вредност. | `+/input search_stop+`
|===

[[key_bindings_cursor_context]]
=== Контекст курсора

Ови тастери се користе у „cursor” контексту (слободно померање курсора по екрану),
погледајте <<cursor_mode,Режим курсора>>.

[width="100%", cols="^.^3,^.^2,.^7,.^7", options="header"]
|===
| Тастер            | Површина       | Опис | Команда
| kbd:[↑]           | -              | Помера курсор једну линију навише. | `+/cursor move up+`
| kbd:[↓]           | -              | Помера курсор једну линију наниже. | `+/cursor move down+`
| kbd:[←]           | -              | Помера курсор једну колони у лево. | `+/cursor move left+`
| kbd:[→]           | -              | Помера курсор једну колону у десно. | `+/cursor move right+`
| kbd:[Alt+↑]       | -              | Помера курсор на прву линију површине. | `+/cursor move edge_top+`
| kbd:[Alt+↓]       | -              | Помера курсор на последњу линију површине. | `+/cursor move edge_bottom+`
| kbd:[Alt+←]       | -              | Помера курсор на прву колону површине. | `+/cursor move edge_left+`
| kbd:[Alt+→]       | -              | Помера курсор на последњу колону површине. | `+/cursor move edge_right+`
| kbd:[Alt+Home]    | -              | Помера курсор на горњи леви угао површине. | `+/cursor move top_left+`
| kbd:[Alt+End]     | -              | Помера курсор на доњи десни угао површине. | `+/cursor move bottom_right+`
| kbd:[Alt+Shift+↑] | -              | Помера курсор једну површину навише. | `+/cursor move area_up+`
| kbd:[Alt+Shift+↓] | -              | Помера курсор једну површину наниже. | `+/cursor move area_down+`
| kbd:[Alt+Shift+←] | -              | Помера курсор једну површину у лево. | `+/cursor move area_left+`
| kbd:[Alt+Shift+→] | -              | Помера курсор једну површину у десно. | `+/cursor move area_right+`
| kbd:[m]           | чет            | Цитирање поруке. | `+hsignal:chat_quote_message;/cursor stop+`
| kbd:[l]           | чет            | Цитирање фокусиране линије. | `+hsignal:chat_quote_focused_line;/cursor stop+`
| kbd:[q]           | чет            | Цитирање префикса + поруке. | `+hsignal:chat_quote_prefix_message;/cursor stop+`
| kbd:[Q]           | чет            | Цитирање времена + префикса + поруке. | `+hsignal:chat_quote_time_prefix_message;/cursor stop+`
| kbd:[b]           | листа надимака | Забрањује надимак. | `+/window ${_window_number};/ban ${nick}+`
| kbd:[k]           | листа надимака | Избацује надимак. | `+/window ${_window_number};/kick ${nick}+`
| kbd:[K]           | листа надимака | Избацује и забрањује надимак. | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[q]           | листа надимака | Отвара упит са надимком. | `+/window ${_window_number};/query ${nick};/cursor stop+`
| kbd:[w]           | листа надимака | Извршава whois над надимком. | `+/window ${_window_number};/whois ${nick}+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]      | -              | Зауставља режим померања курсора | `/cursor stop`
|===

[[key_bindings_mouse]]
=== Миш

Следеће акције мишем су доступне само ако је миш укључен тастером kbd:[Alt+m]
(команда: `+/mouse toggle+`).

[width="100%", cols="^.^3,^.^3,^.^3,.^8,.^8", options="header"]
|===
| Тастер/Точкић ^(1)^ | Гестикулација | Површина           | Опис | Команда
| kbd:[■ □ □]         | -             | чет                | Пребацивање на прозор. | `+/window ${_window_number}+`
| kbd:[■ □ □]         | лево          | чет                | Пребацивање на претходни бафер. | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □]         | десно         | чет                | Пребацивање на наредни бафер. | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □]         | лево (дуго)   | чет                | Пребацивање на први бафер. | `+/window ${_window_number};/buffer 1+`
| kbd:[■ □ □]         | десно (дуго)  | чет                | Пребацивање на последњи бафер. | `+/window ${_window_number};/buffer ++`
| kbd:[▲]             | -             | чет                | Скролује навише неколико линија у историји бафера. | `+/window scroll_up -window ${_window_number}+`
| kbd:[▼]             | -             | чет                | Скролује наниже неколико линија у историји бафера. | `+/window scroll_down -window ${_window_number}+`
| kbd:[Ctrl+▲]        | -             | чет                | Скролује хоризонтално у лево. | `+/window scroll_horiz -window ${_window_number} -10%+`
| kbd:[Ctrl+▼]        | -             | чет                | Скролује хоризонтално у десно. | `+/window scroll_horiz -window ${_window_number} +10%+`
| kbd:[▲]             | -             | чет: fset бафер    | Помера за пет линија навише у fset баферу. | `+/fset -up 5+`
| kbd:[▼]             | -             | чет: fset бафер    | Помера за пет линија наниже у fset баферу. | `+/fset -down 5+`
| kbd:[■ □ □]         | -             | чет: fset бафер    | Бира линију у fset баферу. | `+/window ${_window_number};/fset -go ${fset_option_index}+`
| kbd:[□ □ ■]         | -             | чет: fset бафер    | Пребацује логичку вредност (on/off) или уређује вредност опције. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■]         | лево          | чет: fset бафер    | Умањује вредност за цео број/боју/набрајање, поставља/надовезује вредност за остале типове. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■]         | десно         | чет: fset бафер    | Увећава вредност за цео број/боју/набрајање, поставља/надовезује вредност за остале типове. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■]         | горе / доле   | чет: fset бафер    | Маркира/уклања маркер са више опција. | `+hsignal:fset_mouse+`
| kbd:[▲]             | -             | чет: /list бафер   | Помера за пет линија навише у /list баферу. | `+/list -up 5+`
| kbd:[▼]             | -             | чет: /list бафер   | Помера за пет линија наниже у /list баферу. | `+/list -down 5+`
| kbd:[■ □ □]         | -             | чет: /list бафер   | Бира линију у /list баферу. | `+/window ${_window_number};/list -go ${_chat_line_y}+`
| kbd:[□ □ ■]         | -             | чет: /list бафер   | Приступа IRC каналу на изабраној линији. | `+hsignal:irc_list_mouse+`
| kbd:[▲]             | -             | чет: script бафер  | Помера за пет линија навише у script баферу. | `+/script -up 5+`
| kbd:[▼]             | -             | чет: script бафер  | Помера за пет линија наниже у script баферу. | `+/script -down 5+`
| kbd:[■ □ □]         | -             | чет: script бафер  | Бира линију у script баферу. | `+/script -go ${_chat_line_y}+`
| kbd:[□ □ ■]         | -             | чет: script бафер  | Инсталира/уклања скрипту. | `+/script -go ${_chat_line_y};/script installremove -q ${script_name_with_extension}+`
| kbd:[■ □ □]         | горе / лево   | листа бафера       | Помера бафер на нижи број. | Signal `+buflist_mouse+`.
| kbd:[■ □ □]         | доле / десно  | листа бафера       | Помера бафер на виши број. | Signal `+buflist_mouse+`.
| kbd:[■ □ □]         | -             | листа бафера       | Пребацивање на бафер (претходно посећени багер ако је бафер текући). | Signal `+buflist_mouse+`.
| kbd:[□ □ ■]         | -             | листа бафера       | Пребацивање на наредни посећени бафер ако је бафер текући. | Signal `+buflist_mouse+`.
| kbd:[Ctrl+▲]        | -             | листа бафера       | Пребацивање на претходни бафер. | Signal `+buflist_mouse+`.
| kbd:[Ctrl+▼]        | -             | листа бафера       | Пребацивање на наредни бафер. | Signal `+buflist_mouse+`.
| kbd:[■ □ □]         | горе          | листа надимака     | Скроловање једне стране навише у листи надимака. | `+/bar scroll nicklist ${_window_number} -100%+`
| kbd:[■ □ □]         | доле          | листа надимака     | Скроловање једне стране наниже у листи надимака. | `+/bar scroll nicklist ${_window_number} +100%+`
| kbd:[■ □ □]         | горе (дуго)   | листа надимака     | Скок на почетак листе надимака. | `+/bar scroll nicklist ${_window_number} b+`
| kbd:[■ □ □]         | доле (дуго)   | листа надимака     | Скок на крај листе надимака. | `+/bar scroll nicklist ${_window_number} e+`
| kbd:[■ □ □]         | -             | листа надимака     | Отварање упита са надимком. | `+/window ${_window_number};/query ${nick}+`
| kbd:[□ □ ■]         | -             | листа надимака     | Извршавање whois над надимком. | `+/window ${_window_number};/whois ${nick}+`
| kbd:[■ □ □]         | лево          | листа надимака     | Избацивање надимка. | `+/window ${_window_number};/kick ${nick}+`
| kbd:[■ □ □]         | лево (дуго)   | листа надимака     | Избацивање и забрана надимка. | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[□ □ ■]         | лево          | листа надимака     | Забрана надимка. | `+/window ${_window_number};/ban ${nick}+`
| kbd:[□ □ ■]         | -             | унос               | Хвата догађај миша и умеће његов кôд у командну линију. | `+/input grab_mouse_area+`
| kbd:[▲]             | -             | било која трака    | Скролује траку за -20%. | `+/bar scroll ${_bar_name} ${_window_number} -20%+`
| kbd:[▼]             | -             | било која трака    | Скролује траку за +20%. | `+/bar scroll ${_bar_name} ${_window_number} +20%+`
| kbd:[□ ■ □]         | -             | било где           | Започиње режим померања курсора на овој тачки. | `+/cursor go ${_x},${_y}+`
|===

[NOTE]
^(1)^ Тастери: +
kbd:[◼ □ □]: клик на леви тастер +
kbd:[□ ◼ □]: клик на средњи тастер +
kbd:[□ □ ◼]: клик на десни тастер +
Точкић: +
kbd:[▲]: точкић горе +
kbd:[▼]: точкић доле

[[key_bindings_fset_buffer]]
=== Fset бафер

Ови тастери и акције се користе у fset баферу (погледајте<<fset,Fset додатак>>).

[width="100%", cols="^.^3,^.^2,.^8,.^5", options="header"]
|===
| Тастер                   | Акција ^(1)^ | Опис | Команда
| kbd:[↑]                  |              | Помера једну линију навише. | `+/fset -up+`
| kbd:[↓]                  |              | Помера једну линију наниже. | `+/fset -down+`
| kbd:[PgUp]               |              | Помера једну страну навише. | `+/window page_up+`
| kbd:[PgDn]               |              | Помера једну страну наниже. | `+/window page_down+`
| kbd:[Alt+Home]           | `pass:[<<]`  | Скок на прву линију. | `+/fset -go 0+`
| kbd:[Alt+End]            | `pass:[>>]`  | Скок на последњу линију. | `+/fset -go end+`
| kbd:[F11]                | `pass:[<]`   | Скролује хоризонтално у лево. | `+/fset -left+`
| kbd:[F12]                | `pass:[>]`   | Скролује хоризонтално у десно. | `+/fset -right+`
| kbd:[Alt+Space]          | `t`          | Пребацује стање логичке вредности. | `+/fset -toggle+`
| kbd:[Alt+-]              | `-`          | Одузима 1 од вредности за цео број/боју/набрајање, поставља вредност за остале типове. | `+/fset -add -1+`
| kbd:[Alt++]              | `+`          | Додаје 1 на вредност за цео број/боју/набрајање, надовезује вредност за остале типове. | `+/fset -add 1+`
| kbd:[Alt+f], kbd:[Alt+r] | `r`          | Ресетује вредност. | `+/fset -reset+`
| kbd:[Alt+f], kbd:[Alt+u] | `u`          | Поставља да је вредност празна. | `+/fset -unset+`
| kbd:[Alt+Enter]          | `s`          | Поставља вредност. | `+/fset -set+`
| kbd:[Alt+f], kbd:[Alt+n] | `n`          | Поставља нову вредност. | `+/fset -setnew+`
| kbd:[Alt+f], kbd:[Alt+a] | `a`          | Надовезује на вредност. | `+/fset -append+`
| kbd:[Alt+,]              | `,`          | Маркира/уклања маркирање са опције. | `+/fset -mark 1+`
| kbd:[Shift+↑]            |              | Помера једну линију навише и маркира/уклања маркирање са опције. | `+/fset -up; /fset -mark+`
| kbd:[Shift+↓]            |              | Маркира/уклања маркирање са опције и помера се једну линију наниже. | `+/fset -mark; /fset -down+`
|                          | `m:xxx`      | Маркира приказане опције које се подударају са филтером „xxx” (дозвољава се било који филтер над опцијом или вредности, погледајте команду <<command_fset_fset,/fset>>). |
|                          | `u:xxx`      | Уклања маркирање са приказаних опција које се подударају са филтером „xxx” (дозвољава се било који филтер над опцијом или вредности, погледајте команду <<command_fset_fset,/fset>>). |
| kbd:[Ctrl+l] (`L`)       |              | Освежава опције и цео екран. | `+/fset -refresh+`
|                          | `$`          | Освежава опције (маркиране опције остају маркиране). |
|                          | `$$`         | Освежава опције (уклања се маркирање са свих опција). |
| kbd:[Alt+p]              | `p`          | Пребацује стање опција описа додатка (`pass:[plugins.desc.*]`). | `+/mute /set fset.look.show_plugins_desc toggle+`
| kbd:[Alt+v]              | `v`          | Пребацује стање видљивости траке помоћи. | `+/bar toggle fset+`
|                          | `s:x,y`      | Сортира опције по пољима x,y (погледајте опцију <<option_fset.look.sort,fset.look.sort>>). | `+/mute /set fset.look.sort x,y+`
|                          | `s:`         | Ресетује сортирање на подразумевану вредност (погледајте опцију <<option_fset.look.sort,fset.look.sort>>). | `+/mute /unset fset.look.sort+`
|                          | `w:xxx`      | Извози опције у фајл „xxx”. | `+/fset -export xxx+`
|                          | `w-:xxx`     | Извози опције у фајл „xxx” без помоћи. | `+/fset -export -nohelp xxx+`
|                          | `w+:xxx`     | Извози опције у фајл „xxx” заједно са помоћи. | `+/fset -export -help xxx+`
| kbd:[Ctrl+x]             | `x`          | Пребацује формат који се користи за приказ опција. | `+/fset -format+`
|                          | `q`          | Затвара fset бафер. | `+/buffer close+`
|===

[NOTE]
^(1)^ Акција мора да се унесе као унос у командну линију, након чега се притисне kbd:[Ентер].

[[key_bindings_irc_list_buffer]]
=== IRC /list бафер

Следећи тастери и акције се користе у IRC /list баферу (погледајте команду <<command_irc_list,/list>>).

[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Тастер         | Акција ^(1)^ | Опис | Команда
| kbd:[↑]        |              | Помера једну линију навише. | `+/list -up+`
| kbd:[↓]        |              | Помера једну линију наниже. | `+/list -down+`
| kbd:[PgUp]     |              | Помера једну страну навише. | `+/window page_up+`
| kbd:[PgDn]     |              | Помера једну страну наниже. | `+/window page_down+`
| kbd:[Alt+Home] | `pass:[<<]`  | Скок на прву линију. | `+/list -go 0+`
| kbd:[Alt+End]  | `pass:[>>]`  | Скок на последњу линију. | `+/list -go end+`
| kbd:[F11]      | `pass:[<]`   | Скролује хоризонтално у лево. | `+/list -left+`
| kbd:[F12]      | `pass:[>]`   | Скролује хоризонтално у десно. | `+/list -right+`
| kbd:[Ctrl+j]   | `j`          | Приступа IRC каналу на изабраној линији. | `+/list -join+`
|                | `xxx`        | Приказује само канале са „xxx” у имену или теми (величина слова се не разликује). |
|                | `n:xxx`      | Приказује само канале са „xxx” у имену (величина слова се не разликује). |
|                | `t:xxx`      | Приказује само канале са „xxx” у теми (величина слова се не разликује). |
|                | `u:n`        | Приказује само канале са барем "n" users. |
|                | `u:>n`       | Приказује само канале са више од „n” корисника. |
|                | `u:<n`       | Приказује само канале са мање од „n” корисника. |
|                | `c:xxx`      | Приказује само канале који задовољавају израчунати услов „xxx”, користећи следеће променљиве: name, name2, users, topic. |
|                | `s:x,y`      | Сортира канале по пољима x,y (погледајте команду <<command_irc_list,/list>>). |
|                | `s:`         | Ресетује сортирање на подразумевану вредност (погледајте команду <<command_irc_list,/list>>). |
|                | `$`          | Освежава листу (поново извршава команду <<command_irc_list,/list>>). |
|                | `q`          | Затвара бафер. | `+/buffer close+`
|===

[NOTE]
^(1)^ Акција мора да се унесе као унос у командну линију, након чега се притисне kbd:[Ентер].

[[key_bindings_script_buffer]]
=== Script бафер

Следећи тастери и акције се користе у script баферу (погледајте <<script_manager,script manager>>).

[width="100%", cols="^.^3,^.^2,.^8,.^5", options="header"]
|===
| Тастер            | Акција ^(1)^ | Опис | Команда
| kbd:[↑]           |              | Помера једну линију навише. | `+/script -up+`
| kbd:[↓]           |              | Помера једну линију наниже. | `+/script -down+`
| kbd:[PgUp]        |              | Помера једну страну навише. | `+/window page_up+`
| kbd:[PgDn]        |              | Помера једну страну наниже. | `+/window page_down+`
| kbd:[Alt+i]       | `i`          | Инсталира скрипту. | `+/script install+`
| kbd:[Alt+r]       | `r`          | Брише скрипту. | `+/script remove+`
| kbd:[Alt+l]       | `l`          | Учитава скрипту. | `+/script load+`
| kbd:[Alt+L]       | `L`          | Поново учитава скрипту. | `+/script reload+`
| kbd:[Alt+u]       | `u`          | Уклања скрипту из меморије. | `+/script unload+`
| kbd:[Alt+Shift+A] | `A`          | Аутоучитавање скрипте. | `+/script toggleautoload+`
| kbd:[Alt+h]       | `h`          | Задржава/отпушта скрипту. | `+/script hold+`
| kbd:[Alt+v]       | `v`          | Преглед скрипте. | `+/script show+`
|                   | `s:x,y`      | Сортира скрипте по пољима x,y (погледајте опцију <<option_script.look.sort,script.look.sort>>). |
|                   | `s:`         | Ресетује сортирање на подразумевану вредност (погледајте опцију <<option_script.look.sort,script.look.sort>>). |
|                   | `$`          | Освежава листу. |
|                   | `q`          | Затвара бафер. | `+/buffer close+`
|===

[NOTE]
^(1)^ Акција мора да се унесе као унос у командну линију, након чега се притисне kbd:[Ентер].

[[configuration]]
== Конфигурација

[[fset]]
=== Fset

Fast Set додатак приказује листу опција у баферу и помаже вам да постављате WeeChat опције и опције додатака.

Пример fset бафера који приказује опције што почињу на `weechat.look`:

[subs="quotes"]
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│7/125 | Филтер: weechat.look.* | Сорт: ~name | Тастер(улаз): alt+space=пре>>│
│2.fset   │weechat.look.bare_display_exit_on_input: режим огољеног приказа се напушта п│
│         │ри било каквој промени уноса [подразумевано: on]                            │
│         │----------------------------------------------------------------------------│
│         │  weechat.look.align_end_of_lines              набрајање   message          │
│         │  weechat.look.align_multiline_words           логичка     on               │
│         │  weechat.look.bar_more_down                   стринг      "++"             │
│         │  weechat.look.bar_more_left                   стринг      "<<"             │
│         │  weechat.look.bar_more_right                  стринг      ">>"             │
│         │  weechat.look.bar_more_up                     стринг      "--"             │
│         │##  weechat.look.bare_display_exit_on_input      логичка     on               ##│
│         │  weechat.look.bare_display_time_format        стринг      "%H:%M"          │
│         │  weechat.look.buffer_auto_renumber            логичка     on               │
│         │  weechat.look.buffer_notify_default           набрајање   all              │
│         │  weechat.look.buffer_position                 набрајање   end              │
│         │  weechat.look.buffer_search_case_sensitive    логичка     off              │
│         │  weechat.look.buffer_search_force_default     логичка     off              │
│         │  weechat.look.buffer_search_history           набрајање   local            │
│         │  weechat.look.buffer_search_regex             логичка     off              │
│         │  weechat.look.buffer_search_where             набрајање   prefix_message   │
│         │  weechat.look.buffer_time_format              стринг      "%H:%M:%S"       │
│         │[12:55] [2] [fset] 2:fset                                                   │
│         │█                                                                           │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

[[fset_commands]]
==== Команде

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

[[fset_options]]
==== Опције

Одељци у фајлу _fset.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| color   | /set fset.color.*   | Боје.
| format  | /set fset.format.*  | Формати који се користе за приказ команди.
| look    | /set fset.look.*    | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=fset_options]

[[colors]]
=== Боје

[[colors_basic]]
==== Основне боје

Основне боје у програму WeeChat су:

[width="75%", cols="1m,4", options="header"]
|===
| Име          | Боја
| default      | Подразумевана боја терминала (провидна за позадину)
| black        | Црна
| darkgray     | Тамносива
| red          | Тамноцрвена
| lightred     | Светлоцрвена
| green        | Тамнозелена
| lightgreen   | Светлозелена
| brown        | Браон
| yellow       | Жута
| blue         | Тамноплава
| lightblue    | Светлоплава
| magenta      | Тамномагента
| lightmagenta | Светломагента
| cyan         | Тамноцијан
| lightcyan    | Светлоцијан
| gray         | Сива
| white        | Бела
|===

[[colors_extended]]
==== Проширене боје

Програм WeeChat динамички алоцира парове боја када се боје употребе на екрану (за приказ бафера и трака).

Уз основне боје, можете да користите и број боје између 1 и границе вашег терминала.

Употребите команду `/color` да видите текуће боје и ограничења. Са kbd:[Alt+c] можете привремено да се пребаците на боје терминала како бисте изабрали боју.

На пример, ако желите да се време у баферу приказује у наранџастој боји, извршите:

----
/set weechat.color.chat_time 214
----

Или ако желите тамну тамнозелену позадину за статусну линију:

----
/set weechat.bar.status.color_bg 22
----

[[colors_aliases]]
==== Алијаси

Алијасе боја можете додати командом `/color alias`, па затим користити тај алијас у било којој опцији за боје.

На пример:

----
/color alias 214 orange
/set weechat.color.chat_delimiters orange
----

[[colors_attributes]]
==== Атрибути

За боје можете да користите и неке атрибуте. Испред имена или броја боје можете додати један или више атрибута:

* `+%+`: трептање
* `+.+`: „dim” (затамњено)
* `+*+`: подебљани текст
* `+!+`: обрнути видео
* `+/+`: курзив
* `+_+`: подвучен текст
* `+|+`: задржавање атрибута: приликом измене боје не ресетују се трептање/dim/подебљано/обрнуто/курзив/подвучено


На пример, ако желите да ваш надимак исписује у белој боји, подвучено, извршите:

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

Или ако желите да се у статусној траци време исписује у наранџастој боји, подебљано:

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

Ако атрибуте желите да користите са подразумеваном бојом терминала (-1), морате да употребите број већи од последње боје терминала, на пример, максималну боју у програму WeeChat: 99999.

Пример подебљаног текста са бојом предњег плана терминала:

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

// TRANSLATION MISSING
[[themes]]
=== Теме

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

[[themes_themable_options]]
==== Themable options

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

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

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

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

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

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

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

Backup creation can be disabled (not recommended):

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

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

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

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

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

----
/theme reset
----

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

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

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

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

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

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

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

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

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

Delete a user theme:

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

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

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

A theme file is INI-like with two sections:

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

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

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

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

[[themes_resolution]]
==== Resolution order

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

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

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

[[charset]]
=== Charset

Charset додатак вам омогућава да декодирате и кодирате податке употребом скупова карактера.

Постоји подразумевани скуп карактера за декодирање/кодирање, као и одређени скупови карактера за бафере (или групу бафера).

Овај додатак није обавезан, али се препоручује његова употреба: ако се не учита, програм WeeChat може да чита/пише само UTF-8 податке.

Програм WeeChat би требало аутоматски да учитава charset додатак. Да бисте били сигурни да је учитан, покушајте следеће:

----
/charset
----

Ако се команда не пронађе, онда учитајте додатак командом:

----
/plugin load charset
----

Ако додатак не може да се пронађе, онда би требало поново да компајлирате програм WeeChat са додацима и подршком за Charset.

Када се charset додатак покрене, он приказује скуп карактера терминала као и интерни скуп карактера. Скуп карактера терминала зависи од вашег локал подешавања, а интерно је UTF-8.

На пример:

....
charset: терминал: ISO-8859-15, интерно: UTF-8
....

[[charset_set]]
==== Постављање скупа карактера

Ако желите да поставите глобалне скупове карактера за кодирање и декодирање, употребите команду `/set`.

На пример:

----
/set charset.default.decode ISO-8859-15
/set charset.default.encode ISO-8859-15
----

Ако се не постави глобални скуп карактера за декодирање (на пример током првог учитавања Charset додатка), он ће се аутоматски поставити на скуп карактера који користи терминал (у случају да није UTF-8), или подразумевано на _ISO-8859-1_.

Подразумевана вредност за кодирање је празна, тако да се подразумевано шаље употребом интерног скупа карактера (UTF-8).

Ако желите да поставите скуп карактера IRC сервера, употребите команду `/charset` у серверском баферу. Ако наведете само скуп карактера, онда ће команда поставити вредности за декодирање и кодирање.

На пример:

----
/charset ISO-8859-15
----

Еквивалентно је са:

----
/charset decode ISO-8859-15
/charset encode ISO-8859-15
----

Ако желите да поставите скуп карактера за IRC канал (или приватни разговор), употребите исте команде као за сервер, али у баферу канала (или приватног разговора).

Ако желите да поставите скуп карактера за све канале/приватне разговоре на IRC серверу:

----
/set charset.encode.irc.libera ISO-8859-15
----

Да бисте видели све коришћене скупове карактера, извршите следећу команду:

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

[[charset_troubleshooting]]
==== Решавање проблема

Ако имате било каквих проблема са скуповима карактера, молимо вас да погледате
link:weechat_faq.sr.html#charset[WeeChat ЧПП / Скуп карактера ^↗^^].

[[charset_commands]]
==== Команде

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

[[charset_options]]
==== Опције

Одељци у фајлу _charset.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу                         | Опис
| default | /set charset.default.*                      | Подразумевани скуп карактера за декодирање/кодирање.
| decode  | <<command_charset_charset,/charset decode>> +
            /set charset.decode.*                       | Скуп карактера у који се декодира по баферу (у одељку је могуће додавање/уклањање опција).
| encode  | <<command_charset_charset,/charset encode>> +
            /set charset.encode.*                       | Скуп карактера у који се кодира, по баферу (у одељку је могуће додавање/уклањање опција).
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=charset_options]

[[notify_levels]]
=== Нивои обавештавања

[[setup_notify_levels]]
==== Постављање нивоа обавештавања

У порукама које се приказују у баферима може постојати четири нивоа, од нижег ка вишем:

* _low_: важност поруке је мала (на пример, irc join/part/quit порука)
* _message_: порука од корисника
* _private_: порука у приватном баферу
* _highlight_: порука са истицањем

Сваки бафер поседује ниво обавештавања који се користи за одлуку које поруке се додају на врућу листу бафера.

Подразумевани ниво обавештавања може да се постави опцијом <<option_weechat.look.buffer_notify_default,weechat.look.buffer_notify_default>>, подразумевана вредност је _all_.

[width="75%", cols="2m,7", options="header"]
|===
| Ниво обавештавања | Ниво порука које се додају на врућу листу
| none              | (ниједна)
| highlight         | highlight + private
| message           | highlight + private + message
| all               | highlight + private + message + low
|===

Ниво обавештавања може да се дефинише за скуп бафера, на пример за све бафере irc сервера „libera”:

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

Постављање нивоа обавештавања _highlight_ само на каналу „#weechat”:

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

Ниво обавештавања за бафер може да се постави командом `/buffer`:

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

[[max_hotlist_level_nicks]]
==== Максимални ниво вруће листе за надимке

За неке надимке је могуће постављање максималног нивоа вруће листе, по баферу или по групи бафера (као што су IRC сервери).

Особина бафера „hotlist_max_level_nicks” може да се постави на листу надимака, а за сваки надимак у листи максимални ниво вруће листе који се окида. Могући су следећи нивои:

* -1: за надимак нема измене вруће листе
* 0: ниски приоритет (као што су join/part поруке)
* 1: порука
* 2: приватна порука
* 3: истицање (у суштини је бескорисно, јер је за све поруке већ подразумевани максимум)

На пример, ако желите да искључите истицања од „joe” и „mike” у текућем баферу:

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

[[highlights]]
=== Истицања

[[highlights_disable]]
==== Искључивање истицања

Истицања можете искључити опцијом
<<option_weechat.look.highlight_disable_regex,weechat.look.highlight_disable_regex>>
(регуларни израз). +
Када се овом опцијом искључи истицање, остале опције истицања се игноришу.

На пример, ако желите да искључите било какво истицање у порукама које садрже реч која
почиње на „flash” унутар угластих заграда:

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

Ово такође може да се постави и са особином бафера „highlight_disable_regex”.

Исти пример, који функционише само на текућем баферу:

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

[[highlights_words]]
==== Додавање речи које се истичу

Програм WeeChat подразумевано истиче поруке од осталих корисника које садрже у себи ваш надимак, тако да истицање зависи од бафера (ваш надимак не мора да буде исти у свим баферима).

Остале речи можете да додате опцијом <<option_weechat.look.highlight,weechat.look.highlight>>, на пример ако желите да се истиче ваш надимак и „реч1”, „реч2”, као и све речи које почињу са „test”:

----
/set weechat.look.highlight "реч1,реч2,test*"
----

Ако вам је потребно одређеније правило за реч, можете да употребите регуларне изразе опцијом <<option_weechat.look.highlight_regex,weechat.look.highlight_regex>>, на пример да истакнете речи „flashcode”, „flashcöde” и „flashy”:

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

Граничници око речи које се истичу могу да се прилагоде опцијом <<option_weechat.look.word_chars_highlight,weechat.look.word_chars_highlight>>.

[[highlights_tags]]
==== Додавање ознака истицању

Приказане линије могу да садрже „ознаке” које пружају неке информације о пореклу само поруке. +
Ознаке можете приказати командом `/debug tags` (иста команда их и сакрива).

Опцијом <<option_weechat.look.highlight_tags,weechat.look.highlight_tags>> можете да додате одређене ознаке истицању. Ознаке се раздвајају запетама и више ознака можете да раздвојите са `+++` чиме наводите логичко „и” међу њима.

На пример, ако желите да се истичу све поруке од надимка „FlashCode” и сва обавештења од надимака који почињу са „toto”:

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

[[highlights_regex_buffer]]
==== Постављање посебних истицања у баферу

Истицање помоћу регуларног израза можете да форсирате особином бафера „highlight_regex”.

На пример, да форсирате истицање свих порука у текућем баферу:

----
/buffer setauto highlight_regex .*
----

[[buffer_logging]]
=== Логовање бафера

Logger додатак вам омогућава да чувате садржај бафера у фајлове, и нуди опције којима подешавате шта се и како чува.

[[logger_log_levels]]
==== Лог нивои

Логовање се врши са нивоом за сваки бафер. Подразумевани ниво је 9 (логују се све поруке које су приказане у баферу). Ниво можете да промените само за један бафер, или за групу бафера.

Могући нивои су од 0 до 9. Нула значи „ништа се не логује”, а 9 значи „логују се све поруке”.

Додаци користе различите нивое за приказане поруке. IRC додатак користи следеће нивое:

* ниво 1: порука од корисника (на каналу или приватна)
* ниво 2: измена надимка (вашег или неког другог)
* ниво 3: било која серверска порука (осим join/part/quit)
* ниво 4: join/part/quit серверска порука

Тако да ако за IRC канал поставите ниво 3, програм WeeChat ће логовати све поруке осим join/part/quit.

Неки примери:

* Постављање нивоа 3 за IRC канал #weechat:

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

* Постављање нивоа 3 за libera серверски бафер:

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

* Постављање нивоа 3 за све канале на серверу libera:

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

* Постављање нивоа 2 за све IRC бафере:

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

[[logger_filenames_masks]]
==== Маске имена фајлова

За сваки бафер можете да дефинишете маску имена фајла, па да употребите локалне променљиве бафера за изградњу имена фајла. Да бисте видели доступне локалне променљиве текућег бафера:

----
/buffer listvar
----

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

На пример, у баферу „irc.libera.#weechat”, програм WeeChat ће потражити маску са именом опције, по следећем редоследу:

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

Ово значи да можете имати маске које су специфичне за одређене IRC сервере („logger.mask.irc.libera”) или за додатак („logger.mask.irc”).

[[logger_files_by_date]]
===== Лог фајлови по датуму

Ако желите да се лог фајлови креирају по датуму, у маски можете да употребите спецификаторе датума/времена (за формате, погледајте `man strftime`), на пример:

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

Имаћете следеће фајлове:

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

[[logger_irc_files_by_server_channel]]
===== IRC лог фајлови по серверу и каналу

Ако желите један директоријум по IRC серверу и један фајл по каналу у њему:

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

Имаћете следеће фајлове:

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

[[logger_rotation_compression]]
==== Ротација и компресија

Постоји могућност да се дефинише максимална величина лог фајлова, па када се она достигне,
врши се аутоматска ротација лог фајла.

Ротирани лог фајлови могу да се компресују помоћу gzip или
https://facebook.github.io/zstd/[zstd ^↗^^].

[NOTE]
Пошто компресија фајла може да потраје, она се обавља у позадини.

Пример са максималном величином од 2GB у компресијом помоћу gzip, уз употребу нивоа добре
компресије (спорије од подразумеваног нивоа):

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

Ако желите да користите децимални број, можете да користите јединицу испод и помножите са
1000, на пример да се максимална величина постави на 2.5GB:

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

Помоћу ових подешавања, добићете фајлове као што су следећи (у овом примеру ротација се врши
само за лог #weechat канала):

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

[[logger_commands]]
==== Команде

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

[[logger_options]]
==== Опције

Одељци у фајлу _logger.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set logger.look.*  | Изглед и осећај.
| color   | /set logger.color.* | Боје.
| file    | /set logger.file.*  | Опције за лог фајлове.
| level   | /set logger.level.* | Лог ниво по баферу (у одељку је могуће додавање/уклањање опција).
| mask    | /set logger.mask.*  | Маска имена фајла по баферу (у одељку је могуће додавање/уклањање опција).
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=logger_options]

[[mouse]]
=== Подршка за миша

Програм WeeChat подржава кликове и гестикулације мишем. Ради са локалним терминалом, и удаљено преко ssh везе са или без screen/tmux.

[[mouse_enable]]
==== Укључивање миша

Ако при покретању програма желите да укључите миша:

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

Ако тренутно желите да укључите миша, притисните kbd:[Alt+m] или извршите команду:

----
/mouse enable
----

Миш може привремено да се искључи, а то можете и да вежете за тастер. На пример тастер kbd:[Alt+%] да се на 10 секунди искључи миш:

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

[IMPORTANT]
Када се у програму WeeChat укључи миш, он хвата све догађаје миша, тако да се акције као што су копирање/налепљивање или кликови на URL адресе не шаљу терминалу. Употреба тастера kbd:[Shift] чини да се догађаји шаљу директно терминалу, као да је миш искључен (на неким терминалима као што је iTerm, морате уместо kbd:[Shift] да употребите kbd:[Alt]).

[NOTE]
Ако имате било какав проблем са мишем, молимо вас да погледате
link:weechat_faq.sr.html#mouse[WeeChat ЧПП / Миш ^↗^^].

[[mouse_bind_events]]
==== Везивање догађаја миша за команде

Програм WeeChat је већ дефинисао подразумеване догађаје миша (погледајте <<key_bindings_mouse,акције миша>>).

Командом `/key`, уз употребу контекста „mouse”, можете да измените или да додате нова везивања тастера (у вези синтаксе, погледајте команду <<command_weechat_key,/key>>).

Име догађаја се састоји од модификатора (није обавезан), имена тастера/точкића и гестикулације (није обавезна). Различити елементи се раздвајају са `+-+`.

Листа модификатора (по редоследу имена догађаја):

[width="100%", cols="1m,4", options="header"]
|===
| Модификатор | Опис
| alt         | Тастер kbd:[Alt]
| ctrl        | Тастер kbd:[Ctrl]
| shift       | Тастер kbd:[Shift] ^(1)^
|===

[NOTE]
^(1)^ Модификатор `shift` може ретко да се користи у програму WeeChat јер га многи терминали
користе за директно хватање догађаја миша.

Неколико модификатора може да се комбинује, на пример:

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

Листа тастера/точкића:

[width="100%", cols="1m,4", options="header"]
|===
| Тастер/точкић        | Опис
| button1              | Клик левим тастером
| button2              | Клик десним тастером
| button3              | Клик средњим тастером (често је то клик точкићем)
| button4 ... button11 | Клик на додатне тастере
| wheelup              | Точкић (навише)
| wheeldown            | Точкић (наниже)
|===

Листа гестикулација (само за тастере, не за точкић):

[width="100%", cols="1m,4", options="header"]
|===
| Гестикулација      | Растојање
| gesture-up         | 3 ... 19
| gesture-up-long    | ≥ 20
| gesture-down       | 3 ... 19
| gesture-down-long  | ≥ 20
| gesture-left       | 3 ... 39
| gesture-left-long  | ≥ 40
| gesture-right      | 3 ... 39
| gesture-right-long | ≥ 40
|===

Листа некомплетних догађаја (само за тастере, корисно је у додацима/скриптама):

[width="100%", cols="1m,4", options="header"]
|===
| Догађај    | Опис
| event-down | Тастер је притиснут, али још увек није отпуштен
| event-drag | Миш је померен док се тастер држао притиснут
|===

Примери догађаја:

* `button1`
* `ctrl-button1`
* `button1-gesture-right`
* `button1-event-down`
* `button1-event-drag`
* `alt-button2-gesture-down-long`
* `wheelup`
* `alt-ctrl-wheeldown`
* ...

[TIP]
Када се тастер везује у „mouse” контексту, могуће је подударање са више догађаја користећи `+*+` на почетку или крају имена, на пример `+button1-gesture-*+` ће да се подудари са било којом гестикулацијом која користи леви тастер миша.

[TIP]
Име догађаја можете сазнати командом `+/input grab_mouse+`, па извршавањем догађаја мишем. Ово ће да уметне име догађаја који сете извели у командну линију.

[[spell_checking]]
=== Провера правописа

Spell додатак вам омогућава да проверите правопис у командној линији. У баферу можете да користите више језика.

Подразумевано је провера правописа искључена и стање активности може да се мења тастером kbd:[Alt+s].

[[spell_dictionaries]]
==== Речници

Пре него што будете могли да користите проверу правописа, морате да дефинишете речнике, или глобално, или посебно за бафере.

У исто време можете да користити више речника: програм WeeChat ће проверавати речи у свим речницима.

На пример, ако желите да користите енглески и француски:

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

Могуће је да у одређеном баферу користите различити речник, на пример, на немачком каналу:

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

Можете такође да наведете и речник за групу бафера, на пример енглески на свим каналима IRC сервера libera:

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

За више информација, погледајте команду <<command_spell_spell,/spell>>.

[[spell_speller_options]]
==== Опције модула за проверу правописа

Опције модула за проверу правописа могу да се дефинишу додавањем опција у одељак „option” aspell конфигурације.

Име опције је aspell конфигурациона опција. Листа опција може да се пронађе у командном окружењу помоћу следеће команде:

[source,shell]
----
aspell config
----

На пример, ако желите да укључите опцију „ignore-case”:

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

[[spell_suggestions]]
==== Предлози

Предлози се приказују у ставки траке под именом „spell_suggest”. Број предлога се поставља у опцији _spell.check.suggestions_.

Да бисте укључили предлоге морате поставити вредност опције _spell.check.suggestions_ на цео број ≥ 0 и да додате ставку траке „spell_suggest” у неку траку, као на пример у _status_.

Пример предлога са енглеским речником (`en`):

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

Пример предлога са енглеским и француским речницима (`en,fr`):

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

[[spell_commands]]
==== Команде

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

[[spell_options]]
==== Опције

Одељци у фајлу _spell.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак     | Команда за контролу                    | Опис
| color      | /set spell.color.*                     | Боје.
| check      | /set spell.check.*                     | Опције за контролу провере правописа.
| dict       | <<command_spell_spell,/spell setdict>> +
               /set spell.dict.*                      | Речници који се користе у баферу (у одељку је могуће додавање/уклањање опција).
| look       | /set spell.look.*                      | Изглед и осећај.
| option     | /set spell.option.*                    | <<spell_speller_options,Опције модула проверу правописа>> (у одељку је могуће додавање/уклањање опција).
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=spell_options]

[[bars]]
=== Траке

_трака_ је површина уз разговор која може да садржи било коју врсту текста.

Опције траке могу да се поставе опцијама `weechat.bar.име.опција` где је `име` име траке, а `опција` опција за ту траку.

Листа опција траке:

[width="100%", cols="2m,2,10", options="header"]
|===
| Опција | Вредности | Опис

| type | `root`, `window`
| Трака типа `root` се приказује тачно једном на екрану, ван свих прозора.
  Тип подразумеване траке _buflist_ је `root`. +
  Трака са типом `window` се приказује у сваком прозору, на пример ако поделите
  једном екран (са `/window splith` или `/window splitv`), имаћете
  једну траку у сваком прозору. Подразумеване траке _title_, _status_,
  _input_ и _nicklist_ су типа `window`.

| position | `top`, `bottom`, `left`, `right`
| Позиција траке: изнад/испод разговора, са леве/десне стране.

| priority | цео број ≥ 0
| Приоритет за приказ траке: ово се користи за ређање трака на екрану када
  више трака имају исти тип и исту позицију. +
  Траке се приказују од ивице екрана према центру. Виши приоритет значи да
  ће се трака приказивати на почетку, дакле, ближе ивици. +
  Пример: _input_ трака има приоритет 1000, тако да се приказује испред _status_
  траке, која има приоритет 500.

| size | цео број ≥ 0
| Величина траке: број колона за позицију left/right, број линија за
  позицију top/bottom. Величина `0` значи аутоматски, тако да ће се
  величина израчунати у зависности од садржаја који се приказује у траци.

| size_max | цео број ≥ 0
| Максимална величина траке, `0` = нема ограничења (ова опција се користи
  само ако је `size` = `0`).

| color_bg | боја
| Подразумевана боја позадине траке.

| color_fg | боја
| Подразумевана боја текста у траци.

| color_delim | боја
| Боја граничника у траци.

| hidden | `on`, `off`
| Када је ова опција `on`, трака је скривена. +
  Напомена: уместо да мењате ову опцију, боље је да користите команду `/bar`,
  на пример: `/bar toggle nicklist` (погледајте команду <<command_weechat_bar,/bar>>).

| separator | `on`, `off`
| Када је ова опција `on`, између ове траке и осталих (или разговора) се
  приказује граничник (линија).

| items | стринг
| Листа _items_ (погледајте <<bar_items,ставке>> за више информација).

| filling_left_right | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+`
| Тип испуне за траку која има позицију `left` или `right` (погледајте
  <<bar_filling,испуну>> за више информација).

| filling_top_bottom | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+`
| Тип испуне за траку која има позицију `top` или `bottom` (погледајте
  <<bar_filling,испуну>> за више информација).

| conditions | стринг
| Услови под којима се трака приказује (погледајте <<bar_conditions,услове>> за
  више информација).
|===

[[bar_items]]
==== Ставке

Опција _items_ је стринг са листом ставки траке, раздвојених запетом (ставке су на екрану раздвојене размаком) или `+++` (спојене ставке).

Листа ставки траке се приказује командом `/bar listitems`.

Испред или након имена ставке можете да употребите карактере (који нису слова или цифре, `+-+` или `+_+`). Они ће се приказивати испред/иза ставке у боји граничника која је дефинисана за траку (опција _color_delim_).

Пример за траку са ставкама
„[time],buffer_number+:+buffer_plugin+.+buffer_name,[buffer_last_number]”:

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

[[item_spacer]]
===== Spacer ставка

За поравнање ставки (лево, центрирано, десно) може да се користи `spacer` ставка.

Када се у траци употреби барем једна `spacer` ставка, користи се комплетна ширина траке:
шпацири се аутоматски проширују са истом (или скоро истом) ширином. +
Када трака није довољно велика за све ставке, шпацири се не приказују.

[NOTE]
`spacer` ставка траке може да се користи само у тракама чија је позиција `top` или `bottom`,
испуна `horizontal` и величина `1`.

Пример траке са ставкама
"[time],spacer,buffer_number+:+buffer_plugin+.+buffer_name,spacer,[buffer_last_number]":

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

[[item_force_buffer]]
===== Форсирани бафер

Ако желите да форсирате бафер у којем ће се приказивати ставка траке, употребите посебну синтаксу: „@бафер:ставка” (где је „бафер” пуно име бафера, а „ставка” је име ставке траке).

Ово је корисно у кореним (root) тракама код приказа ставке за неки одређени бафер који се не приказује у текућем прозору (или се чак уопште не приказује).

Пример: листа надимака за bitlbee у кореној траци (ако се трака зове _bitlist_ а bitlbee сервер се зове _bitlbee_):

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

[[custom_bar_items]]
===== Прилагођене ставке траке

Командом <<command_weechat_item,/item>> могу да се додају прилагођене ставке траке.
Свака нова ставка има две особине дефинисане конфигурационим опцијама:

* `conditions`: израчунати услови под којима се ставка траке приказује, на пример
  да се ставка траке ограничи само на одређене бафере (ако је празно, ставка траке
  се приказује свуда)
* `content`: израчунати садржај ставке траке.

У обе опције могу да се користе следеће променљиве:

* `window`: показивач на прозор у којем се приказује трака (`NULL` за корене траке)
* `buffer`: показивач на бафер у којем се приказује трака (за корене траке је текући бафер).

Примери услова:

[width="100%",cols="3,10",options="header"]
|===
| Услов | Опис
| `${window}` | Приказује се само у тракама прозора
| `${buffer.number} == 1` | Приказује се у свим баферима чији је број = 1
| `${buffer.plugin.name} == irc` | Приказује се у свим IRC баферима
| `${type} == channel` | Приказује се у свим баферима у којима је локална променљива `type` постављена на `channel` (пример: сви IRC канали)
| `${type} == private` | Приказује се у свим баферима у којима је локална променљива `type` постављена на `private` (пример: сви IRC приватни бафери)
|===

[NOTE]
Не постоји уграђени начин за освежавање прилагођених ставки траке. Можете да искористите
<<trigger,Trigger>> додатак да форсирате освежавање, на пример преко једног или више
примљених сигнала.

За више информација и још примера, погледајте <<command_weechat_item,/item>> команду.

[[bar_filling]]
==== Испуна

Постоји четири врсте испуне:

* `+horizontal+`: ставке се приказују хоризонтално, с лева у десно. Ако у ставкама постоје преломи линија, за раздвајање линија се користи размак.
* `+vertical+`: ставке се приказују од врха ка дну. Ако у ставкама постоје преломи линија, за раздвајање линија се користи прелом линија.
* `+columns_horizontal+`: ставке се приказују по колонама, уз лево поравнат текст. Прва ставка је горе лево, друга у истој линији, са њене десне стране.
* `+columns_vertical+`: ставке се приказују по колонама, уз лево поравнат текст. Прва ставка је горе лево, друга ставка је једну линију испод.

Подразумеване траке _title_, _status_ и _input_ имају _horizontal_ испуну, а подразумевана трака _nicklist_ има _vertical_ испуну.

Неки примери испуне за траку _nicklist_:

....
┌───────────────────────────────────────────────────────────────────────┐
│Добродошли на #test, ово је тест канал                                 │
│12:54:15 peter | hey!                                         │@carl   │
│12:55:01  +Max | hello                                        │@jessika│
│                                                              │@maddy  │
│                                                              │%Diego  │
│                                                              │%Melody │
│                                                              │+Max    │
│                                                              │ celia  │
│                                                              │ Eva    │
│                                                              │ freddy │
│                                                              │ Harold^│
│                                                              │ henry4 │
│                                                              │ jimmy17│
│                                                              │ jodie ▼│
│[12:55] [6] [irc/libera] 3:#test(+n){24}                               │
│[@carl] █                                                              │
└───────────────────────────────────────────────────────────────────────┘
                                     filling_left_right = vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│Добродошли на #test, ово је тест канал                                 │
│12:54:15 peter | hey!                                │@carl     lee    │
│12:55:01  +Max | hello                               │@jessika  louise │
│                                                     │@maddy    mario  │
│                                                     │%Diego    mark   │
│                                                     │%Melody   peter  │
│                                                     │+Max      Rachel │
│                                                     │ celia    richard│
│                                                     │ Eva      sheryl │
│                                                     │ freddy   Vince  │
│                                                     │ Harold^  warren │
│                                                     │ henry4   zack   │
│                                                     │ jimmy17         │
│                                                     │ jodie           │
│[12:55] [6] [irc/libera] 3:#test(+n){24}                               │
│[@carl] █                                                              │
└───────────────────────────────────────────────────────────────────────┘
                             filling_left_right = columns_vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│@carl    %Diego    celia    Harold^  jodie    mario    Rachel   Vince  │
│@jessika %Melody   Eva      henry4   lee      mark     richard  warren │
│@maddy   +Max      freddy   jimmy17  louise   peter    sheryl   zack   │
│───────────────────────────────────────────────────────────────────────│
│                                                                       │
        filling_top_bottom = columns_vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│@carl    @jessika @maddy   %Diego   %Melody  +Max      celia    Eva    │
│ freddy   Harold^  henry4   jimmy17  jodie    lee      louise   mario  │
│ mark     peter    Rachel   richard  sheryl   Vince    warren   zack   │
│───────────────────────────────────────────────────────────────────────│
│                                                                       │
      filling_top_bottom = columns_horizontal ▲
....

[[bar_conditions]]
==== Услови

Опција _conditions_ је стринг који се израчунава како би се одредило да ли трака сме да се прикаже или не.

Стринг може да буде:

* _active_: прозор мора бити активан
* _inactive_: прозор мора бити неактиван
* _nicklist_: бафер који се приказује у прозору мора имати листу надимака
* израз: израчунава се као логичка вредност (погледајте команду <<command_weechat_eval,/eval>>)

У изразу су доступне следеће променљиве:

* `+${active}+`: истинито ако је прозор активан
* `+${inactive}+`: истинито ако је прозор неактиван
* `+${nicklist}+`: истинито ако бафер приказан у прозору има листу надимака

Доступни су следећи показивачи:

* `+${window}+`: прозор за који се израчунава услов
* `+${buffer}+`: бафер прозора за који се израчунава услов

Пример за приказ nicklist траке у свим баферима са листом надимака, само ако је ширина терминала > 100:

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

Исти услов, само што се листа надимака увек приказује у баферу _&bitlbee_ (чак и ако је терминал мали):

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

[[secured_data]]
=== Обезбеђени подаци

[[secured_data_storage]]
==== Чување

Програм WeeChat може да шифрује лозинке или приватне податке употребом обезбеђених података који се чувају у фајлу _sec.conf_.

Овај конфигурациони фајл се чита пре свих осталих, па се вредности из њега могу користити у разним опцијама програма WeeChat или опцијама додатака/скрипти.

Можете поставити тајну реченицу за шифровање података у фајлу _sec.conf_. То није обавезно, али се топло препоручује, јер ако то не учините подаци се у фајл уписују као чист текст.

----
/secure passphrase ово је моја тајна реченица
----

[[secured_data_passphrase_on_startup]]
===== Тајна реченица током покретања

Када је тајна реченица постављена, програм WeeChat ће од вас тражити да је унесете током покретања програма (али не и током `/upgrade`).

Ако користите менаџер лозинки, можете да покренете спољни програм из којег ће се прочитати лозинка, тако да не морате ручно да је уносите током покретања програма WeeChat. +
На пример, са password-store (команда `pass`):

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

Програм може тражити да откључате свој GPG кључ или да унесете другу тајну реченицу како би могао да прочита тајну. Програм WeeChat ће сачекати да команда заврши своје извршавање и прочитаће тајну реченицу са стандардног излаза (она мора бити у првој линији, без икаквих додатних карактера). +
Ако излаз не садржи тајну реченицу, или ако је она погрешна, програм WeeChat ће онда од вас тражити да је унесете.

[[secured_data_encryption]]
===== Шифрирање

Шифрирање података се ради у 3 корака:

. Извођење кључа из тајне реченица (уз необавезну со).
. Израчунавање хеша података који треба да се шифрирају.
. Шифрирање хеша + података (излаз је: со + шифрирани хеш/подаци).

[NOTE]
Блок режим шифре је _CFB_.

Резултат се као хексадецимални стринг поставља у фајл _sec.conf_, на пример:

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

[[secured_data_decryption]]
===== Дешифровање

Дешифровање података се ради у 3 корака:

. Извођење кључа употребом соли и тајне реченице.
. Дешифровање хеша + података.
. Провера да ли дешифровани хеш == хеш података.

[[secured_data_manage]]
==== Управљање обезбеђеним подацима

Да бисте додали обезбеђене податке, употребите `/secure set`, на пример лозинку за _libera_ IRC сервер:

----
/secure set libera мојалозинка
----

Да би се олакшао рад, обезбеђени подаци могу да се прикажу у посебном баферу (kbd:[Alt+v] у баферу да видите вредности), једноставно извршите:

----
/secure
----

Обезбеђени подаци могу да се користе у неким опцијама које садрже приватне податке као што су лозинке, употребом формата: „${sec.data.xxx}” где је „xxx” име обезбеђених података (постављених са `/secure set xxx ...`). +
За комплетну листу подржаних опција, погледајте команду <<command_weechat_secure,/secure>>.

Да бисте употребили _libera_ лозинку, на пример са <<irc_sasl_authentication,SASL аутентификацијом>>:

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

[[command_aliases]]
=== Алијаси команди

Алијас додатак вам омогућава да креирате алијасе за команде (из програма WeeChat или осталих додатака).

Неки алијаси се подразумевано креирају, са именом исписаним великим словима (како би се разликовали од обичних команди); у програму WeeChat команде не разликују величину слова, тако да на пример, `/close` покреће алијас `/CLOSE`.

Листа подразумеваних алијаса:

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

[[alias_commands]]
==== Команде

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

[[alias_options]]
==== Опције

Одељци у фајлу _alias.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак     | Команда за контролу            | Опис
| cmd        | <<command_alias_alias,/alias>> +
               /set alias.cmd.*               | Команде за алијасе.
| completion | <<command_alias_alias,/alias>> +
               /set alias.completion.*        | Довршавања за алијасе.
|===

[[commands_and_options]]
=== Команде и опције

[[weechat_commands]]
==== WeeChat команде

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

[[sec_options]]
==== Опције за обезбеђене податке

Одељци у фајлу _sec.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу                | Опис
| crypt   | /set sec.crypt.*                   | Опције за шифровање.
| data    | <<command_weechat_secure,/secure>> | Обезбеђени подаци.
|===

Опције:

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

[[weechat_options]]
==== WeeChat опције

Одељци у фајлу _weechat.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак     | Команда за контролу                        | Опис
| debug      | <<command_weechat_debug,/debug set>>       +
               /set weechat.debug.*                       | Дибаг ниво, за језгро и додатке (у одељку је могуће додавање/уклањање опција).
| startup    | /set weechat.startup.*                     | Опције покретања програма.
| look       | /set weechat.look.*                        | Изглед и осећај.
| palette    | <<command_weechat_color,/color alias>>     +
               /set weechat.palette.*                     | Алијаси боја (у одељку је могуће додавање/уклањање опција).
| color      | /set weechat.color.*                       | Боје.
| completion | /set weechat.completion.*                  | Опције довршавања.
| history    | /set weechat.history.*                     | Опције историје (команди и бафера).
| proxy      | <<command_weechat_proxy,/proxy>>           +
               /set weechat.proxy.*                       | Прокси опције.
| network    | /set weechat.network.*                     | Мрежне/TLS опције.
| plugin     | /set weechat.plugin.*                      | Опције додатака.
| signal     | /set weechat.signal.*                      | Опције сигнала.
| bar        | <<command_weechat_bar,/bar>>               +
               /set weechat.bar.*                         | Опције трака.
| layout     | <<command_weechat_layout,/layout>>         | Распореди.
| buffer     | <<command_weechat_buffer,/buffer setauto>> | Особине које се аутоматски примењују на бафере када се отварају.
| notify     | <<command_weechat_buffer,/buffer notify>>  | Нивои обавештавања за бафере (у одељку је могуће додавање/уклањање опција).
| filter     | <<command_weechat_filter,/filter>>         | Филтери.
| key        | <<command_weechat_key,/key>>               | Тастери у подразумеваном контексту.
| key_search | <<command_weechat_key,/key>>               | Тастери у search контексту.
| key_cursor | <<command_weechat_key,/key>>               | Тастери у cursor контексту.
| key_mouse  | <<command_weechat_key,/key>>               | Тастери у mouse конексту.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=weechat_options]

[[irc]]
== IRC

IRC додатак је дизајниран за чет са другим људима преко IRC протокола.

Подржава више сервера и нуди све подржане IRC команде, укључујући DCC чет и пренос фајлова (преко xfer додатка, погледајте <<xfer,Xfer додатак>>).

[[irc_command_line_options]]
=== Опције командне линије

URL за један или више IRC сервера може да се зада на следећи начин:

----
irc[6][s]://[надимак[:лозинка]@]irc.пример.org[:порт][/канал][,канал[...]]
----

Пример за приступ каналима _#weechat_ и _#weechat-fr_ на серверу _irc.libera.chat_,подразумевани порт (6667), користећи надимак _alice_:

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

[[irc_servers]]
=== Сервери

[[irc_servers_add]]
==== Додавање сервера

Подразумевано није дефинисан ниједан сервер. Командом <<command_irc_server,/server>>
можете додати произвољан број сервера.

На пример, да бисте се повезали на https://libera.chat/[libera.chat ^↗^^]:

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

[NOTE]
Подразумевани порт је 6697 у укључен је TLS (шифровање саобраћаја).

Програму WeeChat можете наложити да се приликом покретања аутоматски повеже са овим сервером:

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

За аутентификацију се препоручује употреба SASL (ако сервер подржава),
са лозинком сачуваном као обезбеђени податак (погледајте такође поглавље
о <<irc_sasl_authentication,SASL аутентификацији>>):

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

Ако се SASL не подржава, можете да употребите команду која шаље поруку nickserv:

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

[NOTE]
Ако пошаљете поруку сервису nickserv, постоји могућност да се аутентификујете након
приступања каналу, што може да представља проблем на неким каналима који захтевају
да се аутентификујете пре приступања. У овом случају, можете поставити кашњење за команду:
`/set irc.server.libera.command_delay 5`.

[[irc_servers_options]]
==== Опције сервера

Опције сервера се називају `irc.server.<сервер>.<опција>` где је `<сервер>` интерно
име сервера, а `<опција>` је име опције. +
У случају када опција сервера има специјалну вредност `null`, стварна вредност се
наслеђује из `irc.server_default.xxx`.

На пример, ако сте креирали _libera_ сервер са командама наведеним изнад, видећете
следећи списак када будете извршите команду `/fset libera`:

....
irc.server.libera.addresses             стринг      "irc.libera.chat"
irc.server.libera.anti_flood            целобројна  null -> 2000
irc.server.libera.autoconnect           логичка     on
irc.server.libera.autojoin              стринг      null -> ""
irc.server.libera.autojoin_delay        целобројна  null -> 0
irc.server.libera.autojoin_dynamic      логичка     null -> off
irc.server.libera.autoreconnect         логичка     null -> on
irc.server.libera.autoreconnect_delay   целобројна  null -> 10
irc.server.libera.autorejoin            логичка     null -> off
irc.server.libera.autorejoin_delay      целобројна  null -> 30
irc.server.libera.away_check            целобројна  null -> 0
irc.server.libera.away_check_max_nicks  целобројна  null -> 25
irc.server.libera.capabilities          стринг      null -> "*"
irc.server.libera.charset_message       набрајање   null -> message
irc.server.libera.command               стринг      null -> ""
irc.server.libera.command_delay         целобројна  null -> 0
irc.server.libera.connection_timeout    целобројна  null -> 60
irc.server.libera.default_chantypes     стринг      null -> "#&"
irc.server.libera.ipv6                  набрајање   null -> auto
irc.server.libera.local_hostname        стринг      null -> ""
irc.server.libera.msg_kick              стринг      null -> ""
irc.server.libera.msg_part              стринг      null -> "WeeChat ${info:version}"
irc.server.libera.msg_quit              стринг      null -> "WeeChat ${info:version}"
irc.server.libera.nicks                 стринг      null -> "${username},${username}2,${username}3,${username}4,${username}5"
irc.server.libera.nicks_alternate       логичка     null -> on
irc.server.libera.notify                стринг      null -> ""
irc.server.libera.password              стринг      null -> ""
irc.server.libera.proxy                 стринг      null -> ""
irc.server.libera.realname              стринг      null -> ""
irc.server.libera.registered_mode       стринг      null -> "r"
irc.server.libera.sasl_fail             набрајање   null -> reconnect
irc.server.libera.sasl_key              стринг      null -> ""
irc.server.libera.sasl_mechanism        набрајање   null -> plain
irc.server.libera.sasl_password         стринг      "${sec.data.libera}"
irc.server.libera.sasl_timeout          целобројна  null -> 15
irc.server.libera.sasl_username         стринг      "alice"
irc.server.libera.split_msg_max_length  целобројна  null -> 512
irc.server.libera.tls                   логичка     null -> on
irc.server.libera.tls_cert              стринг      null -> ""
irc.server.libera.tls_dhkey_size        целобројна  null -> 2048
irc.server.libera.tls_fingerprint       стринг      null -> ""
irc.server.libera.tls_password          стринг      null -> ""
irc.server.libera.tls_priorities        стринг      null -> "NORMAL"
irc.server.libera.tls_verify            логичка     null -> on
irc.server.libera.usermode              стринг      null -> ""
irc.server.libera.username              стринг      null -> "${username}"
....

На пример, ако желите да се аутоматски повежете са свим серверима које сте дефинисали, без
потребе да то подешавате за сваки од њих посебно, можете да урадите следеће:

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

Па затим можете да ресетујете серверску опцију тако да користи подразумевану, наслеђену
вредност, која је сада `on` уместо подразумеване вредности `off`:

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

[[irc_tls_certificates]]
==== TLS сертификати

Када се са IRC серверима успоставља веза преко TLS, програм WeeChat подразумевано проверава да ли се вези потпуно верује.

Неке опције се користе за контролу TLS везе:

weechat.network.gnutls_ca_system::
    током покретања учитава подразумеване системске сертификате којима се верује

weechat.network.gnutls_ca_user::
    додатни фајл(ови) са ауторитетима сертификата

irc.server.xxx.tls_cert::
    Фајл TLS сертификата који се користи за аутоматску идентификацију вашег надимка (на пример CertFP на oftc, погледајте испод)

irc.server.xxx.tls_dhkey_size::
    величина кључа који се користи током Дифи-Хелман Размене Кључева (подразумевано је: 2048)

irc.server.xxx.tls_verify::
    провера да се TLS вези потпуно верује (подразумевано је укључено)

[NOTE]
Опција „tls_verify” је подразумевано укључена, тако да је верификација стриктна и може да не успе, чак и када је била OK у верзијама пре 0.3.1.

[[irc_connect_oftc_with_certificate]]
===== Први пример: повезивање на oftc и провера сертификата

* Увоз сертификата у командном окружењу:

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

[NOTE]
`~/.config/weechat` морате да замените путањом до вашег WeeChat config директоријума који на пример, такође може да буде `~/.weechat`.

[NOTE]
Можете да надовежете више сертификата у фајл CAs.pem.

* У програму WeeChat, када је сервер „oftc” већ додат:

----
/connect oftc
----

[[irc_connect_oftc_with_certfp]]
===== Други пример: повезивање са oftc употребом CertFP

* Креирајте сертификат у командном окружењу:

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

[NOTE]
`~/.config/weechat` морате да замените путањом до вашег WeeChat config директоријума који на пример, такође може да буде `~/.weechat`.

* У програму WeeChat, када је сервер „oftc” већ додат:

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

За више информација, молимо вас да погледате
https://www.oftc.net/NickServ/CertFP/[ову страницу ^↗^^].

[[irc_sasl_authentication]]
==== SASL аутентификација

Програм WeeChat подржава SASL аутентификацију, употребом различитих механизама:

* _plain_: лозинка у чистом тексту (подразумевано)
* _scram-sha-1_: SCRAM са SHA-1 digest алгоритмом
* _scram-sha-256_: SCRAM са SHA-256 digest алгоритмом
* _scram-sha-512_: SCRAM са SHA-512 digest алгоритмом
* _ecdsa-nist256p-challenge_: изазов са јавним/приватним кључем
* _external_: TLS сертификат са клијентске стране

Опције за сервере су следеће:

* _sasl_mechanism_: механизам који треба да се користи (погледајте изнад)
* _sasl_timeout_: тајмаут (у секундама) за аутентификацију
* _sasl_fail_: акција која треба да се изврши ако аутентификација не успе
* _sasl_username_: корисничко име (надимак)
* _sasl_password_: лозинка
* _sasl_key_: фајл са ECC приватним кључем (за механизам _ecdsa-nist256p-challenge_)

[[irc_sasl_ecdsa_nist256p_challenge]]
===== SASL ECDSA-NIST256P-CHALLENGE

Да бисте могли да се аутентификујете ECDSA-NIST256P-CHALLENGE механизмом, морате да генеришете приватни кључ (није потребна лозинка за успостављање везе).

Кључ можете да генеришете следећом командом:

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

[NOTE]
`~/.config/weechat` морате да замените путањом до вашег WeeChat config директоријума који на пример, такође може да буде `~/.weechat`.

Набавите јавни кључ (кодиран у base64) следећом командом:

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

Повежите се са сервером, идентификујте се (на пример са „nickserv identify”) и поставите свој јавни кључ у налог, користећи nickserv (замените base64 вредност са вредношћу вашег јавног кључа):

----
/connect libera
/msg nickserv identify ваша_лозинка
/msg nickserv set pubkey Av8k1FOGetUDq7sPMBfufSIZ5c2I/QYWgiwHtNXkVe/q
----

Подесите SASL опције за сервер:

----
/set irc.server.libera.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.libera.sasl_username "ваш_надимак"
/set irc.server.libera.sasl_key "${weechat_config_dir}/ecdsa.pem"
----

Поново успоставите везу са сервером:

----
/reconnect libera
----

[[irc_servers_connection]]
==== Повезивање

Командом <<command_irc_connect,/connect>> можете да се повежете са сервером:

----
/connect libera
----

Ако желите да прекинете везу:

----
/disconnect libera
----

Или просто ово ако се налазите у било којем баферу који припада _libera_
серверу (сервер, канал, приватни разговор):

----
/disconnect
----

Када се у исто време повежете са неколико сервера, бафери сервера се подразумевано
спајају, па тастером kbd:[Ctrl+x] можете да се крећете између њих. +
Аутоматско спајање серверских бафера може да се искључи, тако да имате по један
бафер за сваки сервер:

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

[[irc_tor_sasl]]
==== Повезивање преко Tor и SASL

Неки сервери подржавају и везе са https://www.torproject.org/[Tor ^↗^^],
мрежом виртуелних тунела који омогућавају људима и групама да унапреде своју приватност и безбедност на Интернету.

Најпре морате да инсталирате Tor. За Debian (и изведене из њега):

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

У програму WeeChat морате да додате socks5 прокси за Tor сервис (имехоста/IP и порт зависе од ваше Tor конфигурације):

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

Додајте сада нови сервер (замените име сервера „irc-tor” и адресу са важећим вредностима):

----
/server add irc-tor ово.је.адреса.onion
----

Поставите прокси за Tor:

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

Поставите SASL аутентификацију са ECDSA-NIST256P-CHALLENGE (погледајте поглавље <<irc_sasl_ecdsa_nist256p_challenge,SASL ECDSA-NIST256P-CHALLENGE>> у вези генерисања приватног кључа):

----
/set irc.server.irc-tor.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.irc-tor.sasl_username "ваш_надимак"
/set irc.server.irc-tor.sasl_key "${weechat_config_dir}/ecdsa.pem"
----

И коначно, успоставите везу са сервером:

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

[[irc_ircv3_support]]
=== IRCv3 подршка

WeeChat подржава следећа https://ircv3.net/irc/[IRCv3 проширења ^↗^^]:

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

Подразумевно су укључене све могућности које подржавају и сервер и WeeChat (погледајте
опцију <<option_irc.server_default.capabilities,irc.server_default.capabilities>>).

Табеле са поређењем различитих IRC клијената, укључујући и WeeChat, налазе се на
on https://ircv3.net/software/clients[овој страници ^↗^^].

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

Спецификација: https://ircv3.net/specs/extensions/account-notify[account-notify ^↗^^]

Ова могућност оспособљава сервер да шаље поруке када се корисници идентификују на сервер или
када са сервера уклоне своју идентификацију. +
WeeChat такве поруке приказује ако је опција
<<option_irc.look.display_account_message,irc.look.display_account_message>>
укључена (што је подразумевана вредност).

Примери:

....
-- alice се идентификовао као Alice01

-- alice је уклонио идентификацију
....

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

Спецификација: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^^]

Ова могућност оспособљава сервер да шаље налог као ознаку поруке у командама које шаље клијенту. +
WeeChat парсира ову ознаку у чува је у поруци, али се она не користи нити приказује. Може да се
користи у <<command_weechat_filter,/filter>> команди за филтрирање порука које се подударају са
одређеним налозима.

Пример примљене сирове IRC поруке:

....
@account=Alice01 :user@example.com PRIVMSG #test :Здраво!
....

Порука која се приказује у каналу:

....
<alice> Здраво!
....

Порука са ознакама:

....
<alice> Здраво! [irc_privmsg,irc_tag_account_Alice01,notify_message,prefix_nick_lightcyan,nick_alice,host_user@example.com,log1]
....

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

Спецификација: https://ircv3.net/specs/extensions/away-notify[away-notify ^↗^^]

Ово могућност оспособљава сервер да шаље обавештења о одсуству за кориснике на истом каналу
на којем се и ви налазите.

Када се за корисника промени статус одсутности (одсутан или ту је), то се употребом
следећих опција осликава одређеном бојом у листи надимака:

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

[[irc_ircv3_batch]]
==== batch

Спецификација: https://ircv3.net/specs/extensions/batch[batch ^↗^^]

Ова могућност дозвољава да сервер шаље догађаје у пакету (тј. да групише неколико
порука које су у вези).

WeeChat за сада само само чува поруке примљене у пакету и обрађује их као и обично касније,
када се заврши пакет.

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

Спецификација: https://ircv3.net/specs/extensions/capability-negotiation#the-cap-new-subcommand[cap-notify ^↗^^]

Ово могућност оспособљава сервер да објављује нове или уклоњене могућности сервера
(посредством `CAP NEW` и `CAP DEL` команди).

Примери:

....
-- irc: могућност клијента, сада је доступно: sasl

-- irc: могућност клијента, уклоњено: sasl
....

[[irc_ircv3_chghost]]
==== chghost

Спецификација: https://ircv3.net/specs/extensions/chghost[chghost ^↗^^]

Ова могућност оспособљава сервер да шаље поруке када корисници промене име или хост. +
Када је опција <<option_irc.look.smart_filter_chghost,irc.look.smart_filter_chghost>>
укључена (што је подразумевана вредност), промене хоста се аутоматски скривају ако
надимак није говорио неколико минута. +
Боја поруке о промени хоста се контролише опцијом
<<option_irc.color.message_chghost,irc.color.message_chghost>>.

Пример:

....
-- alice (user@example.com) је променио свој хост на test.com
....

[[irc_ircv3_draft_multiline]]
==== draft/multiline

Спецификација: https://ircv3.net/specs/extensions/multiline[multiline ^↗^^]

Ова могућност дозвољава да клијент и сервер шаљу поруке у више линија када се користи
<<irc_ircv3_batch,batch>> могућност, која такође мора да буде укључена.

Постоје ограничења у броју бајтова или линија вишелинијске поруке која се наводе у
могућности коју пошаље сервер, на пример:

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

Ово за вишелинијски пакетни садржај поставља ограничење на 4096 бајтова и 24 линије.

Ако сервер не наведе ограничења, WeeChat користи следеће подразумеване вредности:

* макс бајтова: 4096
* макс линија: 24

Вишелинијске могу да буду само стандардне поруке, као и оне које шаље команда
<<command_irc_notice,/notice>>. +
Ова могућност не утиче на ACTION CTCP поруке које се шаљу комадом <<command_irc_me,/me>>.
То значи да се вишелинијске акције шаљу као више акција.

[WARNING]
Пошто је спецификација „draft”, може да се промени, па вишелинијска подршка у
WeeChat може у сваком тренутку престати да функционише. +
Могућност се аутоматски укључује ако је сервер подржава, а може да се искључи
следећом командом:
`/set irc.server_default.capabilities "*,!draft/multiline"`. +
Када се могућност искључи, вишелинијска порука се шаље као више порука, као да
су једна за другом послате серверу.

Пример IRC порука које се шаљу за корисничку поруку у две линије (`ово је тест`
/ `у две линије`), послато на канал #test:

....
BATCH +i8Je7M7gquddoyC9 draft/multiline #test
@batch=i8Je7M7gquddoyC9 PRIVMSG #test :ово је тест
@batch=i8Je7M7gquddoyC9 PRIVMSG #test :у две линије
BATCH -i8Je7M7gquddoyC9
....

Приказ послатих порука у WeeChat:

....
19:01:45 alice | ово је тест
               | у две линије
....

[[irc_ircv3_echo_message]]
==== echo-message

Спецификација: https://ircv3.net/specs/extensions/echo-message[echo-message ^↗^^]

Ова могућност форсира да сервер шаље поруке PRIVMSG, NOTICE и TAGMSG назад програму
WeeChat.

WeeChat приказује само примљену поруку, а не и послату, тако да се може приметити
кањење између слања и приказа. Када се порука прикаже, то значи да је сервер исправно
примио поруку, као и да је поруку проследио осталим клијентима који су повезани на сервер.

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

Спецификација: https://ircv3.net/specs/extensions/extended-join[extended-join ^↗^^]

Ова могућност оспособљава сервер да шаље налог и право име када корисници приступе
каналима. +
WeeChat приказује ове додатне информације у порукама приступа ако је опција
<<option_irc.look.display_extended_join,irc.look.display_extended_join>>
укључена (што је подразумевана вредност).

Пример:

....
--> john [John01] (John Doe) (~user@example.com) је приступио у #test
....

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

Спецификација: https://ircv3.net/specs/extensions/invite-notify[invite-notify ^↗^^]

Ова могућност оспособљава сервер да шаље позивне поруке када се корисници позову на канале.

Пример:

....
-- alice је позвао bob на #test
....

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

Спецификација: https://ircv3.net/specs/extensions/message-tags[message-tags ^↗^^]

Ова могућност оспособљава додавање метаподатака у поруке. +
Ове ознаке могу да се прикажу командом `/debug tags`.

Она мора бити укључена да би се користила <<typing_notifications,обавештења о куцању>>.

[[irc_ircv3_monitor]]
==== monitor

Спецификација: https://ircv3.net/specs/extensions/monitor[monitor ^↗^^]

Ова могућност оспособљава сервер да шаље обавештења када клијенти оду
ван мреже/повежу се на мрежу. +
Ако је доступно, WeeChat аутоматски користи ово проширење када користи команду
<<command_irc_notify,/notify>>.

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

Спецификација: https://ircv3.net/specs/extensions/multi-prefix[multi-prefix ^↗^^]

Ова могућност оспособљава сервер да шаље све корисничке режиме одједном у
<<command_irc_names,/names>> и <<command_irc_whois,/whois>> одговорима. +

////
Пример: излаз команде `/names`:

....
-- Надимци #test: [@%+alice bob +carol]
....
////

[NOTE]
За сада WeeChat не приказује све префиксе у излазу команде `/names`, чак и ако се
пример и интерно сачувају исправно.

Пример: излаз команде `/whois alice`:

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

[[irc_ircv3_sasl]]
==== SASL

Спецификација: https://ircv3.net/specs/extensions/sasl-3.2[SASL 3.2 ^↗^^]

Погледајте посебно поглавље <<irc_sasl_authentication,SASL аутентификација>>.

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

Спецификација: https://ircv3.net/specs/extensions/server-time[server-time ^↗^^]

Ова могућност оспособљава сервер да шаље време за поруке као ознаку поруке. +
Када се у поруци прими време, WeeChat то користи у приказу поруке (она тада
може да се прикаже са датумом у прошлости).

<<relay_irc_proxy,IRC прокси>> у Relay додатку подржава ову могућност, тако да
би сваки IRC клијент Релеја требало да је укључи како би се приликом повезивања
у дневнику пропуштених порука приказало реално време пристизања порука.

[[irc_ircv3_setname]]
==== setname

Спецификација: https://ircv3.net/specs/extensions/setname[setname ^↗^^]

Ова могућност вам нуди опцију да промените своје реално име употребом
<<command_irc_setname,/setname>> команде.

[[irc_ircv3_typing]]
==== typing

Спецификација: https://ircv3.net/specs/client-tags/typing[typing ^↗^^]

Погледајте посебно поглавље <<typing_notifications,Обавештења о куцању>>.

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

Спецификација: https://ircv3.net/specs/extensions/userhost-in-names[userhost-in-names ^↗^^]

Ова могућност оспособљава сервер да шаље имена хостова у <<command_irc_names,/names>> одговорима.

[NOTE]
WeeChat не приказује имена хостова у излазу команде `/names`.

Пример сирових IRC порука примљених без ове могућности:

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

Пример сирових IRC порука примљених са овом могућношћу:

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

[[irc_ircv3_whox]]
==== WHOX

Спецификација: https://ircv3.net/specs/extensions/whox[WHOX ^↗^^]

Ова могућност вас оспособљава да у WHO одговору захтевате додатна поља
(помоћу команде <<command_irc_who,/who>>). +
WeeChat приказује све додатне информације које се приме у WHO излазу.

[[irc_channels]]
=== Канали

Каналима приступате командом <<command_irc_join,/join>>:

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

Напуштање канала (уз остављање отвореног бафера):

----
/part [порука о напуштању]
----

Канали којима приступите се не чувају. Ако желите да им аутоматски приступите
када се повежете са сервером, морате поставити `autojoin` опцију за сервер:

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

[NOTE]
Неке скрипте могу да помогну са аутоматским постављањем ове опције,
погледајте `/script search autojoin`.

Будите пажљиви, за раздвајање листе канала од кључева могу да се користе само размаци,
на пример, ако `#канал1` захтева кључ, а `#канал2` не захтева:

----
/set irc.server.libera.autojoin "#канал1,#канал2 кључ1"
----

За помоћ у вези са форматом, погледајте опцију <<option_irc.server_default.autojoin,irc.server_default.autojoin>>.

[[irc_private_messages]]
=== Приватне поруке

Командом <<command_irc_query,/query>> можете да шаљете приватне поруке и
она отвара посебан бафер:

----
/query здраво перо, како си?
----

Без аргумената, команда једноставно отвара бафер (или га активира ако је већ отворен):

----
/query пера
----

Ако желите да затворите приватни бафер, урадите то следећом командом у приватном баферу:

----
/close
----

[[irc_smart_filter]]
=== Паметни филтер

Паметни филтер служи за филтрирање неких порука које током подесивог интервала долазе
након што нико није ништа писао:

- join: корисник приступа каналу
- part: корисник напушта канал
- quit: корисник раскида везу са сервером
- account: корисник мења свој налог
- chghost: корисник мења име или хост
- mode: промене режима на каналу
- nick: корисник мења свој надимак
- setname: корисник мења своје реално име

Паметни филтер је подразумевано укључен, али морате да додате филтер како би се у
баферима линије скривале, на пример:

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

Постоји могућност да се креира филтер само за један канал, или за више канала који
почињу истим именом (погледајте команду <<command_weechat_filter,/filter>>):

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

Можете да поставите веће кашњење (у минутима):

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

Ако нико није ништа написао последњих 10 минута, његове поруке као што су
join/part/quit ће се подразумевано сакрити на каналу, па можете да употребите
тастер kbd:[Alt+=] (укљ./искљ. филтере) да их видите.

[[irc_ctcp_replies]]
=== CTCP одговори

CTCP одговори могу да се прилагоде, или неки CTCP упити могу да се блокирају (да се не пошаље одговор).

На пример, ако желите да прилагодите одговор на CTCP „VERSION”, употребите следећу команду:

----
/set irc.ctcp.version "Користим WeeChat ${version}, одличан је!"
----

[NOTE]
Име CTCP мора бити исписано малим словима. То значи да опција _irc.ctcp.VERSION_
не би радила.

Ако желите да блокирате CTCP „VERSION” (да се не пошаље одговор на овај упит), онда поставите празан стринг:

----
/set irc.ctcp.version ""
----

Могу да се прилагоде чак и непознати CTCP, можете на пример да одговорите на CTCP „BLABLA”:

----
/set irc.ctcp.blabla "Ево мог одговора на CTCP BLABLA"
----

CTCP може да се прилагоди само за један сервер, употребом његовог интерног имена испред CTCP имена:

----
/set irc.ctcp.libera.version "WeeChat ${version} (за libera)"
----

Ако желите да вратите стандардни CTCP одговор, уклоните опцију:

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

CTCP одговори се израчунавају (погледајте команду <<command_weechat_eval,/eval>>) и
доступне су следеће додатне променљиве:

[width="100%", cols="2,4,8", options="header"]
|===
| Променљива         | Опис                                | Вредност/пример
| `+${clientinfo}+`  | Листа подржаних CTCP                | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| `+${version}+`     | Верзија програма WeeChat            | `+4.1.0-dev+`
| `+${versiongit}+`  | WeeChat верзија + Git верзија ^(1)^ | `+4.1.0-dev (git: v4.0.0-51-g8f98b922a)+`
| `+${git}+`         | Git верзија ^(1)^                   | `+v4.0.0-51-g8f98b922a+`
| `+${compilation}+` | Датум компајлирања програма WeeChat | `+Jul  8 2023 20:14:23+`
| `+${osinfo}+`      | Инфо о ОС                           | `+Linux 5.10.0-23-amd64 / x86_64+`
| `+${site}+`        | WeeChat вебсајт                     | `+https://weechat.org/+`
| `+${download}+`    | WeeChat сајт, страна за преузимање  | `+https://weechat.org/download/+`
| `+${time}+`        | Текући датум/време                  | `+Суб, 08 јул 2023 21:11:19 +0200+`
| `+${username}+`    | Корисничко име на IRC серверу       | `+име+`
| `+${realname}+`    | Реално име на IRC серверу           | `+Пера Перић+`
|===

[NOTE]
^(1)^ Git верзија је излаз команде `git describe`. Позната је само ако је програм WeeChat компајлиран унутар Git репозиторијума и ако је Git инсталиран.

Подразумевани CTCP осговори су:

[width="100%", cols="2,4,8", options="header"]
|===
| CTCP       | Формат одговора               | Пример
| CLIENTINFO | `+${clientinfo}+`             | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| SOURCE     | `+${download}+`               | `+https://weechat.org/download/+`
| TIME       | `+${time}+`                   | `+Суб, 08 Јул 2023 21:11:19 +0200+`
| VERSION    | `+WeeChat ${version}+`        | `+WeeChat 4.1.0-dev+`
|===

[[irc_target_buffer]]
=== Циљни бафер за IRC поруке

Могуће је прилагођавање циљног бафера за IRC поруке (бафер који се користи за приказ порука) опцијама `+irc.msgbuffer.*+`.

За неке IRC поруке (погледајте листу испод), можете да користите вредност:

current::
    текући бафер (ако је IRC бафер, или подразумевано у серверском баферу)

private::
    приватни бафер за надимак, или текући/серверски бафер ако се тај не пронађе (сагласно са опцијом _irc.look.msgbuffer_fallback_)

server::
    серверски бафер

weechat::
    Бафер „језгра” програма WeeChat

Када опција није постављена (подразумевано), програм WeeChat бира погодан бафер, обично је то серверски или бафер канала.

Непотпуна листа IRC порука или алијаса које можете да прилагодите:

[width="100%", cols="^2m,^3m,15", options="header"]
|===
| порука  | алијас        | опис
| error   |               | грешка
| invite  |               | позвани сте на канал
| join    |               | приступ
| kick    |               | избацивање
| kill    |               | убијање
| mode    |               | режим
| notice  |               | обавештење
| part    |               | одлазак
| quit    |               | напуштање
| topic   |               | тема
| wallops |               | wallops
|         | ctcp          | ctcp (послата или примљена, у privmsg или notice поруци)
| 221     |               | стринг режима корисника
| 275     | whois         | whois (безбедна веза)
| 301     | whois         | whois (одсутан)
| 303     |               | ison
| 305     | unaway        | вратио се
| 306     | away          | одсутан
| 307     | whois         | whois (регистровани надимак)
| 310     | whois         | whois (режим помоћи)
| 311     | whois         | whois (корисник)
| 312     | whois         | whois (сервер)
| 313     | whois         | whois (оператор)
| 314     | whowas        | whowas
| 315     | who           | who (крај)
| 317     | whois         | whois (неактиван)
| 318     | whois         | whois (крај)
| 319     | whois         | whois (канали)
| 320     | whois         | whois (идентификован корисник)
| 321     | list          | list (старт)
| 322     | list          | list (канал)
| 323     | list          | list (крај)
| 326     | whois         | whois (има oper privs)
| 327     | whois         | whois (хост)
| 328     |               | URL канала
| 329     |               | датум креирања канала
| 330     | whois         | whois (пријављен као)
| 331     |               | нема теме за канал
| 332     |               | тема канала
| 333     |               | инфо о теми
| 335     | whois         | whois (да ли је бот)
| 338     | whois         | whois (хост)
| 341     |               | позивница
| 343     | whois         | whois (је opered као)
| 344     | reop          | reop канала
| 345     | reop          | reop канала (крај)
| 346     | invitelist    | листа позваних
| 347     | invitelist    | листа позваних (крај)
| 348     | exceptionlist | листа изузетака
| 349     | exceptionlist | листа изузетака (крај)
| 351     |               | верзија сервера
| 352     | who           | who
| 353     | names         | листа корисника на каналу
| 366     | names         | крај /names листе
| 367     | banlist       | листа забрањених
| 368     | banlist       | крај листе забрањених
| 369     | whowas        | whowas (крај)
| 378     | whois         | whois (повезује се са)
| 379     | whois         | whois (употребом режима)
| 401     | whois         | нема таквог надимка/канала
| 402     | whois         | нема таквог сервера
| 432     |               | погрешан надимак
| 433     |               | надимак се већ користи
| 438     |               | нисте ауторизовани да промените надимак
| 671     | whois         | whois (безбедна веза)
| 728     | quietlist     | листа ућутканих
| 729     | quietlist     | крај листе ућутканих
| 732     | monitor       | листа надимака који се прате
| 733     | monitor       | листа надимака који се прате (крај)
| 901     |               | сада сте пријављени
|===

И остале нумеричке команде могу да се прилагоде.

Испред поруке може да стоји име сервера како би била специфична за одређени irc сервер (на пример: `libera.whois`).

Неки примери:

* Приказ резултата команде `/whois` у приватном баферу:

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

* Враћање подразумеваног бафера за whois (серверски бафер):

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

* Приказивање позивнице у текућем баферу, само за „libera” сервер:

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

* Приказивање „303” (ison) поруке у баферу „језгра” програма WeeChat:

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

[[irc_commands]]
=== Команде

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

[[irc_options]]
=== Опције

Одељци у фајлу _irc.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак         | Команда за контролу            | Опис
| look           | /set irc.look.*                | Изглед и осећај.
| color          | /set irc.color.*               | Боје.
| network        | /set irc.network.*             | Мрежне опције.
| msgbuffer      | /set irc.msgbuffer.*           | <<irc_target_buffer,Циљни бафер за IRC поруке>> (у одељку је могуће додавање/уклањање опција).
| ctcp           | /set irc.ctcp.*                | <<irc_ctcp_replies,CTCP одговори>> (у одељку је могуће додавање/уклањање опција).
| ignore         | <<command_irc_ignore,/ignore>> | Игнорисање људи.
| server_default | /set irc.server_default.*      | Подразумеване вредности за сервере (користе се када у серверу није дефинисана опција).
| server         | <<command_irc_server,/server>> +
                   /set irc.server.*              | Сервери.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=irc_options]

[[xfer]]
== Xfer

Xfer додатак вам омогућава:

* директни разговор (између два хоста, без сервера): на пример „DCC Chat” преко IRC додатка
* пренос фајлова, на пример „DCC” преко IRC додатка

[[xfer_commands]]
=== Команде

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

[[xfer_options]]
=== Опције

Одељци у фајлу _xfer.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set xfer.look.*    | Изглед и осећај.
| color   | /set xfer.color.*   | Боје.
| network | /set xfer.network.* | Мрежне опције.
| file    | /set xfer.file.*    | Опције за послате/примљене фајлове.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=xfer_options]

[[typing_notifications]]
== Обавештења о куцању

Додатак typing се користи да обавести остале кориснике када куцате поруке, као и да
прикаже листу корисника који тренутно куцају поруке у баферу.

Користи га IRC додатак на баферима канала и на приватним баферима када је укључена
„message-tags” могућност (што можете да проверите командом <<command_irc_cap,/cap>>). +
Под хаубом, користи се клијентска ознака о куцању, у складу са
https://ircv3.net/specs/client-tags/typing[овом спецификацијом ^↗^^].

[[typing_activation]]
=== Активација

Ова могућност је подразумевано искључена из разлога приватности. +
Ако желите да је користите, морате да укључите опцију и у typing и у irc додатку:

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

Обавештења о куцању се приказују на крају статусне линије.

Пример статусне линије са ставком "typing": "bob" куца поруку, а
"alice" је куцала порукку и направила паузу:

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

[[typing_signals_sent]]
=== Сигнали који се шаљу

Када куцате поруку (не команду која поиње са `/`), typing додатак шаље сигнале
којима обавештава остале додатке (као што је IRC) да куцате, па онда ови додаци
могу осталим корисницима да шаљу обавешења о куцању.

Док куцате поруке, шаљу се следећи сигнали:

[width="100%",cols="1,1,5",options="header"]
|===
| Сигнал              | Аргументи         | Опис
| typing_self_typing  | Показивач: Бафер. | Куцате поруку.
| typing_self_paused  | Показивач: Бафер. | Направили сте паузу током куцања поруке.
| typing_self_cleared | Показивач: Бафер. | Обрисали сте командну линију и нисте послали поруку.
| typing_self_sent    | Показивач: Бафер. | Послали сте поруку у бафер.
|===

[[typing_signals_caught]]
=== Сигнали који се хватају

Typing додатак хвата неке сигнале које шаљу остали додаци (као што је IRC)
и ажурира интерне хеш табеле које се користе за чување стања куцања надимака
у баферу. Ове хеш табеле се користе за изградњу садржаја „typing” ставке
траке.

Typing додатак хвата следеће сигнале:

[width="100%",cols="1,4,3",options="header"]
|===
| Сигнал | Аргументи | Опис

| typing_set_nick
| Стринг: показивач на бафер + ";" + стање (једнос од: "off", "typing", "paused",
  "cleared") + ";" + надимак. +
  Пример: "0x1234abcd;typing;alice".
| Поставља стање куцања за надимак у баферу.

| typing_reset_buffer
| Показивач: бафер.
| Уклања стање куцања за све надимке у баферу.
|===

[[typing_options]]
=== Опције

Одељци у фајлу _typing.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Одељак | Команда за контролу | Опис
| look   | /set typing.look.*  | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=typing_options]

[[relay]]
== Релеј

Релеј додатак се користи за релеј података преко мреже, употребом различитих протокола:

* _irc_: IRC прокси: користи се за дељење веза са IRC серверима са једним или више других клијената
* _api_: HTTP REST API, користе га WeeChat и удаљени интерфејси да прикажу и да имају интеракцију
  са WeeChat
* _weechat_: протокол који удаљени интерфејси користе да прикажу и да имају интеракцију са
  WeeChat.

За _api_ и _weechat_ протоколе, погледајте листу удаљених интерфејса на
https://weechat.org/about/interfaces/[овој страници ^↗^^].

[[relay_password]]
=== Лозинка

Топло се препоручује постављање лозинке за релеј следећим командама:

----
/secure set relay мојалозинка
/set relay.network.password "${sec.data.relay}"
----

Ова лозинка се користи са свим протоколима.

[[relay_totp]]
=== TOTP

Уз лозинку, као други фактор за _api_ и _weechat_ протоколе може да се користи TOTP
(Time-based One-Time Password) (једнократна лозинка базирана на времену).

Ово није обавезно, мада повећава ниво безбедности.

једнократне лозинке могу да се генеришу апликацијама, на пример:

* FreeOTP:
  https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp[Android ^↗^^],
  https://apps.apple.com/fr/app/freeotp-authenticator/id872559395[iOS ^↗^^]
  (https://freeotp.github.io/[вебсајт ^↗^^])
* Google Authenticator: https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2[Android ^↗^^],
  https://apps.apple.com/fr/app/google-authenticator/id388497605[iOS ^↗^^]

TOTP тајна мора да се постави у програму WeeChat и у апликацији која се користи за генерисање једнократних лозинки.

То мора бити стринг кодиран у base32, само са словима и цифрама од 2 до 7, на пример:

----
/secure set relay_totp тајналозинкаbase32
/set relay.network.totp_secret "${sec.data.relay_totp}"
----

[[relay_tls]]
=== TLS

TLS можете да користите креирањем сертификата и приватног кључа и употребом префикса „tls.” у имену протокола.

Подразумевана путања до сертификата/кључа је дефинисана опцијом <<option_relay.network.tls_cert_key,relay.network.tls_cert_key>>.

Сертификат и приватни кључ можете да креирате следећим командама:

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

[NOTE]
`~/.config/weechat` морате да замените путањом до вашег WeeChat config директоријума који на пример, такође може да буде `~/.weechat`.

Ако се програм WeeChat већ извршава, сертификат и приватни кључ можете поново да учитате командом:

----
/relay tlscertkey
----

[[relay_irc_proxy]]
=== IRC прокси

Релеј додатак може да се понаша као IRC прокси: симулираће IRC сервер, па можете да се повежете са програмом WeeChat помоћу било ког другог IRC клијента (укључујући и сам WeeChat).

Можете да дефинишете по један порт за сваки IRC сервер, или један генерички за све сервере.

Када се користи један порт за све сервере, клијент мора да пошаље интерно име сервера у IRC команди „PASS”, у следећем формату (погледајте пример испод):

----
PASS сервер:лозинка
----

Пример: IRC прокси са TLS за било који сервер (клијент ће изабрати):

----
/relay add tls.irc 8000
----

Пример: IRC прокси без TLS само за сервер „libera”:

----
/relay add irc.libera 8000
----

Сада можете да успоставите везу на порту 8000 помоћу било ког IRC клијента употребом лозинке „мојалозинка” (или „libera:мојалозинка” ако у релеју није био наведен ниједан сервер).

На пример, ако као IRC клијент користите програм WeeChat, а сервер се зове „relay” и релеј лозинка је „secret”, можете да поставите лозинку следећим командама:

----
/secure set relay_libera libera:secret
/set irc.server.relay.password "${sec.data.relay_libera}"
----

[[relay_api_protocol]]
=== API протокол

Релеј додатак може да шаље податке удаљеном WeeChat програму или интерфејсу користећи
HTTP REST API протокол.

API можете да погледате и тестирате на мрежи:
https://weechat.org/api/[WeeChat Релеј API ^↗^^].

Можете да се повежете са програмом WeeChat или са удаљеним интерфејсом, погледајте
https://weechat.org/about/interfaces/[ову страницу ^↗^^].

На пример:

----
/relay add api 9000
----

Сада са WeeChat или са удаљеним интерфејсом можете да се повежете портом 9000 користећи
лозинку „mypassword”.

Да се са WeeChat повежете на _api_ релеј који се извршава локално:

----
/remote add weechat http://localhost:9000 -password=mypassword
/remote connect weechat
----

Да се са WeeChat повежете на _api_ релеј који се извршава на другом месту
(TLS се снажно прпоручује):

----
/remote add weechat https://example.com:9000 -password=mypassword
/remote connect weechat
----

[NOTE]
Удаљени WeeChat мора да објави исту API верзију као и локални WeeChat, тако
да се снажно препоручује да користите потпуно исту WeeChat верзију на удаљеном
и на локалном клијенту.

[[relay_weechat_protocol]]
=== WeeChat протокол

Релеј додатак може да шаље податке удаљеном интерфејсу користећи WeeChat протокол.

Можете да се повежете са удаљеним интерфејсом, погледајте
https://weechat.org/about/interfaces/[ову страницу ^↗^^].

[IMPORTANT]
Сам програм WeeChat НЕ може да се повеже на други програм WeeChat преко овог протокола.

На пример:

----
/relay add weechat 9500
----

Сада можете да се повежете са удаљеног интерфејса преко порта 9500 користећи лозинку „мојалозинка”.

[[relay_websocket]]
=== ВебСокет

Релеј додатак подржава ВебСокет протокол (https://datatracker.ietf.org/doc/html/rfc6455[RFC 6455 ^↗^^])
за све протоколе.

ВебСокет руковање се аутоматски детектује и ако се у руковању пронађу одговарајућа заглавља и ако је порекло дозвољено (погледајте опцију <<option_relay.network.websocket_allowed_origins,relay.network.websocket_allowed_origins>>), сокет постаје спреман за WebSocket.

ВебСокет може да се отвори у HTML5 једном једином линијом JavaScript кода:

[source,javascript]
----
websocket = new WebSocket("ws://example.com:9500/weechat");
----

Порт (9500 у примеру) је порт који је дефинисан у Релеј додатку.

URI мора да се завршава са „/weechat” за _irc_ и _weechat_ протоколе, а са „/api”
за _api_ протокол.

[[relay_unix_socket]]
=== UNIX доменски сокети

Ако у `/relay add` команди употребите опцију протокола „unix”, можете да ослушкујете било којим протоколом на UNIX доменском сокету на задатој путањи. На пример:

----
/relay add unix.weechat ${weechat_runtime_dir}/relay_socket
----

Ово омогућава да се клијенти повежу користећи weechat протокол на _/run/user/1000/weechat/relay_socket_. Врло је корисно за дозвољавање SSH прослеђивања релеј клијентима, када други портови не могу да се отворе.

Употребом OpenSSH:

[source,shell]
----
ssh -L 9000:.weechat/relay_socket корисник@имехоста
----

Ово преусмерава локалне релеј клијенте који се повезују на порт 9000 на инстанцу програма WeeChat која се извршава на машини „имехоста”.

[[relay_commands]]
=== Команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=relay_commands]

[[relay_options]]
=== Опције

Одељци у фајлу _relay.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу                | Опис
| look    | /set relay.look.*                  | Изглед и осећај.
| color   | /set relay.color.*                 | Боје.
| network | /set relay.network.*               | Мрежне опције.
| irc     | /set relay.irc.*                   | Опције специфичне за irc протокол (irc прокси).
| port    | <<command_relay_relay,/relay add>> +
            /set relay.port.*                  | Портови који се користе за релеј (у одељку је могуће додавање/уклањање опција).
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=relay_options]

[[external_commands]]
== Спољне команде

Команда `/exec` вам омогућава да извршите спољне команде из програма WeeChat и да локално прикажете њихов излаз, или да га пошаљете у бафер.

[[exec_commands]]
=== Команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=exec_commands]

[[exec_options]]
=== Опције

Одељци у фајлу _exec.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| command | /set exec.command.* | Опције за команде.
| color   | /set exec.color.*   | Боје.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=exec_options]

[[fifo_pipe]]
== FIFO пајп

Програм WeeChat можете даљински да контролишете слањем команди или текста у FIFO пајп (ако је укључена опција „fifo.file.enabled”, што је подразумевано).

FIFO пајп се налази у WeeChat директоријуму за време извршавања (runtime) и подразумевано се зове _weechat_fifo_12345_ (где је _12345_ id процеса програма WeeChat).

Синтакса за FIFO пајп команде/текст је једно од следећих:

....
  plugin.buffer *овде иде текст или команда
  *овде иде текст или команда
....

Овим форматом могу да се интерпретирају обрнуте косе црте, где је `*` замењено са `\`,
чиме се омогућава слање вишелинијских порука, на пример:

....
  plugin.buffer \овде иде текст или команда
  \овде иде текст или команда
....

Неки примери:

* Измена надимка на IRC серверу libera на „newnick”:

[source,shell]
----
echo 'irc.server.libera */nick newnick' >/run/user/1000/weechat/weechat_fifo_12345
----

* Слање поруке на #weechat IRC канал:

[source,shell]
----
echo 'irc.libera.#weechat *hello!' >/run/user/1000/weechat/weechat_fifo_12345
----

* Слање вишелинијске поруке на IRC канал #test, у случају да је могућност „draft/multiline”
  укључена на ergo серверу:

[source,shell]
----
echo 'irc.ergo.#test \здраво\n...на две линије!' >/run/user/1000/weechat/weechat_fifo_12345
----

* Слање поруке у текући бафер:

[source,shell]
----
echo '*здраво!' >/run/user/1000/weechat/weechat_fifo_12345
----

* Слање две команде за уклањање из меморије/поновно учитавање Python скрипти (морате да их раздвојите са „\n”):

[source,shell]
----
printf '%b' '*/python unload\n*/python autoload\n' >/run/user/1000/weechat/weechat_fifo_12345
----

[[fifo_commands]]
=== Команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=fifo_commands]

[[fifo_options]]
=== Опције

Одељци у фајлу _fifo.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| file    | /set fifo.file.*    | Контрола FIFO пајпа.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=fifo_options]

[[trigger]]
== Окидач

Окидач је Швајцарски војни нож програма WeeChat: може да ухвати многе ствари (сигнал, модификатор, испис, итд.), измени садржај података, и изврши једну или више команди. Ако желите да спречите покретање окидача у неким околностима, можете употребити услов.

За коришћење окидача је неопходно познавање начина на који функционишу сигнали, модификатори, ... Стога је пожељно да прочитате
link:weechat_plugin_api.sr.html#hooks[WeeChat референтни приручник API додатака / Куке ^↗^^].

[[trigger_default]]
=== Подразумевани окидачи

Програм WeeChat подразумевано креира 5 окидача који могу да се искључе, ажурирају или обришу:

* _beep_ окидач за обавештења
* четири остала окидача за скривање лозинки на екрану

Листа подразумеваних окидача:

[width="100%", cols="5m,3,22", options="header"]
|===
| Име | Кука | Опис

| beep | испис
| Звучни сигнал у случају истакнуте/приватне поруке.

| cmd_pass | модификатор
| Сакрива лозинку у командама:
  `pass:[/msg nickserv id\|identify\|set password\|ghost\|release\|regain\|recover]`,
  `pass:[/oper]`,
  `pass:[/quote pass]`,
  `pass:[/secure passphrase\|decrypt\|set]`.

| cmd_pass_register | модификатор
| Сакрива лозинку у команди `pass:[/msg nickserv register]`.

| msg_auth | модификатор
| Сакрива лозинку у IRC auth поруци која се приказује (порука која се прими од
  сервера након што корисник зада команду).

| server_pass | модификатор
| Сакрива лозинку сервера у командама `/server` и `/connect`.
|===

[[trigger_anatomy]]
=== Анатомија окидача

Окидач има следеће опције (имена су `trigger.trigger.<име>.<опција>`):

[width="100%", cols="2m,3,10", options="header"]
|===
| Опција | Вредности | Опис

| enabled | `on`, `off`
| Када је опција `off`, окидач је искључен и акције се више не изводе.

| hook | `+signal+`, `+hsignal+`, `+modifier+`, `+line+`, `+print+`, `+command+`,
  `+command_run+`, `+timer+`, `+config+`, `+focus+`, `+info+`, `+info_hashtable+`
| Кука која се користи у окидачу. За више информација, погледајте
  link:weechat_plugin_api.sr.html#hooks[WeeChat референтни приручник API додатака / Куке ^↗^^].

| arguments | стринг
| Аргументи за куку, зависе од врсте куке која се користи.

| conditions | стринг
| Услови под којима се окидач извршава; они се израчунавају (погледајте команду
  <<command_weechat_eval,/eval>>).

| regex | стринг
| Један или више POSIX проширених регуларних израза за измену примљених података у
  функцији повратног позива куке (и још понешто што додаје окидач додатак), погледајте
  <<trigger_regex,регуларни израз>>.

| command | стринг
| Команда која треба да се изврши (више команди може да се раздвоји тачка запетама);
  стринг се израчунава (погледајте команду <<command_weechat_eval,/eval>>).

| return_code | `+ok+`, `+ok_eat+`, `+error+`
| Повратни кôд функције повратног позива (подразумевани је `ok`, што би и требало
  да се користи у скоро свим окидачима, остале вредности се ретко користе).

| post_action | `none`, `disable`, `delete`
| Акција која се врши над окидачем након његовог извршавања (подразумевано је `none`
  што би требало да се користи у скоро свим окидачима, остале вредности се ретко користе).
|===

На пример, подразумевани окидач _beep_ има следеће опције:

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

[[trigger_execution]]
=== Извршавање

Када се позове функција повратног позива окидача, извршавају се следеће акције, у наведеном редоследу, само ако су окидачи глобално укључени и ако је сам окидач укључен:

. провера услова окидача: ако је нетачан, завршава се
. замена текста у окидачу употребом регуларног израза (или више њих)
. извршавање команде (или више њих)
. излаз са повратним кодом (осим за куке _modifier_, _line_, _focus_, _info_ и _info_hashtable_)
. извршавање пост акције (ако није `none`).

[[trigger_hook_arguments]]
=== Аргументи куке

Аргументи куке зависе од употребљене куке. Раздвајају се са тачка запетама.

[width="100%", cols="2,6,7,2", options="header"]
|===
| Кука | Аргументи | Примери | Документација (API)

| signal
| 1. име сигнала (дозвољава се приоритет) (обавезан) +
  2. име сигнала (дозвољава се приоритет) +
  3. ... |
`+*,irc_in_privmsg+` +
`+*,irc_in_privmsg;*,irc_in_notice+` +
`+signal_sigwinch+` |
link:weechat_plugin_api.sr.html#_hook_signal[hook_signal ^↗^^]

| hsignal
| 1. име сигнала (дозвољава се приоритет) (обавезан) +
  2. име сигнала (дозвољава се приоритет) +
  3. ... |
`+nicklist_nick_added+` |
link:weechat_plugin_api.sr.html#_hook_hsignal[hook_hsignal ^↗^^]

| modifier
| 1. име модификатора (дозвољава се приоритет) (обавезан) +
  2. име мофидикатора (дозвољава се приоритет) +
  3. ... |
`+weechat_print+` +
`+5000\|input_text_display;5000\|history_add+` |
link:weechat_plugin_api.sr.html#_hook_modifier[hook_modifier ^↗^^]

| line
| 1. тип бафера +
  2. име бафера +
  3. ознаке |
`+formatted+` +
`+free+` +
`+*;irc.libera.*+` +
`+*;irc.libera.#weechat+` +
`+formatted;irc.libera.#weechat;irc_notice+` |
link:weechat_plugin_api.sr.html#_hook_line[hook_line ^↗^^]

| print
| 1. име бафера +
  2. ознаке +
  3. порука +
  4. уклањање боја (0/1) |
`+irc.libera.*+` +
`+irc.libera.#weechat+` +
`+irc.libera.#weechat;irc_notice+` +
`+*;;;1+` |
link:weechat_plugin_api.sr.html#_hook_print[hook_print ^↗^^]

| command
| 1. име команде (дозвољава се приоритет) (обавезан) +
  2. опис (израчунава се, погледајте команду <<command_weechat_eval,/eval>>) +
  3. аргументи (израчунава се, погледајте команду <<command_weechat_eval,/eval>>) +
  4. опис аргумената (израчунава се, погледајте команду <<command_weechat_eval,/eval>>) +
  5. довршавање (израчунава се, погледајте команду <<command_weechat_eval,/eval>>) |
`+test+` +
`+5000\|test+` +
`+test;test command;arg1 arg2;arg1: description 1${\n}arg2: description 2+` |
link:weechat_plugin_api.sr.html#_hook_command[hook_command ^↗^^]

| command_run
| 1. команда (дозвољава се приоритет) (обавезан) +
  2. команда (дозвољава се приоритет) +
  3. ... |
`+/cmd arguments+` |
link:weechat_plugin_api.sr.html#_hook_command_run[hook_command_run ^↗^^]

| timer
| 1. интервал у милисекундама (обавезан) +
  2. поравнање на секунду (подразумевано: 0) +
  3. макс број позива (подразумевано: 0, што значи „нема краја”) |
`+3600000+` +
`+60000;0;5+` |
link:weechat_plugin_api.sr.html#_hook_timer[hook_timer ^↗^^]

| config
| 1. име опције (дозвољава се приоритет) (обавезан) +
  2. име опције (дозвољава се приоритет) +
  3. ... |
`+weechat.look.*+` |
link:weechat_plugin_api.sr.html#_hook_config[hook_config ^↗^^]

| focus
| 1. име површине (дозвољава се приоритет) (обавезан) +
  2. име површине (дозвољава се приоритет) +
  3. ... |
`+buffer_nicklist+` |
link:weechat_plugin_api.sr.html#_hook_focus[hook_focus ^↗^^]

| info
| 1. инфо име (дозвољава се приоритет) (обавезан) +
  2. инфо име (дозвољава се приоритет) +
  3. ... |
`+my_info+` |
link:weechat_plugin_api.sr.html#_hook_info[hook_info ^↗^^]

| info_hashtable
| 1. инфо име (дозвољава се приоритет) (обавезан) +
  2. инфо име (дозвољава се приоритет) +
  3. ...
| `+my_info+`
| link:weechat_plugin_api.sr.html#_hook_info_hashtable[hook_info_hashtable ^↗^^]
|===

[[trigger_conditions]]
=== Услови

За наставак обраде окидача, или за заустављање свега, користе се услови.

Они се израчунавају и могућа је употреба података доступних у функцији повратног позива (погледајте <<trigger_callback_data,податке у функцијама повратних позива>> и команду <<command_weechat_eval,/eval>>).

Пример: подразумевани окидач _beep_ користи следећи услов како би се звучни сигнал огласио само за истицање или за приватну поруку:

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

[[trigger_regex]]
=== Регуларни израз

За измену променљивих у хештабели функције повратног позива се користи регуларни израз.

Формат је једно од следећег:

----
/стринг1/стринг2
/стринг1/стринг2/var
s/стринг1/стринг2
s/стринг1/стринг2/var
y/стринг1/стринг2
y/стринг1/стринг2/var
----

Поља:

* `s` или `y`: слово са командом; ако недостаје, подразумевана команда је `s`
  и тада се као граничник користи први карактер:
** `s`: замена регуларним изразом: први стринг је регуларни израз, други стринг
   је замена за сваки стринг који се подудара
** `y`: превођење карактера: први стринг је скуп карактера који се замењују
   карактерима из другог стринга; кад се израчуна, сваки стринг мора да има
   потпуно исти број UTF-8 карактера
* `/`: граничник регуларног израза; карактер „/” може да се замени било којим
  карактером (један или више идентичних карактера)
* `стринг1`: први стринг (употреба зависи од команде)
* `стринг2`: други стринг (употреба зависи од команде)
* `var`: променљива хештабеле која се ажурира

Више регуларних израза може да се раздвоји размаком, на пример:

----
s/regex1/replace1/var1 y/abcdef/ABDDEF/var2
----

[[trigger_regex_replace]]
==== Замена регуларним изразом

У случају команде `s`, формат је: `s/регуларни/замена` или `s/регуларни/замена/var`
(где је _var_ променљива хештабеле).

Пошто је `s` подразумевана команда, може да се изостави, тако да је исправно и `/регуларни/замена`
(али први карактер, тј. граничник, не сме да буде слово).

У _замена_ могу да се користе групе подударања:

* `+${re:0}+` до `+${re:99}+`: `+${re:0}+` је комплетно подударање, `+${re:1}+` до
  `+${re:99}+` су ухваћене групе
* `pass:[${re:+}]`: последње подударање (под највећим бројем)
* `+${re:#}+`: индекс последње ухваћене групе
* `+${re:repl_index}+`: индекс замене која се врши (почиње од 1)
* `+${hide:c,${re:N}}+`: подударање „N” са свим карактерима замењеним са „c”
  (пример: `+${hide:*,${re:2}}+` је група #2 у којој су сви карактери замењени са
  `+*+`).

Пример: постави подебљани фонт за речи између `+*+`:

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

Пример: подразумевани окидач _server_pass_ користи следећи регуларни израз да сакрије
лозинку у командама `/server` и `/connect` (карактери у лозинкама се замењују са
`+*+`):

----
s==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}
----

[NOTE]
Граничник у овом примеру је „==” јер се у регуларном изразу користи „/”.

[[trigger_regex_translate_chars]]
==== Превођење карактера

У случају команде `y`, формат је: `y/карак1/карак2` или `y/карак1/карак2/var`
(где је _var_ променљива хештабеле).

Пример: замена „a”, „b” и „c” великим словима:

----
y/abc/ABC/
----

Пример: ротирање стрелица у смеру казаљке:

----
y/←↑→↓/↑→↓←/
----

Пример: конвертовање свих слова у мала слова:

----
y/${chars:upper}/${chars:lower}/
----

Пример: померање сваког слова за једну позицију, уз очувања величине слова: a→b, b→c … y→z, z→a:

----
y/${chars:a-z}${chars:A-Z}/${chars:b-z}a${chars:B-Z}A/
----

[[trigger_regex_variable]]
==== Променљива

Ако у хештабели не постоји _var_, она се аутоматски креира и има празну вредност. На овај начин
могу да се креирају привремене корисничке променљиве.

Ако се _var_ не наведе, користиће се подразумевана променљива, која зависи од врсте куке:

[width="100%", cols="2,3,7", options="header"]
|===
| Кука           | Подраз. променљива | Дозвољено ажурирање ^(1)^
| signal         | tg_signal_data     |
| hsignal        |                    |
| modifier       | tg_string          | tg_string
| line           | message            | buffer, buffer_name, y, date, date_usec, date_printed, date_usec_printed, str_time, tags, notify_level, highlight, prefix, message
| print          | tg_message         |
| command        | tg_argv_eol1       |
| command_run    | tg_command         |
| timer          | tg_remaining_calls |
| config         | tg_value           |
| focus          |                    |
| info           | tg_info            | tg_info
| info_hashtable |                    | све променљиве примљене у хеш табели
|===

[NOTE]
^(1)^ У окидачу је могуће ажурирање свих променљивих, али само ове променљиве утичу на вредност коју враћа окидач и коју користи програм WeeChat.

[[trigger_command]]
=== Команда

Команда се извршава након замене текста регуларним изразом. Више команди може да се замени тачка запетама.

Она се израчунава (погледајте команду <<command_weechat_eval,/eval>>) и у команди може да се користи текст се замењен регуларним изразом.

Пример: подразумевани _beep_ окидач користи следећу команду да изда звучно упозорење (BEL):

----
/print -beep
----

[[trigger_callback_data]]
=== Подаци у функцијама повратног позива

Подаци који се приме у функцијама повратног позива се чувају у хеш табелама (показивачи и стрингови) и могу да се користе у следећим опцијама:

* _conditions_
* _regex_
* _command_

Садржај хеш табела зависи од врсте куке.

Згодан начин за приказ података у окидачу је да се отвори бафер за надгледање окидача, употребом следеће команде:

----
/trigger monitor
----

Све функције повратног позива у хеш табелу постављају следеће променљиве:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива      | Тип    | Опис
| tg_trigger_name | стринг | Име окидача.
| tg_hook_type    | стринг | Тип куке: „signal”, „command”, итд.
|===

[[trigger_data_signal]]
==== Signal

Функција повратног позива „signal” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива     | Тип    | Опис
| tg_signal      | стринг | Име сигнала.
| tg_signal_data | стринг | Подаци послати сигналом.
|===

Ако сигнал садржи IRC поруку, порука се парсира и у хеш табелу се додају следећи подаци:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива           | Тип       | Опис
| irc_server           | показивач | Показивач на IRC сервер (могу да се користе променљиве у hdata типа „irc_server”, као што је `+${irc_server.name}+`).
| irc_channel          | показивач | Показивач на IRC канал (могу да се користе променљиве у hdata типа „irc_channel”, као што је `+${irc_channel.name}+`).
| server               | стринг    | Име сервера (пример: „libera”).
| tags                 | стринг    | Ознаке у поруци (ретко се користе).
| message_without_tags | стринг    | Порука без ознака.
| nick                 | стринг    | Надимак. ^(1)^
| host                 | стринг    | Име хоста.
| command              | стринг    | IRC команда (пример: „PRIVMSG”, „NOTICE”, ...).
| channel              | стринг    | IRC канал.
| arguments            | стринг    | Аргументи команде (укључујући вредност _channel_).
| text                 | стринг    | Текст (на пример, корисникова порука).
| pos_command          | стринг    | Индекс _command_ у поруци („-1” ако се _command_ не пронађе).
| pos_arguments        | стринг    | Индекс _arguments_ у поруци („-1” ако се _arguments_ не пронађе).
| pos_channel          | стринг    | Индекс _channel_ у поруци („-1” ако се _channel_ не пронађе).
| pos_text             | стринг    | Индекс _text_ у поруци („-1” ако се _text_ не пронађе).
|===

[NOTE]
^(1)^ nick је пошиљалац поруке. +
Ваш надимак на серверу је `${irc_server.nick}`.

Када су подаци показивач, за читање hdata особине може да се употреби променљива `+tg_signal_data+` на следећи начин (у овом примеру је то показивач на бафер):

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

[[trigger_data_hsignal]]
==== Hsignal

Функција повратног позива „hsignal” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива | Тип    | Опис
| tg_signal  | стринг | Име сигнала
|===

Хеш табела садржи све кључеве/вредности из примљене хеш табеле (тип: стринг/стринг).

[[trigger_data_modifier]]
==== Modifier

Функција повратног позива „modifier” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива        | Тип    | Опис
| tg_modifier       | стринг | Име модификатора.
| tg_modifier_data  | стринг | Подаци који су послати уз модификатор.
| tg_string         | стринг | Стринг који може да се модификује.
| tg_string_nocolor | стринг | Стринг без кодова боје.
|===

У случају _weechat_print_ модификатора, додају се променљиве коришћењем ознака порука (погледајте <<trigger_data_print,куку print>> испод), као и следеће променљиве:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљиве         | Тип       | Опис
| buffer             | показивач | Бафер у коме се порука исписује.
| tg_plugin          | стринг    | Додатак бафера у коме се порука исписује.
| tg_buffer          | стринг    | Пуно име бафера у коме се порука исписује.
| tg_prefix          | стринг    | Префикс поруке која се исписује.
| tg_prefix_nocolor  | стринг    | Префикс без кодова боје.
| tg_message         | стринг    | Порука која се исписује.
| tg_message_nocolor | стринг    | Порука без кодова боје.
|===

Ако модификатор садржи IRC поруку, порука се парсира и у хеш табелу се додаје још података (погледајте <<trigger_data_signal,куку signal>>).

[[trigger_data_line]]
==== Line

Функција повратног позива „line” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива         | Тип       | Опис
| buffer             | показивач | Бафер.
| buffer_name        | стринг    | Име бафера.
| buffer_type        | стринг    | Тип бафера („formatted” или „free”).
| y                  | стринг    | Број линије за бафер са слободним садржајем (≥ 0), -1 за бафер са форматираним садржајем.
| date               | стринг    | Датум линије (временска ознака).
| date_usec          | стринг    | Microseconds датума линије.
| date_printed       | стринг    | Датум када је линија била приказана (временска ознака).
| date_usec_printed  | стринг    | Microseconds датума када је линија била приказана.
| str_time           | стринг    | Датум за приказ. Може да садржи кодове боја.
| tags               | стринг    | Ознаке поруке (са запетом додатом на почетак/крај стринга).
| displayed          | стринг    | „1” ако се приказује, „0” ако је линија филтрирана.
| notify_level       | стринг    | „-1” = без обавештавања, „0” = низак ниво, „1” = порука, „2” = приватна порука, „3” = истицање
| highlight          | стринг    | „1” ако је истакнута, у супротном „0”.
| prefix             | стринг    | Префикс.
| tg_prefix_nocolor  | стринг    | Префикс без кодова боје.
| message            | стринг    | Порука.
| tg_message_nocolor | стринг    | Порука без кодова боје.
|===

Променљиве које се постављају употребом ознака у поруци:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива         | Тип    | Опис
| tg_tags_count      | стринг | Број ознака у поруци.
| tg_tag_nick        | стринг | Надимак (из ознаке „nick_xxx”).
| tg_tag_prefix_nick | стринг | Боја надимка у префиксу (из ознаке „prefix_nick_ccc”).
| tg_tag_host        | стринг | Корисничко име и хост, формат: корисничкоиме@хост (из ознаке „host_xxx”).
| tg_tag_notify      | стринг | Ниво обавештавања (_none_, _message_, _private_, _highlight_).
| tg_tag_irc_xxx     | стринг | Ознака IRC поруке (кључ „xxx”). ^(1)^
| tg_notify          | стринг | Ниво обавештавања, ако се разликује од _none_.
| tg_msg_pv          | стринг | „1” за приватну поруку, у супротном „0”.
|===

[NOTE]
^(1)^ У IRC ознаци (кључу и вредности), запете се замењују тачка запетама

[[trigger_data_print]]
==== Print

Функција повратног позива „print” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива         | Тип       | Опис
| buffer             | показивач | Бафер.
| tg_date            | стринг    | Датум/време поруке (формат: `%FT%T.%f`, погледајте link:weechat_plugin_api.sr.html#_util_strftimeval[WeeChat референтни прикучник API додатака / util_strftimeval ^↗^^]).
| tg_displayed       | стринг    | „1” ако се приказује, „0” ако се линија филтрира.
| tg_highlight       | стринг    | „1” ако је истакнута, у супротном „0”.
| tg_prefix          | стринг    | Префикс.
| tg_prefix_nocolor  | стринг    | Префикс без кодова боја.
| tg_message         | стринг    | Порука.
| tg_message_nocolor | стринг    | Порука без кодова боја.
|===

Променљиве које се постављају употребом ознака у поруци:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива         | Тип    | Опис
| tg_tags            | стринг | Ознаке поруке (са запетом додатом на почетак/крај стринга).
| tg_tags_count      | стринг | Број ознака у поруци.
| tg_tag_nick        | стринг | Надимак (из ознаке „nick_xxx”).
| tg_tag_prefix_nick | стринг | Боја надимка у префиксу (из ознаке „prefix_nick_ccc”).
| tg_tag_host        | стринг | Корисничко име и хост, формат: корисничкоиме@хост (из ознаке „host_xxx”).
| tg_tag_notify      | стринг | Ниво обавештавања (_none_, _message_, _private_, _highlight_).
| tg_tag_irc_xxx     | стринг | Ознака IRC поруке (кључ „xxx”). ^(1)^
| tg_notify          | стринг | Ниво обавештавања, ако се разликује од _none_.
| tg_msg_pv          | стринг | „1” за приватну поруку, у супротном „0”.
|===

[NOTE]
^(1)^ У IRC ознаци (кључу и вредности), запете се замењују тачка запетама

[[trigger_data_command]]
==== Команда

Функција повратног позива „command” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива     | Тип       | Опис
| buffer         | показивач | Бафер.
| tg_argc        | стринг    | Број аргумената (сама команда се броји као један аргумент).
| tg_argvN       | стринг    | Аргумент #N (`+tg_argv0+` је сама команда, остали су стварни аргументи команде).
| tg_argv_eolN   | стринг    | Од аргумента #N до краја аргумената (`+tg_argv_eol0+` укључује саму команду).
| tg_shell_argc  | стринг    | Број аргумента са поделом као што то ради командно окружење (сама команда се броји као један аргумент).
| tg_shell_argvN | стринг    | Аргумент #N са поделом као што то ради командно окружење (`+tg_shell_argv0+` је сама команда, остали су стварни аргументи команде).
|===

[[trigger_data_command_run]]
==== Command_run

Функција повратног позива „command_run” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива | Тип       | Опис
| buffer     | показивач | Бафер.
| tg_command | стринг    | Команда која се извршава.
|===

[[trigger_data_timer]]
==== Timer

Функција повратног позива „timer” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива         | Тип    | Опис
| tg_remaining_calls | стринг | Број преосталих позива.
| tg_date            | стринг | Текући датум/време (формат: `%FT%T.%f`, погледајте link:weechat_plugin_api.sr.html#_util_strftimeval[WeeChat референтни приручник API додатака / util_strftimeval ^↗^^]).
|===

[[trigger_data_config]]
==== Config

Функција повратног позива „config” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива | Тип    | Опис
| tg_option  | стринг | Опција.
| tg_value   | стринг | Вредност.
|===

[[trigger_data_focus]]
==== Focus

Функција повратног позива „focus” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива | Тип       | Опис
| window     | показивач | Прозор.
| buffer     | показивач | Бафер.
|===

Хеш табела садржи све кључеве/вредности из примљене хеш табеле (тип: стринг/стринг).

[[trigger_data_info]]
==== Инфо

Функција повратног позива „info” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива   | Тип    | Опис
| tg_info_name | стринг | Име инфо.
| tg_arguments | стринг | Аргументи.
| tg_info      | стринг | Празан стринг (инфо који ће се вратити).
|===

[[trigger_data_info_hashtable]]
==== Info_hashtable

Функција повратног позива „info_hashtable” поставља следеће променљиве у хеш табелу:

[width="100%", cols="3m,2,14", options="header"]
|===
| Променљива     | Тип    | Опис
| tg_info_name   | стринг | Име инфо.
|===

Хеш табела садржи све кључеве/вредности из примљене хеш табеле (тип: стринг/стринг).

[[trigger_examples]]
=== Примери

[[trigger_example_url_color]]
==== Боја за URL адресе

URL адресе се приказују зеленом бојом:

----
/trigger add url_color modifier weechat_print "${tg_notify}" "==[a-zA-Z0-9_]+://[^ ]+==${color:green}${re:0}${color:reset}=="
----

[NOTE]
Једноставни регизраз који се користи за детекцију URL адреса можда неће ухватити све URL адресе, али је бржи од комплексног регизраза.

[[trigger_example_auto_pong]]
==== Ауто pong на ping упите

Када неко у приватни бафер пошаље „ping”, овај окидач ће аутоматски одговорити са `pong`:

----
/trigger add pong print "" "${type} == private && ${tg_message} == ping" "" "pong"
----

[[trigger_example_responsive_layout]]
==== Респонзивни распоред

Следећи окидачи могу да се употребе за прилагођавање ствари онда када се промени величина терминала:

----
/trigger add resize_small signal signal_sigwinch "${info:term_width} < 100" "" "/bar hide nicklist"
/trigger add resize_big signal signal_sigwinch "${info:term_width} >= 100" "" "/bar show nicklist"
----

Окидачи хватају сигнал „signal_sigwinch”, који шаље програм WeeChat онда када прими сигнал SIGWINCH (тј. када се промени величина терминала).

Услов са `+${info:term_width}+` проверава ширину терминала (такође можете да употребите и `+${info:term_height}+` ако је потребно).

Када у примеру терминал постане мали, листа надимака се сакрива. А трака се враћа у случају да ширина постане већа или једнака 100 карактера.

[[trigger_example_config_save]]
==== Аутоматско чување конфигурације

Можете аутоматски сачувати конфигурационе фајлове (`+*.conf+`), на пример, на сваки сат:

----
/trigger add cfgsave timer 3600000;0;0 "" "" "/mute /save"
----

Аргументи timer куке су:

* _3600000_: 3600 * 1000 милисекунди, функција повратног позива се позива сваког сата
* _0_: поравнање на секунду (овде се не врши поравнање)
* _0_: макс број позива (0 = тајмер се никада не зауставља)

Команда `/mute /save` ће нечујно да сачува конфигурационе фајлове (ништа се не исписује у бафер језгра).

[[trigger_commands]]
=== Команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=trigger_commands]

[[trigger_options]]
=== Опције

Одељци у фајлу _trigger.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу                      | Опис
| look    | /set trigger.look.*                      | Изглед и осећај.
| color   | /set trigger.color.*                     | Боје.
| trigger | <<command_trigger_trigger,/trigger add>> +
            <<command_trigger_trigger,/trigger set>> +
            /set trigger.trigger.*                   | Опције окидача.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=trigger_options]

[[extending_weechat]]
== Проширивање програма WeeChat

Дизајн програма WeeChat је модуларан и може да се прошири додацима и скриптама.

Важно је да се направи разлика између _додатка_ и _скрипте_: _додатак_ је бинарни фајл који се компајлира и учитава командом `/plugin`, док је _скрипта_ текст фајл који се учитава додатком као што је _python_ командом `/python`.

[[plugins]]
=== Додаци

Додатак је динамичка библиотека коју учитава програм WeeChat, написана на језику C и компајлирана. На GNU/Linux систему, фајл има „.so” екстензију, а „.dll” на систему Windows.

Додаци се аутоматски учитавају током покретања програма WeeChat, а могу да се учитавају или уклањају из меморије док се програм WeeChat извршава.

За учитавање/уклањање из меморије можете користити команду `/plugin`, или да прикажете листу свих учитаних додатака.

Када се додатак уклони из меморије, програм WeeChat уклања:

* бафере
* конфигурационе опције (опције се уписују у фајлове)
* све куке: команде, модификатори, процес, итд.
* инфо и инфолисте
* hdata
* ставке траке

Примери учитавања, уклањања из меморије или приказа листе додатака:

----
/plugin load irc
/plugin unload irc
/plugin list
----

Ово су подразумевани додаци:

[width="100%", cols="1,5", options="header"]
|===
| Додатак    | Опис
| alias      | Дефиниција алијаса за команде.
| buflist    | Ставка траке са листом бафера.
| charset    | Декодирање/кодирање у скуп карактера за бафере.
| exec       | Извршавање спољних команди из програма WeeChat.
| fifo       | FIFO пајп који се користи за удаљено слање команди програму WeeChat.
| fset       | Брзо постављање опција програма WeeChat и опција додатака.
| irc        | IRC чет протокол.
| logger     | Логовање бафера у фајлове.
| relay      | Релеј података преко мреже.
| script     | Управљач скриптама.
| python     | Python API .
| perl       | Perl API скриптовања.
| ruby       | Ruby API скриптовања.
| lua        | Lua API скриптовања.
| tcl        | Tcl API скриптовања.
| guile      | Guile (scheme) API скриптовања.
| javascript | JavaScript API скриптовања.
| php        | PHP API скриптовања.
| spell      | Провера правописа за командну линију.
| trigger    | Замена текста и извршавање команди приликом догађаја које окида програм WeeChat/додаци.
| typing     | Приказује кориснике који тренутно пишу поруке.
| xfer       | Пренос фајлова и директни разговор.
|===

За више информација о развоју додатака или скрипти (помоћу API), молимо вас да прочитате link:weechat_plugin_api.sr.html[WeeChat референтно упутство за API додатака ^↗^^] или link:weechat_scripting.sr.html[WeeChat водич за скриптовање ^↗^^].

[[scripts]]
=== Скрипте

Програм WeeChat нуди 8 додатака за скриптовање: Python, Perl, Ruby, Lua, Tcl, Guile (scheme), JavaScript и PHP. Ови додаци могу да учитају, изврше и уклоне из меморије скрипте за ове језике.

За више информација о функцијама које постоје у API, молимо вас да прочитате link:weechat_plugin_api.sr.html[WeeChat водич за скриптовање ^↗^^].

[[script_manager]]
==== Менаџер скрипти

Менаџер скрипти (команда <<command_script_script,/script>>) се користи за
учитавање/уклањање из меморије скрипти на било ком језику, и инсталирање/уклањање скрипти са WeeChat
репозиторијум скрипти, а које можете да видите на
https://weechat.org/scripts/[овој страници ^↗^^].

Из разлога приватности, преузимање скрипти је подразумевано искључено. +
Ако желите да га укључите, откуцајте следећу команду:

----
/script enable
----

Сада можете да преузмете листу скрипти и да је прикажете у новом баферу командом
<<command_script_script,/script>>:

[subs="quotes,attributes"]
:x: *
....
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│322/322 скрипти (филтер: {x}) | Сортирање: i,p,n | Alt+тастер/унос: i=инсталација, r=уклањање, l=учи>>│
│2.scripts│{x}      autosort.py                     3.10    2023-12-31 | Automatically keep buffers grouped by se│
│         │{x}      highmon.pl                      2.7     2020-06-21 | Adds a highlight monitor buffer.        │
│         │{x}ia r  grep.py                   0.8.6 0.8.6   2022-11-11 | Search regular expression in buffers or │
│         │{x}      colorize_nicks.py               32      2023-10-30 | Use the weechat nick colors in the chat │
│         │##{x}ia r  go.py                     3.0.1 3.0.1   2024-05-30 | Quick jump to buffers.                  ##│
│         │       aesthetic.py                    1.0.6   2020-10-25 | Make messages more A E S T H E T I C A L│
│         │       aformat.py                      0.2     2018-06-21 | Alternate text formatting, useful for re│
│         │       alternatetz.py                  0.4     2022-01-25 | Add an alternate timezone item.         │
│         │       amarok2.pl                      0.7     2012-05-08 | Amarok 2 control and now playing script.│
│         │       amqp_notify.rb                  0.1     2011-01-12 | Send private messages and highlights to │
│         │       announce_url_title.py           19      2021-06-05 | Announce URL title to user or to channel│
│         │       anotify.py                      1.0.2   2020-05-16 | Notifications of private messages, highl│
│         │       anti_password.py                1.2.1   2021-03-13 | Prevent a password from being accidental│
│         │       apply_corrections.py            1.3     2018-06-21 | Display corrected text when user sends s│
│         │       arespond.py                     0.1.2   2022-01-25 | Simple autoresponder.                   │
│         │       atcomplete.pl                   0.001   2016-10-29 | Tab complete nicks when prefixed with "@│
│         │       audacious.pl                    0.3     2009-05-03 | Display which song Audacious is currentl│
│         │       auth.rb                         0.3     2014-05-30 | Automatically authenticate with NickServ│
│         │       auto_away.py                    0.4     2018-11-11 | A simple auto-away script.              │
│         │       autoauth.py                     1.3     2021-11-07 | Permits to auto-authenticate when changi│
│         │       autobump.py                     0.1.0   2019-06-14 | Bump buffers upon activity.             │
│         │       autoconf.py                     0.4     2021-05-11 | Auto save/load changed options in a .wee│
│         │       autoconnect.py                  0.3.3   2019-10-06 | Reopen servers and channels opened last │
│         │       autojoin_on_invite.py           0.9     2022-10-25 | Auto joins channels when invited.       │
│         │       automarkbuffer.py               1.0     2015-03-31 | Mark buffers as read if there is no new │
│         │       automerge.py                    0.2     2018-03-03 | Automatically merge new buffers accordin│
│         │[12:55] [2] [script] 2:scripts                                                                      │
│         │█                                                                                                   │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
....

[[script_commands]]
===== Script команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=script_commands]

[[script_options]]
===== Script опције

Одељци у фајлу _script.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу   | Опис
| look    | /set script.look.*    | Изглед и осећај.
| color   | /set script.color.*   | Боје.
| scripts | /set script.scripts.* | Опције за преузимање скрипти.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=script_options]

[[scripting_plugins]]
==== Скриптинг додаци

[[python_commands]]
===== Python команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=python_commands]

[[perl_commands]]
===== Perl команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=perl_commands]

[[ruby_commands]]
===== Ruby команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=ruby_commands]

[[lua_commands]]
===== Lua команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=lua_commands]

[[tcl_commands]]
===== Tcl команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=tcl_commands]

[[guile_commands]]
===== Guile команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=guile_commands]

[[php_commands]]
===== PHP команде

include::{autogendir}/autogen_user_commands.sr.adoc[tag=php_commands]

[[python_options]]
===== Python опције

Одељци у фајлу _python.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set python.look.*  | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=python_options]

[[perl_options]]
===== Perl опције

Одељци у фајлу _perl.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set perl.look.*    | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=perl_options]

[[ruby_options]]
===== Ruby опције

Одељци у фајлу _ruby.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set ruby.look.*    | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=ruby_options]

[[lua_options]]
===== Lua опције

Одељци у фајлу _lua.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set lua.look.*     | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=lua_options]

[[tcl_options]]
===== Tcl опције

Одељци у фајлу _tcl.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set tcl.look.*     | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=tcl_options]

[[guile_options]]
===== Guile опције

Одељци у фајлу _guile.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set guile.look.*   | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=guile_options]

[[php_options]]
===== PHP опције

Одељци у фајлу _php.conf_:

[width="100%", cols="3m,6m,16", options="header"]
|===
| Одељак  | Команда за контролу | Опис
| look    | /set php.look.*     | Изглед и осећај.
|===

Опције:

include::{autogendir}/autogen_user_options.sr.adoc[tag=php_options]

[[support]]
== Подршка

Пре него што потражите подршку, детаљно прочитајте документацију и ЧПП који се испоручују уз програм WeeChat.

За подршку преко IRC, на серверу _irc.libera.chat_:

* званични канали (са програмерима):
** _#weechat_ (енглески)
** _#weechat-fr_ (француски)
* незванични канали:
** _#weechat-de_ (немачки)
** _#weechat-fi_ (фински)

За сорале начине подршке, погледајте
https://weechat.org/about/support/[ову страницу ^↗^^].
