// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2024 Krzysztof Korościk <soltys1@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later

= Poradnik użytkownika WeeChat
:author: Sébastien Helleu
:email: flashcode@flashtux.org
:lang: pl
include::includes/attributes-pl.adoc[]

Ten dokument opisuje klienta rozmów WeeChat, będącego częścią WeeChat.

Najnowszą wersję tego dokumentu można znaleźć na
https://weechat.org/doc/[tej stronie ^↗^^].

[[introduction]]
== Wprowadzenie

WeeChat (Wee Enhanced Environment for Chat) to darmowy klient rozmów, szybki
i lekki, przeznaczony dla wielu systemów operacyjnych.

[[features]]
=== Cechy

Główne cechy to:

* wsparcie dla wielu protokołów (mainly IRC)
* połączenie z wieloma serwerami (z TLS, IPv6, proxy)
* mały, szybki i lekki
* konfigurowalny i rozszerzalny dzięki wtyczką i skryptom
* zgodny z RFC dla IRC
  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 ^↗^^] i
  https://datatracker.ietf.org/doc/html/rfc7194[7194 ^↗^^]
* proxy IRC i pośrednik dla WeeChat i zdalnych interfejsów
* wielo-platformowy (GNU/Linux, *BSD, macOS, Windows i inne)
* 100% GPL, darmowe oprogramowanie

Listę wszystkich cech i możliwości można znaleźć na
https://weechat.org/about/features/[tej stronie ^↗^^].

[[prerequisites]]
=== Wymagania

Żeby zainstalować WeeChat, potrzebujesz:

* działający system GNU/Linux (z narzędziami kompilatora dla kompilacji ze
  źródeł), lub kompatybilny system
* przywileje _roota_ (do instalacji w katalogu systemowym)
* niektóre biblioteki (zobacz <<dependencies,zależności>>).

[[install]]
== Instalacja

[[binary_packages]]
=== Pakiety binarne

Pakiety binarne dostępne są dla wielu dystrybucji, wliczając:

* Arch Linuxa: `pacman -S weechat`
* Cygwin (Windows): wybierz pakiet WeeChat w setup.exe
* Debiana/Ubuntu (lub dowolna kompatybilna):
  `apt-get install weechat-curses weechat-plugins` +
  Najnowsze wersje i nocne buildy można znaleźć na stonie:
  https://weechat.org/download/debian/[Repozytoria Debiana ^↗^^]
* Fedora Core: `dnf install weechat`
* FreeBSD: `pkg install weechat`
* Gentoo: `emerge weechat`
* Mandrive/RedHata (lub dowolna kompatybilna):
  `rpm -i /path/to/weechat-x.y.z-1.i386.rpm`
* openSUSE: `zypper in weechat`
* Sourcemage: `cast weechat`
* macOS (za pomocą https://brew.sh/[Homebrew ^↗^^]): `brew install weechat`
  (w razie problemów: `brew info weechat`)

Niektóre dodatkowe pakiety mogą okazać się przydatne, jak weechat-plugins.

Dla innych dystrybucji, poszukaj w dokumentacji instrukcji na temat instalacji
pakietów.

[[containers]]
=== Kontenery

Kontenery z WeeChat mogą być zbudowane lub zainstalowane bezpośrednio
z https://hub.docker.com/r/weechat/weechat[Docker Hub ^↗^^]. +
Więcej informacji można znaleźć w pliku README w repozytorium
https://github.com/weechat/weechat-container[weechat-container ^↗^^].

[[source_package]]
=== Pakiety źródłowe

WeeChat musi być kompilowany przy użyciu CMake.

[NOTE]
Na macOS możesz użyć https://brew.sh/[Homebrew ^↗^^]:
`brew install --build-from-source weechat`.

[[dependencies]]
==== Zależności

Poniższa tabela pokazuje listę pakietów *wymaganych* do skompilowania
WeeChat:

[width="100%",cols="5,^3,.^15",options="header"]
|===
| Pakiet ^(1)^ | Wersja | Funkcje

| kompilator C (gcc / clang) |
| Kompilacja źródeł C.

| cmake | ≥ 3.0
| Kompilacja.

| pkgconf / pkg-config |
| Wykrywa zainstalowane biblioteki.

| libncurses-dev |
| Interfejs ncurses.

| libcurl4-gnutls-dev |
| Transfer URL.

| libgcrypt20-dev |
| Zabezpieczone dane, uwierzytelnianie IRC SASL.

| libgnutls28-dev | ≥ 2.2.0 ^(2)^
| Wtyczka IRC: wsparcie dla połączeń TLS, autentykacja IRC SASL (ECDSA-NIST256P-CHALLENGE). +
  Wtyczka relay: wsparcie dla połączeń TLS.

| zlib1g-dev |
| Wtyczka logger: kompresja rotowanych plików z logami (gzip). +
  Wtyczka relay: kompresja wiadomości (WeeChat -> klient) za pomocą https://zlib.net/[zlib ^↗^^]
  (protokoły api i weechat). +
  Wtyczka script: odczyt repozytorium ze skryptami (gzip).
|===

[NOTE]
^(1)^ Nazwa pochodzi z repozytorium dystrybucji Debian GNU/Linux Bookworm distribution,
wersja i nazwa mogą się różnić dla innych dystrybucji. +
^(2)^ GnuTLS ≥ 3.0.21 jest wymagany dla uwierzytelnienia IRC SASL za pomocą
mechanizmu ECDSA-NIST256P-CHALLENGE.

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

[width="100%",cols="5,^3,.^15",options="header"]
|===
| Pakiet ^(1)^ | Wersja | Funkcje

| kompilator {cpp} (pass:[g++ / clang++]) |
| Kompilacja i uruchamianie testów, wtyczka JavaScript.

| gettext |
| Internacjonalizacja (tłumaczenie wiadomości; język bazowy to Angielski).

| ca-certificates |
| Certyfikaty dla połączeń TLS.

| libcjson-dev |
| Wtyczka relay: protokół "api" (HTTP REST API).

| libzstd-dev | ≥ 0.8.1
| Wtyczka logger: kompresja rotowanych plików z logami (zstandard). +
  Wtyczka relay: kompresja wiadomości (WeeChat -> klient) za pomocą https://facebook.github.io/zstd/[Zstandard ^↗^^]
  (protokoły api i weechat).

| libaspell-dev / libenchant-dev |
| Wtyczka spell.

| python3-dev | ≥ 3.0
| Wtyczka python.

| libperl-dev |
| Wtyczka perl.

| ruby3.1, ruby3.1-dev | ≥ 1.9.1
| Wtyczka ruby.

| liblua5.4-dev |
| Wtyczka lua.

| tcl-dev | ≥ 8.5
| Wtyczka tcl.

| guile-3.0-dev | ≥ 2.0
| Wtyczka guile (scheme).

| libv8-dev | ≤ 3.24.3
| Wtyczka javascript.

| php-dev | ≥ 7.0
| Wtyczka PHP.

| libphp-embed | ≥ 7.0
| Wtyczka PHP.

| libxml2-dev |
| Wtyczka PHP.

| libargon2-dev |
| Wtyczka PHP (jeśli PHP ≥ 7.2).

| libsodium-dev |
| Wtyczka PHP (jeśli PHP ≥ 7.2).

| asciidoctor | ≥ 1.5.4
| Tworzenie strony man i dokumentacji.

| python3-pygments, ruby-pygments.rb |
| Dokumentacja budowania.

| libcpputest-dev | ≥ 3.4
| Kompilacja i uruchamianie testów.
|===

[NOTE]
^(1)^ Nazwa pochodzi z repozytorium dystrybucji Debian GNU/Linux Bookworm distribution,
wersja i nazwa mogą się różnić dla innych dystrybucji. +

Jeśli używasz dystrybujci bazującej na Debianie/Ubuntu, oraz jeśli posiadasz wpisy
"deb-src" w pliku _/etc/apt/sources.list_, możesz zainstalować wszytkie zależności
za pomocą jednej komendy:

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

[[build]]
==== Kompilacja

* Instalacja w katalogach systemowych (wymaga uprawnień użytkownika _root_):

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

* Instalacja w wybranym katalogu (na przykład w katalogu domowym):

[source,shell]
----
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/ścieżka/do/katalogu
make
make install
----

Opcje mogą zostać przekazane do CMake, format `-DOPCJA=WARTOŚĆ`.

Lista dostępnych opcji:

[width="100%",cols="3m,3,3m,10",options="header"]
|===
| Opcja  | Wartość | Wartość domyślna | Opis

| CMAKE_BUILD_TYPE | `Debug`, `Release`, `RelWithDebInfo`, `MinSizeRel` |
| Typ budowania pakietu: `Debug` (lub `RelWithDebInfo`) jest zalecany dla
  wersjrozwojowej WeeChat.

| CMAKE_INSTALL_PREFIX | katalog | /usr/local
| Katalog, do którego zostanie zainstalowany WeeChat.

| WEECHAT_HOME | katalog | (pusty ciąg)
| Domyślny katalog domowy dla WeeChat. +
  Bez ustawionej wartości (zalecane) domyślnie zostaną użyte wartości XDG.
  Jeśli wartość nie jest pusta zostanie użyty jeden katalog dla wszystkich plików.
  Wartością mogą być również 4 katalogi oddzielone dwukropkami, w takiej
  kolejności: config, data, cache, runtime.

| ENABLE_ALIAS | `ON`, `OFF` | ON
| Kompilacja <<command_aliases,wtyczki alias>>.

| ENABLE_BUFLIST | `ON`, `OFF` | ON
| Kompilacja <<buflist,wtyczki buflist>>.

| ENABLE_CHARSET | `ON`, `OFF` | ON
| Kompilacja <<charset,wtyczki charset>>.

| ENABLE_CJSON | `ON`, `OFF` | ON
| Wsparcie dla JSON z użyciem biblioteki https://github.com/DaveGamble/cJSON[cJSON ^↗^^].

| ENABLE_MAN | `ON`, `OFF` | OFF
| Generowanie strony manuala.

| ENABLE_DOC | `ON`, `OFF` | OFF
| Generowanie dokumentacji HTML.

| ENABLE_DOC_INCOMPLETE | `ON`, `OFF` | OFF
| Wymusza wygenerowanie dokumentacji nawet w przypadku jeśli nie wszystki
  wtyczki zostaną skompilowane (nie zalecane: dokumentacja nie będzie kompletna).

| ENABLE_ENCHANT | `ON`, `OFF` | OFF
| Kompilacja <<spell_checking,wtyczki spell>> z Enchant.

| ENABLE_EXEC | `ON`, `OFF` | ON
| Kompilacja <<external_commands,wtyczki exec>>.

| ENABLE_FIFO | `ON`, `OFF` | ON
| Kompilacja <<fifo_pipe,wtyczki fifo>>.

| ENABLE_FSET | `ON`, `OFF` | ON
| Kompilacja <<fset,wtyczki fset>>.

| ENABLE_GUILE | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki guile>> (Scheme).

| ENABLE_HEADLESS | `ON`, `OFF` | ON
| Kompilacja pliku binarnego w trybie headless.

| ENABLE_IRC | `ON`, `OFF` | ON
| Kompilacja <<irc,wtyczki IRC>>.

| ENABLE_JAVASCRIPT | `ON`, `OFF` | OFF
| Kompilacja <<scripting_plugins,wtyczki javascript>>.

| ENABLE_LARGEFILE | `ON`, `OFF` | ON
| Wsparcie dla dużych plików.

| ENABLE_LOGGER | `ON`, `OFF` | ON
| Kompilacja <<buffer_logging,wtyczki logger>>.

| ENABLE_LUA | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki lua>>.

| ENABLE_NCURSES | `ON`, `OFF` | ON
| Kompilacja interfejsu Ncurses.

| ENABLE_NLS | `ON`, `OFF` | ON
| Włączenie NLS (tłumaczenia).

| ENABLE_PERL | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki perl>>.

| ENABLE_PHP | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki PHP>>.

| ENABLE_PYTHON | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki Python>>.

| ENABLE_RELAY | `ON`, `OFF` | ON
| Kompilacja <<relay,wtyczki relay>>.

| ENABLE_RUBY | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki ruby>>.

| ENABLE_SCRIPT | `ON`, `OFF` | ON
| Kompilacja <<script_manager,wtyczki script>>.

| ENABLE_SCRIPTS | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczek skryptowych>> (Python, Perl, Ruby, Lua,
  Tcl, Guile, PHP).

| ENABLE_SPELL | `ON`, `OFF` | ON
| Kompilacja <<spell_checking,wtyczki spell>>.

| ENABLE_TCL | `ON`, `OFF` | ON
| Kompilacja <<scripting_plugins,wtyczki tcl>>.

| ENABLE_TRIGGER | `ON`, `OFF` | ON
| Kompilacja <<trigger,wtyczki trigger>>.

| ENABLE_TYPING | `ON`, `OFF` | ON
| Kompilacja <<typing_notifications,wtyczki typing>>.

| ENABLE_XFER | `ON`, `OFF` | ON
| Kompilacja <<xfer,wtyczki xfer>>.

| ENABLE_ZSTD | `ON`, `OFF` | ON
| Włącza kompresje https://facebook.github.io/zstd/[Zstandard ^↗^^].

| ENABLE_TESTS | `ON`, `OFF` | OFF
| Kompiluje testy.

| ENABLE_CODE_COVERAGE | `ON`, `OFF` | OFF
| Kompilacja z opcja pokrycia kodu. +
  Ta opcja powinna być używana tylko dla testów, w celu pomiaru pokrycia kodu.
|===

Pozostałe opcje można wyświetlić poleceniem:

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

Lub z interfejsem Curses:

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

[[tests]]
==== Testy

Następujące pakiety są *wymagane* do kompilacji testów:

* libcpputest-dev
* kompilator C++

Testy muszą być włączone podczas kompilacji WeeChat:

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

Można je uruchomić po skompilowaniu z katalogu kompilacji:

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

[[git_sources]]
=== Źródła z gita

Uwaga: źródła z gita przeznaczone są tylko dla zaawansowanych użytkowników:
mogą się nie kompilować lub być niestabilne. Zostałeś ostrzeżony!

W celu pobrania źródeł z gita, wykonaj poniższą komendę:

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

Następnie postępuj zgodnie z instrukcjami dla pakietów źródłowych (zobacz
<<source_package,pakiety źródłowe>>).

[[report_crashes]]
=== Zgłaszanie awarii

Jeśli doświadczyłeś awarii, lub chcesz zgłosić przyszłą awarię WeeChat, należy:

* skompilować WeeChat z:
** informacjami dla debuggera (albo zainstalować stosowną paczkę w systemie)
** weryfikacją adresów w pamięci (opcjonalnie)
* włączyć obsługę plików _core_ w systemie
* zainstalować gdb

[[debug_build]]
==== Kompilacja w trybie debug

Jeśli kompilujesz z użyciem CMake:

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

[[address_sanitizer]]
==== Weryfikacja adresów w pamięci

Możesz dodatowo włączyć weryfikację adresów, co spowoduje natychmiastową awarię
WeeChat w przypadku wystąpienia problemu:

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

[CAUTION]
Powinieneś włączyć tą opcję tylko jeśli chcesz wymusić awarię aplikacji,
nie powinno się tego używać do codziennej pracy.

Po skompilowaniu i zainstalowaniu należy uruchamiać WeeChat w taki sposób:

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

W przypadku awarii plik logi znajdą się w pliku `asan.log`.

[[core_files]]
==== CPliki core

W celu włączenia plików _core_ możesz użyć opcji
<<option_weechat.startup.sys_rlimit,weechat.startup.sys_rlimit>>:

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

Dla WeeChat w wersji ≤ 0.3.8 albo jeśli chcesz włączyć obsługę plików core przed
startem  WeeChat, możesz użyć komendy `ulimit`.

Na przykład pod Linuksem używając powłoki _bash_, dodaj to do pliku `~/.bashrc`:

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

Lub z maksymalnym rozmiarem:

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

[[gdb_backtrace]]
==== Pozyskiwanie logów za pomocą gdb

Kiedy WeeChat ulegnie awarii, Twój system stworzy plik _core_ lub _core.12345_
(_12345_ to id procesu) jeśli <<core_files,zostało to włączone>>.
Plik ten zostanie utworzony w katalogu, z którego uruchomiono WeeChat (*nie*
jest to katalog, gdzie zainstalowano WeeChat!).

[NOTE]
Na niektórych systemach jak Archlinux pliki te mogą znajdować się w innym katalogu
jak _/var/lib/systemd/coredump_ i należy użyć komendy `coredumpctl` do ich odczytania. +
Więcej informacji można znaleźć na tej
https://wiki.archlinux.org/title/Core_dump[stronie wiki ^↗^^].

Na przykład jeśli _weechat_ jest zainstalowany w _/usr/bin/_ i plik _core_
znajduje się w _/home/user/_, uruchom gdb za pomocą tej komendy:

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

Następnie pod gdb użyj komendy `bt full`, aby wyświetlić log.
Zobaczysz coś podobnego do tego:

----
(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>
----

Musisz przekazać ten log developerom i powiedzieć im co spowodowało awarię.

Dziękujemy za pomoc!

[[debug_running_weechat]]
==== Debugowanie działającego WeeChat

W celu debugowania działającego WeeChat (na przykład kiedy WeeChat wydaje się
zawieszony), można użyć gdb podając in procesu (zastąp _12345_ numerem PID
procesu weechat):

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

Następnie jak w przypadku awarii, użyj polecenia `bt full`:

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

[[running_weechat]]
== Uruchamianie WeeChat

Żeby uruchomić WeeChat, wykonaj polecenie:

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

Podczas pierwszego uruchomienia WeeChat tworzone są domyślne pliki konfiguracyjne
w  _~/.config/weechat_ z domyślnymi opcjami i wartościami
(zobacz <<files_and_directories,Pliki i foldery>>).

[[command_line_options]]
=== Argumenty linii poleceń

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

Kilka dodatkowych opcji jest dostępne tylko do celu debugowania:

[CAUTION]
*NIE* używaj żadnej z nich podczas codziennej pracy!

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

[[environment_variables]]
=== Zmienne środowiskowe

Niektóre zmienne śwodowiskowe są używane przez WeeChat o ile zostały zdefiniowane:

[width="100%",cols="1m,6",options="header"]
|===
| Nazwa                | Opis
| WEECHAT_HOME         | Katalog domowy WeeChat (z plikami konfiguracyjnymi, logami, skryptami, ...). Działa tak samo jak <<build,opcja CMake>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE   | Hasło używane do odszyfrowania zabezpieczonych danych.
| WEECHAT_EXTRA_LIBDIR | Dodatkowy katalog do ładowania wtyczek (z katalogu "plugins" znajdującego się pod tą ścieżką).
|===

[[colors_support]]
=== Wsparcie kolorów

WeeChat może użyć do 32767 par kolorów do wyświetlania tekstu w paskach i obszarze
rozmów (twój terminal musi wspierać do 256 par kolorów, aby użyć ich w WeeChat).

Zgodnie z wartością zmiennej środowiskowej _TERM_, możesz posiadać następujące
limity dla kolorów w WeeChat:

[width="75%",cols="8,>3,>3",options="header"]
|===
| $TERM                                  | Kolory |  Pary
| "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
|===

Możesz wykonać `weechat --colors` lub użyć komendy `/color` w WeeChat, aby
wyświetlić limity dla twojego środowiska.

Niektóre z zalecanych wartości dla _TERM_ jeśli chcesz używać 256 kolorów:

* dla screena: _screen-256color_
* pod tmux: _screen-256color_ lub _tmux-256color_
* poza screenem/tmuxem: _xterm-256color_, _rxvt-256color_, _putty-256color_, ...

[NOTE]
Być może konieczne jest zainstalowanie pakietu "ncurses-term", w celu użycia
tych wartości dla zmiennej _TERM_.

Jeśli używasz screena, możesz dodać to do swojego _~/.screenrc_:

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

Jeśli wartość zmiennej _TERM_ ma złą wartość, a WeeChat jest już uruchomiony,
możesz ją zmienić za pomocą tych dwóch komend:

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

[[files_and_directories]]
=== Pliki i foldery

[[xdg_directories]]
==== Katalogi XDG

WeeChat domyślnie używa katalogów XDG (zgodnie ze specyfikacją:
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG Base Directory Specification ^↗^^]). +
Pojedynczy katalog może zostać wymuszony przez opcję CMake `WEECHAT_HOME`,
zmienną środowiskową `WEECHAT_HOME` lub parametr z linii polecań `-d` / `--dir`.

Kiedy jeden katalog domowy dla WeeChat nie zostanie wymuszony, używane zostają katalogi
XDG z takim podziałem:

[width="100%",cols="1,2m,5",options="header"]
|===
| Katalog   | Domyślna wartość         | Wartość jeśli $XDG_XXX nie jest zdefiniowana
| 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 | Taki sam jak katalog _cache_
|===

Pliki konfiguracyjne z domyślnymi wartościami są tworzone przy pierwszym uruchomieniu WeeChat.
The configuration files are created with default values the first time you run WeeChat.

[[weechat_directories]]
==== Katalogi WeeChat

Katalogi używane przez WeeChat to:

[width="100%",cols="1m,3",options="header"]
|===
| Ścieżka ^(1)^           | Opis
| ~/.config/weechat/      | Pliki konfiguracyjne WeeChat: `*.conf`, certifikaty, itp.
| ~/.local/share/weechat/ | Pliki z danymi WeeChat: logi, skrypty, dane skryptów, pliki xfer, itp.
|    logs/                | Pliki z logami (jeden na bufor).
|    python/              | Skrypty pythonowe.
|       autoload/         | Skrypty pythonowe automatycznie ładowane przy starcie ^(2)^.
|    perl/                | Skrypty perlowe.
|       autoload/         | Skrypty perlowe automatycznie ładowane przy starcie ^(2)^.
|    ruby/                | Skrypty ruby.
|       autoload/         | Skrypty ruby automatycznie ładowane przy starcie ^(2)^.
|    lua/                 | Skrypty lua.
|       autoload/         | Skrypty lua automatycznie ładowane przy starcie ^(2)^.
|    tcl/                 | Skrypty tcl.
|       autoload/         | Skrypty tcl automatycznie ładowane przy starcie ^(2)^.
|    guile/               | Skrypty guile.
|       autoload/         | Skrypry guile automatycznie ładowane przy starcie ^(2)^.
|    javascript/          | Skrypty JavaScript.
|       autoload/         | Skrypty JavaScript automatycznie ładowane przy starcie ^(2)^.
|    php/                 | Skrypty PHP.
|       autoload/         | Skrypty PHP automatycznie ładowane przy starcie ^(2)^.
| ~/.cache/weechat/       | Pliki pamięci podręcznej WeeChat: pliki pamięci podręcznej skryptów.
| /run/user/1000/weechat/ | Pliki uruchomieniowe WeeChat: kolejki FIFO, Gniazda UNIX pośrednika.
|===

[NOTE]
^(1)^ Katalogi XDG mogą się różnić w zależności od wartości zmiennych `XDG_*`. +
^(2)^ Ten folder zawiera przewazine linki symboliczne do plików w folderze nadrzędnym.

[[weechat_files]]
==== Pliki WeeChat

Pliki tworzone w katalogu domowym WeeChat:

[width="100%",cols="1m,3,6",options="header"]
|===
| Plik            | Opis                                         | Wrażliwe dane
| weechat.conf    | Główny plik konfiguracyjny WeeChat           | Możliwe (przykład: lista kanałów w zapisanym układzie buforów).
| sec.conf        | Plik konfiguracyjny z zabezpieczonymi danymi | *Tak, bardzo wrażliwe*: Tym plikiem nie powinno się z nikim dzielić.
| plugins.conf    | Plik konfiguracyjny wtyczek                  | Możliwe, zależy od wtyczki/skryptu.
| alias.conf      | Plik konfiguracyjny wtyczki _alias_          | Możliwe, zależy od aliasu.
| buflist.conf    | Plik konfiguracyjny wtyczki _buflist_        | Nie.
| charset.conf    | Plik konfiguracyjny wtyczki _charset_        | Nie.
| exec.conf       | Plik konfiguracyjny wtyczki _exec_           | Nie.
| fifo.conf       | Plik konfiguracyjny wtyczki _fifo_           | Nie.
| fset.conf       | Plik konfiguracyjny wtyczki _fset_           | Nie.
| guile.conf      | Plik konfiguracyjny wtyczki _guile_          | Nie.
| irc.conf        | Plik konfiguracyjny wtyczki _irc_            | *Tak*: może zawierać hasła dla serwerów, nickserva i kanałów (jeśli nie zostały zapisane w `sec.conf`).
| javascript.conf | Plik konfiguracyjny wtyczki _javascript_     | Nie.
| logger.conf     | Plik konfiguracyjny wtyczki _logger_         | Nie.
| lua.conf        | Plik konfiguracyjny wtyczki _lua_            | Nie.
| perl.conf       | Plik konfiguracyjny wtyczki _perl_           | Nie.
| php.conf        | Plik konfiguracyjny wtyczki _php_            | Nie.
| python.conf     | Plik konfiguracyjny wtyczki _python_         | Nie.
| relay.conf      | Plik konfiguracyjny wtyczki _relay_          | *Tak*: może on zawierać hasła pośredników i sekrety TOTP (jeśli nie zostały zapisane w `sec.conf`), dozwolone adresy IP/websockety oraz otwarte porty.
| ruby.conf       | Plik konfiguracyjny wtyczki _ruby_           | Nie.
| script.conf     | Plik konfiguracyjny wtyczki _script_         | Nie.
| spell.conf      | Plik konfiguracyjny wtyczki _spell_          | Nie.
| tcl.conf        | Plik konfiguracyjny wtyczki _tcl_            | Nie.
| trigger.conf    | Plik konfiguracyjny wtyczki _trigger_        | Możliwe, zależy od triggerów.
| typing.conf     | Plik konfiguracyjny wtyczki _typing_         | Nie.
| xfer.conf       | Plik konfiguracyjny wtyczki _xfer_           | Nie.
| weechat.log     | Plik z logami WeeChat                        | Nie.
|===

[IMPORTANT]
*Nie zaleca się* edytowania plików konfiguracyjnych ręcznie, ponieważ WeeChat
może je nadpisać w dowolnym momencie (na przykład poprzez komende <<command_weechat_quit,/quit>>)
oraz po wprowadzeniu ręcznie zmian należy użyć komendy <<command_weechat_reload,/reload>>
(ryzykując utratę zmian, nie zapisanych za pomocą komendy <<command_weechat_save,/save>>). +
Możesz użyć komendy <<command_weechat_set,/set>>, która sprawdza ustawianą wartość
i od razu wprowadza zmiany.

[[upgrade]]
== Aktualizacja

Jeśli zostanie wydana nowa stabilna wersja WeeChat należy zaktualizować
się do tej wersji.

Na samym początku musisz zainstalować nową wersje WeeChat albo za pomocą
managera pakietów albo kompilując ją samemu, w taki sposób żeby plik
wykonywalny `weechat` i wszystke wymagane pliki znajdowały się w tych samych
ścieżkach. +
Można to zrobić podczas działania WeeChat.

[[upgrade_command]]
=== Komenda aktualizacji

WeeChat może zostać ponownie uruchomiony z nowego pliku binarnego bez potrzeby
jego wyłączania za pomocą komendy <<command_weechat_upgrade,/upgrade>>:
zawartości buforów i połączenia nie TLS zostają zachowane. +
Połączenia TLS są przerywane podczas aktualizacji i są automatycznie
przywracane po jej zakończeniu (przeładowanie sesji TLS jest obecnie
niemożliwe z użyciem GnuTLS).

Komenda ta może zostać użyta również w momencie restartu maszyny, na przykład
w celu aktualizacji kernela albo przeniesienia WeeChat na nową maszynę:

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

Zapisuje to obecny stan w plikach `*.upgrade`. Możesz następnie wykonać restart
lub przenieść cały katalog WeeChat (konfiguracja, dane, cache) na inną maszynę,
następnie uruchomić WeeChat za pomocą polecenia:

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

[[restart_after_upgrade]]
=== Restart po aktualizacji

[[restart_upgrading_notes]]
==== Informacje o aktualizacji

Po aktualizacji *zaleca się* zapoznanie z plikiem
https://github.com/weechat/weechat/blob/main/UPGRADING.md[UPGRADING.md ^↗^^],
który zawiera ważne informacje o niekompatybilnych zmianach i czynnościach,
jakie mogą być wymagane.

Powinieneś zapoznać się z informacjami dla wersji pomiędzy tą, która aktualizowałeś
a nową wersją. +
Na przykład dla aktualizacji z wersji 4.0.0 do 4.3.0 należy przeczytać informacje
dotyczące wszystkich wersji od 4.0.1 do 4.3.0 włącznie.

[[restart_configuration_upgrade]]
==== Aktualizacja konfiguracji

WeeChat potrafi automatycznie aktualizować pliki konfiguracyjne (`*.conf`):

* nowe opcje są dodawane z domyślnymi wartościami
* niepotrzebne już opcje są automatycznie kasowane i WeeChat wyświetla ostrzeżenie
  z wartościami odczytanymi z pliku.

Przykład ostrzeżenia o usuwanej opcji:

----
=!= Ostrzeżenie: /home/user/.config/weechat/sec.conf, linia 15: nieznana opcja dla sekcji "crypt": passphrase_file = ""
----

Oznaza to, że opcja `sec.crypt.passphrase_file` została usunięta i jej wartość była
ustawiona na pusty ciąg, który był domyślną wartością w poprzednej wersji
(w tym przypadku żadna dodatkowa akcja nie jest wymagana).

[[interface]]
== Interfejs

[[screen_layout]]
=== Układ ekranu

Przykład terminala z WeeChat:

....
 ▼ bar "buflist"   ▼ bar "title"
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Welcome to #test, this is a test channel                                    │
│  weechat│12:52:27   --> | Flashy (flashcode@weechat.org) has joined #test    │@Flashy│
│2.  #test│12:52:27    -- | Nicks #test: [@Flashy @joe +weebot peter]          │@joe   │
│3.  #abc │12:52:27    -- | Channel #test: 4 nicks (2 ops, 1 voice, 1 normal)  │+weebot│
│4.  #def │12:52:27    -- | Channel created on Tue Jan 27 06:30:17 2009        │peter  │
│5.  #ghi │12:54:15 peter | hey!                                               │       │
│         │12:55:01  @joe | hello                                              │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │[12:55] [5] [irc/libera] 2:#test(+n){4}* M [H: 3:#abc(2,5), 5]              │
│         │[@Flashy(i)] hi peter!█                                                     │
└──────────────────────────────────────────────────────────────────────────────────────┘
            ▲ bars "status" and "input"                               bar "nicklist" ▲
....

Domyślnie ekran jest podzielony na następujące obszary:

* obszar rozmowy (środek ekranu) z liniami rozmowy, zawierającymi:
** czas
** prefiks (przed "|")
** wiadomość (za "|")
* paski dookoła obszaru rozmowy, domyślne paski to:
** pasek _buflist_, po lewej
** pasek _title_, nad obszarem rozmowy
** pasek _status_, pod obszarem rozmowy
** pasek _input_, pod paskiem statusu
** pasek _nicklist_, po prawej

Pasek _buflist_ posiada następujące domyślne elementy:

[width="100%",cols="^3,^3,9",options="header"]
|===
| Element | Przykład    | Opis
| buflist | `1.weechat` | Lista buforów.
|===

Pasek _title_ posiada następujące domyślne elementy:

[width="100%",cols="^3,^3,9",options="header"]
|===
| Element      | Przykład           | Opis
| buffer_title | `Witaj na #test`   | Tytuł buforu.
|===

Pasek _status_ posiada następujące domyślne elementy:

[width="100%",cols="^3,^3,9",options="header"]
|===
| Element               | Przykład               | Opis
| time                  | `12:55`                | Czas.
| buffer_last_number    | `5`                    | Liczba najnowszych buforów (może się różnić od `buffer_count` jeśli opcja <<option_weechat.look.buffer_auto_renumber,weechat.look.buffer_auto_renumber>> jest ustawiona na `off`).
| buffer_plugin         | `irc/libera`           | Wtyczka dla obecnego bufora (wtyczka irc może dodać nazwę serwera IRC używanego przez bufor).
| buffer_number         | `2`                    | Numer obecnego buforu.
| buffer_name           | `#test`                | Nazwa obecnego buforu.
| buffer_modes          | `+n`                   | Tryby kanału IRC.
| buffer_nicklist_count | `4`                    | Ilość nicków wyświetlanych na liście nicków.
| buffer_zoom           | !                      | `!` oznacza, że połączony bufor jest przybliżony (tylko ten jest wyświetlany), pusta wartość oznacza, że wszystkie połączone bufory są wyświetlane.
| buffer_filter         | `+*+`                  | Wskaźnik filtrowania: `+*+` oznacza, że niektóre linie zostały odfiltrowywane (ukryte), pusta wartość oznacza, że wszystkie linie są wyświetlane.
| mouse_status          | `M`                    | Status obsługi myszy (pusty jeśli obsługa myszy jest wyłączona), zobacz <<command_weechat_mouse,/mouse>> i <<key_bindings_toggle_keys,Włącz/wyłącz>>.
| scroll                | `-Więcej(50)-`         | Wskaźnik przewijania, z numerem linii poniżej ostatniej wyświetlanej.
| lag                   | `Lag: 2.5`             | Wskaźnik opóźnienia, w sekundach (ukryty dla niskich opóźnień).
| hotlist               | `H: 3:#abc(2,5), 5`    | Lista buforów z aktywnością (nieprzeczytane wiadomości) (w przykładzie, 2 podświetlenia i 5 nieprzeczytanych wiadomości w _#abc_, jedna wiadomość w buforze #5).
| typing                | `Typing: bob, (alice)` | Powiadomienia o pisaniu, zobacz <<typing_notifications,Powiadomienia o pisaniu>>.
| completion            | `abc(2) def(5)`        | Lista słów do dopełnienia, z ilością możliwych dopełnień dla każdego słowa.
|===

Pasek _input_ posiada następujące domyślne elementy:

[width="100%",cols="^3,^3,9",options="header"]
|===
| Element      | Przykład                                     | Opis
| input_prompt | `@Flashy(i)`                                 | Input prompt, dla irc: nick i tryby (tryb "+i" oznacza niewidzialny na libera).
| away         | `away`                                       | Wskaźnik nieobecności.
| input_search | `Search lines (~ str,msg)`                   | Wskaźnik wyszukiwania (zobacz poniżej).
| input_paste  | `Wkleić 7 linii ? [ctrl-y] Tak [ctrl-n] Nie` | Pyta użytkownika podczas wklejania kilku linii tekstu.
| input_text   | `hi peter!`                                  | Wprowadzony tekst.
|===

Dostępne są dwa tryby wyszukiwania:

* wyszukiwanie w liniach, na przydład `[Search lines (~ str,msg)]`, z następującymi informacjami:
** `~`: wielkość liter ma znaczenie
** `==`: wielkość liter nie ma znaczenia
** `str`: wyszukiwanie ciągu
** `regex`: wyszukiwanie wyrażenia regularnego
** `msg`: wyszukiwanie w wiadomościach
** `pre`: wyszukiwanie w prefiksach
** `pre\|msg`: wyszukiwanie w prefiksach i wiadomościach)
* wyszukiwanie w historii komend, na przydład `[Search command (~ str,local)]`,
  z następującymi informacjami:
** `~`: wielkość liter ma znaczenie
** `==`: wielkość liter nie ma znaczenia
** `str`: wyszukiwanie ciągu
** `regex`: wyszukiwanie wyrażenia regularnego
** `local`: wyszukiwanie w lokalnej historii bufora
** `global`: wyszukiwanie w globalnej historii.

Pasek _nicklist_ posiada następujące domyślne elementy:

[width="100%",cols="^3,^3,9",options="header"]
|===
| Element         | Przykład  | Opis
| buffer_nicklist | `@Flashy` | Lita nicków w obecnym buforze.
|===

Inne dostępne elementy (nie używane domyślnie w paskach):

[width="100%",cols="^3,^3,9",options="header"]
|===
| Element                      | Przykład                 | Opis
| buffer_count                 | `5`                      | Liczba otwartych buforów.
| buffer_nicklist_count_all    | `4`                      | Liczba widocznych grup i nicków na nickliście.
| buffer_nicklist_count_groups | `0`                      | Liczba widocznych grup na nickliście.
| buffer_short_name            | `#test`                  | Skrócona nazwa obecnego buforu.
| buflist2                     | `1.weechat`              | Lista buforów, drugi element paska (zobacz opcję <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist3                     | `1.weechat`              | Lista buforów, trzeci element paska (zobac opcję <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist4                     | `1.weechat`              | Lista buforów, czwarty element paska (zobacz opcję <<option_buflist.look.use_items,buflist.look.use_items>>).
| buflist5                     | `1.weechat`              | Lista buforów, piąty element paska (zobacz opcję <<option_buflist.look.use_items,buflist.look.use_items>>).
| fset                         | `+buflist.look.sort: …+` | Pomoc dla obecnie wybranej opcji w buforze fset.
| irc_channel                  | `#test`                  | Nazwa bieżącego kanału IRC.
| irc_host                     | `+user@host.com+`        | Aktualny host IRC.
| irc_nick                     | `+Flashy+`               | Aktualny nick IRC.
| irc_nick_host                | `+Flashy!user@host.com+` | Aktualny nick i host IRC.
| irc_nick_modes               | `i`                      | Atrybuty IRC dla własnego nicka.
| irc_nick_prefix              | `@`                      | Prefiks nicku na kanale IRC.
| spacer                       |                          | Specjalny element używany do wyrównania tekstu na paskach, zobacz <<item_spacer,Odstęp>>.
| spell_dict                   | `fr,en`                  | Słowniki używane w obecnym buforze.
| spell_suggest                | `print,prone,prune`      | Sugestie dla słowa pod kursorem (jeśli zawiera błąd).
| tls_version                  | `TLS1.3`                 | Wersja TLS używana przez obecny serwer IRC.
| window_number                | `2`                      | Numer obecnego okna.
|===

Każdy aspekt układu może zostać spersonalizowany za pomocą <<command_line,komend>>:
<<command_weechat_bar,`/bar`>> do dostosowania pasków,
<<command_weechat_buffer,/buffer>> i <<command_weechat_window,`/window`>>
do dostosowania <<buffers_and_windows,budorów i okien>>,
i <<command_weechat_layout,/layout>> żeby nazwać, zapisać i przywrócić układ ekranu
i powiązania między oknami i buforami.

[[command_line]]
=== Linia poleceń

Linia poleceń WeeChat (na dole okna) pozwala na wykonywanie komend lub wysłanie
tekstu do bufora.

[[command_line_syntax]]
==== Składnia

Komendy zaczynają się od znaku "/", następnie wpisujemy komendę. Na przykład,
aby zobaczyć listę wszystkich opcji:

----
/set
----

Tekst wysłany do buforu to dowolny tekst, który nie zaczyna się od znaku "/".
Na przykład, żeby wysłać tekst _hello_ do obecnego buforu wystarczy:

----
hello
----

Jednak możliwe jest rozpoczęcie tekstu znakiem "/", wpisując go podwójnie.
Na przykład, żeby wysłać tekst `/set` do obecnego buforu:

----
//set
----

[[command_line_colors]]
==== Kody kolorów

Dla niektórych wtyczek jak IRC, można użyć kolorów i atrybutów w następujący sposób
(wciśnij kbd:[Ctrl+c] następnie literę z opcjonalną wartością):

[width="100%",cols="1,2",options="header"]
|===
| Klawisz                | Opis
| kbd:[Ctrl+c], kbd:[b]  | Pogrubiony tekst
| kbd:[Ctrl+c], kbd:[c],
  kbd:[xx]               | Kolor tekstu `xx` (zgodnie z poniższą listą kolorów)
| kbd:[Ctrl+c], kbd:[c],
  kbd:[xx], kbd:[,],
  kbd:[yy]               | Kolor tekstu `xx` i tła `yy` (zgodnie z poniższą listą kolorów)
| kbd:[Ctrl+c], kbd:[d],
  kbd:[xxxxxx]           | Kolor tekstu `xxxxxx` (RGB jako wartości szesnastkowe, na przykład `FF0000` dla czerwonego).
| kbd:[Ctrl+c], kbd:[d],
  kbd:[xxxxxx], kbd:[,],
  kbd:[yyyyyy]           | Kolor tekstu `xxxxxx` i tła `yyyyyy` (RGB jako wartości szesnastkowe).
| kbd:[Ctrl+c], kbd:[i]  | Kursywa
| kbd:[Ctrl+c], kbd:[o]  | Wyłącza kolory i atrybuty
| kbd:[Ctrl+c], kbd:[s]  | Przekreślony tekst (wyświetlany w interfejsie ncurses jako w połowie jasny, ponieważ przekreślenie nie jest wspierane).
| kbd:[Ctrl+c], kbd:[v]  | Odwróć video (przywraca kolor tekstu i tła)
| kbd:[Ctrl+c], kbd:[_]  | Podkreślony tekst
|===

[NOTE]
Te same skróty (bez numeru kbd:[Ctrl+c], kbd:[c] i kbd:[Ctrl+c], kbd:[d])
mogą zostać użyte dla zatrzymania atrybutu.

Kody kolorów dla kbd:[Ctrl+c], kbd:[c]:

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

[NOTE]
W celu wyświetlenia wszystkich dostępnych kolorów dla terminala możesz wykonać
komendę `/color` następnie kbd:[Alt+c] (w WeeChat) lub wywołać w terminalu:
`weechat --colors`.

Przykład: wyświetlenie "hello Alice!" z pogrubionym jasno niebieskim "hello"
i podkreślonym jasno czerwonym "Alice":

----
^Cc12^Cbhello ^Cb^Cc04^C_Alice^C_^Cc!
----

Skróty klawiszowe:

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]
We wtyczce irc, można zmienić przypisania tych kolorów za pomocą opcji
<<option_irc.color.mirc_remap,irc.color.mirc_remap>>.

[[buffers_and_windows]]
=== Bufory i okna

_Bufor_ posiada numer, nazwę, wyświetlane linie (i trochę innych danych).

Przykłady buforów:

* główny bufor (tworzony po uruchomieniu WeeChat, nie może zostać zamknięty)
* serwer irc (wyświetla informacje z serwera)
* kanał irc
* prywatna rozmowa irc

_Okno_ to obszar ekranu, w którym wyświetlane są bufory. Nie jest możliwe
podzielenie ekranu na kilka okien (przykłady <<window_split_examples,poniżej>>,
szczegóły komenda <<command_weechat_window,/window>>).

Każde okno wyświetla jeden bufor. Bufor może zostać ukryty (nie wyświetlany w
oknie) lub wyświetlany w jednym lub więcej oknach.

Układy ekranu i powiązania między oknami i buforami mogą być
<<command_weechat_layout,zapisywane i przywracane>>.

[[window_split_examples]]
==== Przykłady

Przykład podziału poziomego (`/window splith`):

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

Przykład podziału pionowego (`/window splitv`):

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

Przykład podziałów pionowego i poziomego:

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

[[bare_display]]
==== Niesformatowany ekran

Specjalny ekran nazywany "bare display" może zostać użyty do łatwego kliknięcia
w długi adres URL i zaznaczania tekstu (za pomocą myszy).

Tryb niesformatowanego ekranu posiada następujące cechy:

* wyświetlana jest tylko zawartość obecnego bufora: bez podziału okna i pasków
  (brak tematu, listy nicków, statusu, wejścia, ...)
* wsparcie dla myszy w WeeChat jest wyłączone (jeśli zostało włączone): możesz
  używać myszy jak w normalnym terminalu do klikania w adresy URL i zaznaczania
  tekstu
* ncurses nie jest używane, dlatego URLe nie są obcinane z końcem linii.

Domyślnym skrótem uruchamiającym ten tryb jest kbd:[Alt+l] (`L`), tak jak wyłączającym
go (lub domyślnie dowolna zmiana wejścia spowoduje wyjście z tego trybu, zobacz
<<option_weechat.look.bare_display_exit_on_input,weechat.look.bare_display_exit_on_input>>).

Format czasu może zostać dostosowany za pomocą opcji
<<option_weechat.look.bare_display_time_format,weechat.look.bare_display_time_format>>.

Tryb ten może być włączony również na specyficzny czas za pomocą komendy
<<command_weechat_window,/window>>.

Jeśłi WeeChat wygląda następująco:

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.libera │Welcome to #abc                                                             │
│  weechat│12:52:27   --> | Flashy (flashcode@weechat.org) has joined #abc     │@Flashy│
│2.  #test│12:52:27    -- | Nicks #abc: [@Flashy @joe +weebot peter]           │@joe   │
│3.  #abc │12:52:27    -- | Channel #abc: 4 nicks (2 ops, 1 voice, 1 normal)   │+weebot│
│4.  #def │12:52:27    -- | Channel created on Tue Jan 27 06:30:17 2009        │peter  │
│5.  #ghi │12:54:15 peter | hey!                                               │       │
│         │12:55:01  @joe | peter: hook_process: https://weechat.org/files/doc │       │
│         │               | /weechat/devel/weechat_plugin_api.en.html#_weechat │       │
│         │               | _hook_process                                      │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │                                                                    │       │
│         │[12:55] [5] [irc/libera] 3:#abc(+n){4}                                      │
│         │[@Flashy(i)] hi peter!█                                                     │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

Ekran w trybie niesformatowanego wyświetlania będzie wyglądać tak:

....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│                                                                                      │
│12:52 --> Flashy (flashcode@weechat.org) has joined #abc                              │
│12:52 -- Nicks #abc: [@Flashy @joe +weebot peter]                                     │
│12:52 -- Channel #abc: 4 nicks (2 ops, 1 voice, 1 normal)                             │
│12:52 -- Channel created on Tue Jan 27 06:30:17 2009                                  │
│12:54 <peter> hey!                                                                    │
│12:55 <@joe> peter: hook_process: https://weechat.org/files/doc/weechat/devel/weechat_│
│plugin_api.en.html#_weechat_hook_process                                              │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

Możesz więc kliknąć w URL od _joe_ bez żadnych problemów w swoim terminalu (jeśli
twój terminal wspiera klikanie w URLe).

[[buffers]]
=== Buforów

[[lines_format]]
==== Format linii

Linie wyświetlane w formatowanych buforach maja następujące pola:

[width="100%",cols="2,2,10",options="header"]
|===
| Pole                    | Wyświetlane         | Opis
| data/czas (wiadomość)   | Tak                 | Data/czas wiadomości (może być przeszła).
| data/czas (wywietlenie) | Nie                 | Data/time, kiedy WeeChat wyświetlił wiadomość.
| prefiks                 | Tak                 | Prefiks wiadomości, zazwyczaj nick.
| wiadomość               | Tak                 | Wiadomość.
| wyświetlone             | Nie                 | Boolean: true jeśli linia została wyświetlona, false jeśli linia została odfiltrowana komendą <<command_weechat_filter,/filter>>.
| podświetlenie           | Nie                 | Boolean: true jeśli linia ma podświetlenie, false w przeciwnym wypadku.
| tagi                    | Przez `/debug tags` | Tagi powiązane z linią (zobacz <<lines_tags,tagi linii>>).
|===

Wyświetlanie linni może być zmienione za pomocą wielu opcji wyglądu
(_pass:[weechat.look.*]_) oraz koloru (_pass:[weechat.color.chat_*]_).

[[lines_tags]]
==== Tagi linii

WeeChat używa tagów w liniach dla różnych celów:

* podświetleń
* poziomu powiadomień
* logowaia
* użycia komendy <<command_weechat_filter,/filter>>

Tagi można wyświetlić używając komendy `/debug tags` (tą samą komendą można je ukryć).

Popularnie używane tagi (niepełna lista):

[width="100%",cols="1m,4",options="header"]
|===
| Tag              | Opis
| no_filter        | Linia nie może być filtrowana.
| no_highlight     | Podświetlenia nie są dozwolone w tej linii.
| no_log           | Linia nie jest zapisywana w logu.
| log0 … log9      | Poziom logowania dla linii (zobacz komendę <<command_logger_logger,/logger>>).
| notify_none      | Linia nie może być dodana do hotlisty. ^(1)^
| notify_message   | Linia jest wiasomością użytkownika. ^(1)^
| notify_private   | Linia jest wiadomością prywatną. ^(1)^
| notify_highlight | Linia jest wiadomością z podświetleniem. ^(1)^
| self_msg         | Własna wiadomość.
| nick_xxx         | Wiadomość od nicku "xxx".
| prefix_nick_ccc  | Prefiks to nick o kolorze "ccc".
| host_xxx         | Nazwa użytkowniak i host w wiadomości.
| irc_xxx          | Wiadomość IRC "xxx" (komenda, albo 3 cyfrowy numer).
| irc_numeric      | Wiadomość numeryczna IRC.
| irc_error        | Błąd od erwera IRC.
| irc_action       | Akcja nicka (komenda `/me`).
| irc_ctcp         | Wiadomość CTCP.
| irc_ctcp_reply   | Odpowiedź na wiadomość CTCP.
| irc_smart_filter | Wiadomość IRC, która może być filtrowana przez "inteligentny filtr".
| away_info        | Wiadomość z powodem nieobecności.
|===

[NOTE]
^(1)^ Kiedy brak jest taga "notify_xxx", poziom jest ustawiony domyślnie na "low".
Jeśli tag "notify_xxx" jest obecny, można zdefiniować odpowiedni poziom powiadomień,
na przykład jeśli maksymalna hotlista jest używana dla nicku, poziom powiadomień może
być niższy niż wartość dla tagu.

[[local_variables]]
==== Zmienne lokalne

Zmienne lokalne mogą być definiowane dla wsystkich buforów.

Zmienna lokalna posiada:

* nazwę (ciąg)
* wartość (ciąg, może być pusty).

Zmienne lokalne mogą być tworzone przez WeeChat, wtyczki, skrypty lub ręcznie
w linii poleceń bufora.

Na przykład, żeby dodać zmienna lokalną „completion_default_template” wystarczy
polecenie:

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

Żeby wyświetlić zmienne lokalne dla obecnego bufora:

----
/buffer listvar
----

Usunięcie zmiennej lokalnej „completion_default_template”:

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

WeeChat i jego wtyczki domyślnie tworzą następujące zmienne:

[width="100%",cols="2m,2,5",options="header"]
|===
| Nazwa | Wartość | Opis

| away
| dowolny ciąg
| Powód nieobecności na serwerze, ustawiane przez wtyczkę irc.

| channel
| dowolny ciąg
| Nazwa kanału, ustawiana przez wtyczki irc/xfer i bufory z
  informacjami do debugowania wtyczek relay/trigger.

| charset_modifier
| dowolny ciąg
| Modyfikacja kodowania używanego na kanale, ustawiane przez wtyczkę irc.

| completion_default_template
| dowolny ciąg
| Domyślny szablon dopełnień dla bufora, nadpisuje zmienną
  `weechat.completion.default_template`.

| filter
| dowolny ciąg
| Filtr zdefiniowany w niektórych buforach jak `/fset`, `/list` (irc), `/server raw` (irc)
  i `/script`.

| host
| dowolny ciąg
| Własny host (jeśli jest znany), ustawiane przez wtyczkę irc.

| lag
| dowolny ciąg
| Opóźnienie serwera, ustawiane przez wtyczkę irc.

| name
| dowolny ciąg
| Nazwa bufora (uważaj, nie jest to pełna nazwa i nie wystarczy ona do
  zidentyfikowania i wyszukania bufora).

| nick
| dowolny ciąg
| Nazwa użytkownika, ustawiane przez wtyczki irc i xfer.

| no_log
| `1` (lub dowolny niepusty ciąg)
| Jeśli jest ustawiona, wiadomości z bufora nie są logowane.

| plugin
| dowolny ciąg
| Nazwa wtyczki, która stworzyła bufor (`core` dla buforów WeeChat).

| script_close_cb
| dowolny ciąg
| Callback zamykania bufora zdefiniowany przez skrypt.

| script_close_cb_data
| dowolny ciąg
| Dane dla callbacka zamykania bufora zdefiniowane przez skrypt.

| script_input_cb
| dowolny ciąg
| Callback wprowadzania danych w buforze zdefiniowany przez skrypt.

| script_input_cb_data
| dowolny ciąg
| Dane dla callbacka wprowadzania danych w buforze zdefiniowane przez skrypt.

| script_name
| dowolny ciąg
| Nazwa skryptu, który stworzył bufor.

| server
| dowolny ciąg
| Nazwa serwera ustawiana przez wtyczkę irc albo bufor z informacjami do
  debugowania wtyczki relay/trigger.

| spell_suggest
| dowolny ciąg
| Źle napisane słowo i sugestie (format: "słowo:sugestie"), ustawiane przez
  wtyczkę spell.

| trigger_filter
| dowolny ciąg
| Filtr triggerów, ustawiany przez wtyczkę trigger.

| type
| dowolny ciąg, na przykład:
  `channel`,
  `debug`,
  `exec`,
  `option`,
  `private`,
  `relay`,
  `script`,
  `server`,
  `user`,
  `xfer`
| Typ bufora ustawiany przez WeeChat i wiele wtyczek.

|===

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

[[buflist]]
=== Lista buforów

Wtyczka buflist wyświetla listę buforów w elemencie paska nazwanym "buflist"
(cztery dodatkowe elementy "buflist2", "buflist3", "buflist4" i "buflist5" są
również dostępne). +
Domyślny pasek "buflist" jest tworzony podczas uruchomieina z włączoną wtyczką.

[[buflist_commands]]
==== Komendy

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

[[buflist_options]]
==== Options

Sekcje w pliku _buflist.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja | Komenda               | Opis
| format | /set buflist.format.* | Formaty użyte do wyświetlania listy buforów.
| look   | /set buflist.look.*   | Wygląd elementów na liście buforów.
|===

Opcje:

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

[[cursor_mode]]
=== Tryb kursora

Tryb kursora pozwala na przesuwanie kurdsora w dowolne miejsce na ekranie,
w obszarze czatu i paskach, i pozwala na wykonywanie akcji w danym miejscu. +
Możesz wejść w tryb kursora za pomocą komendy `/cursor` lub za pomocą środkowego
przycisku myszy (obsługa myszy musi być włączona za pomocą kbd:[Alt+m] lub
komendy `/mouse enable`).

Typowym użyciem jest cytowanie wiadomości (obszar czatu) i interakcja z nickami
(pasek z listą nicków).

Zobacz komendę <<command_weechat_cursor,/cursor>> i
<<key_bindings_cursor_context,skróty klawiszowe w trybie kursora>> dla listy akcji
dostępnych w tym trybie.

[[key_bindings]]
== Skróty klawiszowe

WeeChat posiada wiele domyślnych skrótów opisanych w poniższych rozdziałach. +
Można je zmienić oraz dodać nowe za pomocą komendy <<command_weechat_key,/key>>.

[[key_bindings_command_line]]
=== Skróty dla linii poleceń

[[key_bindings_cmdline_cursor_movement]]
==== Poruszanie kursora

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót          | Opis | Komenda
| kbd:[←] +
  kbd:[Shift+←] +
  kbd:[Ctrl+b]   | Idź do poprzedniego znaku w linii poleceń. | `+/input move_previous_char+`
| kbd:[→] +
  kbd:[Shift+→] +
  kbd:[Ctrl+f]   | Idź do następnego znaku w linii poleceń. | `+/input move_next_char+`
| kbd:[Shift+↑]  | Idź do poprzedniej linii. | `+/input move_previous_line+`
| kbd:[Shift+↓]  | Idź do następnej linii. | `+/input move_next_line+`
| kbd:[Ctrl+←] +
  kbd:[Alt+b]    | Idź do poprzedniego słowa w linii poleceń. | `+/input move_previous_word+`
| kbd:[Ctrl+→] +
  kbd:[Alt+f]    | Idź do następnego słowa w linii poleceń. | `+/input move_next_word+`
| kbd:[Home] +
  kbd:[Ctrl+a]   | Idź na początek obecnej linii. | `+/input move_beginning_of_line+`
| kbd:[Shift+Home] | Idź na początek lini poleceń. | `+/input move_beginning_of_input+`
| kbd:[End] +
  kbd:[Ctrl+e]   | Idź na koniec obecnej linii. | `+/input move_end_of_line+`
| kbd:[Shift+End]  | Idż na koniec linii poleceń. | `+/input move_end_of_input+`
|===

[[key_bindings_cmdline_editing]]
==== Edycja

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót               | Opis | Komenda
| kbd:[Del] +
  kbd:[Ctrl+d]        | Usuń następny znak w linii poleceń. | `+/input delete_next_char+`
| kbd:[Backspace] +
  kbd:[Ctrl+h]        | Usuń poprzedni znak w linii poleceń. | `+/input delete_previous_char+`
| kbd:[Ctrl+k]        | Usuń wszystko od kursora do końca obecnej linii (skasowany ciąg zostanie skopipowany do wewnętrznego schowka). | `+/input delete_end_of_line+`
| kbd:[Alt+Ctrl+k]    | Usuń wszystko od kursora do końca linii poleceń (skasowany ciąg zostanie skopipowany do wewnętrznego schowka). | `+/input delete_end_of_input+`
| kbd:[Ctrl+t]        | Przestaw znaki. | `+/input transpose_chars+`
| kbd:[Ctrl+u]        | Usuń wszystko od kursora do początku obecnej linii (skasowany ciąg zostanie skopipowany do wewnętrznego schowka). | `+/input delete_beginning_of_line+`
| kbd:[Alt+Ctrl+u]    | Usuń wszystko od kursora do początku linii poleceń (skasowany ciąg zostanie skopipowany do wewnętrznego schowka). | `+/input delete_beginning_of_input+`
| kbd:[Alt+Backspace] | Usuń poprzednie słowo w linii poleceń (usuwany ciąg jest kopiowany do wewnętrznego schowka). | `+/input delete_previous_word+`
| kbd:[Ctrl+w]        | Usuń poprzednie słowo w linii poleceń do białego znaku (usuwany ciąg jest kopiowany do wewnętrznego schowka). | `+/input delete_previous_word_whitespace+`
| kbd:[Ctrl+y]        | Wkleja zawartość wewnętrznego schowka. | `+/input clipboard_paste+`
| kbd:[Ctrl+_]        | Cofnij poprzednia akcję w linii poleceń. | `+/input undo+`
| kbd:[Alt+_]         | Powtórz ostatnią akcję w linii poleceń. | `+/input redo+`
| kbd:[Tab]           | Dopełnij komendę lub nick (ponowne wciśnięcie kbd:[Tab]: znajdź następne dopełnienie). | `+/input complete_next+`
| kbd:[Shift+Tab]     | Bez dopełnienia: wykonaj częściowe dopełnienie, z oczekującym dopełnieniem: dopełnij z poprzednim dopełnieniem. | `+/input complete_previous+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]        | Wykonaj komendę lub wyślij wiadomość (w trybie wyszukiwania: przerwij wyszukiwanie). | `+/input return+`
| kbd:[Alt+Enter]     | Wstawia nową linię. | `+/input insert \n+`
| kbd:[Alt+d]         | Usuń następne słowo w linii poleceń (usuwany ciąg jest kopiowany do wewnętrznego schowka). | `+/input delete_next_word+`
| kbd:[Alt+k]         | Przechwyć wciśnięte klawisze i zwróć ich kod (i przypisaną komendę, jeśli istnieje) w linii poleceń. | `+/input grab_key_command+`
| kbd:[Alt+r]         | Usuń obecną linię. | `+/input delete_line+`
| kbd:[Alt+R]         | Usuń całą linię poleceń. | `+/input delete_input+`
|===

[[key_bindings_cmdline_color_codes]]
==== Kolory

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót                 | Opis | Komenda
| kbd:[Ctrl+c], kbd:[b] | Wstaw kod dla pogrubionego tekstu. | `+/input insert \x02+`
| kbd:[Ctrl+c], kbd:[c] | Wstaw kod dla kolorowego tekstu. | `+/input insert \x03+`
| kbd:[Ctrl+c], kbd:[d] | Wstaw kod dla kolorowego tekstu (kolor RGB jaki liczba szesnastkowa). | `+/input insert \x04+`
| kbd:[Ctrl+c], kbd:[i] | Wstaw kod dla pochyłego tekstu. | `+/input insert \x1D+`
| kbd:[Ctrl+c], kbd:[o] | Wstaw kod dla zresetowania koloru. | `+/input insert \x0F+`
| kbd:[Ctrl+c], kbd:[s] | Wstaw kod dla przekreślonego tekstu. | `+/input insert \x1E+`
| kbd:[Ctrl+c], kbd:[v] | Wstaw kod dla odwrócenia koloru. | `+/input insert \x16+`
| kbd:[Ctrl+c], kbd:[_] | Wstaw kod dla podkreślonego tekstu. | `+/input insert \x1F+`
|===

[[key_bindings_cmdline_history]]
==== Historia poleceń

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót        | Opis | Komenda
| kbd:[↑]      | Pokaż poprzednią komendę/wiadomość (w trybie wyszukiwania: szukaj w górę). | `+/input history_previous+`
| kbd:[↓]      | Pokaż następną komendę/wiadomość (w trybie wyszukiwania: szukaj w dół). | `+/input history_next+`
| kbd:[Ctrl+↑] | Pokaż poprzednią komendę/wiadomość w historii globalnej (wspólnej dla wszystkich buforów). | `+/input history_global_previous+`
| kbd:[Ctrl+↓] | Pokaż następną komendę/wiadomość w historii globalnej (wspólnej dla wszystkich buforów). | `+/input history_global_next+`
|===

[[key_bindings_cmdline_system]]
==== System

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót        | Opis | Komenda
| kbd:[Ctrl+z] | Uśpij proces WeeChat. | `+/sys suspend+`
|===

[[key_bindings_buffers]]
=== Bufory

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót                          | Opis | Komenda
| kbd:[Ctrl+r]                   | Szukaj tekstu w historii komend (zobacz <<key_bindings_histsearch_context,skróty w kontekscie "histsearch">>). | `+/input search_history+`
| kbd:[Ctrl+s]                   | Szukaj tekstu w liniach bufora (zobacz <<key_bindings_search_context,skróty w kontekscie "search">>). | `+/input search_text_here+`
| kbd:[Ctrl+x]                   | Przełącz obecny bufor jeśli bufory są połączone pod tym samym numerem, na przykład przełącz na bufor innego serwera IRC. | `+/buffer switch+`
| kbd:[Alt+x]                    | Pokaż wybrany z połączonych buforów (naciśnij kbd:[Alt+x] ponownie: wyświetl wszystkie połączone bufory). | `+/buffer zoom+`
| kbd:[PgUp]                     | Przewiń jedną stronę w górę w historii bufora. | `+/window page_up+`
| kbd:[PgDn]                     | Przewiń jedną stronę w dół w historii bufora. | `+/window page_down+`
| kbd:[Alt+PgUp]                 | Przewiń w górę kilka linii w historii bufora. | `+/window scroll_up+`
| kbd:[Alt+PgDn]                 | Przewiń w dół kilka linii w historii bufora. | `+/window scroll_down+`
| kbd:[Alt+Home]                 | Przewiń na górę bufora. | `+/window scroll_top+`
| kbd:[Alt+End]                  | Przewiń na dół bufora. | `+/window scroll_bottom+`
| kbd:[Alt+←] +
  kbd:[Alt+↑] +
  kbd:[Ctrl+p] +
  kbd:[F5]                       | Przełącz na poprzedni bufor. | `+/buffer -1+`
| kbd:[Alt+→] +
  kbd:[Alt+↓] +
  kbd:[Ctrl+n] +
  kbd:[F6]                       | Przełącz na następny bufor. | `+/buffer +1+`
| kbd:[Alt+j], kbd:[Alt+f]       | Przełącz na pierwszy bufor. | `+/buffer -+`
| kbd:[Alt+j], kbd:[Alt+l] (`L`) | Przełącz na ostatni bufor. | `+/buffer ++`
| kbd:[Alt+j], kbd:[Alt+r]       | Przełącz na bufor IRC raw. | `+/server raw+`
| kbd:[Alt+j], kbd:[Alt+s]       | Przełącz na bufor serwera IRC. | `+/server jump+`
| kbd:[Alt+0...9]                | Przełącz na bufor za pomocą liczb (0 = 10). | `+/buffer *N+`
| kbd:[Alt+j], kbd:[01...99]     | Przełącz na bufor za pomocą liczb. | `+/buffer *NN+`
| kbd:[Alt+n]                    | Przewiń do następnego powiadomienia. | `+/window scroll_next_highlight+`
| kbd:[Alt+p]                    | Przewiń do poprzedniego powiadomienia. | `+/window scroll_previous_highlight+`
| kbd:[Alt+u]                    | Przewiń do pierwszej nieprzeczytanej linii w buforze. | `+/window scroll_unread+`
| kbd:[Alt+Shift+U]              | Ustaw znacznik nieprzeczytania we wszystkich buforach. | `+/allbuf /buffer set unread+`
| kbd:[Alt+<]                    | Przełącz na poprzedni bufor z listy odwiedzonych buforów. | `+/buffer jump prev_visited+`
| kbd:[Alt+>]                    | Przełącz na następny bufor z listy odwiedzonych buforów. | `+/buffer jump next_visited+`
| kbd:[Alt+/]                    | Przełącz na ostatnio wyświetlony bufor (przed ostatnią zmianą bufora). | `+/buffer jump last_displayed+`
|===

[[key_bindings_windows]]
=== Okna

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót                    | Opis | Komenda
| kbd:[Ctrl+l] (`L`)       | Przerysuj całe okno. | `+/window refresh+`
| kbd:[Alt+l] (`L`)        | Przełącz tryb niesformatowanego wyświetlania. | `+/window bare+`
| kbd:[F7]                 | Przełącz na poprzednie okno. | `+/window -1+`
| kbd:[F8]                 | Przełącz na następne okno. | `+/window +1+`
| kbd:[Alt+w], kbd:[Alt+↑] | Przełącz na okno wyżej. | `+/window up+`
| kbd:[Alt+w], kbd:[Alt+↓] | Przełącz na okno niżej. | `+/window down+`
| kbd:[Alt+w], kbd:[Alt+←] | Przełącz na okno z lewej. | `+/window left+`
| kbd:[Alt+w], kbd:[Alt+→] | Przełącz na okno z prawej. | `+/window right+`
| kbd:[Alt+w], kbd:[Alt+b] | Balansuj rozmiar wszystkich okien. | `+/window balance+`
| kbd:[Alt+w], kbd:[Alt+s] | Zamień bufory między dwoma oknami. | `+/window swap+`
| kbd:[Alt+z]              | Pokaż obecne okno (ponowne wciśnięcie kbd:[Alt+z]: przywraca wcześniejszy układ okien). | `+/window zoom+`
|===

[[key_bindings_bars]]
=== Paski

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót             | Opis | Komenda
| kbd:[F1] +
  kbd:[Ctrl+F1]     | Przewiń do góry jedną stronę na liście buforów. | `+/bar scroll buflist * -100%+`
| kbd:[F2] +
  kbd:[Ctrl+F2]     | Przewiń w dół jedną stronę na liście buforów. | `+/bar scroll buflist * +100%+`
| kbd:[Alt+F1]      | Idź na początek listy buforów. | `+/bar scroll buflist * b+`
| kbd:[Alt+F2]      | Idź na koniec listy buforów. | `+/bar scroll buflist * e+`
| kbd:[F9]          | Przewiń tytuł bufora w lewo. | `+/bar scroll title * -30%+`
| kbd:[F10]         | Przewiń tytuł bufora w prawo. | `+/bar scroll title * +30%+`
| kbd:[F11] +
  kbd:[Ctrl+F11]    | Przewiń w górę jedna stronę listy nicków. | `+/bar scroll nicklist * -100%+`
| kbd:[F12] +
  kbd:[Ctrl+F12]    | Przewiń w dół jedna stronę listy nicków. | `+/bar scroll nicklist * +100%+`
| kbd:[Alt+F11]     | Idź na początek listy nicków. | `+/bar scroll nicklist * b+`
| kbd:[Alt+F12]     | Idź na koniec listy nicków. | `+/bar scroll nicklist * e+`
| kbd:[Alt+Shift+B] | Przełącz widoczność listy buforów. | `+/buflist toggle+`
| kbd:[Alt+Shift+N] | Przełącza widoczność paska z listą nicków. | `+/bar toggle nicklist+`
|===

[[key_bindings_hotlist]]
=== Hotlista

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót                          | Opis | Komenda
| kbd:[Alt+a]                    | Przełącz na następny bufor z aktywnością (z priorytetem: powiadomienie, wiadomość, inne). | `+/buffer jump smart+`
| kbd:[Alt+h], kbd:[Alt+c]       | Wyczyść hotliste (powiadomienia o aktywności w buforach). | `+/hotlist clear+`
| kbd:[Alt+h], kbd:[Alt+m]       | Usuń obecny bufor z hotlisty. | `+/hotlist remove+`
| kbd:[Alt+h], kbd:[Alt+r]       | Przywróć ostatnią usuniętą hotlistę w obecnym buforze. | `+/hotlist restore+`
| kbd:[Alt+h], kbd:[Alt+Shift+R] | Przywróć ostatnią hotlistę usuniętą we wszystkich buforach. | `+/hotlist restore -all+`
|===

[[key_bindings_toggle_keys]]
=== Włącz/wyłącz

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót                  | Opis | Komenda
| kbd:[Alt+m]            | Włącz/wyłącz obsługę myszy. | `+/mouse toggle+`
| kbd:[Alt+s]            | Włącz/wyłącz sprawdzenie pisowni. | `+/mute spell toggle+`
| kbd:[Alt+=]            | Włącz/wyłącz filtry. | `+/filter toggle+`
| kbd:[Alt+-]            | Włącz/wyłącz filtry w bieżącym buforze. | `+/filter toggle @+`
| kbd:[Alt+Ctrl+l] (`L`) | Przełącz między lokalnymi komendami a zdalnym buforem (relay "api"). | `+/remote togglecmd+`
|===

[[key_bindings_search_context]]
=== Wyszukiwanie tekstu

Te skróty można użyć w kontskście "search" (kiedy kbd:[Ctrl+s] zostało wciśnięte do wyszukiwania
tekstu w liniach bufora).

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót          | Opis | Komenda
| kbd:[Ctrl+x]   | Przełącz rodzaj wyszukiwania: ciąg (domyślne), wyrażenie regularne. | `+/input search_switch_regex+`
| kbd:[Alt+c]    | Przełącz dopasowywanie wielości liter podczas wyszukiwania. | `+/input search_switch_case+`
| kbd:[Tab]      | Przełącz miejsce wyszukiwania: wiadomości (domyślne), prefiksy, prefiksy + wiadmości. | `+/input search_switch_where+`
| kbd:[Ctrl+r] +
  kbd:[↑]        | Poprzednie wystąpienie. | `+/input search_previous+`
| kbd:[Ctrl+s] +
  kbd:[↓]        | Następne wystąpienie. | `+/input search_next+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]   | Zatrzymaj wyszukiwanie na obecnej pozycji. | `+/input search_stop_here+`
| kbd:[Ctrl+q]   | Zatrzymaj wyszukiwanie i przywróć ekran do stanu z przed wyszukiwania. | `+/input search_stop+`
|===

[[key_bindings_histsearch_context]]
=== Wyszukiwanie w historii komend

Te skróty można użyć w kontskście "histsearch" (kiedy kbd:[Ctrl+r] zostało wciśnięte do wyszukiwania
tekstu w historii komend).

[width="100%",cols="^.^3,.^8,.^5",options="header"]
|===
| Skrót          | Opis | Komenda
| kbd:[Ctrl+x]   | Przełącz rodzaj wyszukiwania: ciąg (domyślne), wyrażenie regularne. | `+/input search_switch_regex+`
| kbd:[Alt+c]    | Przełącz dopasowywanie wielości liter podczas wyszukiwania. | `+/input search_switch_case+`
| kbd:[Tab]      | Przełącz przeszukiwanie w: lokalnej histori (domyślne), historia globalna. | `+/input search_switch_where+`
| kbd:[Ctrl+r] +
  kbd:[↑]        | Szukaj we wcześniejszych (starszych) wpisach w historii. | `+/input search_previous+`
| kbd:[Ctrl+s] +
  kbd:[↓]        | Szukaj w następnych (nowszych) wpisach w historii. | `+/input search_next+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]   | Zatrzymaj wyszukiwanie i użyj znalezionej komendy. | `+/input search_stop_here+`
| kbd:[Ctrl+o]   | Wykonaj komende znaleziona w historii i wstaw kolejna do linii poleceń. | `+/input history_use_get_next+`
| kbd:[Ctrl+q]   | Zatrzymaj wyszukiwanie i przywróć linię poleceń do początkowej wartości. | `+/input search_stop+`
|===

[[key_bindings_cursor_context]]
=== Kursor

Te skróty są używane w kontekście kursora (dowolne przemieszczanie kursora na
ekranie), zobacz <<cursor_mode,tryb kursora>>.

[width="100%",cols="^.^3,^.^2,.^7,.^7",options="header"]
|===
| Skrót             | Obszar   | Opis | Komenda
| kbd:[↑]           | -        | Przesuń kursor linię wyżej. | `+/cursor move up+`
| kbd:[↓]           | -        | Przesuń kursor linię niżej. | `+/cursor move down+`
| kbd:[←]           | -        | Przesuń kursor kolumnę w lewo. | `+/cursor move left+`
| kbd:[→]           | -        | Przesuń kursor kolumnę w prawo. | `+/cursor move right+`
| kbd:[Alt+↑]       | -        | Przesuń kursor do pierwszej linii w obszarze. | `+/cursor move edge_top+`
| kbd:[Alt+↓]       | -        | Przesuń kursor do ostatniej linii w obszarze. | `+/cursor move edge_bottom+`
| kbd:[Alt+←]       | -        | Przesuń kursor do pierwszej kolumny w obszarze. | `+/cursor move edge_left+`
| kbd:[Alt+→]       | -        | Przesuń kursor do ostatniej kolumny w obszarze. | `+/cursor move edge_right+`
| kbd:[Alt+Home]    | -        | Przesuń kursor w górny lewy róg obszaru. | `+/cursor move top_left+`
| kbd:[Alt+End]     | -        | Przesuń kursor w dolny prawy róg obszaru. | `+/cursor move bottom_right+`
| kbd:[Alt+Shift+↑] | -        | Przesuń kursor obszar do góry. | `+/cursor move area_up+`
| kbd:[Alt+Shift+↓] | -        | Przesuń kursor obszar w dół. | `+/cursor move area_down+`
| kbd:[Alt+Shift+←] | -        | Przesuń kursor obszar w lewo. | `+/cursor move area_left+`
| kbd:[Alt+Shift+→] | -        | Przesuń kursor obszar w prawo. | `+/cursor move area_right+`
| kbd:[m]           | chat     | Cytuj wiadomość. | `+hsignal:chat_quote_message;/cursor stop+`
| kbd:[l]           | chat     | Cytuj zaznaczoną linię. | `+hsignal:chat_quote_focused_line;/cursor stop+`
| kbd:[q]           | chat     | Cytuj prefiks i wiadomość. | `+hsignal:chat_quote_prefix_message;/cursor stop+`
| kbd:[Q]           | chat     | Cytuj czas, prefiks i wiadomość. | `+hsignal:chat_quote_time_prefix_message;/cursor stop+`
| kbd:[b]           | nicklist | Zbanuj osobę. | `+/window ${_window_number};/ban ${nick}+`
| kbd:[k]           | nicklist | Wykop osobę. | `+/window ${_window_number};/kick ${nick}+`
| kbd:[K]           | nicklist | Wykop i zbanuj osobę. | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[q]           | nicklist | Otwórz rozmowę z osobą. | `+/window ${_window_number};/query ${nick};/cursor stop+`
| kbd:[w]           | nicklist | Wykonaj whois dla osoby. | `+/window ${_window_number};/whois ${nick}+`
| kbd:[Enter] +
  kbd:[Ctrl+j] +
  kbd:[Ctrl+m]      | -        | Wyłącz tryb kursora. | `/cursor stop`
|===

[[key_bindings_mouse]]
=== Mysz

Te akcje myszą mogą zostać użyte tylko jeśli obsługa myszy została włączona
za pomocą skrótu kbd:[Alt+m] (komenda: `+/mouse toggle+`).

[width="100%",cols="^.^3,^.^3,^.^3,.^8,.^8",options="header"]
|===
| Klawisz/Wheel ^(1)^ | Gest          | Obszar               | Opis | Komenda
| kbd:[■ □ □]         | -             | chat                 | Przełącz na okno. | `+/window ${_window_number}+`
| kbd:[■ □ □]         | lewo          | chat                 | Przełącz na poprzedni bufor. | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □]         | prawo         | chat                 | Przełącz na następny bufor. | `+/window ${_window_number};/buffer +1+`
| kbd:[■ □ □]         | lewo (długo)  | chat                 | Przełącz na pierwszy bufor. | `+/window ${_window_number};/buffer 1+`
| kbd:[■ □ □]         | prawo (długo) | chat                 | Przełącz na ostatni bufor. | `+/window ${_window_number};/buffer ++`
| kbd:[▲]             | -             | chat                 | Przewiń w górę kilka linii w historii bufora. | `+/window scroll_up -window ${_window_number}+`
| kbd:[▼]             | -             | chat                 | Przewiń w dół kilka linii w historii bufora. | `+/window scroll_down -window ${_window_number}+`
| kbd:[Ctrl+▲]        | -             | chat                 | Przewiń poziomo w lewo. | `+/window scroll_horiz -window ${_window_number} -10%+`
| kbd:[Ctrl+▼]        | -             | chat                 | Przewiń poziomo w prawo. | `+/window scroll_horiz -window ${_window_number} +10%+`
| kbd:[▲]             | -             | chat: bufor fset     | Przewiń pięć linii w góre w buforze fset. | `+/fset -up 5+`
| kbd:[▼]             | -             | chat: bufor fset     | Przewiń pięć linii w dół w buforze fset. | `+/fset -down 5+`
| kbd:[■ □ □]         | -             | chat: bufor fset     | Zaznacz linię b buforze fset. | `+/window ${_window_number};/fset -go ${fset_option_index}+`
| kbd:[□ □ ■]         | -             | chat: bufor fset     | Przełącz (włącz/wyłącz) lub edytuj wartośc opcji. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■]         | lewo          | chat: bufor fset     | Zmniejsz wartość zmiennej liczbowej / koloru / enum, ustaw/rozszerz wartośc innego typu. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■]         | prawo         | chat: bufor fset     | Zwiększ wartość zmiennej liczbowej / koloru / enum, ustaw/rozszerz wartośc innego typu. | `+hsignal:fset_mouse+`
| kbd:[□ □ ■]         | góra / dół    | chat: bufor fset     | Zaznacz/odznacz wiele opcji. | `+hsignal:fset_mouse+`
| kbd:[▲]             | -             | chat: /list buffer   | Przesuń pięć linii w górę w buforze /list. | `+/list -up 5+`
| kbd:[▼]             | -             | chat: /list buffer   | Przesuń pięć linii w dół w buforze /list. | `+/list -down 5+`
| kbd:[■ □ □]         | -             | chat: /list buffer   | Wybierz linię w buforze /list. | `+/window ${_window_number};/list -go ${_chat_line_y}+`
| kbd:[□ □ ■]         | -             | chat: /list buffer   | Wejdź na kanał IRC w zaznaczonej linii. | `+hsignal:irc_list_mouse+`
| kbd:[▲]             | -             | chat: bufor skryptów | Przejdź 5 linii w górę w buforze skryptów. | `+/script -up 5+`
| kbd:[▼]             | -             | chat: bufor skryptów | Przejdź 5 linii w dół w buforze skryptów. | `+/script -down 5+`
| kbd:[■ □ □]         | -             | chat: bufor skryptów | Zaznacz linię w buforze skryptów. | `+/script -go ${_chat_line_y}+`
| kbd:[□ □ ■]         | -             | chat: bufor skryptów | Zainstaluj/usuń skrypt. | `+/script -go ${_chat_line_y};/script installremove -q ${script_name_with_extension}+`
| kbd:[■ □ □]         | góra / lewo   | buflist              | Przenieś bufor na niższy numer. | Sygnał `+buflist_mouse+`.
| kbd:[■ □ □]         | dół / prawo   | buflist              | Przenieś bufor na wyższy numer. | Sygnał `+buflist_mouse+`.
| kbd:[■ □ □]         | -             | buflist              | Przełącz na bufor (poprzednio odwiedzony bufor, jeśli jest to obecny bufor). | Sygnał `+buflist_mouse+`.
| kbd:[□ □ ■]         | -             | buflist              | Przełącz na następny odwiedzony bufor, jeśli jest to obecny bufor. | Sygnał `+buflist_mouse+`.
| kbd:[Ctrl+▲]        | -             | buflist              | Przełącz na poprzedni bufor. | Sygnał `+buflist_mouse+`.
| kbd:[Ctrl+▼]        | -             | buflist              | Przełącz na następny bufor. | Sygnał `+buflist_mouse+`.
| kbd:[■ □ □]         | góra          | lista nicków         | Przewiń w górę jedna stronę listy nicków. | `+/bar scroll nicklist ${_window_number} -100%+`
| kbd:[■ □ □]         | dół           | lista nicków         | Przewiń w dół jedna stronę listy nicków. | `+/bar scroll nicklist ${_window_number} +100%+`
| kbd:[■ □ □]         | góra (długo)  | lista nicków         | Idź na początek listy nicków. | `+/bar scroll nicklist ${_window_number} b+`
| kbd:[■ □ □]         | dół (długo)   | lista nicków         | Idź na koniec listy nicków. | `+/bar scroll nicklist ${_window_number} e+`
| kbd:[■ □ □]         | -             | lista nicków         | Otwórz prywatną rozmowę z nick. | `+/window ${_window_number};/query ${nick}+`
| kbd:[□ □ ■]         | -             | lista nicków         | Wykonaj whois dla nicka. | `+/window ${_window_number};/whois ${nick}+`
| kbd:[■ □ □]         | lewo          | lista nicków         | Wykop nick. | `+/window ${_window_number};/kick ${nick}+`
| kbd:[■ □ □]         | lewo (długo)  | lista nicków         | Wykop i zbanuj nick. | `+/window ${_window_number};/kickban ${nick}+`
| kbd:[□ □ ■]         | lewo          | lista nicków         | Zbanuj nick. | `+/window ${_window_number};/ban ${nick}+`
| kbd:[□ □ ■]         | -             | linia poleceń        | Przechwyć zdarzenie myszy i wstaw jego kod w linii poleceń. | `+/input grab_mouse_area+`
| kbd:[▲]             | -             | dowolny pasek        | Przewiń pasek o -20%. | `+/bar scroll ${_bar_name} ${_window_number} -20%+`
| kbd:[▼]             | -             | dowolny pasek        | Przewiń pasek o +20%. | `+/bar scroll ${_bar_name} ${_window_number} +20%+`
| kbd:[□ ■ □]         | -             | gdziekolwiek         | Włącz tryb kursora w tym miejscu. | `+/cursor go ${_x},${_y}+`
|===

[NOTE]
^(1)^ Przyciski: +
kbd:[◼ □ □]: kliknięcie lewym przyciskiem +
kbd:[□ ◼ □]: kliknięcie środkowym przyciskiem +
kbd:[□ □ ◼]: kliknięcie prawym przyciskiem +
Kółko: +
kbd:[▲]: w górę +
kbd:[▼]: w dół

[[key_bindings_fset_buffer]]
=== Bufor fset

Poniższe skróty i akcje mogą zostać użyte w buforze fset (zobacz <<fset,wtyczka fset>>).

[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Skrót                    | Akcja ^(1)^  | Opis | Komenda
| kbd:[↑]                  |              | Przejdź linię wyżej. | `+/fset -up+`
| kbd:[↓]                  |              | Przejdź linię niżej. | `+/fset -down+`
| kbd:[PgUp]               |              | Przejdź stronę do góry. | `+/window page_up+`
| kbd:[PgDn]               |              | Przejdź stronę w dół. | `+/window page_down+`
| kbd:[Alt+Home]           | `pass:[<<]`  | Przejdź do pierwszej linii. | `+/fset -go 0+`
| kbd:[Alt+End]            | `pass:[>>]`  | Przejdź do ostatniej linii. | `+/fset -go end+`
| kbd:[F11]                | `pass:[<]`   | Przewiń poziomo w lewo. | `+/fset -left+`
| kbd:[F12]                | `pass:[>]`   | Przewiń poziomo w prawo. | `+/fset -right+`
| kbd:[Alt+Space]          | `t`          | Przełącz zmienną boolowską. | `+/fset -toggle+`
| kbd:[Alt+-]              | `-`          | Odejmij 1 od wartości liczbowej/koloru/enum, ustaw wartość pozostałych typów. | `+/fset -del -1+`
| kbd:[Alt++]              | `+`          | Dodaj 1 do wartości liczbowej/koloru/enum, dodaj to wartości pozostałych typów. | `+/fset -add 1+`
| kbd:[Alt+f], kbd:[Alt+r] | `r`          | Zresetuj wartość. | `+/fset -reset+`
| kbd:[Alt+f], kbd:[Alt+u] | `u`          | Skasuj wartość. | `+/fset -unset+`
| kbd:[Alt+Enter]          | `s`          | Ustaw wartość. | `+/fset -set+`
| kbd:[Alt+f], kbd:[Alt+n] | `n`          | Ustaw nową wartość. | `+/fset -setnew+`
| kbd:[Alt+f], kbd:[Alt+a] | `a`          | Dodaj do wartości. | `+/fset -append+`
| kbd:[Alt+,]              | `,`          | Zaznacz/odznacz opcję. | `+/fset -mark 1+`
| kbd:[Shift+↑]            |              | Przejdź do linii wyżej oraz zaznacz/odznacz opcję. | `+/fset -up; /fset -mark+`
| kbd:[Shift+↓]            |              | Przejdź do linii niżej oraz zaznacz/odznacz opcję. | `+/fset -mark; /fset -down+`
|                          | `m:xxx`      | Zaznacz wyświetlane opcje pasujące do filtra "xxx" (dowolny filtr na opcję albo wartość, zobacz komenda <<command_fset_fset,/fset>>). |
|                          | `u:xxx`      | Odznacz zaznaczone opcje pasujące do filtra "xxx" (dowolny filtr an opcję lub wartość, zobacz komenda <<command_fset_fset,/fset>>). |
| kbd:[Ctrl+l] (`L`)       |              | Odświerz opcje i cały ekran. | `+/fset -refresh+`
|                          | `$`          | Odświerz opcje (zachowuje zaznaczone opcje). |
|                          | `$$`         | Odświerz opcje (odznacza zaznaczone kompilację). |
| kbd:[Alt+p]              | `p`          | Przełącz opcje opisu wtyczki (`pass:[plugins.desc.*]`). | `+/mute /set fset.look.show_plugins_desc toggle+`
| kbd:[Alt+v]              | `v`          | Przełącz pasek pomocy. | `+/bar toggle fset+`
|                          | `s:x,y`      | Sortuj opcje po polach x,y (zobacz opcję <<option_fset.look.sort,fset.look.sort>>). | `+/mute /set fset.look.sort x,y+`
|                          | `s:`         | Zresetuj soerowanie do domyślnej wartości (zobacz opcję <<option_fset.look.sort,fset.look.sort>>). | `+/mute /unset fset.look.sort+`
|                          | `w:xxx`      | Wyeksportuj opcje do pliku "xxx". | `+/fset -export xxx+`
|                          | `w-:xxx`     | Wyeksportuj opcje do pliku "xxx" bez dodatkowych informacji. | `+/fset -export -nohelp xxx+`
|                          | `w+:xxx`     | Wyeksportuj opcje do pliku "xxx" z dodatkowymi informacjami. | `+/fset -export -help xxx+`
| kbd:[Ctrl+x]             | `x`          | Zmień format w jakim wyświetlane są opcje. | `+/fset -format+`
|                          | `q`          | Zamkknij bufor fset. | `+/buffer close+`
|===

[NOTE]
^(1)^ Akcja musi zostać wprowadzona z linii poleceń i potwierdzona przez kbd:[Enter].

[[key_bindings_irc_list_buffer]]
=== Bufor IRC /list

Te skróty i akcje mogą zostać użyte w buforze IRC /list (zobacz komendę <<command_irc_list,/list>>).

[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Skrót          | Akcja ^(1)^  | Opis | Komenda
| kbd:[↑]        |              | Przejdź linię wyżej. | `+/list -up+`
| kbd:[↓]        |              | Przejdź linię niżej. | `+/list -down+`
| kbd:[PgUp]     |              | Przejdź stronę do góry. | `+/window page_up+`
| kbd:[PgDn]     |              | Przejdź stronę w dół. | `+/window page_down+`
| kbd:[Alt+Home] | `pass:[<<]`  | Przejdź do pierwszej linii. | `+/list -go 0+`
| kbd:[Alt+End]  | `pass:[>>]`  | Przejdź do ostatniej linii. | `+/list -go end+`
| kbd:[F11]      | `pass:[<]`   | Przewiń poziomo w lewo. | `+/list -left+`
| kbd:[F12]      | `pass:[>]`   | Przewiń poziomo w prawo. | `+/list -right+`
| kbd:[Ctrl+j]   | `j`          | Wejdź na kanał IRC z zaznaczonej linii. | `+/list -join+`
|                | `xxx`        | Pokaż tylko kanały z "xxx" w nazwie lub temacie (wielkość liter nie jest uwzględniana). |
|                | `n:xxx`      | Pokaż tylko kanały z "xxx" w nazwie (wielkość liter nie jest uwzględniana). |
|                | `t:xxx`      | Pokaż tylko kanały z "xxx" w temacie (wielkość liter nie jest uwzględniana). |
|                | `u:n`        | Pokaż tylko kanały z przynajmniej "n" użytkownikami. |
|                | `u:>n`       | Pokaż tylko kanały z więcej niż "n" użytkownikami. |
|                | `u:<n`       | Pokaż tylko kanały z mniej niż "n" użytkownikami. |
|                | `c:xxx`      | Pokaż tylko kanały pasujące do przetworzonego warunku "xxx", z użyciem następujących zmiennych: name, name2, users, topic. |
|                | `s:x,y`      | Sortuj kanały po polach x,y (zobacz komendę <<command_irc_list,/list>>). |
|                | `s:`         | Zresetuj sortowanie do domyślnej wartości (zobacz komendę <<command_irc_list,/list>>). |
|                | `$`          | Odświerz listę (wykonaj ponownie komendę <<command_irc_list,/list>>). |
|                | `q`          | Zamknij bufor. | `+/buffer close+`
|===

[NOTE]
^(1)^ Akcja musi zostać wprowadzona z linii poleceń i potwierdzona przez kbd:[Enter].

[[key_bindings_script_buffer]]
=== Bufor skryptów

Te skróty klawiszowe i akcje mogą zostać użyte w buforze skryptów (zobacz <<script_manager,manager skryptów>>).

[width="100%",cols="^.^3,^.^2,.^8,.^5",options="header"]
|===
| Skrót             | Akcja ^(1)^  | Opis | Komenda
| kbd:[↑]           |              | Przejdź linię wyżej. | `+/script -up+`
| kbd:[↓]           |              | Przejdź linię niżej. | `+/script -down+`
| kbd:[PgUp]        |              | Przewiń stronę do góry. | `+/window page_up+`
| kbd:[PgDn]        |              | Przewiń stronę w dół. | `+/window page_down+`
| kbd:[Alt+i]       | `i`          | Zainstaluj skrypt. | `+/script install+`
| kbd:[Alt+r]       | `r`          | Usuń skrypt. | `+/script remove+`
| kbd:[Alt+l]       | `l`          | Załaduj skrypt. | `+/script load+`
| kbd:[Alt+L]       | `L`          | Przeładuj skrypt. | `+/script reload+`
| kbd:[Alt+u]       | `u`          | Wyładuj skrypt. | `+/script unload+`
| kbd:[Alt+Shift+A] | `A`          | Automatycznie ładuj skrypt. | `+/script toggleautoload+`
| kbd:[Alt+h]       | `h`          | Zablokuj/odblokuj skrypt. | `+/script hold+`
| kbd:[Alt+v]       | `v`          | Pokarz skrypt. | `+/script show+`
|                   | `s:x,y`      | Sortuj skrypty po polach x,y (zobacz opcję <<option_script.look.sort,script.look.sort>>). |
|                   | `s:`         | Zresetuj sortowanie do domyślnej wartości (zobacz opcję <<option_script.look.sort,script.look.sort>>). |
|                   | `$`          | Odświerza listę. |
|                   | `q`          | Zamyka bufor. | `+/buffer close+`
|===

[NOTE]
^(1)^ Akcja musi zostać wprowadzona z linii poleceń i potwierdzona przez kbd:[Enter].

[[configuration]]
== Konfiguracja

[[fset]]
=== Fset

Wtyczka Fast Set wyświetla listę opcji w buforze i pomaga w ustawianiu opcji
WeeChat i wtyczek.

Przykład bufora fset wyświetlający opcje zaczynające się od `weechat.look` :

[subs="quotes"]
....
┌──────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│7/125 | Filtr: weechat.look.* | Sortowanie: ~name | Klawisz(wejście): alt+>>│
│2.fset   │weechat.look.bare_display_exit_on_input: wyjście z trybu niesformatowanego w│
│         │yświetlania po każdej zmianie wejścia [domyślnie: on]                       │
│         │----------------------------------------------------------------------------│
│         │  weechat.look.align_end_of_lines              enum    message              │
│         │  weechat.look.align_multiline_words           bool    on                   │
│         │  weechat.look.bar_more_down                   ciąg    "++"                 │
│         │  weechat.look.bar_more_left                   ciąg    "<<"                 │
│         │  weechat.look.bar_more_right                  ciąg    ">>"                 │
│         │  weechat.look.bar_more_up                     ciąg    "--"                 │
│         │##  weechat.look.bare_display_exit_on_input      bool    on                   ##│
│         │  weechat.look.bare_display_time_format        ciąg    "%H:%M"              │
│         │  weechat.look.buffer_auto_renumber            bool    on                   │
│         │  weechat.look.buffer_notify_default           enum    all                  │
│         │  weechat.look.buffer_position                 enum    end                  │
│         │  weechat.look.buffer_search_case_sensitive    bool    off                  │
│         │  weechat.look.buffer_search_force_default     bool    off                  │
│         │  weechat.look.buffer_search_history           enum    local                │
│         │  weechat.look.buffer_search_regex             bool    off                  │
│         │  weechat.look.buffer_search_where             enum    prefix_message       │
│         │  weechat.look.buffer_time_format              ciąg    "%H:%M:%S"           │
│         │[12:55] [2] [fset] 2:fset                                                   │
│         │█                                                                           │
└──────────────────────────────────────────────────────────────────────────────────────┘
....

[[fset_commands]]
==== Komendy

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

[[fset_options]]
==== Opcje

Sekcje w pliku _fset.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja | Komenda            | Opis
| color  | /set fset.color.*  | Kolory.
| format | /set fset.format.* | Formaty używane do wyświetlenia listy opcji.
| look   | /set fset.look.*   | Wygląd.
|===

Opcje:

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

[[colors]]
=== Kolory

[[colors_basic]]
==== Podstawowe kolory

Podstawowe kolory w WeeChat to:

[width="75%",cols="1m,4",options="header"]
|===
| Nazwa        | Kolor
| default      | Domyślny kolor terminala (przezroczysty dla tła)
| black        | Czarny
| darkgray     | Ciemny szary
| red          | Ciemny czerwony
| lightred     | Jasny czerwony
| green        | Ciemny zielony
| lightgreen   | Jasny zielony
| brown        | Brązowy
| yellow       | Żółty
| blue         | Ciemny niebieski
| lightblue    | Jasny niebieski
| magenta      | Ciemny karmazynowy
| lightmagenta | Jasny karmazynowy
| cyan         | Ciemny błękitny
| lightcyan    | Jasny błękitny
| gray         | Szary
| white        | Biały
|===

[[colors_extended]]
==== Rozszerzone kolory

WeeChat dynamicznie alokuje pary kolorów, kiedy kolory są używane na ekranie (do
wyświetlania buforów i pasków).

W dodatku do podstawowych kolorów, możesz użyć numer koloru pomiędzy 1 a limitem
twojego terminala.

Użyj komendy `/color`, aby zobaczyć obecne kolory i limity. Za pomocą kbd:[Alt+c]
możesz tymczasowo przełączyć się na kolory terminala, żeby wybrać kolor.

Na przykład jeśli chcesz wyświetlać czas na pomarańczowo w buforze:

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

Lub jeśli chcesz mocno ciemno zielonego tła dla pasku statusu:

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

[[colors_aliases]]
==== Aliasy

Możesz dodać aliasy do kolorów za pomocą komendy `/color alias` i używać ich w
dowolnej opcji jako koloru.

Na przykład:

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

[[colors_attributes]]
==== Atrybuty

Możliwe jest użycie niektórych atrybutów dla kolorów. Jeden lub więcej z nich
może zostać użyty przed nazwą lub numerem koloru:

* `+%+`: mruganie
* `+.+`: "przyciemnienie" (połowa jasności)
* `+*+` : pogrubiony tekst
* `+!+` : odwrócenie video
* `+/+` : pochyły
* `+_+` : podkreślony tekst
* `+|+`: zachowuje atrybuty: nie resetuje blink/dim/bold/reverse/italic/underlined
  przy zmianie koloru

Na przykład jeśli chcesz, żeby twój nick był biały i podkreślony:

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

Lub jeśli chcesz, żeby czas w pasku statusu był pomarańczowy, podkreślony i
pogrubiony:

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

Aby użyć atrybutu z domyślnym kolorem terminala (-1), należy użyć numeru większego
od ostatniego koloru terminala, na przykład maksymalny kolor w WeeChat: 99999.

Przykład pogrubienia z domyślnym kolorem terminala:

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

// TRANSLATION MISSING
[[themes]]
=== Motywy

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

Wtyczka charset pozwala na zmianę kodowania dla wysyłanych i otrzymywanych danych.

Można zdefiniować domyślne kodowanie, oraz dla poszczególnych buforów (lub grup
buforów).

Ta wtyczka jest opcjonalna, jednak zalecana: jeśli nie jest załadowana WeeChat
może odczytywać/zapisywać dane tylko w UTF-8.

Ta wtyczka powinna zostać automatycznie załadowana przy uruchomieniu WeeChat.
Aby się upewnić, że została załadowana, spróbuj:

----
/charset
----

Jeśli komenda nie zostanie znaleziona, załaduj tą wtyczkę za pomocą:

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

Jeśli wtyczka nie zostanie znaleziona, powinieneś skompilować ponownie WeeChat z
wtyczkami i wsparciem dla charset.

Kiedy wtyczka charset zostanie uruchomiona wyświetla kodowanie terminala i.
wewnętrzne.
Kodowanie terminala zależy od ustawień systemu, a wewnętrzne to UTF-8.

Na przykład:

....
charset: terminal: ISO-8859-15, internal: UTF-8
....

[[charset_set]]
==== Ustawianie kodowania

Żeby ustawić globalne kodowanie dla wysyłanych i otrzymywanych danych należy
użyć komendy `/set`.

Na przykład:

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

Jeżeli globalna wartość dla kodowania nie jest ustawiona (na przykład podczas
pierwszego zaladowania wtyczki), zostanie automatycznie ustawione na kodowanie
terminala (jeśli jest inne niż UTF-8), lub domyślnie na _ISO-8859-1_.

Domyślnie kodowanie dla wysyłanych danych nie jest ustawione, dane domyślnie
wysyłane są w kodowaniu wewnętrznym (UTF-8).

W celu ustawienia kodowania dla serwera IRC, należy wywołać komendę `/charset`
w buforze serwera.
Jeśli zostanie podane tylko kodowanie, zostanie ono użyte dla wysyłania i odbioru.

Na przykład:

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

Jest równoważne z:

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

Aby ustawić kodowanie dla kanału (lub prywatnej rozmowy) należy wykonać to samo,
co w przypadku serwera, tylko w buforze kanału (lub prywatnej rozmowy).

Aby ustawić kodowanie dla wszystkich kanałów/rozmów prywatnych na danym serwerze:

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

W celu wyświetlenia wszystkich ustawionych kodowań, wykonaj:

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

[[charset_troubleshooting]]
==== Rozwiązywanie problemów

W razie jakichś problemów z kodowaniem, zajrzyj do
link:weechat_faq.pl.html#charset[WeeChat FAQ / Charset ^↗^^].

[[charset_commands]]
==== Komendy

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

[[charset_options]]
==== Opcje

Sekcje w pliku _charset.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda                                     | Opis
| default | /set charset.default.*                      | Domyślne kodowanie.
| decode  | <<command_charset_charset,/charset decode>> +
            /set charset.decode.*                       | Kodowanie dla wiadomości przychodzących w buforach (opcje w tej sekcji mogą być dodawane/usuwane).
| encode  | <<command_charset_charset,/charset encode>> +
            /set charset.encode.*                       | Kodowanie dla wiadomości wychodzących w buforach (opcje w tej sekcji mogą być dodawane/usuwane).
|===

Opcje:

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

[[notify_levels]]
=== Poziomy powiadomień

[[setup_notify_levels]]
==== Ustawienia poziomu powiadomień

Dostępne są cztery poziomy dla wiadomości wyświetlanych w buforach, od najniższego
do najwyższego:

* _low_: wiadomości mało istotne (na przykład dla irc join/part/quit)
* _message_: wiadomość od użytkownika
* _private_: wiadomość w buforze prywatnym
* _highlight_: wiadomość z powiadomieniem

Każdy bufor posiada poziom powiadomień, który decyduje o tym, jakie wiadomości
zostaną dodane do bufora w hotliście.

Domyślny poziom powiadomień można ustawić za pomocą opcji
<<option_weechat.look.buffer_notify_default,weechat.look.buffer_notify_default>>,
domyślna wartość to _all_.

[width="75%",cols="2m,7",options="header"]
|===
| Poziom powiadomień | Poziom wiadomości dodawanej do hotlisty
| none               | (brak)
| highlight          | highlight + private
| message            | highlight + private + message
| all                | highlight + private + message + low
|===

Poziom powiadomień może być definiowany dla zestawu buforów, na przykład dla
wszystkich buforów serwera irc "libera":

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

Ustawienie poziomu powiadomień na _highlight_ tylko dla kanału "#weechat":

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

Poziom powiadomień dla bufora może zostać ustawiony za pomocą komendy `/buffer`:

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

[[max_hotlist_level_nicks]]
==== Maksymalny poziom hotlisty dla nicków

Jest możliwe ustawienie maksymalnego poziomu hotlist dla nicków, dla bufora lub grupy buforów
(jak erwery IRC).

Właściwość bufora "hotlist_max_level_nicks" może być ustawiona na listę nicków,
z ustawonym dla każdego z nich maksymalnym poziomem hotlisty, możliwe poziomy to:

* -1: brak zmiany hotlisty dla nicka
* 0: niski priorytet (jak wiadomości join/part)
* 1: wiadomość
* 2: prywatna wiadomość
* 3: podświetlenie (mało przydatne, jest to domyślny poziom dla wszytkich wiadomości)

Na przykład, żeby wyłączyć podświetlenia od "joe" oraz "mike" w obecnym buforze:

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

[[highlights]]
=== Podświetlenia

[[highlights_disable]]
==== Wyłączenie podświetleń

Możesz wyłączyć podświetlenia za pomocą opcji
<<option_weechat.look.highlight_disable_regex,weechat.look.highlight_disable_regex>>
(wyrażenie regularne). +
Kiedy podświetlenie jest wyłączone za pomocą tej opcji wszystkie pozostałe opcje
podświetleń są ignorowane.

Na przykład żeby wyłączyć wszystkie podświetlenia wiadomości ze słowem zaczynającym
się od "flash" pomiędzy nawiasami trójkątnymi:

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

Można to także osiągnąć za pomocą właściwości bufora "highlight_disable_regex".

Ten sam przykład, tylko dla konkretnego bufora:

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

[[highlights_words]]
==== Dodawanie słów do podświetleń

Domyślnie WeeChat podświetla wiadomości od innych użytkowników zawierające Twój nick,
dlatego podświetlenia zależą od buforu (nick może być inny w zależności od buforu).

Możesz dodawać inne słowa do podświetlen używając opcji
<<option_weechat.look.highlight,weechat.look.highlight>>, na przykład, żeby
podświetlać Twój nick oraz słowa "słowo1", "słowo2" oraz wszystko co zaczyna się od "test":

----
/set weechat.look.highlight "słowo1,słowo2,test*"
----

Jeżeli potrzebujesz bardziej przecyzyjnej reguły, możesz użyć wyrażenia reglarnego
używając opcji <<option_weechat.look.highlight_regex,weechat.look.highlight_regex>>,
na przydład do podświetlania słów "flashcode", "flashcöde" i "flashy":

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

Separatory do okoła podświetlanych słów można zmienić za pomocą opcji
<<option_weechat.look.word_chars_highlight,weechat.look.word_chars_highlight>>.

[[highlights_tags]]
==== Dodawanie tagów do podświetleń

Wyświetlane linie moga zawierać "tagi", które dają troche informacji o pochodzeniu
wiasomości lub o samej wiadmości. +
Możesz wyświetlić tagi za pomocą komendy `/debug tags` (ta sama komenda je ukrywa).

Możesz dodać konkretne tagi do podświetleń za pomocą opcji
<<option_weechat.look.highlight_tags,weechat.look.highlight_tags>>.
Tagi są oddzielane przecinkami, kilka tagów może być oddzielone przez `+++` dla wykonania
logicznego "i" między nimi.

Na przykład dla podświetlenia wszytkich wiadomości od nicka "FlashCode" oraz powiadomień od
nicków zaczynających się od "toto":

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

[[highlights_regex_buffer]]
==== Ustawianie dodatkowych podświetleń dla bufora

Możesz wymusić podświetlenia używając wyrażenia regularnego z właściwościa bufora
"highlight_regex".

Na przykład żeby wymusić podświetlenie dla wszytkich wiadomości w obecnym buforze:

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

[[buffer_logging]]
=== Bufor logera

Wtyczka logger pozwala zapisywać zawartość bufora do pliku, oraz wybrać co i jak
ma być zapisywane.

[[logger_log_levels]]
==== Poziomy logowania

Logowanie odbywa się dla odpowiedniego poziomu dla każdego bufora. Domyślny
poziom to 9 (logowane są wszystkie wiadomości wyświetlane w buforze).
Możesz zmienić poziom dla pojedynczego bufora lub grupy buforów.

Dostępne są poziomy od 0 do 9. Zero oznacza "nic nie loguj", a 9 oznacza "loguj
wszystko".

Wtyczki wykorzystują różne poziomy dla wyświetlanych wiadomości.
Wtyczka IRC używa następujących:

* poziom 1: wiadomość od użytkownika (na kanale lub prywatnie)
* poziom 2: zmiana nicka (twojego lub innego)
* poziom 3: dowolna wiadomość serwera (poza wejściem/opuszczeniem/wyjściem z kanału)
* poziom 4: wiadomości serwera o wejściu/opuszczeniu/wyjściu z kanału

Zatem jeśli ustawisz poziom 3 dla kanału IRC, WeeChat będzie logować wszystkie
wiadomości, poza tymi o wejściu/opuszczeniu/wyjściu z kanału.

Kilka przykładów:

* ustawienie poziomu 3 dla kanału IRC #weechat:

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

* ustawienie poziomu 3 dla buforu serwera libera:

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

* ustawienie poziomu 3 dla wszystkich kanałów na serwerze libera:

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

* ustawienie poziomu 2 dla wszystkich buforów IRC:

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

[[logger_filenames_masks]]
==== Maski dla nazw plików

Możliwe jest zdefiniowanie maski dla nazwy pliku z logiem dla każdego bufora i
użycie do tego zmiennych lokalnych bufora. W celu wyświetlenia listy dostępnych
zmiennych dla bufora wykonaj:

----
/buffer listvar
----

Maski zostaną dopasowane do opcji w kolejności malejącej specyficznie dla
`logger.mask.$plugin.*`, z `logger.file.mask` jako opcją zapasową.

Na przykład, w buforze "irc.libera.#weechat", WeeChat będzie szukał maski dla
nazwy w takiej kolejności:

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

Oznacza to, że można mieć maski specyficzne tylko dla niektórych serwerów IRC
("logger.mask.irc.libera") lub dla wtyczek ("logger.mask.irc").

[[logger_files_by_date]]
===== Pliki z logami uporządkowane według daty

Żeby mieć pliki z logami uporządkowane według daty, możesz użyć specyfikatorów
daty/czasu w masce (obsługiwane formaty można znaleźć w `man strftime`),
na przykład:

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

Spowoduje powstanie następującej struktury:

....
~/.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]]
===== Pliki z logami IRC uporządkowane według serwera i daty

Jeśli chcesz mieć oddzielne katalogi dla serwerów IRC z oddzielnym plikiem dla
każdego kanału:

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

Spowoduje powstanie następującej struktury:

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

[[logger_rotation_compression]]
==== Rotowanie i kompresja

Istnieje możliwość zdefiniowania rozmiaru pliku z logami, po przekroczeniu
którego nastąpi automatyczne zrotowanie pliku z logiem.

Zrotowany plik z logami może być skompresowany za pomocą gzip lub
https://facebook.github.io/zstd/[zstd ^↗^^].

[NOTE]
Jako że kompresowanie pliku może zająć chwilę jest wykonywane w tle.

Przykład dla maksymalnej wielkości pliku 2GB i włączonej kompresji gzip,
z użyciem dobrego poziomu kompresji (wolniejsze od domyślnego):

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

Jeśli chcesz użyć liczby dziesiętnej, możesz użyć poniższej jednostki
i pomnożyć przez 1000, na przykład aby ustwić maksymalny rozmiar na 2.5GB:

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

Z tymi ustawieniami, uzyskasz strukturę plików podobną do poniższej
(w tym przykładzie rotowany jest tylko plik z logiem kanału #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]]
==== Komendy

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

[[logger_options]]
==== Opcje

Sekcje w pliku _logger.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda             | Opis
| look    | /set logger.look.*  | Wygląd.
| color   | /set logger.color.* | Kolory.
| file    | /set logger.file.*  | Opcje dla plików z logami.
| level   | /set logger.level.* | Poziomy logowania dla buforów (opcje w tej sekcji mogą być dodawane/usuwane).
| mask    | /set logger.mask.*  | Maski dla nazw plików dla buforów (opcje w tej sekcji mogą być dodawane/usuwane).
|===

Opcje:

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

[[mouse]]
=== Wsparcie myszy

WeeChat obsługuje kliknięcia myszy i gesty. Działa to z lokalnym terminalem,
jak i zdalnie przez połączenie ssh z lub bez użycia screena/tmuxa.

[[mouse_enable]]
==== Włączenie obsługi myszy

Żeby włączyć obsługę myszy podczas uruchamiania:

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

Żeby włączyć obsługę myszy teraz, wciśnij kbd:[Alt+m] lub wykonaj komendę:

----
/mouse enable
----

Możliwe jest czasowe wyłączenie obsługi myszy i przypisanie tego do skrótu. Na
przykład skrót kbd:[Alt+%] wyłączający obsługę myszy na 10 sekund:

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

[IMPORTANT]
Kiedy obsługa myszy jest włączona w WeeChat, wszystkie zdarzenia myszy są
przechwytywane przez WeeChat. Dlatego akcje jak kopiowanie/wklejanie lub
klikanie w URLe nie są przesyłane do terminala. +
Użycie klawisza kbd:[Shift] sprawia, że te zdarzenia są przesyłane bezpośrednio
do terminala, tak jakby obsługa myszy była wyłączona (w niektórych terminalach
jak iTerm, należy użyc klawisza kbd:[Alt] zamiast kbd:[Shift]).

[NOTE]
W razie jakichkolwiek problemów z obsługą myszy, zajrzyj do
link:weechat_faq.pl.html#mouse[WeeChat FAQ / Obsługa myszy ^↗^^].

[[mouse_bind_events]]
==== Przypisanie zdarzeń myszy do komend

Wiele domyślnych zdarzeń myszy jest już zdefiniowanych w WeeChat (zobacz
<<key_bindings_mouse,obsługa myszy>>).

Możesz zmienić lub dodać przypisania za pomocą komendy `/key` używając kontekstu
"mouse" (dla składni zobacz komenda <<command_weechat_key,/key>>).

Nazwa zdarzenia zawiera modyfikator (opcjonalny), nazwę klawisza/rolki i gest
(opcjonalny). Różne elementy są rozdzielane przez `+-+`.

Lista modyfikatorów (według nazwy):

[width="100%",cols="1m,4",options="header"]
|===
| Modyfikator | Opis
| alt         | Klawisz kbd:[Alt]
| ctrl        | Klawisz kbd:[Ctrl]
| shift       | Klawisz kbd:[Shift] ^(1)^
|===

[NOTE]
^(1)^ Modyfikator `shift` można sporadycznie użyć w WeeChat ponieważ terminale
zazwyczaj używają tego modyfikatora do przechwytywania ewentów myszy.

Modyfikatory można ze sobą łączyć, na przykład:

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

Lista klawiszy/rolek:

[width="100%",cols="1m,4",options="header"]
|===
| Klawisz/rolka        | Opis
| button1              | Lewy klawisz myszy
| button2              | Prawy klawisz myszy
| button3              | Środkowy klawisz myszy (często naciśnięcie rolki)
| button4 ... button11 | Dodatkowe klawisze
| wheelup              | Rolka (w górę)
| wheeldown            | Rolka (w dół)
|===

Lista gestów (tylko dla klawiszy, nie rolki):

[width="100%",cols="1m,4",options="header"]
|===
| Gest               | Odległość
| 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
|===

Lista niedkończonych zdarzeń (tylko dla przycisków, użyteczne dla wtyczek/skryptów):

[width="100%",cols="1m,4",options="header"]
|===
| Zdarzenie  | Opis
| event-down | Klawisz został wciśnięty ale jeszcze nie puszczony
| event-drag | Mysz została przesunięta z wciśniętym klawiszem
|===

Przykłady zdarzeń:

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

[TIP]
Podczas przypisywania skrótów w kontekście myszy, możliwe jest dopasowanie wielu
zdarzeń używając `+*+` na początku lub końcu nazwy, na przykład
`+button1-gesture-*+` będzie pasować do gestów wykonanych z użyciem lewego
przycisku myszy.

[TIP]
Możesz znaleźć nazwę zdarzenia za pomocą komendy `+/input grab_mouse+` wykonując
następnie zdarzenie za pomocą myszy. Umieści to zdarzenie w linii poleceń.

[[spell_checking]]
=== Sprawdzanie pisowni

Wtyczka spell pozwala na sprawdzanie pisowni w linii poleceń. Możliwe jest
ustawienie wielu języków dla bufora.

Sprawdzenie pisowni jest domyślnie wyłączone i możę być przełączone za pomocą kbd:[Alt+s].

[[spell_dictionaries]]
==== Słowniki

Przed użyciem sprawdzania pisowni należy zdefiniować słowniki można to zrobić
zarówno globalnie jak i dla poszczególnych buforów.

Możliwe jest użycie kilku słowników równocześnie: WeeChat sprawdzi słowa we wszystkich
słownikach.

Na przykład dla angielskiego i francuskiego:

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

Możliwe jest użycie innego słownika dla konkretnego buforu, na przykład na kanale
niemieckojęzycnzym:

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

Możesz również ustawić słownik dla grupy buforów, na przykład angielski dla
wsystkich kanałów na serwerze IRC libera:

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

Więcej informacji można znaleźć w opisie komendy <<command_spell_spell,/spell>>.

[[spell_speller_options]]
==== Opcje słowników

Opcje słowników mogą zostać zdefiniowane poprzez dodanie opcji w sekcji "option"
dla konfiguracji aspell.

Nazwa opcji to nazwa opcji konfiguracyjnej aspell. Listę opcji można uzyskać
wykonując w powłoce następującą komendę:

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

Na przykład, aby włączyć opcję "ignore-case":

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

[[spell_suggestions]]
==== Sugestie

Sugestie są wyświetlane w elemencie paska "spell_suggest". Ilość wyświetlanych
sugestii można ustawić za pomocą opcji _spell.check.suggestions_.

Aby włączyć sugestie trzeba ustawić opcję _spell.check.suggestions_ na liczbę
≥ 0 i dodać element "spell_suggest" do jakiegoś paska, jak _status_.

Przykład sugestii z angielskim słownikiem (`en`):

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

Przykład sugestii ze słownikami angielskim i francuskim (`en,fr`):

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

[[spell_commands]]
==== Komendy

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

[[spell_options]]
==== Opcje

Sekcje w pliku _spell.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja     | Komenda                                | Opis
| color      | /set spell.color.*                     | Kolory.
| check      | /set spell.check.*                     | Opcje do kontrolowania sprawdzania pisowni.
| dict       | <<command_spell_spell,/spell setdict>> +
               /set spell.dict.*                      | Słowniki używane w buforze (opcje w tej sekcji mogą być dodawane/usuwane).
| look       | /set spell.look.*                      | Wygląd.
| option     | /set spell.option.*                    | <<spell_speller_options,Opcje słowników>> (opcje w tej sekcji mogą być dodawane/usuwane).
|===

Opcje:

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

[[bars]]
=== Paski

_Pasek_ to obszar poza rozmową, mogący zawierać dowolny rodzaj tekstu.

Opcje paska mogą być ustawiane za pomocą opcji `weechat.bar.nazwa.opcja`,
gdzie `nazwa` to nazwa paska i `opcja` to opcja dla tego paska.

Lista opcji dla pasków:

[width="100%",cols="2m,2,10",options="header"]
|===
| Opcja | Wartości | Opis

| type | `root`, `window`
| Pasek z typem `root` jest wyświetlany dokładnie jeden raz na ekranie, poza
  wszystkimi oknami. Domyślny pasek _buflist_ ma typ `root`. +
  Pasek z typem `window` wyświetlany jest w każdym oknie, na przykład jeśli
  podzielisz jednorazowo ekran (używając `/window splith` lun `/window splitv`)
  otrzymasz po jednym pasku w każdym oknie. Domyślnie paski _title_, _status_,
  _input_ i _nicklist_ mają typ `window`.

| position | `top`, `bottom`, `left`, `right`
| Pozycja paska: powyżej/poniżej ekranu rozmowy, po jego lewej/prawej stronie.

| priority | integer ≥ 0
| Priorytet wyświetlania paska: jest on używany do uporządkowania pasków na
  ekranie, kiedy więcej niż jeden pasek posiada ten sam typ i położenie. +
  Paski są wyświetlane od brzegu do środka ekranu. Paski z wyższym priorytetem
  zostaną wyświetlone na początku, czyli bliżej krawędzi. +
  Przykład: pasek _input_ ma priorytet 1000, dlatego jest wyświetlany przed
  paskiem _status_, który ma priorytet 500.

| size | integer ≥ 0
| Rozmiar paska:  ilość kolumn dla pozycji lewo/prawo, numer linii dla pozycji
  góra/dół. Rozmiar `0` oznacza automatyczny - rozmiar zostanie wyliczony zgodnie
  z wyświetlaną zawartością.

| size_max | integer ≥ 0
| Maksymalny rozmiar paska, `0` = brak limitu (opcja ta jest używana tylko jeśli
  `size` = 0).

| color_bg | color
| Domyślny kolor tła paska.

| color_fg | color
| Domyślny kolor tekstu na pasku.

| color_delim | color
| Kolor separatorów na pasku.

| hidden | `on`, `off`
| Kiedy ta opcja jest ustawiona na `on`, pasek jest ukrywany. +
  Uwaga: zamiast zmiany tej opcji zaleca się użycie komendy `/bar`, na przykład:
  `/bar toggle nicklist` (zobacz komendę <<command_weechat_bar,/bar>> po więcej
  informacji).

| separator | `on`, `off`
| Kiedy ta opcja jest ustawiona na `on`, separator (linia) jest wyświetlany
  pomiędzy tym paskiem a pozostałymi (lub oknem rozmowy).

| items | string
| Lista _elementów_ (zobacz <<bar_items,elementy>> po więcej informacji).

| filling_left_right | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+`
| Typ wypełnienia paska dla pozycji o pozycji `left` lub `right` (zobacz
  <<bar_filling,wypełnienie>> po więcej informacji).

| filling_top_bottom | `+horizontal+`, `+vertical+`, `+columns_horizontal+`, `+columns_vertical+`
| Typ wypełnienia paska dla pozycji o pozycji `top` lub `bottom` (zobacz
  <<bar_filling,wypełnienie>> po więcej informacji).

| conditions | string
| Warunki wyświetlania paska (zobacz <<bar_conditions,warunki>> po więcej
  informacji).
|===

[[bar_items]]
==== Elementy

Opcja _items_ jest ciągiem z listą elementów paska oddzielonych przecinkiem
(spacja pomiędzy elementami na ekranie) lub `+++` (elementy sklejone).

Lista wszystkich elementów paska jest wyświetlana za pomocą komendy `/bar listitems`.

Przed i za nazwą elementu można używać znaków (nie będących alfanumerycznymi,
`+-+` lub `+_+`). Będą one wyświetlane przed/za elementem z kolorem separatorów
zdefiniowanych dla paska (opcja _color_delim_).

Przykład paska z elementami
"[time],buffer_number+:+buffer_plugin+.+buffer_name,[buffer_last_number]":

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

[[item_spacer]]
===== Odstęp

Element paska `spacer` może być użyty do wyrównywania elementów (lewo, środek, prawo).

Kiedy przynajmniej jeden element `spacer` jest użyty na pasku, użyta jest cała
szerokość:
odstępy same się skalują do tego samego rozmiaru (albo prawie). +
Kiedy pasek nie jest dostatecznie duży dla wszystkich elementów odstępy nie
są wyświetlane.

[NOTE]
Elementy `spacer` mogą być tylko użyte w paskach z pozycją `top` lub `bottom`,
wypełnieniem `horizontal` i rozmiarem `1`.

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

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

[[item_force_buffer]]
===== Wymuszenie bufora

Specjalna składnia może zostać użyta, żeby wymusić bufor używany do wyświetlenia
elementów paska: "@bufor:element" (gdzie "bufor" to pełna nazwa bufora i "element"
to nazwa elementu paska).

Jest to przydatne w paskach typu `root` do wyświetlania elementów dla konkretnych
buforów, które nie są wyświetlane w obecnym oknie (lub nawet nie wyświetlanych
w ogóle).

Przykład: lista nicków dla bitlbee w pasku `root` (jeśli pasek nazywa się _bitlist_
i serwer bitlbee nazywa sie _bitlbee_):

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

[[custom_bar_items]]
===== Niestandardowe elementy

Niestandardowe elementy paska mogą zostać oddane za pomocą komendy <<command_weechat_item,/item>>,
każdy nowy element posiada dwie właściwości zdefiniowanymi przez opcje konfiguracyjne:

* `conditions`: warunki do wyświetlenia elementu paska, na przykład
  wyświetlenie elementu paska tylko w specyficznych buforach (jeśli nie zostanie podany
  pasek jest wyświetlany wszędzie)
* `content`: przetworzona zawartość elementu paska.

W obu opcjach mogą zostać użyte następujące zmienne:

* `window`: wskaźnik do okna, w którym pasek jest wyświetlany (`NULL` dla pasków typu root)
* `buffer`: wskaźnik do buforu, w którym wyświetlany jest pasek (obecny bufor dla pasków typu root).

Przykłady warunków:

[width="100%",cols="3,10",options="header"]
|===
| Warunek | Opis
| `${window}` | Wyświetlany tylko w paskach okien
| `${buffer.number} == 1` | Wyświetlany we wszystkich buforach z numerem = 1.
| `${buffer.plugin.name} == irc` | Wyświetlany tylko w buforach IRC
| `${type} == channel` | Wyświetlany tylko w buforach, w których zmienna lokalna `type` ma wartość `channel` (przykład: wszystkie kanały IRC)
| `${type} == private` | Wyświetlany tylko w buforach, w których zmienna lokalna `type` ma wartość `private` (przykład: wszystkie bufory prywatne IRC)
|===

[NOTE]
Nie istnieje wbudowany sposób na odświerzenie niestandardowych elementów paska.
Możesz użyć wtyczki <<trigger,Trigger>> do wymuszenia odświerzenia, na przykład
przez ostrzymanie jednego lub więcej sygnałów.

Więcej informacji i przykładów można otrzymać wykonując komendę <<command_weechat_item,/item>>.

[[bar_filling]]
==== Wypełnienie

Są cztery typy wypełnień:

* `+horizontal+`: elementy są wyświetlane poziomo, od lewej do prawej. Jeśli
  w elementach występują nowe linie, odstęp jest używany do ich oddzielenia.
* `+vertical+`: elementy są wyświetlane od góry do dołu. Jeśli w elementach
  występują nowe linie, do ich oddzielenia używana jest nowa linia.
* `+columns_horizontal+`: elementy są wyświetlane z użyciem kolumn, gdzie tekst
  tekst jest wyrównany do lewej. Pierwszy element znajduje się na górze z lewej,
  kolejny w tej samej linii z prawej.
* `+columns_vertical+`: elementy są wyświetlane z użyciem kolumn, gdzie tekst
  tekst jest wyrównany do lewej. Pierwszy element znajduje się na górze z lewej,
  kolejny jest linię niżej.

Domyślne paski _title_, _status_ i _input_ mają wypełnienie _horizontal_,
domyślny pasek _nicklist_ ma wypełnienie _vertical_.

Przykłady wypełnień paska _nicklist_:

....
┌───────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel                               │
│12:54:15 peter | hey!                                         │@carl   │
│12:55:01  +Max | hello                                        │@jessika│
│                                                              │@maddy  │
│                                                              │%Diego  │
│                                                              │%Melody │
│                                                              │+Max    │
│                                                              │ celia  │
│                                                              │ Eva    │
│                                                              │ freddy │
│                                                              │ Harold^│
│                                                              │ henry4 │
│                                                              │ jimmy17│
│                                                              │ jodie ▼│
│[12:55] [6] [irc/libera] 3:#test(+n){24}                               │
│[@carl] █                                                              │
└───────────────────────────────────────────────────────────────────────┘
                                     filling_left_right = vertical ▲

┌───────────────────────────────────────────────────────────────────────┐
│Welcome to #test, this is a test channel                               │
│12:54:15 peter | hey!                                │@carl     lee    │
│12:55:01  +Max | hello                               │@jessika  louise │
│                                                     │@maddy    mario  │
│                                                     │%Diego    mark   │
│                                                     │%Melody   peter  │
│                                                     │+Max      Rachel │
│                                                     │ celia    richard│
│                                                     │ Eva      sheryl │
│                                                     │ freddy   Vince  │
│                                                     │ Harold^  warren │
│                                                     │ henry4   zack   │
│                                                     │ jimmy17         │
│                                                     │ jodie           │
│[12:55] [6] [irc/libera] 3:#test(+n){24}                               │
│[@carl] █                                                              │
└───────────────────────────────────────────────────────────────────────┘
                             filling_left_right = columns_vertical ▲

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

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

[[bar_conditions]]
==== Warunki

Opcja _conditions_ jest jest przetwarzana w celu sprawdzenia czy pasek ma być
wyświetlony czy nie.

Dostępne opcje:

* _active_: okno musi być aktywne
* _inactive_: okno musi być nieaktywne
* _nicklist_: bufor wyświetlany w oknie musi mieć listę nicków
* wyrażenie: jest wykonywane jako wyrażenie logiczne (zobacz komendę
  <<command_weechat_eval,/eval>>)

Dla wyrażeń dostępne są następujące zmienne:

* `+${active}+`: prawda, jeśli okno jest aktywne
* `+${inactive}+`: prawda, jeśli okno jest nieaktywne
* `+${nicklist}+`: prawda, jeśli okno posiada listę nicków

Następujące wskaźniki są dostępne:

* `+${window}+`: okno, dla którego warunek jest sprawdzany
* `+${buffer}+`: bufor okna, dla którego warunek jest sprawdzany

Przykład pokazujący pasek z listą nicków we wszystkich buforach, które mają
ją włączoną i tylko jeśli szerokość terminala jest > 100:

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

Ten sam warunek, ale lista nicków jest zawsze wyświetlana w buforze _&bitlbee_
(nawet jeśli jest mały):

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

[[secured_data]]
=== Zabezpieczone dane

[[secured_data_storage]]
==== Przechowywanie

WeeChat umie szyfrować hasła lub prywatne dane i przechowuje je w pliku _sec.conf_.

Plik ten jest odczytywany przed wszystkimi innymi plikami i wartości przechowywane
w nim mogą być użyte w różnych opcjach WeeChat jak i wtyczek/skryptów.

Możesz ustawić hasło dla danych zaszyfrowanych w pliku _sec.conf_. Nie jest to
obowiązkowe ale wysoce zalecane, w przeciwnym wypadku dane są zapisywane jako
zwykły tekst.

----
/secure passphrase to jest moje hasło
----

[[secured_data_passphrase_on_startup]]
===== Hasło przy uruchomieniu

Kiedy ustawione jest hasło WeeChat poprosi o nie podczas uruchomieina
(ale nie podczas `/upgrade`).

Jeśli używasz managera haseł, możesz uruchomić zewnętrzny program do
odczytania hasła bez konieczności wprowadzania go ręcznie przy utuchomieniu WeeChat. +
Na przykład dla password-store (komenda `pass`):

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

Program może poprosić o odblokowanie klucza GPG lub wprowadzenie innego hasła,
aby odczytać sekret. WeeChat poczeka do zakończenia komendy i odczyta hasło
ze standardowego wyjścia (musi to być w pierwszej linii bez żadnych dodatkowych
znaków). +
Jeśli wyjście programu nie zawiera hasla lub jest ono błęde, WeeChat poprosi
i jego wprowadzenie.

[[secured_data_encryption]]
===== Szyfrowanie

Szyfrowanie danych odbywa się w 3 krokach:

. Pozyskanie klucza z hasła (z opcjonalną solą).
. Wyliczenia hasha danych do zaszyfrowania.
. Szyfrowanie hash + dane (wynik to: sól + zaszyfrowany hash/dane).

[NOTE]
Tryb blokowy szyfru to _CFB_.

Wynik jest zapisywany jako ciąg heksadecymalny w pliku _sec.conf_, na przykład:

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

[[secured_data_decryption]]
===== Deszyfrowanie

Deszyfrowanie danych odbywa się w 3 krokach:

. Pozyskanie klucza za pomocą soli i hasła.
. Deszyfrowanie hash + dane.
. Sprawdzenie czy odszyfrowany hash == hash danych.

[[secured_data_manage]]
==== Zarządzanie zabezpieczonymi danymi

W celu dodania bezpiecznych danych użyj `/secure set`, na przykład hasło dla
serwera IRC _libera_:

----
/secure set libera mojehasło
----

Dla wygody, zabezpieczone dane mogą być wyświetlone w dedykowanym buforze (kbd:[Alt+v]
w buforze, w celu wyświetlenia wartości), po prostu wykonaj:

----
/secure
----

Bezpieczne dane mogą zostać użyte w opcjach zawierających prywatne dane jak
hasła, za pomocą formatu: "${sec.data.xxx}", gdzie "xxx" to nazwa zabezpieczonych
danych (utworzone za pomocą `/secure set xxx ...`). +
Aby otrzymać pełną listę wspieranych opcji zapoznaj się z komendą <<command_weechat_secure,/secure>>.

W celu użycia hasła _libera_, na przykład z
<<irc_sasl_authentication,uwierzytelnianiem SASL>>:

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

[[command_aliases]]
=== Aliasy

Wtyczka alias pozwala tworzyć aliasy dla komend (z WeeChat lub innych wtyczek).

Niektóre aliasy tworzone są domyślnie z nazwami pisanymi wielkimi literami
(żeby można było je odróżnić od standardowch poleceń); komendy w WeeChat nie
rozróżniają wielkości znaków dlatego na przykład `/close` wywoła alias `/CLOSE`.

Lista domyślnych aliasów:

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

[[alias_commands]]
==== Komendy

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

[[alias_options]]
==== Options

Ssekcje w pliku _alias.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja     | Komenda                        | Opis
| cmd        | <<command_alias_alias,/alias>> +
               /set alias.cmd.*               | Commands for aliases.
| completion | <<command_alias_alias,/alias>> +
               /set alias.completion.*        | Completions for aliases.
|===

[[commands_and_options]]
=== Komendy i opcje

[[weechat_commands]]
==== Komendy WeeChat

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

[[sec_options]]
==== Opcje dla bezpiecznych danych

Sekcje w pliku _sec.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda                            | Opis
| crypt   | /set sec.crypt.*                   | Opcje szyfrowania.
| data    | <<command_weechat_secure,/secure>> | Zabezpieczone dane.
|===

Opcje:

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

[[weechat_options]]
==== Opcje WeeChat

Sekcje w pliku _weechat.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja     | Komenda                                    | Opis
| debug      | <<command_weechat_debug,/debug set>>       +
               /set weechat.debug.*                       | Poziom debugowania dla rdzenia i wtyczek (opcje mogą być dodawane/usuwane w sekcji).
| startup    | /set weechat.startup.*                     | Opcje dla startu aplikacji.
| look       | /set weechat.look.*                        | Wygląd.
| palette    | <<command_weechat_color,/color alias>>     +
               /set weechat.palette.*                     | Aliasy kolorów (opcje mogą być dodawane/usuwane w sekcji).
| color      | /set weechat.color.*                       | Kolory.
| completion | /set weechat.completion.*                  | Opcje dopełnień.
| history    | /set weechat.history.*                     | Opcje historii (komend i buforów).
| proxy      | <<command_weechat_proxy,/proxy>>           +
               /set weechat.proxy.*                       | Opcje proxy.
| network    | /set weechat.network.*                     | Opcje sieci/TLS.
| plugin     | /set weechat.plugin.*                      | Opcje wtyczek.
| signal     | /set weechat.signal.*                      | Opcje sygnałów.
| bar        | <<command_weechat_bar,/bar>>               +
               /set weechat.bar.*                         | Opcje pasków.
| layout     | <<command_weechat_layout,/layout>>         | Układy.
| buffer     | <<command_weechat_buffer,/buffer setauto>> | Właściwości automatycznie nanoszne na bufory podczas otwierania.
| notify     | <<command_weechat_buffer,/buffer notify>>  | Poziomy powiadomień dla buforów (opcje mogą być dodawane/usuwane w sekcji).
| filter     | <<command_weechat_filter,/filter>>         | Filtry.
| key        | <<command_weechat_key,/key>>               | Skróty klawiszowe dla domyślnego kontekstu.
| key_search | <<command_weechat_key,/key>>               | Skróty klawiszowe dla kontekstu wyszukiwania.
| key_cursor | <<command_weechat_key,/key>>               | Skróty klawiszowe dla kontekstu kursora.
| key_mouse  | <<command_weechat_key,/key>>               | Skróty klawiszowe dla kontekstu myszy.
|===

Opcje:

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

[[irc]]
== IRC

Wtyczka IRC jest zaprojektowana do prowadzenia rozmów z innymi osobami przez
protokół IRC.

Jest multi-serwerowa i oferuje wszystkie wspierane komendy IRC włącznie z
rozmowami DCC i transferami plików (poprzez wtyczkę xfer, zobacz
<<xfer,Wtyczka xfer>>).

[[irc_command_line_options]]
=== Opcje z linii poleceń

Możliwe jest podanie adresu URL do jednego lub wielu serwerów IRC:

----
irc[6][s]://[nick[:hasło]@]adres.serwera.irc[:port][/kanał][,kanał[...]]
----

Przykład wejścia na kanały _#weechat_ i _#weechat-fr_ na serwerze
_irc.libera.chat_, na domyślnym porcie (6667), z nickiem _alice_:

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

[[irc_servers]]
=== Serwery

[[irc_servers_add]]
==== Dodanie serwera

Domyślnie nie są zdefiniowane żadne serwery. Możesz dodać ich tyle ile chcesz
za pomocą polecenia <<command_irc_server,/server>>.

Na przykład w celu połączenia się do https://libera.chat/[libera.chat ^↗^^]:

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

[NOTE]
Domyślny port to 6697 i TLS (szyfrowanie ruchu) jest włączone.

Możesz powiedzieć WeeChat, aby automatycznie łączył się z tym serwerem po
uruchomieniu:

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

W celu uwierzytelnienia zalecane jest używanie SASL (jeśli wspiera to
serwer), za pomocą hasła przechowaywanego w bezpieczny sposób (więcej
w rozdziale <<irc_sasl_authentication,Uwierzytelnianie SASL>>):

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

Jeśli SASL nie jest wspierane możesz użyć komendy, aby wysłać wiadomość do
nickserva:

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

[NOTE]
Wysyłając wiadomość do nickserva możesz sie uwierzytelnić po wejściu na
kanały, co może być problemem na kanałach, na które mogą wejść tylko
uwierzytelnione osoby. W takim przypadku możesz ustawić opóźnienie dla
komendy: `/set irc.server.libera.command_delay 5`.

[[irc_servers_options]]
==== Opcje serwerów

Opcje serwerów są nazywane w taki sposób `irc.server.<serwer>.<opcja>`,
gdzie `<serwer>` to zdefiniowana nazwa serwera, `<opcja>` to nazwa opcji. +
Wartość opcji jest dziedziczona z `irc.server_default.xxx` w przypadku
kiedy opcja ma specalną wartość `null`.

Na przykład jeśli stworzyłeś serwer _libera_ za pomocą po wyższych komend
zobaczysz to po wykonaniu `/fset libera`:

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

Na przykład jeśli chcesz automatycznie połączyć się ze wszystkimi zdefiniowanym
serwerami bez potrzeby ustawiania tej opcji dla każdego z serwerów, możesz to
zrobić za pomocą:

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

Następnie możesz zresetować opcję serwera do jej domyślnej (dziedziczonej)
wartości, która teraz ma wartość `on` zamiast domyślnego `off`:

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

[[irc_tls_certificates]]
==== Certyfikaty TLS

Podczas łączenia się z serwerem IRC, WeeChat domyślnie sprawdza czy połączenie
jest w pełni zaufane.

Niektóre opcje są używane do kontroli połączenia TLS:

weechat.network.gnutls_ca_system::
    ładuje domyślne systemowe zaufane urzędy cetyfikujące

weechat.network.gnutls_ca_user::
    dodatkowy plik(i) urzędów certyfikacyjnych

irc.server.xxx.tls_cert::
    certyfikat TLS używany do automatycznej identyfikacji twojego nicka (na
    przykład CertFP w sieci oftc, zobacz niżej)

irc.server.xxx.tls_dhkey_size::
    rozmiar klucza użytego podczas wymiany kluczy Diffie-Hellman (domyślnie: 2048)

irc.server.xxx.tls_verify::
    sprawdź, że połączenie TLS jest w pełni zaufane (domyślnie włączone)

[NOTE]
Opcja "tls_verify" jest domyślnie włączona, weryfikacja jest restrykcyjna i może
się nie powieść, nawet jeśli wszystko było OK w wersjach przed 0.3.1.

[[irc_connect_oftc_with_certificate]]
===== Pierwszy przykład: połączenie z oftc i sprawdzenie certyfikatu

* Import certyfikatu w kosoli:

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

[NOTE]
Musisz zamienić `~/.config/weechat` na ścieżkę do katalogu z konfiguracją WeeChat,
który może być ustawiony na przykład na `~/.weechat`.

[NOTE]
Możliwe jest umieszczenie wielu certyfikatów w pliku CAs.pem.

* W WeeChat z dodanym wcześniej serwerem "oftc":

----
/connect oftc
----

[[irc_connect_oftc_with_certfp]]
===== Drugi przykład: połączenie z oftc używając CertFP

* Tworzenie certyfikatu w konsoli:

[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]
Musisz zamienić `~/.config/weechat` na ścieżkę do katalogu z konfiguracją WeeChat,
który może być ustawiony na przykład na `~/.weechat`.

* W WeeChat z dodanym wcześniej serwerem "oftc":

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

Więcej informacji można znaleźć odwiedzając
https://www.oftc.net/NickServ/CertFP/[tą stronę ^↗^^].

[[irc_sasl_authentication]]
==== Uwierzytelnianie SASL

WeeChat wspiera uwierzytelnianie SASL, używając różnych mechanizmów:

* _plain_: hasło w czystym tekście (domyślne)
* _scram-sha-1_: SCRAM z użyciem algorytmu SHA-1
* _scram-sha-256_: SCRAM z użyciem algorytmu SHA-256
* _scram-sha-512_: SCRAM z użyciem algorytmu SHA-512
* _ecdsa-nist256p-challenge_: klucz prywatny/publiczny
* _external_: certyfikat TLS po stronie klienta

Opcje dla serwerów to:

* _sasl_mechanism_: mechanizm do użycia (zobacz wyżej)
* _sasl_timeout_: limit czasu (w sekundach) na uwierzytelnienie
* _sasl_fail_: akcja wykonywana jeśli uwierzytelnienie się nie powiedzie
* _sasl_username_: nazwa użytkownika (nick)
* _sasl_password_: hasło
* _sasl_key_: plik z kluczem prywatnym ECc (dla mechanizmu
  _ecdsa-nist256p-challenge_)

[[irc_sasl_ecdsa_nist256p_challenge]]
===== SASL ECDSA-NIST256P-CHALLENGE

Musisz wygenerować klucz prywatny w celu uwierzytelnienia za pomocą mechanizmu
ECDSA-NIST256P-CHALLENGE (hasło nie potrzebne do połączenia).

Klucz można wygenerować za pomocą komendy:

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

[NOTE]
Musisz zamienić `~/.config/weechat` na ścieżkę do katalogu z konfiguracją WeeChat,
który może być ustawiony na przykład na `~/.weechat`.

Klucz publiczny (zakodowany za pomocą base64) uzyskujemy wywołując komendę:

[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
----

Połącz się do serwera, zidentyfikuj (na przykład za pomocą "nickserv identify")
i ustaw swój klucz publiczny dla swojego konta, za pomocą nickserva (zamień
wartość base64 wartościa dla swojego klucza):

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

Konfiguracja opcji SASL dla serwera:

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

Ponowne połączenie z serwerem:

----
/reconnect libera
----

[[irc_servers_connection]]
==== Łączenie się z serwerem

Możesz połączyć się z serwerem za pomocą komendy <<command_irc_connect,/connect>>:

----
/connect libera
----

Aby się rozłączyć:

----
/disconnect libera
----

Lub tylko to jeśli jesteś w buforze należącym do serwera _libera_ (serwer,
kanał, wiadomości prywatne):

----
/disconnect
----

Jeśli łączysz się do wielu serwerów na raz, bufory serwerów są domyślnie połączone
i możesz się między nimi przełączać za pomocą klawiszy kbd:[Ctrl+x]. +
Możliwe jest wyłączenie automatycznego łączenia buforów serwerów i posiadania
oddzielnych buforów dla serwerów:

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

[[irc_tor_sasl]]
==== Połączenie za pomocą Tora i SASL

Niekróre serwery wspierają połączenia z sieci https://www.torproject.org/[Tor ^↗^^],
sieci wirtualnych tuneli, które umożliwają poprawienie swojej prywatności
i bezpieczeństwa w Internecie.

Pierwszym krokiem jest instalacja Tora. Dla Debiana (i pochodnych):

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

W WeeChat należy stworzyć proxy socks5 dla serwisu Tor (nazwa hosta/IP i port
zależą od twojej konfiguracji Tora):

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

Teraz należy dodać nowy serwer (zastąp nazwę serwera "irc-tor" i andres właściwymi
wartościami):

----
/server add irc-tor adres.serwera.onion
----

Ustaw proxy dla Tor:

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

Ustaw uwierzytelnianie SASL z użyciem ECDSA-NIST256P-CHALLENGE (zobacz rozdział
<<irc_sasl_ecdsa_nist256p_challenge,SASL ECDSA-NIST256P-CHALLENGE>> żeby dowiedzieć
się jak wygenerować klucz prywatny):

----
/set irc.server.irc-tor.sasl_mechanism ecdsa-nist256p-challenge
/set irc.server.irc-tor.sasl_username "twój_użytkownik"
/set irc.server.irc-tor.sasl_key "${weechat_config_dir}/ecdsa.pem"
----

Teraz pozostaje już się tylko połączyć z serwerem:

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

[[irc_ircv3_support]]
=== Wsparcie dla IRCv3

WeeChat wspiera następujące https://ircv3.net/irc/[rozszerzenia 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>>

Domyślnie wszystkie możliwości wspierane przez serwer i WeeChat są
automatycznie włączone
(opcja <<option_irc.server_default.capabilities,irc.server_default.capabilities>>).

Tabele z porównaniem różnych klientów IRC, także WeeChat, można znaleźć na
https://ircv3.net/software/clients[tej stronie ^↗^^].

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

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

Ta właściwość pozwala serwerowi na wysyłanie wiadomości po tym jak użytkownik
zostanie zidentyfikwany lub niezidentyfikowany na serwerze. +
WeeChat wyświetla takie wiadomości jeśli opcja
<<option_irc.look.display_account_message,irc.look.display_account_message>>
jest włączona (domyślna wartość).

Przykłady:

....
-- alice zidentyfikował się jako Alice01

-- alice został niezidentyfikowany
....

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

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

Ta właściwość pozwala serwerowi na wysyłanie komend konta jako tagów wiadomości
do komend wysyłanych do klienta. +
WeeChat parsuje te tagi i zapisuje je w wiadomości ale nie jest on używany ani
wyświetlany. Można ich użyć w komendzie <<command_weechat_filter,/filter>> do filtrowania
wiadmości pasujących do konkretnych kont:

Przykład otrzymanej nieprzetworzonej wiadomości:

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

Wiadomość wyświetlana na kanale:

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

Wiadomość z tagami:

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

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

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

Ta właściwość pozwala serwerowi na wysyłanie powiadomień o nieobecności do
użytkowników znajdujących się na tych samych kanałach co ty.

Kiedy status nieobecności zmienia się dla użytkownika, jest to odzwierciedlane
konkretnym kolorze na liście nicków, za pomocą następujących opcji:

* <<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

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

Ta właściwość pozwala serwerowi na wysyłanie seri zdarzeń (pogrupowane kilka powiązanych
wiadomości).

Obecnie WeeChat tylko przechowuje wiadomości odebrane w seri i przetwarza je w normalny
sposób, po zakończeniu seri.

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

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

Ta właściwość pozwala serwerowi na ogłaszanie nowych lub usuniętych możliwości
na serwerze (za pomocą komend  `CAP NEW` i `CAP DEL`i).

Przykłady:

....
-- irc: możliwości klienta, teraz dostępne: sasl

-- irc: możliwości klienta, usunięte: sasl
....

[[irc_ircv3_chghost]]
==== chghost

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

Ta właściwość pozwala serwerowi na wysyłanie wiadomości, kiedy użytkownik zmienia
nazwę lub hosta. Kiedy opcja <<option_irc.look.smart_filter_chghost,irc.look.smart_filter_chghost>>
jest włączona (domyślna wartość), zmiany hosta są domyślnie ukrywane jeśli dany
nick nie odzywał się od kilku minut. +
Kolor wiadomości o zmianie hosta można ustawić za pomocą opcji
<<option_irc.color.message_chghost,irc.color.message_chghost>>.

Przykłady:

....
-- alice (user@example.com) zmienił hosta na test.com
....

[[irc_ircv3_draft_multiline]]
==== draft/multiline

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

Ta właściwość pozwala klientowi i serwerowi wysyłać wieloliniowe wiadomości,
za pomocą właściwości <<irc_ircv3_batch,batch>>, która również musi być włączona.

Istnieje limit bajtów lub ilości lini tych wiadomości podawane dla tej
właściwości wysyłanej przez serwer, na przykład:

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

Ustawia to limit na 4096 bajtów i 24 linie dla zawartości wieloliniowej serii.

Jeśli serwer nie ustawia limitu, domyślne wartości dla WeeChat to:

* ilość bajtów: 4096
* ilość lin: 24

Tylko standardowe wiadmości oraz te wysyłane przez polecenie  <<command_irc_notice,/notice>>
mogą mieć wiele linii. +
Ta właściwość nie ma wpływu na wiadomości ACTION CTCP wysyłane przez polecenie
<<command_irc_me,/me>>. Oznacza to ze wieloliniowe akcje wysyłane są jako wiele akcji.

[WARNING]
Ponieważ specyfikacja jest "szkicem" może się zmienić i wsparcie dla tej właściwości
w WeeChat może się zepsuć w dowolnym momencie. +
Wsparcie dla tej właściwości jest automatycznie włączane jeśli serwer ją wspiera,
można ją wyłączyć za pomocą polecenia:
`/set irc.server_default.capabilities "*,!draft/multiline"`. +
Kiedy wsparcie jest wyłączone, wieloliniowe wiadomości są wysyłane jako wiele wiadomości,
tak jakby były wysyłane sekwencyjnie do serwera.

Przykład wiadomości IRC wysłanych dla wiadomości użytkownika z dwoma liniami
(`this is a test` / `on two lines`), wysłane na kanał #test:

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

Wiadomość wyświetlana w WeeChat:

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

[[irc_ircv3_echo_message]]
==== echo-message

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

Ta właściwość wymusza na serwerze wysyłanie wiadomości PRIVMSG, NOTICE i TAGMSG
spowrotem do WeeChat.

WeeChat wyświetla tylko otrzymane wiadomości, dlatego można zaobserwować pewne
opóźnienia pomiędzy wysłaniem a wyświetleniem wiadomości. Kiedy wiadomość zostanie
wyświetlona, oznacza to, że została ona poprawnie odebrana przez serwer i przesłana
do innych połączonych klientów.

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

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

Ta właściwość pozwala serwerowi na wysyłanie konta i prawdziwej nazwy,
kiedy użytkownicy wchodzą na kanały. +
WeeChat wyświetla te dodatkowe informacje jeśli opcja
<<option_irc.look.display_extended_join,irc.look.display_extended_join>>
jest włączona (domyślna wartość).

Przykład:

....
--> john [John01] (John Doe) (~user@example.com) wszedł na #test
....

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

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

Ta właściwość pozwala serwerowi na wysyłanie wiadomości zaproszeń, kiedy
użytkownicy są zapraszani na kanały.

Przykłady:

....
-- alice zaprosił bob na #test
....

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

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

Ta właściwość pozwala dodawać metdane do wiadomości. +
Tagi te mogą być wyświetlone za pomocą komendy `/debug tags`.

Musi to być włączone, żeby używać <<typing_notifications,powiadomień o pisaniu>>.

[[irc_ircv3_monitor]]
==== monitor

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

Ta właściwość pozwala serwerowi na wysyłanie powiadomień kiedy klient
stanie się online lub offline. +
WeeChat automatycznie użyje tego rozszerzenia jeśli jest dostępne podczas
użycia komendy <<command_irc_notify,/notify>>.

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

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

Ta właściwość pozwala serwerowi na wysyłanie wszystkich trybów użytkownika
na raz w odpowiedziach na <<command_irc_names,/names>> i <<command_irc_whois,/whois>>. +

////
Przykład: wynik `/names`:

....
-- Nicki #test: [@%+alice bob +carol]
....
////

[NOTE]
Obecnie WeeChat nie wyświetla wszystkich prefuksów w wyniku komendy `/names`,
nawet jeśli zostały poprawnie otrzmane i zapisane wewnętrznie.

Przykład: wynik `/whois alice`:

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

[[irc_ircv3_sasl]]
==== SASL

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

Zobacz dedykowany rozdział <<irc_sasl_authentication,autentykacja SASL>>.

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

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

Ta właściwość pozwala serwerowi na wysyłanie czasu dla wiadomości w tagach. +
Po otrzymaniu czasu w wiadomości WeeChat używa go do jej wyświetlenia
(może zostać wyświetlona z wrześniejszym czasem).

<<relay_irc_proxy,IRC proxy>> we wtyczce Relay wspiera tą właściwość,
każdy klient IRC połączony z Relay powinien włączyć tą właściwość jeśli
chce wyświetlać prawdziwi czas wysłania wiadomości.

[[irc_ircv3_setname]]
==== setname

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

Ta właściwość pozwala zmienić prawdziwą nazwę za pomocą komendy
<<command_irc_setname,/setname>>.

[[irc_ircv3_typing]]
==== typing

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

Zobacz dedykowany rozdział <<typing_notifications,Powiadomienia o pisaniu>>.

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

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

Ta właściwość pozwala serwerowi na wysyłanie nazwy kostów w odpowiedzi na
komendę <<command_irc_names,/names>>.

[NOTE]
WeeChat nie wyświetla nazwy hostów w wyjściu komendy `/names`.

Przykład nieprzetworzonych wiadomości IRC otrzymanych bez tej właściwości:

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

Przykład nieprzetworzonych wiadomości IRC z tą właściwością:

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

[[irc_ircv3_whox]]
==== WHOX

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

Ta właściwość pozwala na zarządanie dodatkowych pól w odpowiedzi na WHO
(przez komendę <<command_irc_who,/who>>). +
WeeChat wyświetla wszystkie dodatkowe informacje otrzymane w odpowiedzi
na WHO.

[[irc_channels]]
=== Kanały

Możesz dołączać do kanałów za pomocą komendy <<command_irc_join,/join>>:

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

Wyjście z kanału (zostawiając otwarty bufor):

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

Kanały do których dołączyłeś nie są zapisywane. Jeśli chcesz automatycznie
do nich dołączać podczas łączenia się z serwerem, należy ustawić opcje
serwera `autojoin`:

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

[NOTE]
Niektóre skrypty mogą pomóc w automatycznym ustawianiu tej opcji, zobacz
`/script search autojoin`.

Bądź ostrożny, spacje mogą być używane tylko do oddzielenia listy kanałów
od ich haseł, na przykład jeśli `#kanał1` wymaga hasła ale `#kanał2` już
nie:

----
/set irc.server.libera.autojoin "#kanał1,#kanał2 hasło1"
----

Informacje o formacie można znaleźć w opcji <<option_irc.server_default.autojoin,irc.server_default.autojoin>>.

[[irc_private_messages]]
=== Prywatne wiadomości

Możesz wysłać prywatną wiadomość za pomocą polecenia <<command_irc_query,/query>>,
co otwiera oddzielny bufor:

----
/query bob cześć, co tam?
----

Bez argumentów to polecenie otwiera bufor (lub przechodzi do niego jeśli już jest
otwarty):

----
/query bob
----

W celu zamknięcia prywatnego buforu możesz wykonać to polecenie w prywatnym buforze:

----
/close
----

[[irc_smart_filter]]
=== Inteligentne filtry

Inteligentne filtry są dostępne dla filtrowania części wiadomości w przypadku,
kiedy ktoś nic nie napisał na kanale w określonym czasie:

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

Intgeligentne filtry są domyślnie włączone, ale musisz dodać filtr ukrywający
wiadomości w buforach, na przydład:

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

Można stworzyć filtry dla pojedynczego kanału lub kanałów, których nazwy
zaczynają się tak samo (zobacz komendę <<command_weechat_filter,/filter>>):

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

Możesz ustawić dłuższe opóźnienie (w minutach):

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

Jeśli ktoś nie napiał nic w ciągu ostatnich 10 minut, jego wiadomości jak
join/part/quit zostaną domyślnie ukryte na kanale. Można użyć skrótu kbd:[Alt+=]
(przełącz filtry) żeby je zobaczyć.

[[irc_ctcp_replies]]
=== Odpowiedzi CTCP

Możliwe jest dostosowywanie odpowiedzi CTCP, lub blokowanie niektórych zapytań
CTCP (brak odpowiedzi).

Na przykład, ustawianie własnej odpowiedzi na CTCP "VERSION", możliwe jest za
pomocą polecenia:

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

[NOTE]
Nazwa wiadomości CTCP musi być pisana małymi literami. Oznacza to, że ustawienie
opcji _irc.ctcp.VERSION_ nie zadziała.

Jeśli chcesz zablokować CTCP "VERSION" (nie odpowiadać na zapytanie), ustaw
pusty ciąg:

----
/set irc.ctcp.version ""
----

Nawet odpowiedzi na nieznane zapytania CTCP mogą być dostosowywane, na przykład
odpowiedź na CTCP "BLABLA":

----
/set irc.ctcp.blabla "This is my answer to CTCP BLABLA"
----

Możliwe jest dostosowywanie odpowiedzi na CTCP tylko w obrębie serwera, używając
jego wewnętrznej nazwy przed nazwą zapytania CTCP:

----
/set irc.ctcp.libera.version "WeeChat ${version} (for libera)"
----

Jeśli chcesz przywrócić standardowe odpowiedzi dla CTCP usuń opcję:

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

Odpowiedzi CTCP są przetwarzane (zobacz komendę <<command_weechat_eval,/eval>>),
można użyć następujących zmiennych:

[width="100%",cols="2,4,8",options="header"]
|===
| Zmienna            | Opis                              | Wartość/Przykład
| `+${clientinfo}+`  | Lista wspieranych CTCP            | `+ACTION DCC CLIENTINFO PING SOURCE TIME VERSION+`
| `+${version}+`     | Wersja WeeChat                    | `+4.1.0-dev+`
| `+${versiongit}+`  | Wersja WeeChat + wersja Git ^(1)^ | `+4.1.0-dev (git: v4.0.0-51-g8f98b922a)+`
| `+${git}+`         | Wersja git ^(1)^                  | `+v4.0.0-51-g8f98b922a+`
| `+${compilation}+` | Data kompilacji WeeChat           | `+Jul  8 2023 20:14:23+`
| `+${osinfo}+`      | Informacje o systemie operacyjnym | `+Linux 5.10.0-23-amd64 / x86_64+`
| `+${site}+`        | Strona WeeChat                    | `+https://weechat.org/+`
| `+${download}+`    | Strona WeeChat, pobieranie        | `+https://weechat.org/download/+`
| `+${time}+`        | Obecna data/czas                  | `+Sat, 08 Jul 2023 21:11:19 +0200+`
| `+${username}+`    | Nazwa użytkownika na serwerze IRC | `+name+`
| `+${realname}+`    | Prawdziwa nazwa na serwerze IRC   | `+John Doe+`
|===

[NOTE]
^(1)^ Wersja git jest wynikiem komendy `git describe`. Jest dostępna tylko jeśli
WeeChat został skompilowany wewnątrz repozytorium Git i Git był zainstalowany.

Domyślne odpowiedzi CTCP:

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

[[irc_target_buffer]]
=== Bufor dla wiadomości IRC

Jest możliwe dostosowanie buforu docelowego dla wiadomości IRC (bufor użyty do
wyświetlania wiadomości) za pomocą opcji `+irc.msgbuffer.*+`.

Dla niektórych wiadomości IRC (Zobacz poniższa listę), można ustawić wartość:

current::
    obecny bufor (jeśli jest to bufor IRC, lub domyślnie bufor serwera)

private::
    prywatny bufor dla osoby, lub bufor obecny/serwera jeśli nie zostanie
    znaleziony (zgodnie z opcją _irc.look.msgbuffer_fallback_)

server::
    bufor serwera

weechat::
    Bufor "rdzeń" WeeChat

Kiedy opcja nie jest ustawiona (domyślnie), WeeChat wybiera odpowiedni bufor,
zazwyczaj bufor serwera albo kanału.

Niepełna lista wiadomości IRC lub aliasów jakie można dostosować:

[width="100%",cols="^2m,^3m,15",options="header"]
|===
| wiadomość | alias         | opis
| error     |               | błąd
| invite    |               | zaproszono na kanał
| join      |               | wejście
| kick      |               | wykopanie
| kill      |               | zabicie
| mode      |               | tryb
| notice    |               | powiadomienie
| part      |               | opuszczenie
| quit      |               | wyjście
| topic     |               | temat
| wallops   |               | wallops
|           | ctcp          | ctcp (wysłane lub otrzymane, w wiadomości prywatnej lub powiadomieniu)
| 221       |               | ciąg trybu użytkownika
| 275       | whois         | whois (bezpieczne połączenie)
| 301       | whois         | whois (away)
| 303       |               | ison
| 305       | unaway        | unaway
| 306       | away          | away
| 307       | whois         | whois (zarejestrowany nick)
| 310       | whois         | whois (tryb pomocy)
| 311       | whois         | whois (użytkownik)
| 312       | whois         | whois (serwer)
| 313       | whois         | whois (operator)
| 314       | whowas        | whowas
| 315       | who           | who (koniec)
| 317       | whois         | whois (idle)
| 318       | whois         | whois (koniec)
| 319       | whois         | whois (kanały)
| 320       | whois         | whois (zidentyfikowany użytkownik)
| 321       | list          | list (start)
| 322       | list          | list (kanał)
| 323       | list          | list (koniec)
| 326       | whois         | whois (ma uprawnienia operatora)
| 327       | whois         | whois (host)
| 328       |               | URL kanału
| 329       |               | data utworzenia kanału
| 330       | whois         | whois (zalogowany jako)
| 331       |               | brak tematu na kanale
| 332       |               | temat kanału
| 333       |               | informacje o temacie
| 335       | whois         | whois (jest botem na)
| 338       | whois         | whois (host)
| 341       |               | zaproszenie
| 343       | whois         | whois (is opered as)
| 344       | reop          | reop dla kanału
| 345       | reop          | reop dla kanału (koniec)
| 346       | invitelist    | lista zaproszonych
| 347       | invitelist    | lista zaproszonych (koniec)
| 348       | exceptionlist | lista wyjątków
| 349       | exceptionlist | lista wyjątków (koniec)
| 351       |               | wersja serwera
| 352       | who           | who
| 353       | names         | lista osób na kanale
| 366       | names         | koniec listy osób na kanale
| 367       | banlist       | lista zbanowanych
| 368       | banlist       | koniec listy zbanowanych
| 369       | whowas        | whowas (koniec)
| 378       | whois         | whois (łączy się z)
| 379       | whois         | whois (używa trybów)
| 401       | whois         | brak nicka/kanału
| 402       | whois         | brak serwera
| 432       |               | błędna nazwa użytkownika
| 433       |               | nazwa użytkownika już zajęta
| 438       |               | brak uprawnień do zmiany nicka
| 671       | whois         | whois (bezpieczne połączenie)
| 728       | quietlist     | cicha lista
| 729       | quietlist     | koniec cichej listy
| 732       | monitor       | lista monitorowanych nicków
| 733       | monitor       | lista monitorowanych nicków (koniec)
| 901       |               | jesteś teraz zalogowany
|===

Inne numeryczne komendy mogą również zostać spersonalizowane.

Wiadomość może być poprzedzona nazwą serwera, żeby być specyficzna dla danego
serwera irc (na przykład: `libera.whois`).

Kilka przykładów:

* wyświetlaj wynik komendy `/whois` w prywatnym buforze:

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

* przywróć domyślny bufor dla komendy `/whois` (bufor serwera):

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

* wyświetlaj zaproszenia w obecnym buforze, tylko na serwerze "libera":

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

* wyświetlaj wiadomość "303" (ison) w buforze "core" WeeChat:

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

[[irc_commands]]
=== Komendy

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

[[irc_options]]
=== Opcje

Sekcje w pliku _irc.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja         | Komenda                        | Opis
| look           | /set irc.look.*                | Wygląd.
| color          | /set irc.color.*               | Kolory.
| network        | /set irc.network.*             | Opcje sieci.
| msgbuffer      | /set irc.msgbuffer.*           | <<irc_target_buffer,Bufor dla wiadomości IRC>> (opcje w tej sekcji mogą być dodawane/usuwane).
| ctcp           | /set irc.ctcp.*                | <<irc_ctcp_replies,Odpowiedzi CTCP>> (opcje w tej sekcji mogą być dodawane/usuwane).
| ignore         | <<command_irc_ignore,/ignore>> | Osoby ignorowane.
| server_default | /set irc.server_default.*      | Domyślne ustawienia dla serwerów (opcje w tej sekcji mogą być dodawane/usuwane).
| server         | <<command_irc_server,/server>> +
                   /set irc.server.*              | Serwery.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=irc_options]

[[xfer]]
== Xfer

Wtyczka xfer zapewnia:

* bezpośrednią rozmowę (pomiędzy dwoma hostami, bez serwera): na przykład
  "DCC Chat" przez wtyczkę IRC
* transfer plików, na przykład "DCC" przez wtyczkę IRC

[[xfer_commands]]
=== Komendy

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

[[xfer_options]]
=== Opcje

Sekcje w pliku _xfer.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda             | Opis
| look    | /set xfer.look.*    | Wygląd.
| color   | /set xfer.color.*   | Kolory.
| network | /set xfer.network.* | Opcje sieci.
| file    | /set xfer.file.*    | Opcje dla plików odbieranych/wysyłanych.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=xfer_options]

[[typing_notifications]]
== Powiadomienia o pisaniu

Wtyczka typing jest używana do informowania innych że coś piszesz oraz
pokazaniu listy osób piszących obecnie wiadomości w buforze.

Jest używana przez wtyczkę IRC na kanałach i w prywatnych buforach, kiedy
serwer posiada włączoną opcję "message-tags" (możesz to sprawdzić komendą
<<command_irc_cap,/cap>>). +
Pod spodem użyty jest tag klienta, zgodnie z
https://ircv3.net/specs/client-tags/typing[tą specyfikacją ^↗^^].

[[typing_activation]]
=== Aktywacja

W trosce o prywatność, opcja ta jest domyślnie wyłączona. +
Jeśli chcesz ją włączyć, musisz ustawić opcje zarówno we wtyczce typing
jak i 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
----

Powiadomienia o pisaniu są wyświetlane na końcu pasku statusu.

Przykład paska statusu z elementem "typing": "bob" pisze wiadomość, natomiast
"alice" pisała coś ale zrobiła sobie przerwę:

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

[[typing_signals_sent]]
=== Wysyłane sygnały

Kiedy piszesz wiadomość (ale nie polecenie zaczynające się od `/`) ta wtyczka
wysyła sygnały informujące inne wtyczki (jak IRC) o tym że piszesz, te wtyczki
mogą następnie wysłać informacje do innych użytkowników.

Następujące sygnały są wysyłane, kiedy piszesz wiadomość:

[width="100%",cols="1,1,5",options="header"]
|===
| Sygnał              | Argumenty        | Opis
| typing_self_typing  | Wskaźnik: bufor. | Piszesz wiadomość.
| typing_self_paused  | Wskaźnik: bufor. | Przestałeś pisać wiadomość.
| typing_self_cleared | Wskaźnik: bufor. | Skasowałeś pisaną wiadomość z lini poleceń (bez wysłania).
| typing_self_sent    | Wskaźnik: bufor. | Wysłałeś wiadomość do bufora.
|===

[[typing_signals_caught]]
=== Przechwytywane sygnały

Wtyczka typing przechwyytuje niektóre sygnały, które mogą być wysłane przez
inne wtyczki (jak IRC) do aktualizacji wewnętrznych tablicy hashy używanych
do przechowywania stanu nicków i buforów. Te tablice są używane do budowania
zawartości elementu paska "typing".

Następujące sygnały są przechwytywane przez wtyczke typing:

[width="100%",cols="1,4,3",options="header"]
|===
| Sygnal | Argumenty | Opis

| typing_set_nick
| Ciąg: wskaźnik bufora + ";" + stan (jeden z: "off", "typing", "paused",
  "cleared") + ";" + nick. +
  Przykład: "0x1234abcd;typing;alice".
| Ustawia stan pisania dla nicka w buforze.

| typing_reset_buffer
| Wskaźnik: bufor.
| Usuwa status pisania dla nicków w buforze.
|===

[[typing_options]]
=== Opcje

Sekcje w pliku _typing.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja | Komenda            | Opis
| look   | /set typing.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=typing_options]

[[relay]]
== Relay

Wtyczka relay jest używana do przekazywania danych przez sieć, z użyciem różnych
protokołów:

* _irc_: pośrednik IRC: używany do dzielenia połączeń z serwerami IRC z jednym
  lub wieloma klientami IRC
* _api_: HTTP REST API, używane przez WeeChat i zdalne interfejsy do wyświetlania
  i interakcji z WeeChat
* _weechat_: protokół używany przez zdalne interfejsy do wyświetlania i interakcji
  z WeeChat.

Listę dostępnych zdalnych interfejsów dla protokołów _api_ i _weechat_ można znaleźć na
https://weechat.org/about/interfaces/[tej stronie ^↗^^].

[[relay_password]]
=== Hasło

Zaleca się ustawenia hasła dla pośrednika za pomocą poniższych komend:

----
/secure set relay moje_hasło
/set relay.network.password "${sec.data.relay}"
----

To hasło jest używane przez wszystkie protokoły.

[[relay_totp]]
=== TOTP


TOTP (Time-based One-Time Password) może być użyte jako drugi składnik uwierzytelniania
dla protokołów _api_ i _weechat_, poza samym hasłem.

Jest to opcjomalne ale podnosi to poziom bezpieczeństwa.
This is optional and increases the security level.

Hasła jednorazowe mogą być generowane między innymi za pomocą:

* FreeOTP:
  https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp[Android ^↗^^],
  https://apps.apple.com/fr/app/freeotp-authenticator/id872559395[iOS ^↗^^]
  (https://freeotp.github.io/[website ^↗^^])
* Google Authenticator:
  https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2[Android ^↗^^],
  https://apps.apple.com/fr/app/google-authenticator/id388497605[iOS ^↗^^]

Ten sam sekret TOTP musi być utawiony w WeeChat i aplikacji używanej do generowania haseł.

Musi to być ciąg zakodowany za pomocą base32, zawierajcy tylko litery i liczby od 2 do 7,
na przykład:

----
/secure set relay_totp secretpasswordbase32
/set relay.network.totp_secret "${sec.data.relay_totp}"
----

[[relay_tls]]
=== TLS

Możesz używać TLS poprzez utworzenie certyfikatu i klucza prywatnego, oraz
użycie prefiksu "tls." w nazwie protokołu.

Domyślna ścieżka do certyfikatów/kluczy jest zdefiniowana przez opcję
<<option_relay.network.tls_cert_key,relay.network.tls_cert_key>>.

Możesz utworzyć certyfikat i klucz prywatny wykonując poniższe komendy:

[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]
Musisz zamienić `~/.config/weechat` na ścieżkę do katalogu z konfiguracją WeeChat,
który może być ustawiony na przykład na `~/.weechat`.

Jeśli WeeChat jest już uruchomiony, możesz przładować certyfikat i klucz prywatny
za pomocą polecenia:

----
/relay tlscertkey
----

[[relay_irc_proxy]]
=== IRC proxy

Wtyczka relay może zachowywać się jak proxy dla IRC: będzie symulować serwer IRC,
możesz się połączyć do niego za pomocą dowolnego klienta IRC (w tym WeeChat).

Możesz zdefiniować oddzielne porty dla serwerów IRC, lub jeden dla wszystkich.

Jeśli używasz jednego portu dla wszystkich serwerów, klient musi wysłać
wewnętrzną nazwę serwera w komendzie IRC "PASS", zachowując format
(zobacz poniższy przykład):

----
PASS serwer:hasło
----

Przykład: proxy IRC z TLS dla dowolnego serwera (klient wybiera):

----
/relay add tls.irc 8000
----

Przykład: proxy IRC bez TLS tylko dla serwera "libera":

----
/relay add irc.libera 8000
----

Teraz możesz się połączyć na porcie 8000 za pomocą dowolnego klienta IRC
używając hasła serwera "moje_hasło" (lub "libera:moje_hasło" jeśli żaden
serwer nie został podany w przekaźniku).

Na przydład jeśli używasz WeeChat jako klienta pośrednika IRC, z serwerem
nazwanym "relay" i hasłem pośrednika "moje_hasło", możesz ustawić hasło
za pomocą tych komend:

----
/secure set relay_libera libera:moje_hasło
/set irc.server.relay.password "{sec.data.relay_libera}"
----

[[relay_api_protocol]]
=== Protokół API

Wtyczka Relay może wysyłać dane do zdalnego WeeChat lub interfejsu za pomocą
protokołu HTTP REST API.

Możesz przeglądać i testować API online:
https://weechat.org/api/[WeeChat Relay API ^↗^^].

Możesz się połączyć przez WeeChat lub zdalnym interfejsem, sprawdź
https://weechat.org/about/interfaces/[tą stronę ^↗^^].

Na przykład:

----
/relay add api 9000
----

Możesz teraz połączyć się na porcie 9000 używając WeeChat lub zdalnym interfejsem
używając hasła 'mypassword'.

Połączenie z pośrednikiem _api_ działającym lokalnie z WeeChat:

----
/remote add weechat http://localhost:9000 -password=mypassword
/remote connect weechat
----

Połączenie z pośrednikiem _api_ działającym gdzieś z WeeChat
(TLS jest baredzo zalecany):

----
/remote add weechat https://example.com:9000 -password=mypassword
/remote connect weechat
----

[NOTE]
Zdalny WeeChat musi używać tej samej wersji API co lokalny WeeChat, zaleca się
używanie dokładnie tych samych wersji WeeChat zarówno lokalnie jak i na zdalnej
maszynie.

[[relay_weechat_protocol]]
=== Protokół WeeChat

Wtyczka relay może wysyłać dane do zdalnego interfejsu korzystając z protokołu
WeeChat.

Możesz się łączyć za pomocą zdalnych interfejsów, więcej na
https://weechat.org/about/interfaces/[tej stronie ^↗^^].

[IMPORTANT]
WeeChat NIE MOŻE się połączyć z innym WeeChat za pomocą tego protokołu.

Na przykład:

----
/relay add weechat 9500
----

Teraz możesz się połączyć zdalnym interfejsem na porcie 9500 za pomocą hasła
"moje_hasło".

[[relay_websocket]]
=== WebSocket

Protokół WebSocket (https://datatracker.ietf.org/doc/html/rfc6455[RFC 6455 ^↗^^])
jest wspierany dla wszystkich protokołów.

Żądanie WebSocket jest automatycznie wykrywane i socket staje się gotowy do
transmisji WebSocket jeśli wymagane nagłówki znajdują się w żądaniu oraz, gdy
źródło jest dopuszczone (zobacz opcję
<<option_relay.network.websocket_allowed_origins,relay.network.websocket_allowed_origins>>).

WebSocket może zostać otworzony w HTML5 za pomocą jednej linii w JavaScript:

[source,javascript]
----
websocket = new WebSocket("ws://example.com:9500/weechat");
----

Port (9500 w przykładzie) to port zdefiniowany we wtyczce relay.

URI musi się kończyć "/weechat" dla protokołów _irc_ i _weechat_ oraz "/api"
dla protokołu _api_.

[[relay_unix_socket]]
=== Sockety UNIXowe

Używając opcji protokołu "unix" razem z komendą `/relay`, można nasłuchiwać dowolnego
protokołu za pomocą socketu UNIXowego w podanej ścieżce. Na przykład:

----
/relay add unix.weechat ${weechat_runtime_dir}/relay_socket
----

Pozwala to na połączenia od klientów za pomocą protokołu weechat do
_/run/user/1000/weechat/relay_socket_. Jest to przydatne zwłaszcza jeśli chcemy
tunelować klienty przez SSH, w przypadku, kiedy inne porty nie moga być otwierane.

Za pomocą OpenSSH:

[source,shell]
----
ssh -L 9000:.weechat/relay_socket user@hostname
----

Przekerowuje to połączenia lokalnych klientów łączących się na port 9000 do intancji
WeeChat uruchomionej na "hostname".

[[relay_commands]]
=== Komendy

include::{autogendir}/autogen_user_commands.pl.adoc[tag=relay_commands]

[[relay_options]]
=== Opcje

Sekcje w pliku _relay.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda                            | Opis
| look    | /set relay.look.*                  | Wygląd.
| color   | /set relay.color.*                 | Kolory.
| network | /set relay.network.*               | Opcje sieci.
| irc     | /set relay.irc.*                   | Opcje specyficzne dla protokołu irc (pośrednik irc).
| port    | <<command_relay_relay,/relay add>> +
            /set relay.port.*                  | Porty używane do przekazywania (opcje w tej sekcji mogą być dodawane/usuwane).
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=relay_options]

[[external_commands]]
== Zewnętrzne polecenia

Komenda `/exec` pozwala wykonać zewnętrzne polecenie wewnątrz WeeChat i wyświetlić
jej wynik lokalnie lub wysłać do bufora.

[[exec_commands]]
=== Komendy

include::{autogendir}/autogen_user_commands.pl.adoc[tag=exec_commands]

[[exec_options]]
=== Opcje

Sekcje w pliku _exec.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda             | Opis
| command | /set exec.command.* | Opcje dla komend.
| color   | /set exec.color.*   | Kolory.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=exec_options]

[[fifo_pipe]]
== Kolejka FIFO

Możesz zdalnie kontrolować WeeChat, poprzez wysyłanie komend lub tekstu do
kolejki FIFO (jeśli opcja "fifo.file.enabled" jest włączona, domyślnie jest
włączona).

Strumień FIFO jest zlokalizowany w katalogu uruchomieniowym WeeChat i ma
domyślnie nazwę weechat_fifo_12345_ (gdzie _12345_ to numer procesu WeeChat).

Składnia dla komend/tekstu przekazywanego do kolejki FIFO wygląda następująco:

....
  wtyczka.bufor *tekst lub komenda
  *tekst lub komenda
....

Backslashe mogą być użyte w tym formacie zastępując `*` przez `\`, pozwalając
na przykład wysyłanie wiadomości wieloliniowych:

....
  plugin.buffer \text or command here
  \text or command here
....

Kilka przykładów:

* Zmiana nicka na serwerze IRC libera na "newnick":

[source,shell]
----
echo 'irc.server.libera */nick newnick' >/run/user/1000/weechat/weechat_fifo_12345
----

* Wysłanie wiadomości na kanał IRC #weechat:

[source,shell]
----
echo 'irc.libera.#weechat *hello!' >/run/user/1000/weechat/weechat_fifo_12345
----

* Wysyłanie wielolinowych wiadomości na kanał IRC #test, jeśli właściwość
  "draft/multiline" jest włączona na serwerze ergo:

[source,shell]
----
echo 'irc.ergo.#test \hello\n...on two lines!' >/run/user/1000/weechat/weechat_fifo_12345
----

* Wysłanie wiadomości do obecnego bufora:

[source,shell]
----
echo '*hello!' >/run/user/1000/weechat/weechat_fifo_12345
----

* Wysłanie dwóch komend do wyładowania/przeładowania skryptów Python (należy
  oddzielić je za pomocą "\n"):

[source,shell]
----
printf '%b' '*/python unload\n*/python autoload\n' >/run/user/1000/weechat/weechat_fifo_12345
----

[[fifo_commands]]
=== Komendy

include::{autogendir}/autogen_user_commands.pl.adoc[tag=fifo_commands]

[[fifo_options]]
=== Opcje

Sekcje w pliku _fifo.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda          | Opis
| plik    | /set fifo.file.* | Kontrola kolejki FIFO.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=fifo_options]

[[trigger]]
== Trigger

Trigger to scyzoryk szwajcarski dla WeeChat: może być podpięty do wielu rzeczy
(sygnał, modyrikator, wyśiwrtlanie, ...), zmieniać zawartość danych, oraz wykonać
jedną lub więcej komend. Można użyć warunków w celu ograniczenia działania
w określonych przypadkach.

Używanie triggerów wymaga znajomości jak działają sygnały, modyfikatory, ... .
Warto rozważyć przeczytanie
link:weechat_plugin_api.en.html#hooks[Opisu Api wtyczek WeeChat / Hooks ^↗^^] (Angielski).

[[trigger_default]]
=== Domyślne triggery

WeeChat tworzy domyślnie 5 triggerów, które mogą zostać wyłączone, zaktualizowane
lub usunięte:

* trigger _beep_ dla powiadomień
* cztery pozostałe triggery służą ukrywaniu haseł na ekranie

Lista domyśłnych triggerów:

[width="100%",cols="5m,3,22",options="header"]
|===
| Nazwa | Hook | Opis

| beep | print
| Powiadamiaj o podświetleniach/prywatnej wiadomości.

| cmd_pass | modifier
| Ukrywa hasło w komendach:
  `pass:[/msg nickserv id\|identify\|set password\|ghost\|release\|regain\|recover]`,
  `pass:[/oper]`,
  `pass:[/quote pass]`,
  `pass:[/secure passphrase\|decrypt\|set]`.

| cmd_pass_register | modifier
| Ukrywa hasło w komendzie `pass:[/msg nickserv register]`.

| msg_auth | modifier
| Ukrywa hasło w wiadomości IRC auth (wiadomość otrzymana od serwera po
  wykonaniu komendy przez użytkownika).

| server_pass | modifier
| Ukrywa hasło serwera w komendach `/server` i `/connect`.
|===

[[trigger_anatomy]]
=== Anatomia triggera

Trigger posiada następujące opcje (nazwy to `trigger.trigger.<nazwa>.<opcja>`):

[width="100%",cols="2m,3,10",options="header"]
|===
| Opcja | Wartość | Opis

| enabled | `on`, `off`
| Kiedy wartość ustawiona jest na `off`, trigger jest wyłączony i akcje nie będą
  więcej wykonywane.

| hook | `+signal+`, `+hsignal+`, `+modifier+`, `+line+`, `+print+`, `+command+`,
  `+command_run+`, `+timer+`, `+config+`, `+focus+`, `+info+`, `+info_hashtable+`
| Zdarzenia używane przez trigger. Więcej informacji można znaleźć w
  link:weechat_plugin_api.en.html#hooks[WeeChat Plugin API Reference / Hooks ^↗^^] (Angielski).

| arguments | string
| Argumenty dla zdarzenia, zależą od jego typu.

| conditions | string
| Waruki do wykonania triggera; są one przetwarzane (zobacz komendę
  <<command_weechat_eval,/eval>>).

| regex | string
| Jedno lub więcej rozszerzonych wyrażeń regularnych POSIX, do zamiany danych
  otrzymanych w odpowiedzi od podpiętego zdarzenia (i trochę rzeczy dodanych
  przez wtyczkę trigger) zobacz <<trigger_regex,wyrażenia regularne>>.

| command | string
| Komenda do wykonania (wiele komend należy oddzielić średnikiem); jest to
  przetwarzane (zobacz komendę <<command_weechat_eval,/eval>>).

| return_code | `+ok+`, `+ok_eat+`, `+error+`
| Kod wiadomości zwrotnej (domyślnie jest to `ok`, które powinno być używane dla
  większości triggerów, pozostałe wartości są sporadycznie używane).

| post_action | `none`, `disable`, `delete`
| Akcja wykonywana na triggerze po jego wykonaniu (domyślna wartość `none` powinna
  być użyta dla wszystkich triggerów, pozostałe wartości są sporadycznie używane).
|===

Na przykład, domyślny trigger _beep_ ma następujące opcje:

----
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]]
=== Wykonywanie

Kiedy wywoływany jest trigger, następujące akcje są wykonywane, dokładnie w takiej
kolejności, jeśli triggery są globalnie włączone i jeśli sam trigger jest włączony:

. sprawdzenie warunków triggera: jeśli nie jest spełniony następuje wyjście
. zastępowanie tekstu w triggerze za pomocą wyrażenia
. wykonanie komend(-y)
. wyjście z kodem poweoru (nie dotyczy hooków _modifier_, _line_, _focus_,
  _info_ i _info_hashtable_)
. wykonanie akcji kończącej (jeśli inna niż `none`).

[[trigger_hook_arguments]]
=== Argumenty uchwytów

Argumenty zależą od rodzaju uchwytu. Są oddzielane średnikami.

[width="100%",cols="2,6,7,2",options="header"]
|===
| Uchwyt | Argumenty | Przykłady | Dokumentacja (API)

| signal
| 1. nazwa sygnału (dozwolony priorytet) (wymagane) +
  2. nazwa sygnału (dozwolony priorytet) +
  3. ...
| `+*,irc_in_privmsg+` +
  `+*,irc_in_privmsg;*,irc_in_notice+` +
  `+signal_sigwinch+`
| link:weechat_plugin_api.en.html#_hook_signal[hook_signal ^↗^^] +
  (Angielski)

| hsignal
| 1. nazwa sygnału (dozwolony priorytet) (wymagane) +
  2. nazwa sygnału (dozwolony priorytet) +
  3. ...
| `+nicklist_nick_added+`
| link:weechat_plugin_api.en.html#_hook_hsignal[hook_hsignal ^↗^^] +
  (Angielski)

| modifier
| 1. nazwa modyfikatora (dozwolony priorytet) (wymagane) +
  2. nazwa modyfikatora (dozwolony priorytet) +
  3. ...
| `+weechat_print+` +
  `+5000\|input_text_display;5000\|history_add+`
| link:weechat_plugin_api.en.html#_hook_modifier[hook_modifier ^↗^^] +
  (Angielski)

| line
| 1. typ bufora +
  2. nazwa bufora +
  3. tagi
| `+formatted+` +
  `+free+` +
  `+*;irc.libera.*+` +
  `+*;irc.libera.#weechat+` +
  `+formatted;irc.libera.#weechat;irc_notice+`
| link:weechat_plugin_api.en.html#_hook_line[hook_line ^↗^^] +
  (Angielski)

| print
| 1. nazwa buforu +
  2. tagi +
  3. wiadomość +
  4. odrzucić kolory (0/1)
| `+irc.libera.*+` +
  `+irc.libera.#weechat+` +
  `+irc.libera.#weechat;irc_notice+` +
  `+*;;;1+`
| link:weechat_plugin_api.en.html#_hook_print[hook_print ^↗^^] +
  (Angielski)

| command
| 1. nazwa komendy dozwolony priorytet) (wymagane) +
  2. opis (przetwarzane, zobacz komendę <<command_weechat_eval,/eval>>) +
  3. argumenty (przetwarzane, zobacz komendę <<command_weechat_eval,/eval>>) +
  4. opis argumentów (przetwarzane, zobacz komendę <<command_weechat_eval,/eval>>) +
  5. dopełnienie (przetwarzane, zobacz komendę <<command_weechat_eval,/eval>>)
| `+test+` +
  `+5000\|test+` +
  `+test;test command;arg1 arg2;arg1: description 1${\n}arg2: description 2+`
| link:weechat_plugin_api.en.html#_hook_command[hook_command ^↗^^] +
  (Angielski)

| command_run
| 1. komenda (dozwolony priorytet) (wymagane) +
  2. komenda (dozwolony priorytet) +
  3. ...
| `+/cmd argumenty+`
| link:weechat_plugin_api.en.html#_hook_command_run[hook_command_run ^↗^^] +
  (Angielski)

| timer
| 1. interwał w milisekundach (wymagane) +
  2. wyrównanie na sekundę (domyślnie: 0) +
  3. maksymalna ilość wywołań (domyślnie: 0, co oznacza "brak końca")
| `+3600000+` +
  `+60000;0;5+`
| link:weechat_plugin_api.en.html#_hook_timer[hook_timer ^↗^^] +
  (Angielski)

| config
| 1. nazwa opcji (dozwolony priorytet) (wymagane) +
  2. nazwa opcji (dozwolony priorytet) +
  3. ...
| `+weechat.look.*+`
| link:weechat_plugin_api.en.html#_hook_config[hook_config ^↗^^] +
  (Angielski)

| focus
| 1. nazwa obszaru (dozwolony priorytet) (wymagane) +
  2. nazwa obszaru (dozwolony priorytet) +
  3. ...
| `+buffer_nicklist+`
| link:weechat_plugin_api.en.html#_hook_focus[hook_focus ^↗^^] +
  (Angielski)

| info
| 1. info name (dozwolony priorytet) (wymagane) +
  2. info name (dozwolony priorytet) +
  3. ...
| `+my_info+`
| link:weechat_plugin_api.en.html#_hook_info[hook_info ^↗^^] +
  (Angielski)

| info_hashtable
| 1. info name (dozwolony priorytet) (wymagane) +
  2. info name (dozwolony priorytet) +
  3. ...
| `+my_info+`
| link:weechat_plugin_api.en.html#_hook_info_hashtable[hook_info_hashtable ^↗^^] +
  (Angielski)
|===

[[trigger_conditions]]
=== Warunki

Warunki są używane do kontynuowania przetwarzania w triggerze, lub zatrzymania
wszystkiego.

Są one przetwarzane i dane dostępne w callbackach mogą zostać użyte
(zobacz <<trigger_callback_data,dane w callbackach>> oraz komendę
<<command_weechat_eval,/eval>>).

Przykład: domyślny trigger _beep_ używa tego warunku do wywołania dźwięku tylko
w przypadku podświetlenia lub otrzymania prywatnej wiadomości:

----
${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})
----

[[trigger_regex]]
=== Wyrażenia regularne

Wyrażenia regularne są używane do zmiany zmiennych w tabelach hashy callbacków.

Format to jeden z poniższych:

----
/string1/string2
/string1/string2/var
s/string1/string2
s/string1/string2/var
y/string1/string2
y/string1/string2/var
----

Pola:

* `s` lub `y`: litera z komendą; jeśli nie podana domyślnie zostanie użyte `s`
  następny znak jest użyty jako ogranicznik:
** `s`: zamiana z użyciem wyrażenia regularnego: pierwszy ciąg to wyrażenie
   regularne, drugi to ciąg na który ma zostać zamienione każde dopasowanie
** `y`: zamiana znaków: pierwszy ciąg to zbiór znaków które zostaną zastąpione
   przez znaki z drugiego ciągu; po przetworzeniu każdy z ciągów musi mieć
   dokładnie taką samą ilość znaków UTF-8
* `/`: separator wyrażenia; znak "/" może zostać zastąpiony dowolnym innym znakiem
  (jeden lub więcej identycznych znaków)
* `string1`: pierwszy ciąg (użycie zależne od polecenia)
* `string2`: drugi ciąg (użycie zależne od polecenia)
* `var`: zmienna w tabeli hashy do zaktualizowania

Wyrażenia regularne można oddzielić spacją, na przykład:

----
s/regex1/replace1/var1 y/abcdef/ABDDEF/var2
----

[[trigger_regex_replace]]
==== Zamiana wyrażeniem regularnym

Dla komendy `s`, format jest jestępujący: `s/regex/replace` lub `s/regex/replace/var`
(gdzie _var_ to zmianna z tablicy hashy).

Jako że `s` to domyślna komenda, można to pominąć, dlatego `/regex/replace`
jest także poprawne (jednak pierwszy znak, który będzie separatorem, nie może być
literą).

Dopasowanie grup może być także użyte:

* `+${re:0}+` do `+${re:99}+`: `+${re:0}+` to pełne dopasowanie, `+${re:1}+` do
  `+${re:99}+` to złapane grupy
* `pass:[${re:+}]`: ostatnie dopasowanie (z najwyższym numerem)
* `+${re:#}+`: index of last group captured
* `+${re:repl_index}+`: index of replacement being done (starts to 1)
* `+${hide:c,${re:N}}+`: dopasuje "N" ze wszystkimi znakami zastąpionymi przez "c"
  (przykład: `+${hide:*,${re:2}}+` to grupa #2 ze wszystkimi znakami zastąpionymi przez
  `+*+`).

Przykład: użyj pogrubienia dla słów pomiędzy `+*+`:

----
s/\*([^ ]+)\*/*${color:bold}${re:1}${color:-bold}*/
----

Przykład: domyślny trigger _server_pass_ używa tego wyrażenia regularnego do
ukrycia haseł w komendach `/server` i `/connect` (znaki w hasłach są zastępowane
przez `+*+`):

----
s==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}
----

[NOTE]
W tym przykładzie jako separator jest użyte "==" ponieważ znak "/" jest użyty
w wyrażeniu regularnym.

[[trigger_regex_translate_chars]]
==== Tłumaczenie znaków

Dla komendy `y`, format to: `y/chars1/chars2` lub `y/chars1/chars2/var`
(gdzie _var_ to zmienna w tabeli hashy).

Przykłady: zamienia "a", "b" i "c" na wielkie litery:

----
y/abc/ABC/
----

Przykład: obraca strzałki zgodnie z ruchem wskazówek zegara:

----
y/←↑→↓/↑→↓←/
----

Przykład: zamienia wielkie litery na małe:

----
y/${chars:upper}/${chars:lower}/
----

Przykład: przesuwa litery o jedną pozycję zachowując wielkość: 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]]
==== Zmienna

Jeśli _var_ nie istnieje w tabeli hashy zostanie sutomatycznie utworzona bez
wartości. Pozwala to na tworzenie zmiennych tymczasowych.

Jeśli _var_ nie została podana, zostanie użyta domyślna zmienna w zależności
od typu hooka:

[width="100%",cols="2,3,7",options="header"]
|===
| Uchwyt         | Domyślna zmienna   | Dozwolona aktualizacja ^(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 |                    | wszytkie zmienne otrzymane w tablicy hashy
|===

[NOTE]
^(1)^ Wszystkie zmienne mogą zostać zaktualizowane, jednak tylko te zmienne
mają wpływ na zmienne zwrócone i użyte przez WeeChat.

[[trigger_command]]
=== Komenda

Komenda jest wykonywana po zastąpieniu tekstu przez wyrażenie regularne.
Wiele komend może być oddzielonych średnikiem.

Komendy są przetwarzane (zobacz komendę <<command_weechat_eval,/eval>>) i tekst
zastępowany wyrażeniem może zostać użyty w komendzie.

Przykład: domyślny trigger _beep_ używa tej komendy do wydania dźwięku (BEL):

----
/print -beep
----

[[trigger_callback_data]]
=== Dane w callbackach

Dane otrzymane w callbackach są przechowywane w tablicach hashy (wskaźniki i
ciągi) i mogą zostać użyte w następujących opcjach:

* _warunki_
* _wyrażenia_
* _komendy_

Zawartość tablicy hashy zależy od typu uchwytu.

Przystępną drogą do zobaczenia danych w triggerze jest otworzenie buforu
monitorującego, za pomocą komendy:

----
/trigger monitor
----

Wszystkie callbacki ustawiają następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna         | Typ  | Opis
| tg_trigger_name | ciąg | Nazwa triggera.
| tg_hook_type    | ciąg | Typ hooka: "signal", "command", etc.
|===

[[trigger_data_signal]]
==== Sygnał

Callback "signal" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna        | Typ  | Opis
| tg_signal      | ciąg | Nazwa sygnału.
| tg_signal_data | ciąg | Dane wysłane z sygnałem.
|===

Jeśli sygnał zawiera wiadomość IRC, wiadomość jest parsowana i następujące dane
są dodawane do tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna              | Typ     | Opis
| irc_server           | wskaźnik | Wskaźnik na serwer IRC (można użyć zmiennych hdata typu "irc_server" jak `+${irc_server.name}+`).
| irc_channel          | wskaźnik | Wskaźnik na kanał IRC (można użyć zmiennych hdata typu "irc_channel" jak `+${irc_channel.name}+`).
| server               | ciąg    | Nazwa serwera (przykład: "libera").
| tags                 | ciąg    | Tagi w wiadomości (rzadko używane).
| message_without_tags | ciąg    | Wiadomość bez tagów.
| nick                 | ciąg    | Nick. ^(1)^
| host                 | ciąg    | Nazwa hosta.
| command              | ciąg    | Komendy IRC (na przykład: "PRIVMSG", "NOTICE", ...).
| channel              | ciąg    | Kanał IRC.
| arguments            | ciąg    | Argumenty komendy (razem z wartością _channel_).
| text                 | ciąg    | Tekst (na przykład wiadomość użytkownika).
| pos_command          | ciąg    | Indeks _command_ w wiadomości ("-1" jeśli _command_ nie zostanie znalezione).
| pos_arguments        | ciąg    | Indeks _arguments_ w wiadomości ("-1" jeśli _arguments_ nie zostaną znalezione).
| pos_channel          | ciąg    | Indeks _channel_ w wiadomości ("-1" jeśli _channel_ nie został znaleziony).
| pos_text             | ciąg    | Indeks _text_ w wiadomości ("-1" jeśli _text_ nie został znaleziony).
|===

[NOTE]
^(1)^ Nick to nadawca wiadomości. +
Twój nick na serwerze to `${irc_server.nick}`.

Kiedy dane są wskaźnikiem, zmienna `+tg_signal_data+` może zostać użyta do
odczytania pola w hdata (w tym przypadku jest to wskaźnik na bufor):

----
${buffer[${tg_signal_data}].full_name}
----

[[trigger_data_hsignal]]
==== Hsignal

Callback "hsignal" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna   | Typ  | Opis
| tg_signal | ciąg | Nazwa sygnału.
|===

Tablica zawiera wszystkie klucze/wartości z otrzymanej tablicy hashy (typ:
ciąg/ciąg).

[[trigger_data_modifier]]
==== Modyfikator

Callback "modifier" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna           | Typ  | Opis
| tg_modifier       | ciąg | Nazwa modyfikatora.
| tg_modifier_data  | ciąg | Dane wysłane z modyfikatorem.
| tg_string         | ciąg | Ciąg mogący zostać zmodyfikowany.
| tg_string_nocolor | ciąg | Ciąg bez kodów kolorów.
|===

Dla modyfikatora _weechat_print_, są dodawane zmienne używające tagi wiadomości
zobacz <<trigger_data_print,hook print>> poniżej), oraz następujące zmienne:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna            | Typ      | Opis
| buffer             | wskaźnik | Bufor, w którym wiadomość jest wyświetlana.
| tg_plugin          | ciąg     | Wtyczka bufora z wyświetlana wiadomością.
| tg_buffer          | ciąg     | Pełna nazwa bufora z wyświetlana wiadomością.
| tg_prefix          | ciąg     | Prefiks wyświetlanej wiadomości.
| tg_prefix_nocolor  | ciąg     | Prefiks bez kodów kolorów.
| tg_message         | ciąg     | Wyświetlana wiadomość.
| tg_message_nocolor | ciąg     | Wiadomość bez kodów kolorów.
|===

Jeśli modyfikator zawiera wiadomość IRC, wiadomość jest parsowana i dodawane są
dodatkowe dane do tablicy hashy (zobacz <<trigger_data_signal,hook signal>>).

[[trigger_data_line]]
==== Line

Callback "line" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna            | Typ      | Opis
| buffer             | wskaźnik | Bufor.
| buffer_name        | ciąg     | Nazwa bufora.
| buffer_type        | ciąg     | Typ bufora ("formatted" lub "free").
| y                  | ciąg     | Numer linii bufora z wolną zawartością (≥ 0), -1 dla bufora ze sformatowaną zawartością.
| date               | ciąg     | Linia z datą (timestamp).
| date_usec          | ciąg     | Mikrosekundy w linii z datą.
| date_printed       | ciąg     | Data, kiedy linia została wyświetlona (timestamp).
| date_usec_printed  | ciąg     | Mikrosekundy w dacie wyświetlenia linii.
| str_time           | ciąg     | Date do wyświetlenia. Może zawierać kody kolorów.
| tags               | ciąg     | Tagi wiadomości (z przecinkiem dodanym na początku/końcu ciągu).
| displayed          | ciąg     | "1" jeśli wyświetlono, "0" jeśli nie wyświetlono.
| notify_level       | ciąg     | "-1" = brak powiadomienia, "0" = poziom niski, "1" = wiadomość, "2" = wiadomość prywatna, "3" = podświetlenie
| highlight          | ciąg     | "1" jeśli podświetlenie, inaczej "0".
| prefix             | ciąg     | Prefiks.
| tg_prefix_nocolor  | ciag     | Prefiks bez kodów kolorów.
| message            | ciąg     | Wiadomość.
| tg_message_nocolor | ciag     | Wiadomość bez kodów kolorów.
|===

Zmienne ustawiane za pomocą tagów w wiadomościach:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna            | Typ  | Opis
| tg_tags_count      | ciąg | Liczba tagów w wiadomości.
| tg_tag_nick        | ciąg | Nick (z tagu "nick_xxx").
| tg_tag_prefix_nick | ciąg | Kolor nicka w prefiksie (z tagu "prefix_nick_ccc").
| tg_tag_host        | ciąg | Nazwa użytkownika i host, format: username@host (z tagu "host_xxx").
| tg_tag_notify      | ciąg | Poziom powiadomień (_none_, _message_, _private_, _highlight_).
| tg_tag_irc_xxx     | ciąg | Tag wiadomości IRC (klucz "xxx"). ^(1)^
| tg_notify          | ciąg | Poziom powiadomień, jeśli różny od _none_.
| tg_msg_pv          | ciąg | "1" dla prywatnej wiadomości, inaczej "0".
|===

[NOTE]
^(1)^ Przecinki są zastępowane przez średniki w tagach IRC (kluczach i wartościach)

[[trigger_data_print]]
==== Print

Callback "print" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna            | Typ      | Opis
| buffer             | wskaźnik | Bufor.
| tg_date            | ciąg     | Data/czas wiadomości (format: `%FT%T.%f`, zobacz link:weechat_plugin_api.en.html#_util_strftimeval[Opis API wtyczek WeeChat / util_strftimeval ^↗^^]).
| tg_displayed       | ciąg     | "1" jeśli wyświetlone, "0" jeśli linia odfiltrowana.
| tg_highlight       | ciąg     | "1" jeśli higlight, inaczej "0".
| tg_prefix          | ciąg     | Prefiks.
| tg_prefix_nocolor  | ciąg     | Prefiks bez kodów kolorów.
| tg_message         | ciąg     | Wiadomość.
| tg_message_nocolor | ciąg     | Wiadomość bez kodów kolorów.
|===

Zmienne ustawiane za pomocą tagów w wiadomościach:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna            | Typ  | Opis
| tg_tags            | ciąg | Tagi wiadomości (z przecinkiem dodanym na początku/końcu ciągu).
| tg_tags_count      | ciąg | Liczba tagów w wiadomości.
| tg_tag_nick        | ciąg | Nick (z tagu "nick_xxx").
| tg_tag_prefix_nick | ciąg | Kolor nicka w prefiksie (z tagu "prefix_nick_ccc").
| tg_tag_host        | ciąg | Nazwa użytkownika i host, format: username@host (z tagu "host_xxx").
| tg_tag_notify      | ciąg | Poziom powiadomień (_none_, _message_, _private_, _highlight_).
| tg_tag_irc_xxx     | ciąg | Tag wiadomości IRC (klucz "xxx"). ^(1)^
| tg_notify          | ciąg | Poziom powiadomień, jeśli różny od _none_.
| tg_msg_pv          | ciąg | "1" dla prywatnej wiadomości, inaczej "0".
|===

[NOTE]
^(1)^ Przecinki są zastępowane przez średniki w tagach IRC (kluczach i wartościach)

[[trigger_data_command]]
==== Command

Callback "command" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna        | Typ      | Opis
| buffer         | wskaźnik | Bufor.
| tg_argc        | ciąg     | Ilość argumentów (komenda liczy się za jeden).
| tg_argvN       | ciąg     | Argument #N (`+tg_argv0+` to komenda, pozostałe to jej argumenty).
| tg_argv_eolN   | ciąg     | Od argumentu #N do końca argumentów (`+tg_argv_eol0+` zawiera komendę).
| tg_shell_argc  | ciąg     | Ilość argumentów podzielonych tak jak parametry konsolowe (sama komenda liczy się jako jeden).
| tg_shell_argvN | ciąg     | Argument #N podzielone tak jak parametry konsolowe (`+tg_shell_argv0+` to nazwa komendy, pozostałe to argumenty).
|===

[[trigger_data_command_run]]
==== Command_run

Callback "command_run" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna    | Typ      | Opis
| buffer     | wskaźnik | Bufor.
| tg_command | ciąg     | Wykonana komenda.
|===

[[trigger_data_timer]]
==== Timer

Callback "timer" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna            | Typ  | Opis
| tg_remaining_calls | ciąg | Liczba pozostałych wywołań.
| tg_date            | ciąg | Obecna data/czas `%FT%T.%f`, zobacz link:weechat_plugin_api.en.html#_util_strftimeval[Opis API wtyczek WeeChat / util_strftimeval ^↗^^]).
|===

[[trigger_data_config]]
==== Config

Callback "config" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna   | Typ  | Opis
| tg_option | ciąg | Opcja.
| tg_value  | ciąg | Wartość.
|===

[[trigger_data_focus]]
==== Focus

Callback "focus" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna  | Typ      | Opis
| window   | wskaźnik | Okno.
| buffer   | wskaźnik | Bufor.
|===

Tablica zawiera wszystkie klucze/wartości z otrzymanej tablicy hashy (typ:
ciąg/ciąg).

[[trigger_data_info]]
==== Info

Callback "info" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna      | Typ    | Opis
| tg_info_name | string | Name of info.
| tg_arguments | string | Arguments.
| tg_info      | string | Empty string (the info to return).
|===

[[trigger_data_info_hashtable]]
==== Info_hashtable

Callback "info_hashtable" ustawia następujące zmienne w tablicy hashy:

[width="100%",cols="3m,2,14",options="header"]
|===
| Zmienna      | Typ    | Opis
| tg_info_name | string | Name of info.
|===

Tablica zawiera wszystkie klucze/wartości z otrzymanej tablicy hashy (typ:
ciąg/ciąg).

[[trigger_examples]]
=== Przykłady

[[trigger_example_url_color]]
==== Kolory dla URLi

Wyświetlanie URLi na zielono:

----
/trigger add url_color modifier weechat_print "${tg_notify}" "==[a-zA-Z0-9_]+://[^ ]+==${color:green}${re:0}${color:reset}=="
----

[NOTE]
Proste wyrażenie użyte do wykrycia URLa może nie łapać wszstkich URLi, ale jest
szybsze od złożonego wyrażenia.

[[trigger_example_auto_pong]]
==== Automatyczna odpowiedz pong na zapytania ping

Kiedy ktoś wyśle "ping" w prywatnym buforze, ten trigger odpowie automatycznie
`pong`:

----
/trigger add pong print "" "${type} == private && ${tg_message} == ping" "" "pong"
----

[[trigger_example_responsive_layout]]
==== Responsywny układ

Następujące triggery mogą zostać użyte do zmiany rzeczy wyświetlanych, kiedy
nastąpi zmiana rozmiaru terminala:

----
/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"
----

Triggery przechwytują sygnał "signal_sigwinch", który jest wysyłany przez WeeChat,
kiedy sygnał SIGWINCH zostanie otrzymany (kiedy rozmiar terminala się zmieni).

Warunek z `+${info:term_width}+` sprawdza szerokość terminala (możesz również użyć
`+${info:term_height}+` w razie potrzeby).

W przykładzie, kiedy terminal stanie się mały, ukrywana jest lista nicków. Jest
ona przywracana, kiedy szerokość jest większa lub równa 100 znakom.

[[trigger_example_config_save]]
==== Automatyczne zapisywanie konfiguracji

Możesz automatycznie zapisywać pliki konfiguracyjne (`+*.conf+`), na przykład co
godzinę:

----
/trigger add cfgsave timer 3600000;0;0 "" "" "/mute /save"
----

Argumenty dla uchwytu timera to:

* _3600000_: 3600 * 1000 milisekund, callback wywoływany jest co godzinę
* _0_: wyrównanie sekund (nie ustawione)
* _0_: maksymalna ilość wywołań (0 = brak ograniczenia ilości wywołań)

Komenda `/mute /save` zapisze po cichu pliki konfiguracyjne (nic się nie
wyświetli w buforze rdzenia).

[[trigger_commands]]
=== Komendy

include::{autogendir}/autogen_user_commands.pl.adoc[tag=trigger_commands]

[[trigger_options]]
=== Opcje

Sekcje w pliku _trigger.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda                                  | Opis
| look    | /set trigger.look.*                      | Wygląd.
| color   | /set trigger.color.*                     | Kolory.
| trigger | <<command_trigger_trigger,/trigger add>> +
            <<command_trigger_trigger,/trigger set>> +
            /set trigger.trigger.*                   | Opcje triggerów.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=trigger_options]

[[extending_weechat]]
== Rozszerzanie WeeChat

WeeChat zbudowany jest z modułów i może być rozszerzany przez wtyczki
i skrypty.

Ważne jest, aby odróżniać _wtyczkę_ od _skryptu_: _wtyczka_ jest to plik binarny
skompilowany i ładowany za pomocą polecenia `/plugin`, natomiast _skrypt_ to
plik tekstowy, ładowany za pomocą wtyczki jak na przykład _python_ za pomocą
polecenia `/python`.

[[plugins]]
=== Wtyczki

Wtyczka jest biblioteka dynamiczną, napisaną w C i skompilowaną, która jest
ładowana przez WeeChat.
W systemach GNU/Linux plik ma rozszerzenie ".so", w Windowsie ".dll".

Znalezione wtyczki są automatycznie ładowane podczas uruchamiania WeeChat,
możliwe jest również ładowanie lub wyładowywanie wtyczek podczas pracy WeeChat.

Możesz użyć komendy `/plugin` żeby załadować/wyładować wtyczkę, lub wyświetlić
wszystkie załadowane wtyczki.

Podcza wyładowywania wtyczki WeeChat usówa:

* bufory
* opcje konfiguracyjne (options są zapisywane w plikach)
* wszystkie hooki: komendy, modyfikatory, procesy, etc.
* infos i infolists
* hdata
* elementy pasków.

Przykłady ładowania, wyładowywania i wyświetlania załadowanych wtyczek:

----
/plugin load irc
/plugin unload irc
/plugin list
----

Domyślne wtyczki:

[width="100%",cols="1,5",options="header"]
|===
| Wtyczka    | Opis
| alias      | Definiuje aliasy dla komend.
| buflist    | Element paska z listą buforów.
| charset    | Ustawianie kodowania dla buforów.
| exec       | Wykonuje zewnętrzną komendę z poziomu WeeChat.
| fifo       | Kolejka FIFO używana do zdalnego wysyłania poleceń dla WeeChat.
| fset       | Szybkie ustawianie opcji WeeChat i wtyczek.
| irc        | Protokół IRC.
| logger     | Logowanie zawartości buforów do plików.
| relay      | Przekazuje dane przez sieć.
| script     | Zarządzanie skryptami.
| python     | Wsparcie dla skryptów napisanych w Pythonie.
| perl       | Wsparcie dla skryptów napisanych w Perlu.
| ruby       | Wsparcie dla skryptów napisanych w Ruby.
| lua        | Wsparcie dla skryptów napisanych w Lua.
| tcl        | Wsparcie dla skryptów napisanych w Tcl.
| guile      | Wsparcie dla skryptów napisanych w Guile (scheme).
| javascript | Wsparcie dla skryptów napisanych w JavaScript.
| php        | Wsparcie dla skryptów napisanych w PHP.
| spell      | Sprawdzanie pisowni w linii poleceń.
| trigger    | Zamiana tekstu i wykonywanie komend dla zdarzeń wywołanych przez WeeChat/wtyczki.
| typing     | Pokazuje użytkowników obecnie piszących wiadomości.
| xfer       | Przesyłanie plików i bezpośredni chat.
|===

Więcej informacji o wtyczkach i tworzeniu skryptów (przez API), można znaleźć w
link:weechat_plugin_api.en.html[Opisie API wtyczek ^↗^^] (Angielski) i
link:weechat_scripting.pl.html[Poradniku pisania skryptów ^↗^^].

[[scripts]]
=== Skryptowe

WeeChat posiada 8 wtyczek skryptowych: Python, Perl, Ruby, Lua, Tcl, Guile
(scheme), JavaScript i PHP.
Wtyczki te potrafią ładować, wykonywać i wyładowywać skrypty w tych językach.

Więcej informacji o tym jak pisać skrypty lub o API WeeChat dla skryptów można
znaleźć w link:weechat_scripting.pl.html[Poradniku pisania skryptów ^↗^^].

[[script_manager]]
==== Manager skryptów

Manager skryptów (komenda <<command_script_script,/script>>) jest używany
do ładowania/wyładowania skryptów w dowolnym języku, oraz do
instalowania/usuwania skryptów z repozytorium skryptów WeeChat, które można
znależć na https://weechat.org/scripts/[tej stronie ^↗^^].

W trosce o prywatność pobieranie skryptów jest domyślnie wyłąćzone. +
Żeby je włączyć, wpisz poniższe polecenie:

----
/script enable
----

Następnie możesz pobrać listę skryptów i wyświetlić je w nowym buforze
za pomocą polecenia <<command_script_script,/script>>:

[subs="quotes,attributes"]
:x: *
....
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│1.weechat│322/322 skrypty (filtr: {x}) | Sort: i,p,n | Alt+klawisz/wejście: i=instaluj r=usuń l=załaduj L=prze>>│
│2.scripts│{x}      autosort.py                     3.10    2023-12-31 | Automatycznie grupowanie buforów wg serw│
│         │{x}      highmon.pl                      2.7     2020-06-21 | Dodaje bufor monitorujący higlighty.    │
│         │{x}ia r  grep.py                   0.8.6 0.8.6   2022-11-11 | Przeszukuje bufor lub plik z logami za p│
│         │{x}      colorize_nicks.py               32      2023-10-30 | Używaj kolorów nicków weechat w oknie ro│
│         │##{x}ia r  go.py                     3.0.1 3.0.1   2024-05-30 | Szybkie przemieszczanie się pomiędzy buf##│
│         │       aesthetic.py                    1.0.6   2020-10-25 | Spraw, że wiadomości będą bardziej E S T│
│         │       aformat.py                      0.2     2018-06-21 | Alternatywne formatowanie tekstu, przyda│
│         │       alternatetz.py                  0.4     2022-01-25 | Dodaje alternatywny element strefy czaso│
│         │       amarok2.pl                      0.7     2012-05-08 | Kontrola i wyświetlanie aktualnie odtwar│
│         │       amqp_notify.rb                  0.1     2011-01-12 | Wysyła prywatne wiadomości i higlighty d│
│         │       announce_url_title.py           19      2021-06-05 | Prezentuje tytuł URL'a użytkownikowi lub│
│         │       anotify.py                      1.0.2   2020-05-16 | Powiadomienia na ekranie dla prywatnych │
│         │       anti_password.py                1.2.1   2021-03-13 | Zapobiega przypadkowemu wysłaniu hasła d│
│         │       apply_corrections.py            1.3     2018-06-21 | Wyświetla poprawiony tekst, kiedy użytko│
│         │       arespond.py                     0.1.2   2022-01-25 | Prosty autoresponder.                   │
│         │       atcomplete.pl                   0.001   2016-10-29 | Dopełnianie tabem dla nicków poprzedzony│
│         │       audacious.pl                    0.3     2009-05-03 | Wyświetla aktualnie odtwarzany utwór prz│
│         │       auth.rb                         0.3     2014-05-30 | Automatyczne uwierzytelnianie w NickServ│
│         │       auto_away.py                    0.4     2018-11-11 | Prosty skrypt auto-away.                │
│         │       autoauth.py                     1.3     2021-11-07 | Pozwala na automatyczną identyfikację po│
│         │       autobump.py                     0.1.0   2019-06-14 | Ustawia bufory według aktywności.       │
│         │       autoconf.py                     0.4     2021-05-11 | Automatyczne zapisywanie/ładowanie zapis│
│         │       autoconnect.py                  0.3.3   2019-10-06 | Otwiera kanały i serwery otwarte przed o│
│         │       autojoin_on_invite.py           0.9     2022-10-25 | Automatycznie wchodzi na kanał po otrzym│
│         │       automarkbuffer.py               1.0     2015-03-31 | Oznacza bufor jako przeczytany jeśli nie│
│         │       automerge.py                    0.2     2018-03-03 | Automatyczna łączenie nowych buforów zgo│
│         │[12:55] [2] [script] 2:scripts                                                                      │
│         │█                                                                                                   │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
....

[[script_commands]]
===== Komendy wtyczki script

include::{autogendir}/autogen_user_commands.pl.adoc[tag=script_commands]

[[script_options]]
===== Opcje wtyczki script

Sekcje w pliku _script.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda               | Opis
| look    | /set script.look.*    | Wygląd.
| color   | /set script.color.*   | Kolory.
| scripts | /set script.scripts.* | Opcja dla pobierania skryptów.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=script_options]

[[scripting_plugins]]
==== Wtyczki skryptowe

[[python_commands]]
===== Komendy wtyczki python

include::{autogendir}/autogen_user_commands.pl.adoc[tag=python_commands]

[[perl_commands]]
===== Komendy wtyczki perl

include::{autogendir}/autogen_user_commands.pl.adoc[tag=perl_commands]

[[ruby_commands]]
===== Komendy wtyczki ruby

include::{autogendir}/autogen_user_commands.pl.adoc[tag=ruby_commands]

[[lua_commands]]
===== Komendy wtyczki lua

include::{autogendir}/autogen_user_commands.pl.adoc[tag=lua_commands]

[[tcl_commands]]
===== Komendy wtyczki tcl

include::{autogendir}/autogen_user_commands.pl.adoc[tag=tcl_commands]

[[guile_commands]]
===== Komendy wtyczki guile

include::{autogendir}/autogen_user_commands.pl.adoc[tag=guile_commands]

[[php_commands]]
===== Komendy wtyczki php

include::{autogendir}/autogen_user_commands.pl.adoc[tag=php_commands]

[[python_options]]
===== Opcje dla języka Python

Sekcje w pliku _python.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda            | Opis
| look    | /set python.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=python_options]

[[perl_options]]
===== Opcje dla języka Perl

Sekcje w pliku _perl.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda          | Opis
| look    | /set perl.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=perl_options]

[[ruby_options]]
===== Opcje dla języka Ruby

Sekcje w pliku _ruby.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda          | Opis
| look    | /set ruby.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=ruby_options]

[[lua_options]]
===== Opcje dla języka Lua

Sekcje w pliku _lua.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda         | Opis
| look    | /set lua.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=lua_options]

[[tcl_options]]
===== Opcje dla języka Tcl

Sekcje w pliku _tcl.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda         | Opis
| look    | /set tcl.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=tcl_options]

[[guile_options]]
===== Opcje dla języka Guile

Sekcje w pliku _guile.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda           | Opis
| look    | /set guile.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=guile_options]

[[php_options]]
===== Opcje dla języka PHP

Sekcje w pliku _php.conf_:

[width="100%",cols="3m,6m,16",options="header"]
|===
| Sekcja  | Komenda         | Opis
| look    | /set php.look.* | Wygląd.
|===

Opcje:

include::{autogendir}/autogen_user_options.pl.adoc[tag=php_options]

[[support]]
== Wsparcie

Przed pytaniem o pomoc upewnij się, że przeczytałeś dokumentację i FAQ
dostarczone z WeeChat.

Wsparcie w sieci IRC na serwerze _irc.libera.chat_:

* oficjalne kanały (z developerami):
** _#weechat_ (Angielski)
** _#weechat-fr_ (Francuski)
* nieoficjalne kanały:
** _#weechat-de_ (Niemiecki)
** _#weechat-fi_ (Fiński)

Inne opcje uzyskania wsparcia można znaleźć na
https://weechat.org/about/support/[tej stronie ^↗^^].
