Author: Sébastien Helleu

# WeeChat референтни приручник API додатака

Sébastien Helleu
flashcode@flashtux.org
верзија 4.9.5

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

Последња верзија овог документа се налази на овој страници ↗.

## 1. Увод

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

Ово упутство документује API додатака програма WeeChat, који за интеракцију са WeeChat језгром користе C додаци.

## 2. Додаци у програму WeeChat

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

Овом C програму нису потребни WeeChat изворни фајлови да би се компајлирао и може динамички да се учита у програм WeeChat командом `/plugin`.

Додатак мора да буде динамичка библиотека, коју оперативни систем динамички учитава. Под GNU/Linux, фајл има „.so” екстензију, а „.dll” под системом Windows.

Додатак мора да укључи фајл „weechat-plugin.h” (који се налази у изворном коду програма WeeChat). Овај фајл дефинише структуре и типове који се користе за комуникацију са програмом WeeChat.

Да бисте позивали функције програма WeeChat у формату који је приказан у API додатака, у функцији weechat_plugin_init морате декларисати и иницијализовати следећи глобални показивач:

    struct t_weechat_plugin *weechat_plugin;

### 2.1. Макрои

Додатак мора да користи неке макрое (за дефиницију неких променљивих):

WEECHAT_PLUGIN_NAME("име")

  име додатка

WEECHAT_PLUGIN_DESCRIPTION("опис")

  кратак опис додатка

WEECHAT_PLUGIN_AUTHOR("author")

  име аутора

WEECHAT_PLUGIN_VERSION("1.0")

  верзија додатка plugin version

WEECHAT_PLUGIN_LICENSE("GPL3")

  лиценца додатка

WEECHAT_PLUGIN_PRIORITY(1000)

  приоритет додатка (није обавезно, погледајте испод)

### 2.2. Главне функције

Додатак мора да користи две функције:

- weechat_plugin_init

- weechat_plugin_end

#### weechat_plugin_init

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

Прототип:

    int weechat_plugin_init (struct t_weechat_plugin *plugin,
                             int argc, char *argv[]);

Аргументи:

- plugin: показивач на структуру додатка програма WeeChat, користи се за иницијализацију погодног глобалног показивача `weechat_plugin`

- argc: број аргумената за додатак

- argv: аргументи за додатак (погледајте испод)

Повратна вредност:

- WEECHAT_RC_OK ако је успешно (додатак ће се учитати)

- WEECHAT_RC_ERROR ако је дошло до грешке (додатак се НЕЋЕ учитати)

##### Аргументи додатка

Када програм WeeChat учита додатак, он прима листу аргумената у параметру `argv` и број аргумената у `argc`.

Аргументи могу бити:

- аргументи командне линије када се покреће WeeChat бинарни фајл,

- аргументи дати команди `/plugin load xxx`, када корисник ручно учитава додатак.

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

-a, --no-connect

  Искључује ауто повезивање са серверима током покретања програма WeeChat.

-s, --no-script

  Искључује ауто учитавање скрипти.

додатак:опција

  Опције за додатак: шаљу се само опције у вези додатка, на пример додатку „irc” се шаљу само опције које почињу на `irc:`.

##### Приоритет додатка

Када се додаци аутоматски учитавају (на пример, током покретања), програм WeeChat најпре учитава све додатке, па затим позива init функције, користећи приоритет дефинисан у сваком додатку. Висок приоритет значи да се init функција прва позива.

Подразумевани приоритет је 1000 (са тим приоритетом, додатак се учитава након свих подразумеваних додатака).

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

Rank | Plugin | Priority
--- | --- | ---
1 | charset | 16000
2 | logger | 15000
3 | exec | 14000
4 | trigger | 13000
5 | spell | 12000
6 | alias | 11000
7 | buflist | 10000
8 | fifo | 9000
9 | typing | 8000
10 | xfer | 7000
11 | irc | 6000
12 | relay | 5000
13 | guile | 4070
14 | lua | 4050
15 | perl | 4040
16 | php | 4030
17 | python | 4020
18 | ruby | 4010
19 | tcl | 4000
20 | script | 3000
21 | fset | 2000

#### weechat_plugin_end

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

Прототип:

    int weechat_plugin_end (struct t_weechat_plugin *plugin);

Аргументи:

- plugin: показивач на структуру додатка програма WeeChat

Повратна вредност:

- WEECHAT_RC_OK ако је успешно

- WEECHAT_RC_ERROR ако је дошло до грешке

### 2.3. Компајлирање додатка

Компајлирање не захтева WeeChat изворне фајлове, неопходан је само фајл weechat-plugin.h.

Да бисте компајлирали додатак који има само један фајл „toto.c” (на систему GNU/Linux):

    gcc -fPIC -Wall -c toto.c
    gcc -shared -fPIC -o toto.so toto.o

### 2.4. Учитавање додатка

Копирајте фајл toto.so у системски директоријум додатака (на пример /usr/local/lib/weechat/plugins) или у корисников директоријум додатака (на пример /home/user/.local/share/weechat/plugins).

У програму WeeChat:

    /plugin load toto

### 2.5. Пример додатка

Комплетан пример додатка који обезбеђује команду `/double`: приказује аргументе два пута у текућем баферу, или два пута извршава команду (ОК, то и није баш нешто корисно, али ово је само пример!):

    #include <stdlib.h>

    #include "weechat-plugin.h"

    WEECHAT_PLUGIN_NAME("double");
    WEECHAT_PLUGIN_DESCRIPTION("Test plugin for WeeChat");
    WEECHAT_PLUGIN_AUTHOR("Sébastien Helleu <flashcode@flashtux.org>");
    WEECHAT_PLUGIN_VERSION("0.1");
    WEECHAT_PLUGIN_LICENSE("GPL3");

    struct t_weechat_plugin *weechat_plugin = NULL;

    /* функција повратног позива за команду "/double" */

    int
    command_double_cb (const void *pointer, void *data,
                       struct t_gui_buffer *buffer,
                       int argc, char **argv, char **argv_eol)
    {
        /* усрећите C компајлер */
        (void) pointer;
        (void) data;
        (void) buffer;
        (void) argv;

        if (argc > 1)
        {
            weechat_command (NULL, argv_eol[1]);
            weechat_command (NULL, argv_eol[1]);
        }

        return WEECHAT_RC_OK;
    }

    int
    weechat_plugin_init (struct t_weechat_plugin *plugin,
                         int argc, char *argv[])
    {
        weechat_plugin = plugin;

        weechat_hook_command ("double",
                              "Display two times a message "
                              "or execute two times a command",
                              "message | command",
                              "message: message to display two times\n"
                              "command: command to execute two times",
                              NULL,
                              &command_double_cb, NULL, NULL);

        return WEECHAT_RC_OK;
    }

    int
    weechat_plugin_end (struct t_weechat_plugin *plugin)
    {
        /* усрећите C компајлер */
        (void) plugin;

        return WEECHAT_RC_OK;
    }

## 3. API додатака

Поглавља која следе описују функције у API, сортиране по категорији.

За сваку функцију, дајемо:

- опис функције,

- C прототип,

- детаље аргумената,

- повратну вредност

- C пример,

- пример у Python скрипти (синтакса за остале скрипт језике је слична).

### 3.1. Регистрација

Функције за регистрацију скрипте: користе се само у API скриптовања, не у C API.

#### register

Регистрација скрипте.

За више информација, погледајте WeeChat водич за скриптовање ↗.

Скрипта (Python):

    # прототип
    def register(name: str, author: str, version: str, license: str, description: str, shutdown_function: str, charset: str) -> int: ...

Белешка | Ова функција не постоји у C API.

### 3.2. Додаци

Функције које враћају инфо о додацима.

#### plugin_get_name

Враћа име додатка.

Прототип:

    const char *weechat_plugin_get_name (struct t_weechat_plugin *plugin);

Аргументи:

- plugin: показивач на структуру WeeChat додатка (може бити NULL)

Повратна вредност:

- име додатка, „core” за језгро програма WeeChat (ако је показивач на додатак NULL)

C пример:

    const char *name = weechat_plugin_get_name (plugin);

Скрипта (Python):

    # прототип
    def plugin_get_name(plugin: str) -> str: ...

    # пример
    plugin = weechat.buffer_get_pointer(weechat.current_buffer(), "plugin")
    name = weechat.plugin_get_name(plugin)

### 3.3. Стрингови

Многе стринг функције наведене испод су већ доступне кроз стандардне C функције, али се препоручује да користите функције у овом API јер су оне безбедне за UTF-8 и локал.

#### charset_set

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

Прототип:

    void weechat_charset_set (const char *charset);

Аргументи:

- charset: нови скуп карактера који желите да користите

C пример:

    weechat_charset_set ("iso-8859-1");

Скрипта (Python):

    # прототип
    def charset_set(charset: str) -> int: ...

    # пример
    weechat.charset_set("iso-8859-1")

#### iconv_to_internal

Конвертује стринг у интерни скуп карактера програма WeeChat (UTF-8).

Прототип:

    char *weechat_iconv_to_internal (const char *charset, const char *string);

Аргументи:

- charset: скуп карактера који се конвертује

- string: стринг који се конвертује

Повратна вредност:

- конвертовани стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_iconv_to_internal ("iso-8859-1", "iso string: é à");
    /* ... */
    free (str);

Скрипта (Python):

    # прототип
    def iconv_to_internal(charset: str, string: str) -> str: ...

    # пример
    str = weechat.iconv_to_internal("iso-8859-1", "iso string: é à")

#### iconv_from_internal

Конвертује стринг из интерног скупа карактера програма WeeChat (UTF-8) у неки други.

Прототип:

    char *weechat_iconv_from_internal (const char *charset, const char *string);

Аргументи:

- charset: циљни скуп карактера

- string: стринг који се конвертује

Повратна вредност:

- конвертовани стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_iconv_from_internal ("iso-8859-1", "utf-8 string: é à");
    /* ... */
    free (str);

Скрипта (Python):

    # прототип
    def iconv_from_internal(charset: str, string: str) -> str: ...

    # пример
    str = weechat.iconv_from_internal("iso-8859-1", "utf-8 string: é à")

#### gettext

Враћа преведени стринг (зависно од локалног језика).

Прототип:

    const char *weechat_gettext (const char *string);

Аргументи:

- string: стринг који треба да се преведе

Повратна вредност:

- преведени стринг или string ако не постоји превод на локални језик

C пример:

    char *str = weechat_gettext ("hello");

Скрипта (Python):

    # прототип
    def gettext(string: str) -> str: ...

    # пример
    str = weechat.gettext("hello")

#### ngettext

Враћа преведени стринг користећи једнину или облик множине, зависно од аргумента count.

Прототип:

    const char *weechat_ngettext (const char *string, const char *plural,
                                  int count);

Аргументи:

- string: стринг који треба да се преведе, у облику једнине

- plural: стринг који треба да се преведе, у облику множине

- count: користи се за избор између једнине и облика множине (избор се врши сагласно са локалним језиком)

Повратна вредност:

- преведени стринг или string / plural ако се не постоји превод на локални језик

C пример:

    char *str = weechat_ngettext ("file", "files", num_files);

Скрипта (Python):

    # прототип
    def ngettext(string: str, plural: str, count: int) -> str: ...

    # пример
    num_files = 2
    str = weechat.ngettext("file", "files", num_files)

#### asprintf

WeeChat ≥ 4.3.0.

Форматира поруку у стрингу који је алоцирала функција.

Белешка | Ова функција је дефинисана за системе на којима није доступна GNU функција `asprintf()`. Понашање је скоро исто, осим што се у случају грешке `*result` поставља на NULL.

Прототип:

    int weechat_asprintf (char **result, const char *fmt, ...);

Аргументи:

- result: показивач на стринг показивач

- fmt: стринг формата

Повратна вредност:

- број бајтова које уписан у `*result` (не рачунајући завршни null бајт), негативна вредност у случају грешке.

C пример:

    char *str;

    if (weechat_asprintf (&str, "%s, %d", "test", 42) >= 0)
    {
        /* *str == "test, 42" */
        /* ... */
        free (str);
    }
    else
    {
        /* error: *str == NULL */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### strndup

Враћа дуплирани стринг, са максималним бројем бајтова.

Прототип:

    char *weechat_strndup (const char *string, int bytes);

Аргументи:

- string: стринг који се дуплира

- bytes: максимални број бајтова који може да се дуплира

Повратна вредност:

- дуплирани стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_strndup ("abcdef", 3);  /* резултат: „abc” */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_cut

WeeChat ≥ 3.3.

Одсеца стринг након датог броја карактера и додаје необавезни суфикс на крај остатка стринга.

Прототип:

    char *weechat_string_cut (const char *string, int length, int count_suffix, int screen, const char *cut_suffix);

Аргументи:

- string: стринг које треба да се скрати

- length: макс дужина

- count_suffix: ако је 1, дужина суфикса се урачунава у макс дужину

- screen: ако је 1, одсецање је базирано на ширини приказаних карактера

- cut_suffix: суфикс који се додаје након што се стринг одсече

Повратна вредност:

- скраћени стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_cut ("this is a test", 5, 1, 1, "…");  /* result: "this…" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_tolower

Ажурирано у верзији 3.8.

Враћа стринг у којем су велика слова претворена у мала.

Белешка | Понашање је измењено у верзији 3.8: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), не само из опсега `A` до `Z`. Уз то, враћа се ново алоцирани стринг и он мора да се ослободи након употребе.

Прототип:

    char *weechat_string_tolower (const char *string);

Аргументи:

- string: стринг који се конвертује

Повратна вредност:

- стринг од малих слова (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_tolower ("ABCD_É");  /* result: „abcd_é” */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_toupper

Ажурирано у верзији 3.8.

Враћа стринг у којем су мала слова претворена у велика.

Белешка | Понашање је измењено у верзији 3.8: сада се сва велика слова исправно претварају у мала (позивом функције `towupper`), не само из опсега `a` до `z`. Уз то, враћа се ново алоцирани стринг и он мора да се ослободи након употребе.

Прототип:

    char *weechat_string_toupper (const char *string);

Аргументи:

- string: стринг који се конвертује

Повратна вредност:

- стринг од великих слова (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_toupper ("abcd_é");  /* result: „ABCD_É” */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_charcmp

Ажурирано у верзији 1.0, 3.8.

Пореди два карактера.

Прототип:

    int weechat_string_charcmp (const char *string1, const char *string2);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

Вредност која се враћа:

- аритметички резултат одузимања првог UTF-8 карактера у string2 од првог UTF-8 карактера у string1:

  - < 0 ако је char1 < char2

  - 0 ако је char1 == char2

  - > 0 ако је char1 > char2

C пример:

    int diff = weechat_string_charcmp ("aaa", "ccc");  /* == -2 */

Белешка | Ова функција није доступна у API скриптовања.

#### string_charcasecmp

Ажурирано у верзији 1.0, 3.8.

Пореди два карактера, уз игнорисање разлике у величини слова.

Белешка | Понашање је промењено у верзији 3.8: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), заједно уз опсег `A` до `Z`.

Прототип:

    int weechat_string_charcasecmp (const char *string1, const char *string2);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

Вредност која се враћа:

- аритметички резултат одузимања првог UTF-8 карактера у string2 (претвореног у мало слово) од првог UTF-8 карактера у string1 (претвореног у мало слово):

  - < 0 ако је char1 < char2

  - 0 ако је char1 == char2

  - > 0 ако је char1 > char2

C пример:

    int diff = weechat_string_charcasecmp ("aaa", "CCC");  /* == -2 */

Белешка | Ова функција није доступна у API скриптовања.

#### strcmp

WeeChat ≥ 3.8.

Поређење стрингова које разликује величину слова.

Прототип:

    int weechat_strcmp (const char *string1, const char *string2);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

Повратна вредност:

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 од последње поређеног UTF-8 карактера у string1:

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff = weechat_strcmp ("aaa", "ccc");  /* == -2 */

Белешка | Ова функција није доступна у API скриптовања.

#### strncmp

WeeChat ≥ 3.8.

Поређење стрингова које води рачуна о величини слова, до max карактера.

Прототип:

    int weechat_strncmp (const char *string1, const char *string2, int max);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

- max: максимални број карактера који се пореде

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 од последње поређеног UTF-8 карактера у string1:

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff = weechat_strncmp ("aabb", "aacc", 2);  /* == 0 */

Белешка | Ова функција није доступна у API скриптовања.

#### strcasecmp

Ажурирано у верзији 1.0, 3.8.

Поређење стрингова које не води рачуна о величини слова.

Белешка | Понашање је промењено у верзији 3.8: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), заједно уз опсег `A` до `Z`.

Прототип:

    int weechat_strcasecmp (const char *string1, const char *string2);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 (претвореног у мало слово) од последњег поређеног UTF-8 карактера у string1 (претвореног у мало слово):

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff;
    diff = weechat_strcasecmp ("aaa", "CCC");    /* == -2 */
    diff = weechat_strcasecmp ("noël", "NOËL");  /* == 0  */

Белешка | Ова функција није доступна у API скриптовања.

#### strcasecmp_range

WeeChat ≥ 0.3.7, ажурирано у верзији 1.0, 3.8.

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

Прототип:

    int weechat_strcasecmp_range (const char *string1, const char *string2, int range);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

- range: број карактера у поређењу по величини слова, на пример:

  - 26: `A-Z` се постављају на `a-z`

  - 29: `A-Z [ \ ]` се постављају на `a-z { | }`

  - 30: `A-Z [ \ ] ^` се постављају на `a-z { | } ~`

Белешка | Вредности 29 и 30 користе неки протоколи, као што је IRC.

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 (претвореног у мало слово) од последњег поређеног UTF-8 карактера у string1 (претвореног у мало слово):

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff = weechat_strcasecmp_range ("nick{away}", "NICK[away]", 29);  /* == 0 */

Белешка | Ова функција није доступна у API скриптовања.

#### strncasecmp

Ажурирано у верзији 1.0, 3.8.

Поређење стрингова које не прави разлику у величини слова, за max карактера.

Белешка | Понашање је промењено у верзији 3.8: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), заједно уз опсег `A` до `Z`.

Прототип:

    int weechat_strncasecmp (const char *string1, const char *string2, int max);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

- max: максимални број карактера који се пореде

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 (претвореног у мало слово) од последњег поређеног UTF-8 карактера у string1 (претвореног у мало слово):

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff = weechat_strncasecmp ("aabb", "AACC", 2);  /* == 0 */

Белешка | Ова функција није доступна у API скриптовања.

#### strncasecmp_range

WeeChat ≥ 0.3.7, ажурирано у верзији 1.0, 3.8.

Поређење стрингова независно од величине слова и локал подешавања, за max карактера, користећи опсег за поређење величине слова.

Прототип:

    int weechat_strncasecmp_range (const char *string1, const char *string2, int max, int range);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

- max: максимални број карактера који се пореде

- range: број карактера у поређењу по величини слова, на пример:

  - 26: `A-Z` се постављају на `a-z`

  - 29: `A-Z [ \ ]` се постављају на `a-z { | }`

  - 30: `A-Z [ \ ] ^` се постављају на `a-z { | } ~`

Белешка | Вредности 29 и 30 користе неки протоколи, као што је IRC.

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 (претвореног у мало слово) од последњег UTF-8 карактера у string1 (претвореног у мало слово):

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff = weechat_strncasecmp_range ("nick{away}", "NICK[away]", 6, 29);  /* == 0 */

Белешка | Ова функција није доступна у API скриптовања.

#### strcmp_ignore_chars

Ажурирано у верзији 1.0, 3.8.

Поређење стрингова које игнорише неке карактере.

Прототип:

    int weechat_strcmp_ignore_chars (const char *string1, const char *string2,
                                     const char *chars_ignored,
                                     int case_sensitive);

Аргументи:

- string1: први стринг за поређење

- string2: други стринг за поређење

- chars_ignored: стринг са карактерима који се игноришу

- case_sensitive: 1 за поређење које прави разлику у величини слова, у супротном 0

Белешка | Понашање се променило у верзији 3.8 када се case_sensitive постави на 0: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), заједно уз опсег `A` до `Z`.

Вредност која се враћа:

- аритметички резултат одузимања последњег поређеног UTF-8 карактера у string2 (претвореног у мало слово) од последњег поређеног UTF-8 карактера у string1 (претвореног у мало слово ако је case_sensitive постављено на 0):

  - < 0 ако је string1 < string2

  - 0 ако је string1 == string2

  - > 0 ако је string1 > string2

C пример:

    int diff = weechat_strcmp_ignore_chars ("a-b", "--a-e", "-", 1);  /* == -3 */

Белешка | Ова функција није доступна у API скриптовања.

#### strcasestr

Ажурирано у верзији 1.3, 3.8.

Претрага стринга која не прави разлику у величини слова.

Белешка | Понашање се променило у верзији 3.8: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), заједно уз опсег `A` до `Z`.

Прототип:

    const char *weechat_strcasestr (const char *string, const char *search);

Аргументи:

- string: стринг

- search: стринг који се тражи у string

Повратна вредност:

- показивач на пронађени стринг, или NULL ако се не пронађе (WeeChat ≥ 1.3: показивач се враћа је const char * уместо char *)

C пример:

    const char *pos = weechat_strcasestr ("aBcDeF", "de");  /* резултат: показивач на "DeF" */

Белешка | Ова функција није доступна у API скриптовања.

#### strlen_screen

WeeChat ≥ 0.4.2, ажурирано у верзији 3.8.

Враћа број карактера који су потребни да се на екран испише UTF-8 стринг.

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

Прототип:

    int weechat_strlen_screen (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- број карактера на екрану који су потребни да се испише UTF-8 стринг

C пример:

    int length_on_screen = weechat_strlen_screen ("é");  /* == 1 */

Скрипта (Python):

    # прототип
    def strlen_screen(string: str) -> int: ...

    # пример
    length = weechat.strlen_screen("é")  # 1

#### string_match

Ажурирано у верзији 1.0, 3.8.

Провера да ли стринг задовољава маску.

Прототип:

    int weechat_string_match (const char *string, const char *mask,
                              int case_sensitive);

Аргументи:

- string: стринг

- mask: маска са џокерима (`*`), сваки џокер хвата 0 или више карактера у стрингу

- case_sensitive: 1 за поређење које прави разлику у величини слова, у супротном 0

Белешка | Почевши од верзије 1.0, у маски се дозвољава употреба џокера (не само на почетку/крају маске).

Белешка | Понашање се променило у верзији 3.8 када се case_sensitive постави на 0: сада се сва велика слова исправно претварају у мала (позивом функцкје `towlower`), заједно уз опсег `A` до `Z`.

Повратна вредност:

- 1 ако стринг задовољава маску, у супротном 0

C пример:

    int match1 = weechat_string_match ("abcdef", "abc*", 0);   /* == 1 */
    int match2 = weechat_string_match ("abcdef", "*dd*", 0);   /* == 0 */
    int match3 = weechat_string_match ("abcdef", "*def", 0);   /* == 1 */
    int match4 = weechat_string_match ("abcdef", "*de*", 0);   /* == 1 */
    int match5 = weechat_string_match ("abcdef", "*b*d*", 0);  /* == 1 */

Скрипта (Python):

    # прототип
    def string_match(string: str, mask: str, case_sensitive: int) -> int: ...

    # примери
    match1 = weechat.string_match("abcdef", "abc*", 0)   # == 1
    match2 = weechat.string_match("abcdef", "*dd*", 0)   # == 0
    match3 = weechat.string_match("abcdef", "*def", 0)   # == 1
    match4 = weechat.string_match("abcdef", "*de*", 0)   # == 1
    match5 = weechat.string_match("abcdef", "*b*d*", 0)  # == 1

#### string_match_list

WeeChat ≥ 2.5, ажурирано у верзији 3.8.

Проверава да ли стринг задовољава листу маски, при чему је дозвољена употреба негативних маски у формату „!реч”. Негативна маска има виши приоритет у односу на стандардну маску.

Прототип:

    int weechat_string_match_list (const char *string, const char **masks,
                                   int case_sensitive);

Аргументи:

- string: стринг

- masks: листа маски, са NULL након последње маске у листи; свака маска се пореди са стрингом функцијом string_match

- case_sensitive: 1 за поређење које прави разлику у величини слова, у супротном 0

Белешка | Понашање се променило у верзији 3.8 када је case_sensitive постављени на 0: сада се сва велика слова исправно претварају у мала (позивом функције `towlower`), заједно уз опсег `A` до `Z`.

Повратна вредност:

- 1 ако стринг задовољава листу маски (барем једна од маски је задовољена и ниједна од негативних маски), у супротном 0

C пример:

    const char *masks[3] = { "*", "!abc*", NULL };
    int match1 = weechat_string_match_list ("abc", masks, 0);     /* == 0 */
    int match2 = weechat_string_match_list ("abcdef", masks, 0);  /* == 0 */
    int match3 = weechat_string_match_list ("def", masks, 0);     /* == 1 */

Скрипта (Python):

    # прототип
    def string_match_list(string: str, masks: str, case_sensitive: int) -> int: ...

    # примери
    match1 = weechat.string_match("abc", "*,!abc*", 0)     # == 0
    match2 = weechat.string_match("abcdef", "*,!abc*", 0)  # == 0
    match3 = weechat.string_match("def", "*,!abc*", 0)     # == 1

#### string_expand_home

WeeChat ≥ 0.3.3.

Замењује водеће `~` стрингом са почетним директоријумом. Ако стринг не почиње са `~`, онда се враћа исти стринг.

Прототип:

    char *weechat_string_expand_home (const char *path);

Аргументи:

- path: путања

Повратна вредност:

- путања са водећим `~` замењеним са почетним директоријумом (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_expand_home ("~/file.txt");
    /* резултат: "/home/user/file.txt" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_eval_path_home

WeeChat ≥ 1.3, ажурирано у верзији 3.2.

Израчунава путање у 3 корака:

1. замењује водеће `%h` са почетним директоријумом програма WeeChat (подразумевано data )

2. замењује водеће `~` са корисниковим почетним директоријумом (позивом string_expand_home),

3. израчунава променљиве (погледајте string_eval_expression).

Прототип:

    char *weechat_string_eval_path_home (const char *path,
                                         struct t_hashtable *pointers,
                                         struct t_hashtable *extra_vars,
                                         struct t_hashtable *options);

Аргументи:

- path: путања

- pointers: хеш табела за позив функције string_eval_expression

- extra_vars: хеш табела за позив функције string_eval_expression

- options: хеш табела за позив функције string_eval_expression, са једним од подржаних додатних кључева:

  - directory: WeeChat директоријум који се користи када се замењује `%h`, један од:

    - config

    - data (подразумевано)

    - cache

    - runtime

Повратна вредност:

- израчуната путања (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_eval_path_home ("${weechat_config_dir}/test.conf", NULL, NULL, NULL);
    /* резултат: "/home/user/.config/weechat/test.conf" */
    /* ... */
    free (str);

Скрипта (Python):

    # прототип
    def string_eval_path_home(path: str, pointers: Dict[str, str], extra_vars: Dict[str, str], options: Dict[str, str]) -> str: ...

    # пример
    path = weechat.string_eval_path_home("${weechat_config_dir}/test.conf", {}, {}, {})
    # path == "/home/user/.config/weechat/test.conf"

#### string_remove_quotes

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

Прототип:

    char *weechat_string_remove_quotes (const char *string, const char *quotes);

Аргументи:

- string: стринг

- quotes: стринг са листом знакова навода

Повратна вредност:

- стринг без знакова навода на почетку/крају (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_remove_quotes (string, " 'I can't' ", "'");
    /* result: "I can't" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_strip

Одсеца карактере на почетку и/или крају стринга.

Прототип:

    char *weechat_string_strip (const char *string, int left, int right,
                                const char *chars);

Аргументи:

- string: стринг

- left: одсеца карактере с лева ако је различито од 0

- right: одсеца карактере с десна ако је различито од 0

- chars: стринг са карактерима који треба да се одсеку

Повратна вредност:

- одсечени стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_strip (".abc -", 0, 1, "- .");  /* result: ".abc" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_convert_escaped_chars

WeeChat ≥ 1.0.

Конвертује означене карактере у њихову вредност:

- `\"`: знак навода

- `\\`: обрнута коса црта

- `\a`: звучно упозорење (BEL)

- `\b`: брисање у лево

- `\e`: escape

- `\f`: form feed

- `\n`: прелом линије

- `\r`: carriage return

- `\t`: хоризонтални таб

- `\v`: вертикални таб

- `\0ooo`: карактер као октална вредност (`ooo` је од 0 до 3 цифре)

- `\xhh`: карактер као хексадецимална вредност (`hh` је од 1 до 2 цифре)

- `\uhhhh`: уникод карактер као хексадецимална вредност (`hhhh` је од 1 до 4 цифре)

- `\Uhhhhhhhh`: уникод карактер као хексадецимална вредност (`hhhhhhhh` је од 1 до 8 цифара)

Прототип:

    char *weechat_string_convert_escaped_chars (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- стринг у којем су означени карактери замењени својим вредностима (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_convert_escaped_chars ("snowman: \\u2603");
    /* str == "snowman: ☃" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_mask_to_regex

Враћа регуларни израз изграђен маском, у којем је једини специјални карактер `*`. Сви остали специјални карактери за регуларни израз се означавају.

Прототип:

    char *weechat_string_mask_to_regex (const char *mask);

Аргументи:

- mask: маска

Повратна вредност:

- регуларни израз, као стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str_regex = weechat_string_mask_to_regex ("test*mask");
    /* резултат: "test.*mask" */
    /* ... */
    free (str_regex);

Скрипта (Python):

    # прототип
    def string_mask_to_regex(mask: str) -> str: ...

    # пример
    regex = weechat.string_mask_to_regex("test*mask")  # "test.*mask"

#### string_regex_flags

WeeChat ≥ 0.3.7.

Враћа показивач на стринг након заставица и маску са заставицама за компајлирање регуларног израза.

Прототип:

    const char *weechat_string_regex_flags (const char *regex, int default_flags, int *flags)

Аргументи:

- regex: POSIX проширени регуларни израз

- default_flags: комбинација следећих вредности (погледајте `man regcomp`):

  - REG_EXTENDED

  - REG_ICASE

  - REG_NEWLINE

  - REG_NOSUB

- flags: вредност показивача се поставља заставицама које се користе у регуларном изразу (подразумеване заставице + заставице постављене у регуларном изразу)

Заставице морају да се налазе на почетку регуларног израза. Формат је: „(?eins-eins)стринг”.

Дозвољене су следеће заставице:

- e: POSIX проширени регуларни израз (REG_EXTENDED)

- i: не прави се разлика у величини слова (REG_ICASE)

- n: оператори подударања било ког карактера се не подударају са преломом линије (REG_NEWLINE)

- s: није потребна подршка за адресирање подударања подстрингова (REG_NOSUB)

Повратна вредност:

- показивач у regex, иза заставица

C пример:

    const char *regex = "(?i)test";
    int flags;
    const char *ptr_regex = weechat_string_regex_flags (regex, REG_EXTENDED, &flags);
    /* ptr_regex == "test", flags == REG_EXTENDED | REG_ICASE */

Белешка | Ова функција није доступна у API скриптовања.

#### string_regcomp

WeeChat ≥ 0.3.7.

Компајлира POSIX проширени регуларни израз користећи необавезне заставице на почетку стринга (за формат заставица, погледајте string_regex_flags).

Прототип:

    int weechat_string_regcomp (void *preg, const char *regex, int default_flags)

Аргументи:

- preg: показивач на regex_t структуру

- regex: POSIX проширени регуларни израз

- default_flags: комбинација следећих вредности (погледајте `man regcomp`):

  - REG_EXTENDED

  - REG_ICASE

  - REG_NEWLINE

  - REG_NOSUB

Повратна вредност:

- исти повратни кôд као и функција `regcomp` (0 ако је OK, нека друга вредност у случају грешке, погледајте `man regcomp`)

Белешка | Након употребе, регуларни израз preg мора да се очисти позивом „regfree”, у случају да је функција вратила 0 (OK).

C пример:

    regex_t my_regex;
    if (weechat_string_regcomp (&my_regex, "(?i)test", REG_EXTENDED) == 0)
    {
        /* OK */
        /* ... */
        regfree (&my_regex);
    }
    else
    {
        /* грешка */
        /* ... */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### string_has_highlight

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

Прототип:

    int weechat_string_has_highlight (const char *string,
                                      const char highlight_words);

Аргументи:

- string: стринг

- highlight_words: листа речи за истицање, раздвојених запетама

Повратна вредност:

- 1 ако стринг има једно или више истицања, у супротном 0

C пример:

    int hl = weechat_string_has_highlight ("мој тест стринг", "тест,реч2");  /* == 1 */

Скрипта (Python):

    # прототип
    def string_has_highlight(string: str, highlight_words: str) -> int: ...

    # пример
    highlight = weechat.string_has_highlight("my test string", "test,word2")  # 1

#### string_has_highlight_regex

WeeChat ≥ 0.3.4.

Проверава да ли стринг има једно или више истицања, користећи POSIX проширени регуларни израз.
За бар једно подударање регуларног израза над стрингом, он мора бити уоквирен граничницима (карактери различити од: алфанумерика, `-`, `_` и `|`).

Прототип:

    int weechat_string_has_highlight_regex (const char *string, const char *regex);

Аргументи:

- string: стринг

- regex: POSIX проширени регуларни израз

Повратна вредност:

- 1 ако стринг има једно или више истицања, у супротном 0

C пример:

    int hl = weechat_string_has_highlight_regex ("мој тест стринг", "тест|реч2");  /* == 1 */

Скрипта (Python):

    # прототип
    def string_has_highlight_regex(string: str, regex: str) -> int: ...

    # пример
    highlight = weechat.string_has_highlight_regex("мој тест стринг", "тест|реч2")  # 1

#### string_replace

Замењује сва појављивања стринга неким другим стрингом.

Прототип:

    char *weechat_string_replace (const char *string, const char *search,
                                  const char *replace);

Аргументи:

- string: стринг

- search: стринг који треба да се замени

- replace: замена за стринг search

Повратна вредност:

- стринг у којем је search замењено са replace (након употребе мора да се ослободи позивом „free”)

C пример:

    char *str = weechat_string_replace ("test", "s", "x");  /* резултат: "text" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_replace_regex

WeeChat ≥ 1.0.

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

Прототип:

    char *weechat_string_replace_regex (const char *string, void *regex,
                                        const char *replace, const char reference_char,
                                        char *(*callback)(void *data, const char *text),
                                        void *callback_data);

Аргументи:

- string: стринг

- regex: показивач на регуларни израз (regex_t структура) компајлираног WeeChat функцијом string_regcomp или regcomp (погледајте `man regcomp`)

- replace: текст замене, у коме су дозвољене следеће референце:

  - `$0` до `$99`: подударање 0 до 99 у регуларном изразу (0 је цело подударање, 1 до 99 су групе ухваћене заградама)

  - `$+`: последње подударање (са највишим бројем)

  - `$.*N`: подударање `N` (може бити `+` или `0` до `99`), у коме су сви карактери замењени са `*` (карактер `*` може бити било који карактер између размака (32) и `~` (126))

- reference_char: карактер који се користи за референце на подударања (обично је `$`)

- callback: необавезна функција повратног позива која се позива за сваку референцу у replace (осим за подударања која се замењују карактером); функција повратног позива мора да врати:

  - ново алоцирани стринг: он се користи као текст замене (након употребе се ослобађа)

  - NULL: као текст замене се користи текст примљену у функцији повратног позива (без измена)

- callback_data: показивач прослеђен функцији повратног позива када се позове

Повратна вредност:

- стринг са замењеним текстом, NULL у случају проблема (након употребе мора да се ослободи позивом „free”)

C пример:

    regex_t my_regex;
    char *string;
    if (weechat_string_regcomp (&my_regex, "([0-9]{4})-([0-9]{2})-([0-9]{2})",
                                REG_EXTENDED) == 0)
    {
        string = weechat_string_replace_regex ("date: 2014-02-14", &my_regex,
                                               "$3/$2/$1", '$', NULL, NULL);
        /* string == "date: 14/02/2014" */
        if (string)
            free (string);
        regfree (&my_regex);
    }

Белешка | Ова функција није доступна у API скриптовања.

#### string_translate_chars

WeeChat ≥ 3.8.

Преводи карактере у стрингу.

Прототип:

    char *string_translate_chars (const char *string, const char *chars1, const char *chars2);

Аргументи:

- string: стринг

- chars1: стринг са карактерима који треба да се преведу

- chars2: стринг са карактерима замене; мора да садржи исти број UTF-8 карактера као chars1

Повратна вредност:

- стринг са преведеним карактерима, NULL ако је дошло до проблема (мора да се ослободи позивом функције „free” након употребе)

C примери:

    /* "test" => "tEst" */
    char *str = weechat_string_translate_chars ("test", "abcdef", "ABCDEF");

    /* "clean the boat" => "CleAn the BoAt" */
    char *str = weechat_string_translate_chars ("clean the boat", "abc", "ABC");

Белешка | Ова функција није доступна у API скриптовања.

#### string_split

Ажурирано у верзијама 2.5, 2.6.

Дели стринг по једном или више граничника.

Прототип:

    char **weechat_string_split (const char *string, const char *separators,
                                 const char *strip_items, int flags,
                                 int num_items_max, int *num_items);

Аргументи:

- string: стринг који се дели

- separators: граничници који се користе за поделу

- strip_items: карактери који се одсецају од ставки које се враћају (лево/десно); није обавезном, може бити NULL

- flags: комбинација вредности која мења подразумевано понашање; ако је вредност 0, користи се подразумевано понашање (нема одсецања граничника са почетка/краја стринга, вишеструки граничници се остављају какви јесу, па могу да се врате и празни стрингови); прихватају се следеће заставице:

  - WEECHAT_STRING_SPLIT_STRIP_LEFT: граничници се одсецају с лева (почетка стринга)

  - WEECHAT_STRING_SPLIT_STRIP_RIGHT: граничници се одсецају с десна (краја стринга)

  - WEECHAT_STRING_SPLIT_COLLAPSE_SEPS: више узастопних граничника се замењује једним

  - WEECHAT_STRING_SPLIT_KEEP_EOL: крај линије се задржава у свакој вредности

- num_items_max: максимални број креираних ставки (0 = нема ограничења)

- num_items: показивач на int који садржи број креираних ставки

Белешка | У програму WeeChat верзије ≤ 2.4, аргумент flags се звао keep_eol и узимао је другачије вредности, које морају да се конвертују на следећи начин:

keep_eol | flags
--- | ---
0 | WEECHAT_STRING_SPLIT_STRIP_LEFT | WEECHAT_STRING_SPLIT_STRIP_RIGHT | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS
1 | WEECHAT_STRING_SPLIT_STRIP_LEFT | WEECHAT_STRING_SPLIT_STRIP_RIGHT | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS | WEECHAT_STRING_SPLIT_KEEP_EOL
2 | WEECHAT_STRING_SPLIT_STRIP_LEFT | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS | WEECHAT_STRING_SPLIT_KEEP_EOL

Повратна вредност:

- низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом string_free_split)

C пример:

    char **argv;
    int argc;

    argv = weechat_string_split ("abc de  fghi ", " ", NULL, 0, 0, &argc);
    /* result: argv[0] == "abc"
               argv[1] == "de"
               argv[2] == ""
               argv[3] == "fghi"
               argv[4] = ""
               argv[5] == NULL
               argc == 5
    */
    weechat_string_free_split (argv);

    argv = weechat_string_split ("abc de  fghi ", " ", NULL,
                                 WEECHAT_STRING_SPLIT_STRIP_LEFT
                                 | WEECHAT_STRING_SPLIT_STRIP_RIGHT
                                 | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS,
                                 0, &argc);
    /* result: argv[0] == "abc"
               argv[1] == "de"
               argv[2] == "fghi"
               argv[3] == NULL
               argc == 3
    */
    weechat_string_free_split (argv);

    argv = weechat_string_split ("abc de  fghi ", " ", NULL,
                                 WEECHAT_STRING_SPLIT_STRIP_LEFT
                                 | WEECHAT_STRING_SPLIT_STRIP_RIGHT
                                 | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS
                                 | WEECHAT_STRING_SPLIT_KEEP_EOL,
                                 0, &argc);
    /* result: argv[0] == "abc de  fghi"
               argv[1] == "de  fghi"
               argv[2] == "fghi"
               argv[3] == NULL
               argc == 3
    */
    weechat_string_free_split (argv);

    argv = weechat_string_split ("abc de  fghi ", " ", NULL,
                                 WEECHAT_STRING_SPLIT_STRIP_LEFT
                                 | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS
                                 | WEECHAT_STRING_SPLIT_KEEP_EOL,
                                 0, &argc);
    /* result: argv[0] == "abc de  fghi "
               argv[1] == "de  fghi "
               argv[2] == "fghi "
               argv[3] == NULL
               argc == 3
    */
    weechat_string_free_split (argv);

    argv = weechat_string_split (" abc, de,, fghi ", ",", " ",
                                 WEECHAT_STRING_SPLIT_STRIP_LEFT
                                 | WEECHAT_STRING_SPLIT_STRIP_RIGHT
                                 | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS,
                                 0, &argc);
    /* result: argv[0] == "abc"
               argv[1] == "de"
               argv[2] == "fghi"
               argv[3] == NULL
               argc == 3
    */
    weechat_string_free_split (argv);

Белешка | Ова функција није доступна у API скриптовања.

#### string_split_shell

WeeChat ≥ 1.0.

Дели стринг на начин на који командно окружење дели команду са аргументима.

Ова функција је C конверзија Python класе "shlex" (фајл: Lib/shlex.py у Python репозиторијуму), погледајте ову страницу ↗.

Прототип:

    char **weechat_string_split_shell (const char *string, int *num_items);

Аргументи:

- string: стринг који се дели

- num_items: показивач на int који садржи број креираних ставки

Повратна вредност:

- низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом string_free_split)

C пример:

    char **argv;
    int argc;
    argv = weechat_string_split_shell ("test 'first arg'  \"second arg\"", &argc);
    /* result: argv[0] == "test"
               argv[1] == "first arg"
               argv[2] == "second arg"
               argv[3] == NULL
               argc == 3
    */
    weechat_string_free_split (argv);

Белешка | Ова функција није доступна у API скриптовања.

#### string_free_split

Ослобађа меморију коју је употребило дељење стринга.

Прототип:

    void weechat_string_free_split (char **split_string);

Аргументи:

- split_string: стринг подељен функцијом string_split

C пример:

    char *argv;
    int argc;
    argv = weechat_string_split (string, " ", 0, 0, &argc);
    /* ... */
    weechat_string_free_split (argv);

Белешка | Ова функција није доступна у API скриптовања.

#### string_rebuild_split_string

Ажурирано у верзији 3.7.

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

Прототип:

    char *weechat_string_rebuild_split_string (char **split_string,
                                               const char *separator,
                                               int index_start, int index_end);

Аргументи:

- split_string: стринг подељен функцијом string_split

- separator: стринг који се користи за раздвајање стрингова (Може да буде NULL или празан стринг)

- index_start: индекст првог стринга који треба да се користи (≥ 0)

- index_end: индекс последњег стринга који треба да се користи (мора бити ≥ index_start; може да се користи специјална вредност -1 да се употребе сви аргументи док се не наиђе на NULL)

Повратна вредност:

- стринг изграђен са (након употребе мора да се ослободи позивом „free”)

C пример:

    char **argv;
    int argc;
    argv = weechat_string_split ("abc def ghi", " ", 0, 0, &argc);
    char *str = weechat_string_rebuild_split_string (argv, ";", 0, -1);
    /* str == "abc;def;ghi" */
    /* ... */
    free (str);

Белешка | Ова функција није доступна у API скриптовања.

#### string_split_command

Дели листу команди раздвојених са separator (које у стрингу могу да се означе са `\`).

Прототип:

    char **weechat_string_split_command (const char *command, char separator);

Аргументи:

- command: команда која се дели

- separator: граничник

Повратна вредност:

- низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом string_free_split_command)

C пример:

    char **argv = weechat_string_split_command ("/command1 arg;/command2", ';');
    /* result: argv[0] == "/command1 arg"
               argv[1] == "/command2"
               argv[2] == NULL
    */
    weechat_free_split_command (argv);

Белешка | Ова функција није доступна у API скриптовања.

#### string_free_split_command

Ослобађа меморију коју је употребила команда поделе.

Прототип:

    void weechat_string_free_split_command (char **split_command);

Аргументи:

- split_command: команда подељена са string_split_command

C пример:

    char **argv = weechat_string_split_command ("/command1 arg;/command2", ';');
    /* ... */
    weechat_free_split_command (argv);

Белешка | Ова функција није доступна у API скриптовања.

#### string_format_size

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

Прототип:

    char *weechat_string_format_size (unsigned long long size);

Аргументи:

- size: величина (у бајтовима)

Повратна вредност:

- форматирани стринг (након употребе мора да се ослободи позивом „free”)

C примери:

    /* примери са енглеским локал подешавањем */

    char *str = weechat_string_format_size (0);  /* str == "0 bytes" */
    /* ... */
    free (str);

    char *str = weechat_string_format_size (1);  /* str == "1 byte" */
    /* ... */
    free (str);

    char *str = weechat_string_format_size (200);  /* str == "200 bytes" */
    /* ... */
    free (str);

    char *str = weechat_string_format_size (15200);  /* str == "15.2 KB" */
    /* ... */
    free (str);

    char *str = weechat_string_format_size (2097152);  /* str == "2.10 MB" */
    /* ... */
    free (str);

Скрипта (Python), WeeChat ≥ 2.2:

    # прототип
    def string_format_size(size: int) -> str: ...

    # пример
    str = weechat.string_format_size(15200)  # == "15.2 KB"

#### string_parse_size

WeeChat ≥ 3.7.

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

Прототип:

    unsigned long long weechat_string_parse_size (const char *size);

Аргументи:

- size: величина као стринг: позитиван цео број након кога следе необавезни размаци и необавезна јединица (малим или великим словима), која је једно од:

  - b: бајтова

  - k: килобајта (1k = 1000 бајтова)

  - m: мегаaбајта (1m = 1000k = 1,000,000 бајтова)

  - g: гигабајта (1g = 1000m = 1,000,000,000 бајтова)

  - t: терабајта (1t = 1000g = 1,000,000,000,000 бајтова)

Повратна вредност:

- величина у бајтовима, 0 у случају грешке

C пример:

    unsigned long long size = weechat_parse_size ("1.34m");  /* size == 1340000 */

Скрипта (Python):

    # прототип
    def string_parse_size(size: str) -> int: ...

    # пример
    size = weechat.string_parse_size("1.34m")  # 1340000

#### string_color_code_size

WeeChat ≥ 3.0.

Враћа величину (у бајтовима) WeeChat кода боје на почетку стринга.

Прототип:

    int weechat_string_color_code_size (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- величина (у бајтовима) WeeChat кода боје на почетку стринга; ако је стринг NULL, празан или не почиње кодом боје, враћа се 0; ако стринг почиње са више кодова боје, враћа се само величина првог

C примери:

    int size;

    size = weechat_string_color_code_size ("test");  /* size == 0 */
    size = weechat_string_color_code_size (weechat_color ("bold"));  /* size == 2 */
    size = weechat_string_color_code_size (weechat_color ("yellow,red"));  /* size == 7 */

Скрипта (Python):

    # прототип
    def string_color_code_size(string: str) -> int: ...

    # примери
    size = weechat.string_color_code_size("test")  # size == 0
    size = weechat.string_color_code_size(weechat.color("bold"))  # size == 2
    size = weechat.string_color_code_size(weechat.color("yellow,red"))  # size == 7

#### string_remove_color

Ажурирано у верзији 4.3.0.

Уклања WeeChat боје из стринга.

Прототип:

    char *weechat_string_remove_color (const char *string, const char *replacement);

Аргументи:

- string: стринг

- replacement: ако није NULL и ако није празно, овај стринг замењује WeeChat кодове боје, у супротном се WeeChat кодови боје и наредни карактери (ако су у вези са бојом) уклањају из стринга

Повратна вредност:

- стринг без боја (након употребе мора да се ослободи позивом „free”)

C примери:

    /* уклони кодове боје */
    char *str = weechat_string_remove_color (my_string1, NULL);
    /* ... */
    free (str);

    /* замени кодове боје са „?” */
    char *str = weechat_string_remove_color (my_string2, "[color]");
    /* ... */
    free (str);

Скрипта (Python):

    # прототип
    def string_remove_color(string: str, replacement: str) -> str: ...

    # пример
    str = weechat.string_remove_color(my_string, "[color]")

#### string_base_encode

WeeChat ≥ 2.4, ажурирано у 4.3.0.

Кодира стринг као base 16, 32, или 64.

Прототип:

    int weechat_string_base_encode (const char *base, const char *from, int length, char *to);

Аргументи:

- base: "16", "32", "64", или "64url"

- from: стринг који се кодира

- length: дужина стринга који се кодира (на пример `strlen(from)`)

- to: показивач на стринг у који се смешта резултат (мора бити довољне дужине, резултат је дужи од почетног стринга)

Повратна вредност:

- дужина стринга смештеног у *to (не рачунајући завршно `\0`), -1 у случају грешке

C пример:

    char *string = "abcdefgh", result[128];
    int length;
    length = weechat_string_base_encode ("16", string, strlen (string), result);
    /* length == 16, result == "6162636465666768" */
    length = weechat_string_base_encode ("32", string, strlen (string), result);
    /* length == 16, result == "MFRGGZDFMZTWQ===" */
    length = weechat_string_base_encode ("64", string, strlen (string), result);
    /* length == 12, result == "YWJjZGVmZ2g=" */

Белешка | Ова функција није доступна у API скриптовања.

#### string_base_decode

WeeChat ≥ 2.4, ажурирано у 4.3.0.

Декодира стринг кодиран у base 16, 32, или 64.

Прототип:

    int weechat_string_base_decode (const char *base, const char *from, char *to);

Аргументи:

- base: "16", "32", "64", или "64url"

- from: стринг који се декодира

- to: показивач на стринг у који се смешта резултат (мора бити довољне дужине, резултат је краћи од почетног стринга)

Повратна вредност:

- дужина стринга смештеног у *to (не рачунајући завршно `\0`), -1 у случају грешке

C пример:

    char result[128];
    int length;
    length = weechat_string_base_decode ("16", "6162636465666768", result);
    /* length == 8, result == "abcdefgh" */
    length = weechat_string_base_decode ("32", "MFRGGZDFMZTWQ===", result);
    /* length == 8, result == "abcdefgh" */
    length = weechat_string_base_decode ("64", "YWJjZGVmZ2g=", result);
    /* length == 8, result == "abcdefgh" */

Белешка | Ова функција није доступна у API скриптовања.

#### string_hex_dump

WeeChat ≥ 1.4.

Приказује приказ података као хексадецималне и ascii бајтове.

Прототип:

    char *string_hex_dump (const char *data, int data_size, int bytes_per_line,
                           const char *prefix, const char *suffix);

Аргументи:

- data: подаци који се приказују

- data_size: број бајтова који се приказују у data

- bytes_per_line: број бајтова који треба да се прикаже у свакој линији

- prefix: префикс који се приказује на почетку сваке линије (није обавезан, може да буде NULL)

- suffix: суфикс који се приказује на крају сваке линије (није обавезан, може да буде NULL)

Повратна вредност:

- стринг са приказом података (након употребе мора да се ослободи позивом „free”)

C пример:

    char *string = "abc def-ghi";
    char *dump = weechat_string_hex_dump (string, strlen (string), 8, " >> ", NULL);
    /* dump == " >> 61 62 63 20 64 65 66 2D   a b c   d e f - \n"
               " >> 67 68 69                  g h i           "  */

Белешка | Ова функција није доступна у API скриптовања.

#### string_is_command_char

WeeChat ≥ 0.3.2.

Проверава да ли је први карактер стринга командни карактер (подразумевани командни карактер је `/`).

Прототип:

    int weechat_string_is_command_char (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- 1 ако је први карактер стринга командни карактер, у супротном 0

C примери:

    int command_char1 = weechat_string_is_command_char ("/test");  /* == 1 */
    int command_char2 = weechat_string_is_command_char ("test");   /* == 0 */

Скрипта (Python):

    # прототип
    def string_is_command_char(string: str) -> int: ...

    # примери
    command_char1 = weechat.string_is_command_char("/test")  # == 1
    command_char2 = weechat.string_is_command_char("test")   # == 0

#### string_input_for_buffer

WeeChat ≥ 0.3.2.

Враћа показивач на текст уноса за бафер (показивач унутар „string” аргумента), или NULL ако стринг није команда.

Прототип:

    const char *weechat_string_input_for_buffer (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- показивач у „string”, или NULL

C примери:

    const char *str1 = weechat_string_input_for_buffer ("test");    /* "test"  */
    const char *str2 = weechat_string_input_for_buffer ("/test");   /* NULL    */
    const char *str3 = weechat_string_input_for_buffer ("//test");  /* "/test" */

Скрипта (Python):

    # прототип
    def string_input_for_buffer(string: str) -> str: ...

    # примери
    str1 = weechat.string_input_for_buffer("test")    # "test"
    str2 = weechat.string_input_for_buffer("/test")   # ""
    str3 = weechat.string_input_for_buffer("//test")  # "/test"

#### string_eval_expression

WeeChat ≥ 0.4.0, ажурирано у верзијама 0.4.2, 0.4.3, 1.0, 1.1, 1.2, 1.3, 1.6, 1.8, 2.0, 2.2, 2.3, 2.7, 2.9, 3.1, 3.2, 3.3, 3.4, 3.6 и 3.8, 4.0.0, 4.2.0, 4.3.0, 4.4.0.

Израчунава израз и враћа вредност као стринг. Специјалне променљиве у формату `${променљива}` се развијају (погледајте табелу испод).

Белешка | Почевши од верзије 1.0, подржава се угњеждавање променљивих, на пример: `${color:${променљива}}`.

Прототип:

    char *weechat_string_eval_expression (const char *expr,
                                          struct t_hashtable *pointers,
                                          struct t_hashtable *extra_vars,
                                          struct t_hashtable *options);

Аргументи:

- expr: израз који треба да се израчуна (погледајте услове и променљиве)

- pointers: хеш табела са показивачима (кључеви моја бити стринг, вредности морају бити показивач); показивачи „window” и „buffer” се аутоматски додају ако се не налазе у хеш табели (са показивачем на текући прозор/бафер) (може да буде NULL):

  - regex: показивач на регуларни израз (regex_t структуру) компајлиран WeeChat функцијом string_regcomp или са regcomp (погледајте `man regcomp`); ова опција је слична са regex у хеш табели options (испод), али се користи у циљу бољих перформанси

- extra_vars: додатне променљиве које ће се развити (може да буде NULL)

- options: хеш табела са неким опцијама (кључеви и вредности морају бити стринг) (може да буде NULL):

  - type: подразумевано понашање је да се само замене вредности у изразу, остали типови који могу да се изаберу су следећи:

    - condition: израз се израчунава као услов: користе се оператори и заграде, резултат је логичка вредност („0” или „1”)

  - prefix: префикс испред променљиве која се замењује (подразумевано: `${`)

  - suffix: суфикс након променљиве која се замењује (подразумевано: `}`)

  - extra: подразумевано понашање је да се само замене додатне променљиве (extra_vars), другачије понашање може да се изабере:

    - eval: додатне променљиве (extra_vars) се и саме израчунавају пре замене (WeeChat ≥ 1.6)

  - regex: регуларни израз који се користи за замену текста у expr (који се онда не израчунава)

  - regex_replace: текст за замену који се користи са regex, којим се мења текст у expr (regex_replace се израчунава за свако подударање regex у expr, све док више нема подударања)

  - debug: дибаг ниво (стринг са целим бројем ≥ 1), ако је укључен, у хеш табелу options се додаје кључ „debug_output”:

    - 1: укључује дибаг

    - 2: укључује детаљнији дибаг

Повратна вредност:

- израчунати израз (након употребе мора да се ослободи позивом „free”), или NULL у случају проблема (неважећи израз или ако нема довољно слободне меморије)

C примери:

    /* услови */
    struct t_hashtable *options1 = weechat_hashtable_new (8,
                                                          WEECHAT_HASHTABLE_STRING,
                                                          WEECHAT_HASHTABLE_STRING,
                                                          NULL,
                                                          NULL);
    weechat_hashtable_set (options1, "type", "condition");
    char *str1 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL, options1);  /* "1" */
    char *str2 = weechat_string_eval_expression ("abc =~ def", NULL, NULL, options1);                 /* "0" */

    /* прост израз */
    char *str3 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL, NULL);  /* "core.weechat" */

    /* замена регуларним изразом */
    struct t_hashtable *options2 = weechat_hashtable_new (8,
                                                          WEECHAT_HASHTABLE_STRING,
                                                          WEECHAT_HASHTABLE_STRING,
                                                          NULL,
                                                          NULL);
    /* додавање заграда око URL адреса */
    weechat_hashtable_set (options2, "regex", "[a-zA-Z0-9_]+://[^ ]+");
    weechat_hashtable_set (options2, "regex_replace", "[ ${re:0} ]");
    char *str4 = weechat_string_eval_expression ("test: https://weechat.org", NULL, NULL, NULL);  /* "test: [ https://weechat.org ]" */

    /* скривање лозинки */
    weechat_hashtable_set (options2, "regex", "(password=)([^ ]+)");
    weechat_hashtable_set (options2, "regex_replace", "${re:1}${hide:*,${re:2}}");
    char *str5 = weechat_string_eval_expression ("password=abc password=def", NULL, NULL, NULL);  /* "password=*** password=***" */

Скрипта (Python):

    # прототип
    def string_eval_expression(expr: str, pointers: Dict[str, str], extra_vars: Dict[str, str], options: Dict[str, str]) -> str: ...

    # примери

    # услови
    str1 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}, {"type": "condition"})  # "1"
    str2 = weechat.string_eval_expression("abc =~ def", {}, {}, {"type": "condition"})                 # "0"

    # прост израз
    str3 = weechat.string_eval_expression("${buffer.full_name}", {}, {}, {}) # "core.weechat"

    # замена регуларним изразом: додавање заграда око URL адреса
    options = {
        "regex": "[a-zA-Z0-9_]+://[^ ]+",
        "regex_replace": "[ ${re:0} ]",
    }
    str4 = weechat.string_eval_expression("test: https://weechat.org", {}, {}, options)  # "test: [ https://weechat.org ]"

    # замена са регуларним изразом: скривање лозинки
    options = {
        "regex": "(password=)([^ ]+)",
        "regex_replace": "${re:1}${hide:*,${re:2}}",
    }
    str5 = weechat.string_eval_expression("password=abc password=def", {}, {}, options)  # "password=*** password=***"

##### Услови

Листа логичких оператора који могу да се користе у условима (по редоследу приоритета, од првог до последњег):

Оператор | Мин WeeChat | Опис | Примери
--- | --- | --- | ---
`&&` |  | Логичко „и” | >> `25 && 77` == `1` >> `25 && 0` == `0`
`||` |  | Логичко „или” | >> `25 || 0` == `1` >> `0 || 0` == `0`

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

Оператор | Мин WeeChat | Опис | Примери
--- | --- | --- | ---
`=~` |  | Подудара се са POSIX проширеним регуларним изразом (дозвољене су необавезне заставице, погледајте функцију string_regcomp) | >> `abc def =~ ab.*ef` == `1` >> `abc def =~ y.*z` == `0`
`!~` |  | НЕ подудара се са POSIX проширеним регуларним изразом (дозвољене су необавезне заставице, погледајте функцију string_regcomp) | >> `abc def !~ ab.*ef` == `0` >> `abc def !~ y.*z` == `1`
`==*` | 2.9 | Подудара се са маском где је дозвољено „*”, разликује величину слова (погледајте функцију string_match) | >> `abc def ==* a*f` == `1` >> `abc def ==* y*z` == `0`
`!!*` | 2.9 | НИЈЕ џокер маска у којој је дозвољено „*”, разликује величину слова (погледајте функцију string_match) | >> `abc def !!* a*f` == `0` >> `abc def !!* y*z` == `1`
`=*` | 1.8 | Подудара се са маском где је дозвољено „*”, не разликује величину слова (погледајте функцију string_match) | >> `abc def =* A*F` == `1` >> `abc def =* Y*Z` == `0`
`!*` | 1.8 | НИЈЕ џокер маска у којој је дозвољено „*”, не разликује величину слова (погледајте функцију string_match) | >> `abc def !* A*F` == `0` >> `abc def !* Y*Z` == `1`
`==-` | 2.9 | Је укључено, разликује величину слова | >> `abc def ==- bc` == `1` >> `abc def ==- xyz` == `0`
`!!-` | 2.9 | НИЈЕ укључено, разликује величину слова | >> `abc def !!- bc` == `0` >> `abc def !!- xyz` == `1`
`=-` | 2.9 | Је укључено, не разликује величину слова | >> `abc def =- BC` == `1` >> `abc def =- XYZ` == `0`
`!-` | 2.9 | НИЈЕ укључено, не разликује величину слова | >> `abc def !- BC` == `0` >> `abc def !- XYZ` == `1`
`==` |  | Једнако | >> `test == test` == `1` >> `test == string` == `0`
`!=` |  | Није једнако | >> `test != test` == `0` >> `test != string` == `1`
`<=` |  | Мање или једнако | >> `abc <= defghi` == `1` >> `abc <= abc` == `1` >> `defghi <= abc` == `0` >> `15 <= 2` == `0`
`<` |  | Мање | >> `abc < defghi` == `1` >> `abc < abc` == `0` >> `defghi < abc` == `0` >> `15 < 2` == `0`
`>=` |  | Веће или једнако | >> `defghi >= abc` == `1` >> `abc >= abc` == `1` >> `abc >= defghi` == `0` >> `15 >= 2` == `1`
`>` |  | Веће | >> `defghi > abc` == `1` >> `abc > abc` == `0` >> `abc > defghi` == `0` >> `15 > 2` == `1`

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

- цео број (примери: 5, -7)

- број у покретном зарезу (примери: 5.2, -7.5, 2.83e-2) (WeeChat ≥ 2.0)

- хексадецимални број (пример: 0xA3, -0xA3) (WeeChat ≥ 2.0)

Ако желите да форсирате поређење стрингова, можете сваки израз да уоквирите знацима навода, на пример:

- `50 > 100` враћа 0 (поређење бројева)

- `"50" > "100"` враћа 1 (поређење стрингова)

##### Променљиве

Листа развијених променљивих у изразу (према редоследу приоритета, од прве развијене, до последње):

Формат | Мин WeeChat | Опис | Примери
--- | --- | --- | ---
`${raw_hl:xxx}` | 4.2.0 | Сирови стринг (не израчунава се), са истицањем синтаксе (употребом боја). | >> `${raw_hl:${cut:1,,${rev:hello}}}` == `${cut:1,,${rev:hello}}` (са бојама)
`${raw:xxx}` | 3.1 | Сирови стринг (не израчунава се). | >> `${raw:${info:version}}` == `${info:version}`
`${hl:xxx}` | 4.2.0 | Стринг са истицањем синтаксе (употребом боја). | >> `${hl:${file.section.option}}` == `test ${variable}` (са бојама)
`${име}` | 3.4 | Корисничка променљива (дефинисана са `${define:име,вредност}`). | >> `${име}` == `вредност`
`${име}` |  | Променљива `name` из хеш табеле extra_vars. | >> `${име}` == `вредност`
`${weechat_xxx_dir}` | 3.2 | WeeChat директоријум: `${weechat_config_dir}`, `${weechat_data_dir}`, `${weechat_state_dir}`, `${weechat_cache_dir}` или `${weechat_runtime_dir}`. | >> `${weechat_config_dir}` == `/home/user/.config/weechat` >> `${weechat_data_dir}` == `/home/user/.local/share/weechat` >> `${weechat_state_dir}` == `/home/user/.local/state/weechat` >> `${weechat_cache_dir}` == `/home/user/.cache/weechat` >> `${weechat_runtime_dir}` == `/run/user/1000/weechat`
`${eval:xxx}` | 1.3 | Стринг који се израчунава. | >> `${eval:${date:${weechat.look.buffer_time_format}}}` == `19:02:45` (1) (1) са бојама, ако у опцији weechat.look.buffer_time_format постоје боје
`${eval_cond:xxx}` | 3.1 | Стринг који се израчунава као услов. | >> `${eval_cond:${window.win_width} > 100}` == `1`
`${esc:xxx}` `${\xxx}` | 1.0 | Стринг са означеним карактерима. | >> `${esc:prefix\tmessage}` == `prefix<TAB>message` >> `${\ua9}` == `©`
`${chars:опсег}` | 3.8 | Стринг са опсегом карактера, где је `опсег` једно од: - `digit` (`0123456789`) - `xdigit` (`0123456789abcdefABCDEF`) - `lower` (сва мала слова) - `upper` (сва велика слова) - `alpha` (сва слова) - `alnum` (сва слова и бројеви) - опсег карактара у формату `c1-c2` (`c1` кодна тачка мора бити нижа од или једнака са `c2`) | >> `${chars:digit}` == `0123456789` >> `${chars:xdigit}` == `0123456789abcdefABCDEF` >> `${chars:lower}` == `abcdefghijklmnopqrstuvwxyz` >> `${chars:J-V}` == `JKLMNOPQRSTUV` >> `${chars:←-↓}` == `←↑→↓`
`${lower:string}` | 3.6 | Стринг конвертован у мала слова. | >> `${lower:TEST}` == `test`
`${upper:string}` | 3.6 | Стринг конвертован у велика слова. | >> `${upper:test}` == `TEST`
`${hide:x,стринг}` | 1.1 | Стринг са скривеним карактерима (сви карактери у `стринг` се замењују са `x`). | >> `${hide:*,password}` == `********`
`${cut:макс,суфикс,стринг}` `${cut:+макс,суфикс,стринг}` | 1.8 | Стринг са `макс` карактера и необавезним `суфикс` ако се стринг сече. У формату `+макс`, суфикс се рачуна у максималну дужину. | >> `${cut:4,…,this is a test}` == `this…` >> `${cut:+4,…,this is a test}` == `t…` >> `${cut:2,>>,こんにちは世界}` == `こん>>`
`${cutscr:макс,суфикс,стринг}` `${cutscr:+макс,суфикс,стринг}` | 1.8 | Стринг са `макс` карактера приказаних на екрану, и необавезним `суфикс` ако се стринг сече. У формату `+макс`, суфикс се рачуна у максималну дужину. | >> `${cutscr:4,…,this is a test}` == `this…` >> `${cutscr:+4,…,this is a test}` == `thi…` >> `${cutscr:2,>>,こんにちは世界}` == `こ>>`
`${rev:xxx}` | 2.2 | Обрнути стринг (и кодови боја се обрћу, тако да стринг не би требало да садржи кодове боја). | >> `${rev:Hello, world!}` == `!dlrow ,olleH` >> `${rev:Hello, ${color:red}world!}` == `!dlrow30F ,olleH` (1) (1) нема боје, кôд боје је обрнут
`${revscr:xxx}` | 2.7 | Обрнути стринг за екран, кодови боја се не обрћу. | >> `${revscr:Hello, world!}` == `!dlrow ,olleH` >> `${revscr:Hello, ${color:red}world!}` == `!dlrow ,olleH` (1) (1) `,olleH` у црвеној боји
`${repeat:број,стринг}` | 2.3 | Поновљени стринг. | >> `${repeat:5,-}` == `-----`
`${length:xxx}` | 2.7 | Дужина стринга (број UTF-8 карактера), кодови боја се игноришу. | >> `${length:test}` == `4` >> `${length:こんにちは世界}` == `7`
`${lengthscr:xxx}` | 2.7 | Дужина стринга приказаног на екрану, кодови боја се игноришу. | >> `${lengthscr:test}` == `4` >> `${lengthscr:こんにちは世界}` == `14`
`${split:number,seps,flags,xxx}` | 3.3 | Дели стринг и враћа сагласно са `number`: - `count`: број ставки након поделе - `random`: произвољну ставку - цео број ≥ 1: ставку са индексом (1 = прва ставка) - цео број ≤ -1: ставку са индеком од краја (-1 = последња ставка, -2 = претпоследња ставка, итд.), `seps` је листа карактера који се користе као граничници (ако је празно, користи се запета), `flags` је листа заставица раздвојена са `+`: - `strip_left`: уклања граничнике са леве стране (почетка стринга) - `strip_right`: уклања граничнике са десне стране (краја стринга) - `collapse_seps`: стапа више узастопних граничника у један - `keep_eol`: задржава прелом линије за сваку вредност - `strip_items=xyz`: уклања карактере `x`, `y` и `z` са почетка/краја ставки - `max_items=N`: враћа максимално N ставки | >> `${split:1,,,abc,def,ghi}` == `abc` >> `${split:-1,,,abc,def,ghi}` == `ghi` >> `${split:count,,,abc,def,ghi}` == `3` >> `${split:random,,,abc,def,ghi}` == `def` >> `${split:3,,collapse_seps,abc,,,def,,,ghi}` == `ghi` >> `${split:3,,strip_items=-_,_-abc-_,_-def-_,_-ghi-_}` == `ghi` >> `${split:2, ,,this is a test}` == `is` >> `${split:2, ,strip_left+strip_right, this is a test }` == `is` >> `${split:2, ,keep_eol,this is a test}` == `is a test`
`${split_shell:number,xxx}` | 3.3 | Дели аргументе љуске и враћа сагласно са `number`: - `count`: број аргумената након поделе - `random`: произвољни аргумент - цео број ≥ 1: аргумент по индексу (1 = први аргумент) - цео број ≤ -1: аргумент по индексу од краја (-1 = последњи аргумент, -2 = претпоследњи аргумент, итд.) | >> `${split_shell:1,"first arg" arg2}` == `first arg` >> `${split_shell:-1,"first arg" arg2}` == `arg2` >> `${split_shell:count,"first arg" arg2}` == `2` >> `${split_shell:random,"first arg" arg2}` == `arg2`
`${re:xxx}` | 1.1 | Подаци регуларног израза: `0` = цео подударени стринг, `1` до `99` = ухваћена група, `+` = последња ухваћена група, `#` = индекс последње ухваћене групе (WeeChat ≥ 1.8), `repl_index` = индекс замене која се врши (почиње од 1) (WeeChat ≥ 3.3). | >> `${re:0}` == `test1 test2` >> `${re:1}` == `test1` >> `${re:2}` == `test2` >> `${re:+}` == `test2` >> `${re:#}` == `2` >> `${re:repl_index}` == `1`
`${color:име}` | 0.4.2 | Кôд WeeChat боје (име боје има и необавезне атрибуте), погледајте функцију color у вези подржаних формата. | >> `${color:red}red text` == `red text` (1) >> `${color:*214}bold orange text` == `bold orange text` (2) (1) у црвеној (2) подебљано наранџасто
`${modifier:име,подаци,стринг}` | 2.7 | Резултат модификатора, погледајте функцију hook_modifier_exec. | >> `${modifier:eval_path_home,,~}` == `/home/user` >> `${modifier:eval_path_home,directory=config,%h/irc.conf}` == `/home/user/.config/weechat/irc.conf`
`${info:име}` `${info:име,аргументи}` | 0.4.3 | Инфо из програма WeeChat или додатка, погледајте функцију info_get. | >> `${info:version}` == `1.0` >> `${info:nick_color_name,foo}` == `lightblue`
`${base_encode:base,xxx}` | 2.9 | Стринг кодиран у base 16, 32 или 64. | >> `${base_encode:16,test string}` == `7465737420737472696E67` >> `${base_encode:32,test string}` == `ORSXG5BAON2HE2LOM4======` >> `${base_encode:64,test string}` == `dGVzdCBzdHJpbmc=`
`${base_decode:base,xxx}` | 2.9 | Декодиран стринг из base 16, 32 или 64. | >> `${base_decode:16,7465737420737472696E67}` == `test string` >> `${base_decode:32,ORSXG5BAON2HE2LOM4======}` == `test string` >> `${base_decode:64,dGVzdCBzdHJpbmc=}` == `test string`
`${date}` `${date:xxx}` | 1.3 | Текући датум/време, у прилагођеном формату (see function util_strftimeval), подразумевани формат је `%F %T`. | >> `${date}` == `2015-06-30 19:02:45` >> `${date:%H:%M:%S}` == `19:02:45` >> `${date:%!.%.3}` == `1435683765.482`
`${env:ИМЕ}` | 1.2 | Име променљиве окружења `ИМЕ`. | >> `${env:HOME}` == `/home/user`
`${if:condition}` `${if:condition?true}` `${if:condition?true:false} | 1.8 | Тернарни оператор са условом, вредност када је услов истинит (није обавезна) и друга вредност када је услов неистинит (није обавезна). Ако се вредности не задају, враћа се „1” или „0”, у зависности од резултата услова. | >> `${if:${info:term_width}>80?big:small}` == `big`
`${calc:xxx}` | 2.7 | Резултат израза, у коме су подржане заграде и следећи оператори: `+`: сабирање `-`: одузимање `*`: множење `/`: дељење `//`: резултат дељења без разломљеног дела `%`: остатак при дељењу `**`: степен. | >> `${calc:5+2*3}` == `11` >> `${calc:(5+2)*3}` == `21` >> `${calc:10/4}` == `2.5` >> `${calc:10//4}` == `2` >> `${calc:9.2%3}` == `0.2` >> `${calc:2**16}` == `65536`
`${random:min,max}` | 3.3 | Случајни цео број из опсега `min` до `max` (укључујући и њих). | >> `${random:0,10}` == `3`
`${translate:xxx}` | 3.2 | Преведени стринг (зависи од језика који програм WeeChat користи за приказ порука). | >> `${translate:Plugin}` == `Extension` (1) (1) пример из француског
`${define:име,вредност}` | 3.4 | Дефинисање променљиве `име` постављене на `вредност`, која онда може да се користи у истом израчунатом изразу са `${име}`. | >> `${define:len,${calc:5+3}}${len}x${len}` == `8x8`
`${hdata_count:име[листа]}` `${hdata_count:име[показивач]}` | 4.4.0 | Број ставки у hdata листи или почевши од `показивач`. | >> `${hdata_count:buffer[gui_buffers]}` == `15`
`${sec.data.име}` |  | Вредност обезбеђених података `име`. | >> `${sec.data.libera_pass}` == `my_password`
`${фајл.одељак.опција}` |  | Вредност опције. | >> `${weechat.look.buffer_time_format}` == `%H:%M:%S`
`${име}` |  | Вредност локалне променљиве `име` у баферу. | >> `${nick}` == `FlashCode`
`${pointer}` |  | Променљива `pointer` из хеш табеле pointers. | >> `${buffer}` == `0x1234abcd`
`${hdata.пром1.пром2...}` `${hdata[листа].пром1.пром2...}` |  | Hdata вредност (показивачи `window` и `buffer` се подразумевано постављају на текући прозор/бафер), `листа` може бити име листе (пример: „gui_buffers”), показивач (пример: „0x1234abcd”) или име показивача (пример: „my_pointer”). Када је `var1` хеш табела, могу да се позову методе `keys()`, `values()`, `keys_sorted()`, `keys_values()` и `keys_values_sorted()`. | >> `${buffer[gui_buffers].full_name}` == `core.weechat` >> `${buffer[my_buffer_pointer].full_name}` == `core.weechat` >> `${window.buffer.number}` == `1` >> `${buffer.local_variables.keys_values()}` == `plugin:core,name:weechat` >> `${buffer.local_variables.plugin}` == `core`

#### string_dyn_alloc

WeeChat ≥ 1.8.

Алоцира динамички стринг, са променљивом дужином.
Интерно, структура се алоцира показивачем на стринг, алоцирану величину и текућу дужину стринга.

У свим string_dyn_* функцијама се користи само показивач показивача на стринг (**string).

Прототип:

    char **weechat_string_dyn_alloc (int size_alloc);

Аргументи:

- size_alloc: почетна алоцирана величина (мора бити већа од нуле)

Повратна вредност:

- показивач на динамички стринг

C пример:

    char **string = weechat_string_dyn_alloc (256);

Белешка | Ова функција није доступна у API скриптовања.

#### string_dyn_copy

WeeChat ≥ 1.8.

Копира стринг у динамички стринг.

Показивач *string може д асе промени ако се стринг реалоцира (у случају да нема довољно слободног простора за копирање стринга).

Прототип:

    int weechat_string_dyn_copy (char **string, const char *new_string);

Аргументи:

- string: показивач на динамички стринг

- new_string: стринг који се копира

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    char **string = weechat_string_dyn_alloc (256);
    if (weechat_string_dyn_copy (string, "test"))
    {
        /* OK */
    }
    else
    {
        /* грешка */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### string_dyn_concat

WeeChat ≥ 1.8, ажурирано у верзији 3.0.

Надовезује стринг на динамички стринг.

Показивач на стринг *string може да се промени ако се стринг реалоцира (у случају да нема довољно простора за надовезивање стринга).

In case of error, the dynamic string is left unchanged.

Прототип:

    int weechat_string_dyn_concat (char **string, const char *add, int bytes);

Аргументи:

- string: показивач на динамички стринг

- add: стринг који се додаје

- bytes: максимални број бајтова у add који могу да се надовежу, мора бити мање или једнако дужини add (-1 = аутоматски: надовезује се комплетан стринг add) (WeeChat ≥ 3.0)

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    char **string = weechat_string_dyn_alloc (256);
    if (weechat_string_dyn_copy (string, "test"))
    {
        if (weechat_string_dyn_concat (string, "abc", -1))
        {
            /* ... */
        }
    }

Белешка | Ова функција није доступна у API скриптовања.

#### string_dyn_free

WeeChat ≥ 1.8.

Ослобађа динамички стринг.

Прототип:

    char *weechat_string_dyn_free (char **string, int free_string);

Аргументи:

- string: показивач на динамички стринг

- free_string: ослобађање самог стринга; ако је 0, онда садржај *string остаје важећи и након позива ове функције

Повратна вредност:

- показивач на стринг ако је free_string 0, у супротном NULL

C пример:

    char **string = weechat_string_dyn_alloc (256);
    if (weechat_string_dyn_concat (string, "test"))
    {
        /* OK */
    }
    else
    {
        /* грешка */
    }
    /* ... */
    weechat_string_dyn_free (string, 1);

Белешка | Ова функција није доступна у API скриптовања.

#### string_concat

WeeChat ≥ 4.2.0.

Спаја више стрингова користећи граничник.

Прототип:

    const char *weechat_string_concat (const char *separator, ...);

Аргументи:

- separator: стринг граничник који се умеће између спојених стрингова (може да буде NULL или празан стринг)

Белешка | Последњи аргумент MUST увек да буде NULL. Може да се употреби макро `WEECHAT_STR_CONCAT`, тамо где није потребна завршна NULL вредност (препоручује се уптореба овог макроа).

Повратна вредност:

- спојени стринг

C пример:

    const char *result = weechat_string_concat (" / ", "абв", "гдђ", "ежз", NULL);  /* резултат == "абв / гдђ / ежз" */

    /* са макроом */
    const char *result = WEECHAT_STR_CONCAT(" / ", "абв", "гдђ", "ежз");  /* резултат == "абв / гдђ / ежз" */

Белешка | Ова функција није доступна у API скриптовања.

### 3.4. UTF-8

Неке UTF-8 стринг функције.

#### utf8_has_8bits

Проверава да ли стринг има 8-битне карактере.

Прототип:

    int weechat_utf8_has_8bits (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- 1 ако стринг има 8-битне карактере, 0 ако има само 7-битне карактере

C пример:

    if (weechat_utf8_has_8bits (string))
    {
        /* ... */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_is_valid

Ажурирано у верзији 1.4.

Проверава да ли је стринг важећи UTF-8.

Прототип:

    int weechat_utf8_is_valid (const char *string, int length, char **error);

Аргументи:

- string: стринг

- length: максимални број UTF-8 карактера који може да се провери; ако је ≤ 0, проверава се цео стринг (WeeChat ≥ 1.4)

- error: ако није NULL, *error се поставља на показивач на први неважећи UTF-8 карактер у стрингу, ако такав постоји

Повратна вредност:

- 1 ако је UTF-8 стринг исправан, у супротном 0

C пример:

    char *error;
    if (weechat_utf8_is_valid (string, -1, &error))
    {
        /* ... */
    }
    else
    {
        /* "error" показује на при неважећи карактер */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_normalize

Нормализује UTF-8 стринг: уклања све карактере који нису UTF-8 и замењује их карактером.

Прототип:

    void weechat_utf8_normalize (char *string, char replacement);

Аргументи:

- string: стринг

- replacement: карактер којим се замењују неисправни карактери

C пример:

    weechat_utf8_normalize (string, '?');

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_prev_char

Ажурирано у верзији 1.3.

Враћа показивач на претходни UTF-8 карактер у стрингу.

Прототип:

    const char *weechat_utf8_prev_char (const char *string_start,
                                        const char *string);

Аргументи:

- string_start: почетак стринга (функција неће вратити карактер пре овог показивача)

- string: показивач на стринг (мора бити ≥ string_start)

Повратна вредност:

- показивач на претходни UTF-8 карактер, NULL у случају да се не пронађе (достигнут је почетак стринга) (WeeChat ≥ 1.3: враћени показивач је const char * уместо char *)

C пример:

    const char *prev_char = weechat_utf8_prev_char (string, ptr_in_string);

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_next_char

Ажурирано у верзији 1.3.

Враћа показивач на наредни UTF-8 карактер у стрингу.

Прототип:

    const char *weechat_utf8_next_char (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- показивач на наредни UTF-8 карактер, NULL ако се не пронађе (достигнут је крај стринга) (WeeChat ≥ 1.3: враћени показивач је const char * уместо char *)

C пример:

    const char *next_char = weechat_utf8_next_char (string);

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_char_int

Враћа UTF-8 карактер као цео број.

Прототип:

    int weechat_utf8_char_int (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- UTF-8 карактер као цео број

C пример:

    int char_int = weechat_utf8_char_int ("être");  /* "ê" као цео број */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_char_size

Враћа величину UTF-8 карактера (у бајтовима).

Прототип:

    int weechat_utf8_char_size (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- величина UTF-8 карактера (у бајтовима)

C пример:

    int char_size = weechat_utf8_char_size ("être");  /* == 2 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_strlen

Враћа дужину UTF-8 стринга (у UTF-8 карактерима).

Прототип:

    int weechat_utf8_strlen (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- дужина UTF-8 стринга (број UTF-8 карактера)

C пример:

    int length = weechat_utf8_strlen ("chêne");  /* == 5 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_strnlen

Враћа дужину UTF-8 стринга (у UTF-8 карактерима), за максимално bytes у стрингу.

Прототип:

    int weechat_utf8_strnlen (const char *string, int bytes);

Аргументи:

- string: стринг

- bytes: максимални број бајтова

Повратна вредност:

- дужина UTF-8 стринга (број UTF-8 карактера)

C пример:

    int length = weechat_utf8_strnlen ("chêne", 4);  /* == 3 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_strlen_screen

Враћа број карактера потребних на екрану да се прикаже UTF-8 стринг.

Прототип:

    int weechat_utf8_strlen_screen (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- број карактера на екрану који су потребни да се испише UTF-8 стринг

C пример:

    int length_on_screen = weechat_utf8_strlen_screen ("é");  /* == 1 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_char_size_screen

Ажурирано у верзији 3.8.

Враћа број карактера потребних на екрану за испис UTF-8 карактера.

Прототип:

    int weechat_utf8_char_size_screen (const char *string);

Аргументи:

- string: стринг

Повратна вредност:

- број карактера на екрану потребних за испис UTF-8 карактера:

  - -1: карактер који не може да се одштампа

  - ≥ 0: карактер који може да се одштампа

Резултат је вредност враћена из функције `wcwidth` (погледајте `man wcwidth`), уз изузетак следећих карактера који у програму WeeChat имају посебну улогу:

- U+0009 (Табулатор): вредност опције weechat.look.tab_width ↗

- U+0001 (1) до U+001F (31), осим U+0009 (Табулатор): 1

- U+00AD (173, мека цртица): -1

- U+200B (8203, размак нулте ширине): -1

C пример:

    int length_on_screen = weechat_utf8_char_size_screen ("é");  /* == 1 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_add_offset

Ажурирано у верзији 1.3.

Помера унапред N карактера у UTF-8 стрингу.

Прототип:

    const char *weechat_utf8_add_offset (const char *string, int offset);

Аргументи:

- string: стринг

- offset: број карактера

Повратна вредност:

- показивач на стринг, N карактера иза (NULL ако не може да се достигне) (WeeChat ≥ 1.3: враћени показивач је const char * уместо char *)

C пример:

    const char *str = "chêne";
    const char *str2 = weechat_utf8_add_offset (str, 3);  /* показује на "ne" */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_real_pos

Враћа реалну позицију у UTF-8 стрингу.

Прототип:

    int weechat_utf8_real_pos (const char *string, int pos);

Аргументи:

- string: стринг

- pos: позиција (број карактера)

Повратна вредност:

- реална позиција (у бајтовима)

C пример:

    int pos = weechat_utf8_real_pos ("chêne", 3);  /* == 4 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_pos

Враћа позицију у UTF-8 стрингу.

Прототип:

    int weechat_utf8_pos (const char *string, int real_pos);

Аргументи:

- string: стринг

- real_pos: позиција (бајтови)

Повратна вредност:

- позиција (број карактера)

C пример:

    int pos = weechat_utf8_pos ("chêne", 4);  /* == 3 */

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_strndup

Враћа дупликат стринга, са максимално length карактера.

Прототип:

    char *weechat_utf8_strndup (const char *string, int length);

Аргументи:

- string: стринг

- length: макс број карактера који може да се дуплира

Повратна вредност:

- дуплирани стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *string = weechat_utf8_strndup ("chêne", 3);  /* враћа "chê" */
    /* ... */
    free (string);

Белешка | Ова функција није доступна у API скриптовања.

#### utf8_strncpy

WeeChat ≥ 3.8.

Копира максимално length карактера у други стринг и на крај додаје null бајт.

Прототип:

    void weechat_utf8_strncpy (char *dest, const char *string, int length);

Аргументи:

- dest: одредишни стринг (мора да буде довољно дугачак)

- string: стринг

- length: максимални број карактера који може да се копира

C пример:

    char dest[256];

    weechat_utf8_strncpy (dest, "chêne", 3);  /* copies "chê" to dest */

Белешка | Ова функција није доступна у API скриптовања.

### 3.5. Криптографија

Неке криптографске функције.

#### crypto_hash

WeeChat ≥ 2.8.

Израчунава хеш података.

Прототип:

    int weechat_crypto_hash (const void *data, int data_size, const char *hash_algo,
                             void *hash, int *hash_size);

Аргументи:

- data: подаци који треба да се хеширају

- data_size: број бајтова у data који се хешира

- hash_algo: хеш алгоритам, погледајте табелу испод

- hash: показивач на хеш променљиву која се користи за чување резултата хеширања (бафер мора бити довољне величине која зависи од алгоритма, погледајте табелу испод)

- hash_size: показивач на променљиву која се користи за чување величине израчунатог хеша (у бајтовима) (може да буде NULL)

Подржани хеш алгоритми:

Вредност | Алгоритам | Величина хеша | Напомене
--- | --- | --- | ---
`crc32` | CRC32 | 4 бајта (32 бита) | Није хеш алгоритам у криптографском смислу.
`md5` | MD5 | 16 бајтова (128 бита) | Слаб, не препоручује се за криптографску употребу.
`sha1` | SHA-1 | 20 бајтова (160 бита) | Слаб, не препоручује се за криптографску употребу.
`sha224` | SHA-224 | 28 бајтова (224 бита) |
`sha256` | SHA-256 | 32 бајта (256 бита) |
`sha384` | SHA-384 | 48 бајтова (384 бита) |
`sha512` | SHA-512 | 64 бајта (512 бита) |
`sha512-224` | SHA-512/224 | 28 бајтова (224 бита) | Алгоритам је доступан у libgcrypt ≥ 1.9.4.
`sha512-256` | SHA-512/256 | 32 бајта (256 бита) | Алгоритам је доступан у libgcrypt ≥ 1.9.4.
`sha3-224` | SHA3-224 | 28 бајтова (224 бита) | Алгоритам је доступан у libgcrypt ≥ 1.7.0.
`sha3-256` | SHA3-256 | 32 бајта (256 бита) | Алгоритам је доступан у libgcrypt ≥ 1.7.0.
`sha3-384` | SHA3-384 | 48 бајтова (384 бита) | Алгоритам је доступан у libgcrypt ≥ 1.7.0.
`sha3-512` | SHA3-512 | 64 бајта (512 бита) | Алгоритам је доступан у libgcrypt ≥ 1.7.0.
`blake2b-160` | BLAKE2B-160 | 20 бајтова (160 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2b-256` | BLAKE2B-256 | 32 бајта (256 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2b-384` | BLAKE2B-384 | 48 бајтова (384 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2b-512` | BLAKE2B-512 | 64 бајта (512 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2s-128` | BLAKE2S-128 | 16 бајтова (128 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2s-160` | BLAKE2S-160 | 20 бајтова (160 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2s-224` | BLAKE2S-224 | 28 бајтова (224 бита) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.
`blake2s-256` | BLAKE2S-256 | 32 бајта (256 бита) ) | Алгоритам је доступан у libgcrypt ≥ 1.8.0.

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    const char *data = "abcdefghijklmnopqrstuvwxyz";
    char hash[256 / 8];
    int rc, hash_size;
    rc = weechat_crypto_hash (data, strlen (data), "sha256", hash, &hash_size);
    /* rc == 1, hash_size == 32 и хеш је бафер са:
       71 c4 80 df 93 d6 ae 2f 1e fa d1 44 7c 66 c9 52 5e 31 62 18 cf 51 fc 8d 9e d8 32 f2 da f1 8b 73 */

Белешка | Ова функција није доступна у API скриптовања.

#### crypto_hash_file

WeeChat ≥ 3.7.

Израчунава хеш фајла.

Прототип:

    int weechat_crypto_hash_file (const char *filename, const char *hash_algo,
                                  void *hash, int *hash_size);

Аргументи:

- filename: путања и име фајла

- hash_algo: хеш алгоритам, погледајте табелу у функцији crypto_hash

- hash: показивач на хеш променљиву која се користи за чување резултата хеширања (бафер мора бити довољне величине која зависи од алгоритма, погледајте табелу у функцији crypto_hash)

- hash_size: показивач на променљиву која се користи за чување величине израчунатог хеша (у бајтовима) (може да буде NULL)

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    char hash[256 / 8];
    int rc, hash_size;
    rc = weechat_crypto_hash_file ("/path/to/file", "sha256", hash, &hash_size);
    /* rc == 1, hash_size == 32 и хеш је бафер са:
       71 c4 80 df 93 d6 ae 2f 1e fa d1 44 7c 66 c9 52 5e 31 62 18 cf 51 fc 8d 9e d8 32 f2 da f1 8b 73 */

Белешка | Ова функција није доступна у API скриптовања.

#### crypto_hash_pbkdf2

WeeChat ≥ 2.8.

Израчунава PKCS#5 Passphrase Based Key Derivation Function број 2 (PBKDF2) хеш података.

Прототип:

    int weechat_crypto_hash_pbkdf2 (const void *data, int data_size,
                                    const char *hash_algo,
                                    const void *salt, int salt_size,
                                    int iterations,
                                    void *hash, int *hash_size);

Аргументи:

- data: подаци који треба да се хеширају

- data_size: број бајтова у data који се хешира

- hash_algo: хеш алгоритам који се користи у функцији за извођење кључа, погледајте табелу у функцији crypto_hash

- salt: со

- salt_size: број бајтова у salt

- iterations: број итерација

- hash: показивач на хеш променљиву која се користи за чување резултата (бафер мора бити довољне величине која зависи од алгоритма, погледајте табелу у функцији crypto_hash)

- hash_size: показивач на променљиву која се користи за чување величине израчунатог хеша (у бајтовима) (може да буде NULL)

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    const char *data = "abcdefghijklmnopqrstuvwxyz";
    const char *salt = "12345678901234567890123456789012";  /* 32 bytes */
    char hash[256 / 8];
    int rc, hash_size;
    rc = weechat_crypto_hash_pbkdf2 (data, strlen (data), "sha256", salt, strlen (salt), 100000,
                                     hash, &hash_size);
    /* rc == 1, hash_size == 32 и хеш је бафер са:
       99 b3 5e 42 53 d1 a7 a8 49 c1 dc 2c e2 53 c2 b6 6d a1 8b dc 6e 78 a7 06 e0 ef 34 db 0a 7a a2 bb */

Белешка | Ова функција није доступна у API скриптовања.

#### crypto_hmac

WeeChat ≥ 3.2.

Израчунава keyed-hash message authentication code (HMAC).

Прототип:

    int weechat_crypto_hmac (const void *key, int key_size, const void *message, int message_size,
                             int hash_algo, void *hash, int *hash_size);

Аргументи:

- key: кључ

- key_size: број бајтова у key

- message: порука

- message_size: број бајтова у message

- hash_algo: хеш алгоритам, погледајте табелу у функцији crypto_hash

- hash: показивач на хеш променљиву која се користи за чување резултата (бафер мора бити довољне величине која зависи од алгоритма, погледајте табелу у функцији crypto_hash)

- hash_size: показивач на променљиву која се користи за чување величине израчунатог хеша (у бајтовима) (може да буде NULL)

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    const char *key = "the key";
    const char *message = "the message";
    char hash[256 / 8];
    int rc, hash_size;
    rc = weechat_crypto_hmac (key, strlen (key), message, strlen (message), "sha256", hash, &hash_size);
    /* rc == 1, hash_size == 32 и хеш је бафер са:
       47 36 67 02 fc bc b1 97 a4 25 e6 7a b9 52 92 bd 15 9a 66 91 9c fb 94 b0 b4 9a 39 cb c0 24 2d 7b */

Белешка | Ова функција није доступна у API скриптовања.

### 3.6. Директоријуми

Неке функције у вези директоријума.

#### mkdir_home

Ажурирано у верзији 3.2.

Креира директоријум у WeeChat почетном директоријуму.

Прототип:

    int weechat_mkdir_home (char *directory, int mode);

Аргументи:

- directory: име директоријума који трба да се креира; може почети једним од следећих стрингова чиме се форсира одређени WeeChat директоријум (WeeChat ≥ 3.2):

  - `${weechat_config_dir}`

  - `${weechat_data_dir}` (подразумевано)

  - `${weechat_state_dir}`

  - `${weechat_cache_dir}`

  - `${weechat_runtime_dir}`

- mode: режим за директоријум

Повратна вредност:

- 1 ако је директоријум успешно креиран, 0 ако је дошло до грешке

C пример:

    if (!weechat_mkdir_home ("${weechat_cache_dir}/temp", 0755))
    {
        /* грешка */
    }

Скрипта (Python):

    # прототип
    def mkdir_home(directory: str, mode: int) -> int: ...

    # пример
    weechat.mkdir_home("${weechat_cache_dir}/temp", 0755)

#### mkdir

Креира директоријум.

Прототип:

    int weechat_mkdir (char *directory, int mode);

Аргументи:

- directory: име директоријума који се креира

- mode: режим за директоријум

Повратна вредност:

- 1 ако је директоријум успешно креиран, 0 ако је дошло до грешке

C пример:

    if (!weechat_mkdir ("/tmp/mydir", 0755))
    {
        /* грешка */
    }

Скрипта (Python):

    # прототип
    def mkdir(directory: str, mode: int) -> int: ...

    # пример
    weechat.mkdir("/tmp/mydir", 0755)

#### mkdir_parents

Креира директоријум и ако је потребно, и родитељ директоријуме.

Прототип:

    int weechat_mkdir_parents (char *directory, int mode);

Аргументи:

- directory: име директоријума који се креира

- mode: режим за директоријум

Повратна вредност:

- 1 ако је директоријум успешно креиран, 0 ако је дошло до грешке

C пример:

    if (!weechat_mkdir_parents ("/tmp/my/dir", 0755))
    {
        /* грешка */
    }

Скрипта (Python):

    # прототип
    def mkdir_parents(directory: str, mode: int) -> int: ...

    # пример
    weechat.mkdir_parents("/tmp/my/dir", 0755)

#### exec_on_files

Ажурирано у верзијама 1.5, 2.0.

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

Прототип:

    void weechat_exec_on_files (const char *directory,
                                int recurse_subdirs,
                                int hidden_files,
                                void (*callback)(void *data,
                                                 const char *filename),
                                void *callback_data);

Аргументи:

- directory: директоријум за претрагу фајлова

- recurse_subdirs: 1 да се спушта у поддиректоријуме (WeeChat ≥ 2.0)

- hidden_files: 1 да се укључе и скривени фајлови, у супротном 0

- callback: функција која се позива за сваки пронађени фајл, аргументи:

  - void *data: показивач

  - const char *filename: пронађено име фајла

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

C пример:

    void callback (void *data, const char *filename)
    {
        /* ... */
    }
    ...
    weechat_exec_on_files ("/tmp", 0, 0, &callback, NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### file_get_content

WeeChat ≥ 0.3.1.

Враћа садржај текст фајла у стрингу.

Прототип:

    char *weechat_file_get_content (const char *filename);

Аргументи:

- filename: путања и име фајла

Повратна вредност:

- садржај фајла као стринг (након употребе мора да се ослободи позивом „free”)

C пример:

    char *content;

    content = weechat_file_get_content ("/tmp/test.txt");
    /* ... */
    free (content);

Белешка | Ова функција није доступна у API скриптовања.

#### file_copy

WeeChat ≥ 3.3.

Копира фајл на другу локацију.

Прототип:

    int weechat_file_copy (const char *from, const char *to);

Аргументи:

- from: изворишни фајл

- to: одредишни фајл

Повратна вредност:

- 1 ако је копирање OK, 0 у случају грешке

C пример:

    if (weechat_file_copy ("/tmp/test.txt", "/path/to/test2.txt"))
    {
        /* OK */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### file_compress

WeeChat ≥ 3.7.

Компресује фајл са gzip или zstd.

Прототип:

    int weechat_file_compress (const char *from, const char *to,
                               const char *compressor, int compression_level);

Аргументи:

- from: изворишни фајл

- to: одредишни фајл

- compressor: компресор који треба да се користи, једно од:

  - gzip: gzip компресија

  - zstd: zstandard компресија (доступно само ако је zstd било укључено у време када је WeeChat компајлиран)

- compression_level: ниво компресије, између 1 (брзо, ниска компресија) и 100 (споро, најбоља компресија)

Повратна вредност:

- 1 ако је копирање OK, 0 у случају грешке

C пример:

    if (weechat_file_compress ("/tmp/test.txt", "/tmp/test.txt.zst", "zstd", 50))
    {
        /* OK */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### file_compare

WeeChat ≥ 4.7.0.

Пореди садржаје два фајла.

Прототип:

    int weechat_file_compare (const char *filename1, const char *filename2);

Аргументи:

- filename1: први фајл за поређење

- filename2: други фајл за поређење

Повратна вредност:

- 0: оба фајла имају исти садржај

- 1: садржај се разликује

- 2: грешка (фајл није пронађен или грешка при читању)

C пример:

    if (weechat_file_compare ("/tmp/test.txt", "/tmp/test2.txt") == 0)
    {
        /* исти садржај */
    }

Белешка | Ова функција није доступна у API скриптовања.

### 3.7. Алати

Неке корисне функције.

#### util_parse_int

WeeChat ≥ 4.8.0.

Парсира цео број типа „int” у стрингу.

Прототип:

    int weechat_util_parse_int (const char *string, int base, int *result);

Аргументи:

- string: стринг који се парсира

- base: може да буде 0 (аутоматски) или цео број између 2 и 36 (укључујући)

- result: показивач на ажурирану променљиву ако је стринг исправно парсиран (ако је показивач NULL, пронађени број се не враћа)

Повратна вредност:

- 1: OK

- 0: грешка

Следећи стрингови нису исправни и функција враћа 0:

- празан стринг

- број са вишком не-цифара на крају

- број < INT_MIN (минимална вредност за променљиву типа „int”)

- број > INT_MAX (максимална вредност за променљиву типа „int”)

- неисправни цео број за наведену base

C примери:

    int number;
    if (weechat_util_parse_int ("1234", 10, &number))
    {
        /* number == 1234 */
    }
    if (!weechat_util_parse_int ("abc", 10, &number))
    {
        /* грешка парсирања, број није измењен */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### util_parse_long

WeeChat ≥ 4.8.0.

Парсира цео број типа „long” у стрингу.

Прототип:

    int weechat_util_parse_long (const char *string, int base, long *result);

Аргументи:

- string: стринг који се парсира

- base: може да буде 0 (аутоматски) или цео број између 2 и 36 (укључујући)

- result: показивач на ажурирану променљиву ако је стринг исправно парсиран (ако је показивач NULL, пронађени број се не враћа)

Повратна вредност:

- 1: OK

- 0: грешка

Следећи стрингови нису исправни и функција враћа 0:

- празан стринг

- број са вишком не-цифара на крају

- број < LONG_MIN (минимална вредност за променљиву типа „long”)

- број > LONG_MAX (максимална вредност за променљиву типа „long”)

- неисправни цео број за наведену base

C примери:

    long number;
    if (weechat_util_parse_long ("1234", 10, &number))
    {
        /* number == 1234 */
    }
    if (!weechat_util_parse_long ("abc", 10, &number))
    {
        /* грешка парсирања, број није измењен */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### util_parse_longlong

WeeChat ≥ 4.8.0.

Парсира цео број типа „long long” у стрингу.

Прототип:

    int weechat_util_parse_longlong (const char *string, int base, long long *result);

Аргументи:

- string: стринг који се парсира

- base: може да буде 0 (аутоматски) или цео број између 2 и 36 (укључујући)

- result: показивач на ажурирану променљиву ако је стринг исправно парсиран (ако је показивач NULL, пронађени број се не враћа)

Повратна вредност:

- 1: OK

- 0: грешка

Следећи стрингови нису исправни и функција враћа 0:

- празан стринг

- број са вишком не-цифара на крају

- број < LLONG_MIN (минимална вредност за променљиву типа „long long”)

- број > LLONG_MAX (максимална вредност за променљиву типа „long long”)

- неисправни цео број за наведену base

C примери:

    long long number;
    if (weechat_util_parse_longlong ("1234", 10, &number))
    {
        /* number == 1234 */
    }
    if (!weechat_util_parse_longlong ("abc", 10, &number))
    {
        /* грешка парсирања, број није измењен */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### util_timeval_cmp

Пореди две „timeval” структуре.

Прототип:

    int weechat_util_timeval_cmp (struct timeval *tv1, struct timeval *tv2);

Аргументи:

- tv1: прва „timeval” структура

- tv2: друга „timeval” структура

Повратна вредност:

- -1 ако је tv1 < tv2

- нула ако је tv1 == tv2

- +1 ако је tv1 > tv2

C пример:

    if (weechat_util_timeval_cmp (&tv1, &tv2) > 0)
    {
        /* tv1 > tv2 */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### util_timeval_diff

Ажурирано у верзији 1.1.

Враћа разлику (у микросекундама) између две „timeval” структуре.

Прототип:

    long long weechat_util_timeval_diff (struct timeval *tv1, struct timeval *tv2);

Аргументи:

- tv1: прва „timeval” структура

- tv2: друга „timeval” структура

Повратна вредност:

- разлика у микросекундама

Белешка | У програму WeeChat верзије ≤ 1.0, враћена вредност је била у милисекундама.

C пример:

    long long diff = weechat_util_timeval_diff (&tv1, &tv2);

Белешка | Ова функција није доступна у API скриптовања.

#### util_timeval_add

Ажурирано у верзији 1.1.

Додаје timeval структури интервал (у микросекундама).

Прототип:

    void weechat_util_timeval_add (struct timeval *tv, long long interval);

Аргументи:

- tv: timeval структура

- interval: интервал (у микросекундама)

Белешка | У програму WeeChat верзије ≤ 1.0, интервал је изражаван у милисекундама.

C пример:

    weechat_util_timeval_add (&tv, 2000000);  /* додаје 2 секунде */

Белешка | Ова функција није доступна у API скриптовања.

#### util_get_time_string

WeeChat ≥ 0.3.2, ажурирано у верзији 1.3.

Враћа датум/време као стринг изграђен помоћу „strftime” у формату дефинисаном у опцији weechat.look.time_format.

Прототип:

    const char *weechat_util_get_time_string (const time_t *date);

Аргументи:

- date: показивач на датум

Повратна вредност:

- показивач на стринг са датумом/временом

C пример:

    time_t date = time (NULL);
    weechat_printf (NULL, "date: %s",
                    weechat_util_get_time_string (&date));

Белешка | Ова функција није доступна у API скриптовања.

#### util_strftimeval

WeeChat ≥ 4.2.0, ажурирано у 4.3.0, 4.7.0.

Форматира датум и време као функција `strftime` из C библиотеке, користећи `struct timeval` као улаз уз подршку за додатне спецификаторе.

Прототип:

    int weechat_util_strftimeval (char *string, int max, const char *format, struct timeval *tv);

Аргументи:

- string: бафер у који се смешта форматирани стринг

- max: величина стринга

- format: формат, исто као за strftime функцију, са следећим додатним спецификаторима:

  - `%@`: враћа датум изражен у Coordinated Universal Time (UTC) уместо као датум релативан у односу на временску зону коју је задао корисник (WeeChat ≥ 4.7.0)

  - `%.N` где је `N` између 1 и 6: микросекунде допуњене нулама на N цифара (на пример `%.3` за милисекунде)

  - `%f`: алијас за `%.6`

  - `%!`: временска ознака као цео број, у секундама (вредност од tv→tv_sec)

Повратна вредност:

- број бајтова постављен у string (вредност враћена из функције strftime)

C пример:

    char time[256];
    struct timeval tv;
    gettimeofday (&tv, NULL);
    weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
    /* резултат: 2023-12-26T18:10:04.460509Z */

Белешка | Ова функција није доступна у API скриптовања.

#### util_parse_time

WeeChat ≥ 4.2.0, ажурирано у верзији 4.8.0.

Парсира датум/време са подршком за милисекунде.

Прототип:

    int util_parse_time (const char *datetime, struct timeval *tv);

Аргументи:

- date: датум/време (погледајте подржане формате испод)

- tv: парсиран датум/време („timeval” структура)

Подржани формат датума/времена (под претпоставком да је текуће време `2025-08-30 21:04:55` (Европа/Париз), тако да је померај временске зоне `+02:00`, а UTC време је `19:04:55`):

Формат | Примери
--- | ---
Датум (поноћ) | `2025-08-30`
ISO 8601, датум + локално време | `2025-08-30T21:04:55 2025-08-30T21:04:55.123456`
ISO 8601, датум + локално време + померај | `2025-08-30T16:04:55-03 2025-08-30T16:04:55-0300 2025-08-30T21:04:55+0200 2025-08-30T21:04:55+02:00 2025-08-30T21:04:55.123456+0200`
ISO 8601, датум + UTC време | `2025-08-30T19:04:55Z 2025-08-30T19:04:55.123456Z`
RFC 3339, датум + локално време | `2025-08-30 21:04:55 2025-08-30 21:04:55.123456`
RFC 3339, датум + локално време + померај | `2025-08-30 16:04:55-03 2025-08-30 16:04:55-0300 2025-08-30 21:04:55+0200 2025-08-30 21:04:55 +0200 2025-08-30 21:04:55+02:00 2025-08-30 21:04:55 +02:00 2025-08-30 21:04:55.123456+0200 2025-08-30 21:04:55.123456 +02:00`
RFC 3339, датум + UTC време | `2025-08-30 19:04:55Z 2025-08-30 19:04:55.123456Z`
Локално време | `21:04:55 21:04:55.123456`
Локално време + померај | `16:04:55-03 16:04:55-0300 21:04:55+0200 21:04:55 +0200 21:04:55+02:00 21:04:55 +02:00 21:04:55.123456+0200 21:04:55.123456 +02:00`
UTC време | `19:04:55Z 19:04:55.123456Z`
Датум као временска ознака | `1756580695 1756580695.123456 1756580695,123456`

Напомене:

- За ISO 8601, граничник између датума и времена је `T` (велико слово) или `t` (мало слово).

- За UTC време, последњи карактер је `Z` (велико слово) или `z` (мало слово).

- Формат помераја временске зоне је једно од:

  - `[+/-]чч:мм` (сати и минуте)

  - `[+/-]ччмм` (сати и минуте)

  - `[+/-]чч` (сати).

- Прецизност након секунди може да буде од једне десетинке секунде (1 цифра, на пример `21:04:55.1`) до једне микросекунде (6 цифара, на пример `21:04:55.123456`).
  Тачка (`.`) или запета (`,`) могу да разсвајају секунде од осталих цифара.

Повратна вредност:

- 1 ако је OK, 0 у случају грешке

C примери:

    struct timeval tv;

    weechat_util_parse_time ("2025-08-30T19:04:55.123456Z", &tv);  /* == 1 */
    /* резултат: tv.tv_sec == 1756580695, tv.tv_usec = 123456 */

    weechat_util_parse_time ("2025-08-30 21:04:55.123456 +02:00", &tv);  /* == 1 */
    /* исти резултат */

    weechat_util_parse_time ("21:04:55.123456", &tv);  /* == 1 */
    /* исти резултат */

Белешка | Ова функција није доступна у API скриптовања.

#### util_version_number

WeeChat ≥ 0.3.9, ажурирано у верзији 4.7.0.

Конвертује стринг са верзијом програма WeeChat у број.

Прототип:

    unsigned long weechat_util_version_number (const char *version);

Аргументи:

- version: верзија програма WeeChat као стринг (пример: „0.3.9” или „0.3.9-dev”)

C пример:

    version_number = weechat_util_version_number ("0.3.8");      /* == 0x00030800 */
    version_number = weechat_util_version_number ("0.3.9-dev");  /* == 0x00030900 */
    version_number = weechat_util_version_number ("0.3.9-rc1");  /* == 0x00030900 */
    version_number = weechat_util_version_number ("0.3.9");      /* == 0x00030900 */
    version_number = weechat_util_version_number ("1.0");        /* == 0x01000000 */
    version_number = weechat_util_version_number ("4.0.0");      /* == 0x04000000 */

Белешка | Ова функција није доступна у API скриптовања.

### 3.8. Сортиране листе

Функције сортираних листи.

#### list_new

Креира нову листу.

Прототип:

    struct t_weelist *weechat_list_new ();

Повратна вредност:

- показивач на нову листу

C пример:

    struct t_weelist *list = weechat_list_new ();

Скрипта (Python):

    # прототип
    def list_new() -> str: ...

    # пример
    list = weechat.list_new()

#### list_add

Додаје ставку у листу.

Прототип:

    struct t_weelist_item *weechat_list_add (struct t_weelist *weelist,
                                             const char *data,
                                             const char *where,
                                             void *user_data);

Аргументи:

- weelist: показивач на листу

- data: подаци који се умећу у листу

- where: позиција у листи:

  - WEECHAT_LIST_POS_SORT: додавање у листу, уз одржање уређености

  - WEECHAT_LIST_POS_BEGINNING: додавање на почетак листе

  - WEECHAT_LIST_POS_END: додавање на крај листе

- user_data: било који показивач

Повратна вредност:

- показивач на нову ставку

C пример:

    struct t_weelist_item *my_item =
        weechat_list_add (list, "my data", WEECHAT_LIST_POS_SORT, NULL);

Скрипта (Python):

    # прототип
    def list_add(list: str, data: str, where: str, user_data: str) -> str: ...

    # пример
    item = weechat.list_add(list, "my data", weechat.WEECHAT_LIST_POS_SORT, "")

#### list_search

Претражује ставку у листи.

Прототип:

    struct t_weelist_item *weechat_list_search (struct t_weelist *weelist,
                                                const char *data);

Аргументи:

- weelist: показивач на листу

- data: подаци који се траже у листи

Повратна вредност:

- показивач на пронађену ставку, NULL у случају да се ставка не пронађе

C пример:

    struct t_weelist_item *item = weechat_list_search (list, "my data");

Скрипта (Python):

    # прототип
    def list_search(list: str, data: str) -> str: ...

    # пример
    item = weechat.list_search(list, "my data")

#### list_search_pos

WeeChat ≥ 0.3.4.

Тражи позицију ставке у листи.

Прототип:

    int weechat_list_search_pos (struct t_weelist *weelist,
                                 const char *data);

Аргументи:

- weelist: показивач на листу

- data: подаци који се траже у листи

Повратна вредност:

- позиција пронађене ставке, -1 у случају да се ставка не пронађе

C пример:

    int pos_item = weechat_list_search_pos (list, "my data");

Скрипта (Python):

    # прототип
    def list_search_pos(list: str, data: str) -> int: ...

    # пример
    pos_item = weechat.list_search_pos(list, "my data")

#### list_casesearch

Тражи ставку у листи, без разликовања величине слова.

Прототип:

    struct t_weelist_item *weechat_list_casesearch (struct t_weelist *weelist,
                                                    const char *data);

Аргументи:

- weelist: показивач на листу

- data: подаци који се траже у листи

Повратна вредност:

- показивач на пронађену ставку, NULL у случају да се ставка не пронађе

C пример:

    struct t_weelist_item *item = weechat_list_casesearch (list, "my data");

Скрипта (Python):

    # прототип
    def list_casesearch(list: str, data: str) -> str: ...

    # пример
    item = weechat.list_casesearch(list, "my data")

#### list_casesearch_pos

WeeChat ≥ 0.3.4.

Тражи позицију ставке у листи, без разликовања величине слова.

Прототип:

    int weechat_list_casesearch_pos (struct t_weelist *weelist,
                                     const char *data);

Аргументи:

- weelist: показивач на листу

- data: подаци који се траже у листи

Повратна вредност:

- позиција пронађене ставке, -1 у случају да се ставка не пронађе

C пример:

    int pos_item = weechat_list_casesearch_pos (list, "my data");

Скрипта (Python):

    # прототип
    def list_casesearch_pos(list: str, data: str) -> int: ...

    # пример
    pos_item = weechat.list_casesearch_pos(list, "my data")

#### list_get

Враћа ставку са одређене позиције у листи.

Прототип:

    struct t_weelist_item *weechat_list_get (struct t_weelist *weelist,
                                             int position);

Аргументи:

- weelist: показивач на листу

- position: позиција у листи (прва ставка је 0)

Повратна вредност:

- показивач на пронађену ставку, NULL у случају да се ставка не пронађе

C пример:

    struct t_weelist_item *item = weechat_list_get (list, 0);  /* прва ставка */

Скрипта (Python):

    # прототип
    def list_get(list: str, position: int) -> str: ...

    # пример
    item = weechat.list_get(list, 0)

#### list_set

Поставља ставку на нову вредност.

Прототип:

    void weechat_list_set (struct t_weelist_item *item, const char *value);

Аргументи:

- item: показивач на ставку

- value: нова вредност ставке

C пример:

    weechat_list_set (item, "new data");

Скрипта (Python):

    # прототип
    def list_set(item: str, value: str) -> int: ...

    # пример
    weechat.list_set(item, "new data")

#### list_next

Враћа наредну ставку у листи.

Прототип:

    struct t_weelist_item *weechat_list_next (struct t_weelist_item *item);

Аргументи:

- item: показивач на ставку

Повратна вредност:

- показивач на наредну ставку, NULL у случају да је показивач био на последњој ставки листе

C пример:

    struct t_weelist_item *next_item = weechat_list_next (item);

Скрипта (Python):

    # прототип
    def list_next(item: str) -> str: ...

    # пример
    item = weechat.list_next(item)

#### list_prev

Враћа претходну ставку у листи.

Прототип:

    struct t_weelist_item *weechat_list_prev (struct t_weelist_item *item);

Аргументи:

- item: показивач на ставку

Повратна вредност:

- показивач на претходну ставку, NULL у случају да је показивач био на првој ставки листе

C пример:

    struct t_weelist_item *prev_item = weechat_list_prev (item);

Скрипта (Python):

    # прототип
    def list_prev(item: str) -> str: ...

    # пример
    item = weechat.list_prev(item)

#### list_string

Враћа стринг вредност ставке.

Прототип:

    const char *weechat_list_string (struct t_weelist_item *item);

Аргументи:

- item: показивач на ставку

Повратна вредност:

- стринг вредност ставке

C пример:

    weechat_printf (NULL, "вредност ставке: %s", weechat_list_string (item));

Скрипта (Python):

    # прототип
    def list_string(item: str) -> str: ...

    # пример
    weechat.prnt("", "вредност ставке: %s" % weechat.list_string(item))

#### list_user_data

WeeChat ≥ 2.6.

Враћа показивач на корисничке податке ставке.

Прототип:

    void *weechat_list_user_data (struct t_weelist_item *item);

Аргументи:

- item: показивач на ставку

Повратна вредност:

- показивач на корисничке податке ставке

C пример:

    weechat_printf (NULL, "кориснички подаци ставке: %p", weechat_list_user_data (item));

Белешка | Ова функција није доступна у API скриптовања.

#### list_size

Враћа величину листе (број ставки).

Прототип:

    char *weechat_list_size (struct t_weelist *weelist);

Аргументи:

- weelist: показивач на листу

Повратна вредност:

- величина листе (број ставки), 0 у случају да је листа празна

C пример:

    weechat_printf (NULL, "величина листе: %d", weechat_list_size (list));

Скрипта (Python):

    # прототип
    def list_size(list: str) -> int: ...

    # пример
    weechat.prnt("", "величина листе: %d" % weechat.list_size(list))

#### list_remove

Уклања ставку из листе.

Прототип:

    void weechat_list_remove (struct t_weelist *weelist,
                              struct t_weelist_item *item);

Аргументи:

- weelist: показивач на листу

- item: показивач на ставку

C пример:

    weechat_list_remove (list, item);

Скрипта (Python):

    # прототип
    def list_remove(list: str, item: str) -> int: ...

    # пример
    weechat.list_remove(list, item)

#### list_remove_all

Уклања све ставке из листе.

Прототип:

    void weechat_list_remove_all (struct t_weelist *weelist);

Аргументи:

- weelist: показивач на листу

C пример:

    weechat_list_remove_all (list);

Скрипта (Python):

    # прототип
    def list_remove_all(list: str) -> int: ...

    # пример
    weechat.list_remove_all(list)

#### list_free

Ослобађа меморију коју заузима листа.

Прототип:

    void weechat_list_free (struct t_weelist *weelist);

Аргументи:

- weelist: показивач на листу

C пример:

    weechat_list_free (list);

Скрипта (Python):

    # прототип
    def list_free(list: str) -> int: ...

    # пример
    weechat.list_free(list)

### 3.9. Низ листи

Функције низа листи.

Низ листи је листа показивача са динамичком величином и необавезним сортирањем.

#### arraylist_new

WeeChat ≥ 1.8.

Креира нови низ листи.

Прототип:

    struct t_arraylist *weechat_arraylist_new (int initial_size,
                                               int sorted,
                                               int allow_duplicates,
                                               int (*callback_cmp)(void *data,
                                                                   struct t_arraylist *arraylist,
                                                                   void *pointer1,
                                                                   void *pointer2),
                                               void *callback_cmp_data,
                                               void (*callback_free)(void *data,
                                                                     struct t_arraylist *arraylist,
                                                                     void *pointer),
                                               void *callback_free_data);

Аргументи:

- initial_size: почетна величина низа листи (не број ставки)

- sorted: 1 ако низ листи треба да се сортира, 0 ако се не ради сортирање

- allow_duplicates: 1 ако су дозвољене дупликат ставке, 0 ако се спречава поновно додавање исте ставке

- callback_cmp: функција повратног позива која се користи за поређење две ставке (није обавезна), аргументи и повратна вредност су:

  - void *data: показивач

  - struct t_arraylist *arraylist: показивач на низ листи

  - void *pointer1: показивач на прву ставку

  - void *pointer2: показивач на другу ставку

  - повратна вредност:

    - негативни број ако је прва ставка мања од друге ставке

    - 0 ако су прва и друга ставка једнаке

    - позитивни број ако је прва ставка већа од друге ставке

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

- callback_free: функција повратног позива која се користи да ослободи меморију коју заузима ставка (није обавезна), аргументи су:

  - void *data: показивач

  - struct t_arraylist *arraylist: показивач на низ листи

  - void *pointer: показивач на ставку

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

Повратна вредност:

- показивач на нови низ листи

C пример:

    int
    cmp_cb (void *data, struct t_arraylist *arraylist,
            void *pointer1, void *pointer2)
    {
        if (...)
            return -1;
        else if (...)
            return 1;
        else
            return 0;
    }

    struct t_arraylist *list = weechat_arraylist_new (32, 1, 1,
                                                      &cmp_cb, NULL, NULL, NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_size

WeeChat ≥ 1.8.

Враћа величину низа листи (број ставки са показивачима).

Прототип:

    int weechat_list_size (struct t_arraylist *arraylist);

Аргументи:

- arraylist: показивач на низ листи

Повратна вредност:

- величина низа листи (број ставки), 0 у случају да је низ листи празан

C пример:

    weechat_printf (NULL, "величина низа листи: %d", weechat_arraylist_size (arraylist));

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_get

WeeChat ≥ 1.8.

Враћа показивач на ставку на одређеној позицији.

Прототип:

    void *weechat_arraylist_get (struct t_arraylist *arraylist, int index);

Аргументи:

- arraylist: показивач на низ листи

- index: индекс у листи (први показивач је 0)

Повратна вредност:

- пронађени показивач, NULL ако показивач није могао да се пронађе

C пример:

    void *pointer = weechat_arraylist_get (arraylist, 0);  /* прва ставка */

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_search

WeeChat ≥ 1.8.

Тражи ставку у низу листи.

Прототип:

    void *weechat_arraylist_search (struct t_arraylist *arraylist, void *pointer,
                                    int *index, int *index_insert);

Аргументи:

- arraylist: показивач на низ листи

- pointer: показивач на ставку која се тражи у низу листи

- index: показивач на цео број који ће се поставити на пронађени индекс, или -1 ако се индекс не пронађе (није обавезно)

- index_insert: показивач на цео број које ће се поставити на индекс који мора да се употреби за уметање елемента у низ листи (како би низ листи остао уређен) (није обавезно)

Повратна вредност:

- показивач на пронађену ставку, NULL у случају да се ставка не пронађе

C пример:

    int index, index_insert;
    void *item = weechat_arraylist_search (arraylist, pointer, &index, &index_insert);

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_insert

WeeChat ≥ 1.8.

Умеће ставку у низ листи.

Прототип:

    int weechat_arraylist_insert (struct t_arraylist *arraylist, int index, void *pointer);

Аргументи:

- arraylist: показивач на низ листи

- index: позиција ставке у низу листи или -1 ако треба да се дода на крај (овај аргумент се користи само у случају да низ листи није сортиран, игнорише се у случају када је низ листи сортиран)

- pointer: показивач на ставку која треба да се уметне

Повратна вредност:

- индекс нове ставке (≥ 0), -1 у случају грешке.

C пример:

    int index = weechat_arraylist_insert (arraylist, -1, pointer);  /* умеће на крај ако низ није сортиран */

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_add

WeeChat ≥ 1.8.

Додаје ставку у низ листи.

Прототип:

    int weechat_arraylist_add (struct t_arraylist *arraylist, void *pointer);

Аргументи:

- arraylist: показивач на низ листи

- pointer: показивач на ставку која се додаје

Повратна вредност:

- индекс нове ставке (≥ 0), -1 у случају грешке.

C пример:

    int index = weechat_arraylist_add (arraylist, pointer);

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_remove

WeeChat ≥ 1.8.

Уклања ставку из низа листи.

Прототип:

    int weechat_arraylist_remove (struct t_arraylist *arraylist, int index);

Аргументи:

- arraylist: показивач на низ листи

- index: индекс ставке која треба да се уклони

Повратна вредност:

- индекс уклоњене ставке, -1 у случају грешке.

C пример:

    int index_removed = weechat_arraylist_remove (arraylist, index);

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_clear

WeeChat ≥ 1.8.

Уклања све ставке из низа листи.

Прототип:

    int weechat_arraylist_clear (struct t_arraylist *arraylist);

Аргументи:

- arraylist: показивач на низ листи

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    if (weechat_arraylist_clear (arraylist))
    {
        /* OK */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### arraylist_free

WeeChat ≥ 1.8.

Ослобађа меморију коју заузима низ листи.

Прототип:

    void weechat_arraylist_free (struct t_arraylist *arraylist);

Аргументи:

- arraylist: показивач на низ листи

C пример:

    weechat_arraylist_free (arraylist);

Белешка | Ова функција није доступна у API скриптовања.

### 3.10. Хеш табеле

Функције хеш табели.

#### hashtable_new

WeeChat ≥ 0.3.3, ажурирано у верзији 4.4.0.

Креира нову хеш табелу.

Прототип:

    struct t_hashtable *weechat_hashtable_new (int size,
                                               const char *type_keys,
                                               const char *type_values,
                                               unsigned long long (*callback_hash_key)(struct t_hashtable *hashtable,
                                                                                       const void *key),
                                               int (*callback_keycmp)(struct t_hashtable *hashtable,
                                                                      const void *key1,
                                                                      const void *key2));

Аргументи:

- size: величина интерног низа који чува хеш кључеве, већа вредност користи више меморије, али су перформансе боље (ово није ограничење броја ставки у хеш табели)

- type_keys: тип кључева у хеш табели:

  - WEECHAT_HASHTABLE_INTEGER

  - WEECHAT_HASHTABLE_STRING

  - WEECHAT_HASHTABLE_POINTER

  - WEECHAT_HASHTABLE_BUFFER

  - WEECHAT_HASHTABLE_TIME

  - WEECHAT_HASHTABLE_LONGLONG (WeeChat ≥ 4.4.0)

- type_values: тип вредности у хеш табели:

  - WEECHAT_HASHTABLE_INTEGER

  - WEECHAT_HASHTABLE_STRING

  - WEECHAT_HASHTABLE_POINTER

  - WEECHAT_HASHTABLE_BUFFER

  - WEECHAT_HASHTABLE_TIME

  - WEECHAT_HASHTABLE_LONGLONG (WeeChat ≥ 4.4.0)

- callback_hash_key: функција повратног позива која се користи за „хеширање” кључа (кључ у облику целог броја), може да буде NULL ако тип кључа није „buffer” (користи се подразумевана хеш функција), аргументи и повратна вредност су:

  - struct t_hashtable *hashtable: показивач на хеш табелу

  - const void *key: кључ

  - return value: хеш кључа

- callback_keycmp: функција повратног позива која се користи за поређење два кључа, може да буде NULL ако тип кључа није „buffer” (користи се подразумевана функција за поређење), аргументи и повратна вредност су:

  - struct t_hashtable *hashtable: показивач на хеш табелу

  - const void *key1: први кључ

  - const void *key2: други кључ

  - повратна вредност:

    - негативни број ако је key1 мањи од key2

    - 0 ако су key1 и key2 једнаки

    - позитивни број ако је key1 већи од key2

Повратна вредност:

- показивач на нову хеш табелу, NULL у случају грешке

C пример:

    struct t_hashtable *hashtable = weechat_hashtable_new (8,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           NULL,
                                                           NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_set_with_size

WeeChat ≥ 0.3.3, ажурирано у верзији 0.4.2.

Додаје или ажурира ставку у хеш табели са величином за кључ и вредност.

Прототип:

    struct t_hashtable_item *weechat_hashtable_set_with_size (struct t_hashtable *hashtable,
                                                              const void *key, int key_size,
                                                              const void *value, int value_size);

Аргументи:

- hashtable: показивач на хеш табелу

- key: показивач на кључ

- key_size: величина кључа (у бајтовима), користи се само ако је тип кључева у хеш табели „buffer”

- value: показивач на вредност

- value_size: величина вредности (у бајтовима), користи се само ако је тип вредности у хеш табели „buffer”

Повратна вредност:

- показивач на креирану/ажурирану ставку, NULL у случају грешке

C пример:

    weechat_hashtable_set_with_size (hashtable, "my_key", 0,
                                     my_buffer, sizeof (my_buffer_struct));

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_set

WeeChat ≥ 0.3.3, ажурирано у верзији 0.4.2.

Додаје или ажурира ставку у хеш табели.

Прототип:

    struct t_hashtable_item *weechat_hashtable_set (struct t_hashtable *hashtable,
                                                    const void *key, const void *value);

Аргументи:

- hashtable: показивач на хеш табелу

- key: показивач на кључ

- value: показивач на вредност

Повратна вредност:

- показивач на креирану/ажурирану ставку, NULL у случају грешке

C пример:

    weechat_hashtable_set (hashtable, "my_key", "my_value");

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_get

WeeChat ≥ 0.3.3.

Враћа вредност придружену кључу у хеш табели.

Прототип:

    void *weechat_hashtable_get (struct t_hashtable *hashtable, void *key);

Аргументи:

- hashtable: показивач на хеш табелу

- key: показивач на кључ

Повратна вредност:

- вредност за кључ, NULL ако кључ не може да се пронађе

C пример:

    void *value = weechat_hashtable_get (hashtable, "my_key");

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_has_key

WeeChat ≥ 0.3.4.

Проверава да ли се кључ налази у хеш табели.

Прототип:

    int weechat_hashtable_has_key (struct t_hashtable *hashtable, void *key);

Аргументи:

- hashtable: показивач на хеш табелу

- key: показивач на кључ

Повратна вредност:

- 1 ако се кључ налази у хеш табели, 0 ако се кључ не налази у хеш табели

C пример:

    if (weechat_hashtable_has_key (hashtable, "my_key"))
    {
        /* кључ се налази у хеш табели */
        /* ... */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_map

WeeChat ≥ 0.3.3.

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

Прототип:

    void weechat_hashtable_map (struct t_hashtable *hashtable,
                                void (*callback_map)(void *data,
                                                     struct t_hashtable *hashtable,
                                                     const void *key,
                                                     const void *value),
                                void *callback_map_data);

Аргументи:

- hashtable: показивач на хеш табелу

- callback_map: функција која се позива за сваку ставку у хеш табели

- callback_map_data: показивач који се прослеђује функцији повратног позива мапирања када се позове

C пример:

    void
    map_cb (void *data, struct t_hashtable *hashtable,
            const void *key, const void *value)
    {
        /* приказује кључ и вредност (овде су оба стрингови) */
        weechat_printf (NULL, "кључ: '%s', вредност: '%s'",
                        (const char *)key,
                        (const char *)value);
    }
    /* ... */
    weechat_hashtable_map (hashtable, &map_cb, NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_map_string

WeeChat ≥ 0.3.7.

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

Прототип:

    void weechat_hashtable_map_string (struct t_hashtable *hashtable,
                                       void (*callback_map)(void *data,
                                                            struct t_hashtable *hashtable,
                                                            const char *key,
                                                            const char *value),
                                       void *callback_map_data);

Аргументи:

- hashtable: показивач на хеш табелу

- callback_map: функција која се позива за сваку ставку у хеш табели

- callback_map_data: показивач који се прослеђује функцији повратног позива мапирања када се позове

Белешка | Стрингови key и value који се шаљу функцији повратног позива су привремени стрингови, они се бришу након позива функције повратног позива.

C пример:

    void
    map_cb (void *data, struct t_hashtable *hashtable,
            const char *key, const char *value)
    {
        /* приказ кључа и вредности */
        weechat_printf (NULL, "кључ: '%s', вредност: '%s'",
                        key, value);
    }
    /* ... */
    weechat_hashtable_map_string (hashtable, &map_cb, NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_dup

WeeChat ≥ 1.0.

Прави дупликат хеш табеле.

Прототип:

    struct t_hashtable *weechat_hashtable_dup (struct t_hashtable *hashtable);

Аргументи:

- hashtable: показивач на хеш табелу

Повратна вредност:

- дулпирана хеш табела

C пример:

    struct t_hashtable *new_hashtable = weechat_hashtable_dup (hashtable);

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_get_integer

WeeChat ≥ 0.3.3.

Враћа целобројну вредност особине хеш табеле.

Прототип:

    int weechat_hashtable_get_integer (struct t_hashtable *hashtable,
                                       void *property);

Аргументи:

- hashtable: показивач на хеш табелу

- property: име особине:

  - size: величина интерног низа „htable” у хеш табели

  - items_count: број ставки у хеш табели

Повратна вредност:

- целобројна вредност особине

C пример:

    int items_count = weechat_hashtable_get_integer (hashtable, "items_count");

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_get_string

WeeChat ≥ 0.3.4.

Враћа стринг вредност особине хеш табеле.

Прототип:

    const char *weechat_hashtable_get_string (struct t_hashtable *hashtable,
                                              const char *property);

Аргументи:

- hashtable: показивач на хеш табелу

- property: име особине:

  - type_keys: тип кључева:

    - integer: цео број

    - string: стринг

    - pointer: показивач

    - buffer: бафер

    - time: време

    - longlong: long long цео број

  - type_values: тип вредности:

    - integer: цео број

    - string: стринг

    - pointer: показивач

    - buffer: бафер

    - time: време

    - longlong: long long цео број

  - keys: стринг са листом кључева (у формату: „кључ1,кључ2,кључ3”)

  - keys_sorted: стринг са листом сортираних кључева (у формату: „кључ1,кључ2,кључ3”)

  - values: стринг са листом вредности

  - keys_values: стринг са листом кључева и вредности (у формату: „кључ1:вредност1,кључ2:вредност2,кључ3:вредност3”)

  - keys_values_sorted: стринг са листом кључева и вредности (сортиран по кључевима) (у формату: „кључ1:вредност1,кључ2:вредност2,кључ3:вредност3”)

Повратна вредност:

- стринг вредност особине

C примери:

    weechat_printf (NULL, "keys are type: %s",
                    weechat_hashtable_get_string (hashtable, "type_keys"));
    weechat_printf (NULL, "list of keys: %s",
                    weechat_hashtable_get_string (hashtable, "keys"));

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_set_pointer

WeeChat ≥ 0.3.4.

Поставља вредност показивача на особину хеш табеле.

Прототип:

    void weechat_hashtable_set_pointer (struct t_hashtable *hashtable,
                                        const char *property, void *pointer);

Аргументи:

- hashtable: показивач на хеш табелу

- property: име особине:

  - callback_free_key: поставља функцију повратног позива која се користи за ослобађање меморије коју заузимају кључеви у хеш табели (WeeChat ≥ 0.4.2)

  - callback_free_value: поставља функцију повратног позива која се користи за ослобађање меморије коју користе вредности у хеш табели

- pointer: нова вредност показивача за особину

C пример:

    void
    my_free_value_cb (struct t_hashtable *hashtable, const void *key, void *value)
    {
        /* ... */
    }

    void
    my_free_key_cb (struct t_hashtable *hashtable, void *key)
    {
        /* ... */
    }

    weechat_hashtable_set_pointer (hashtable, "callback_free_value", &my_free_value_cb);
    weechat_hashtable_set_pointer (hashtable, "callback_free_key", &my_free_key_cb);

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_add_to_infolist

WeeChat ≥ 0.3.3.

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

Прототип:

    int weechat_hashtable_add_to_infolist (struct t_hashtable *hashtable,
                                           struct t_infolist_item *infolist_item,
                                           const char *prefix);

Аргументи:

- hashtable: показивач на хеш табелу

- infolist_item: показивач на ставку инфо листе

- prefix: стринг који се користи као префикс за имена у инфо листи

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    weechat_hashtable_add_to_infolist (hashtable, infolist_item, "testhash");

    /* ако хеш табела садржи:
         "кључ1" => "вредност 1"
         "кључ2" => "вредност 2"
       онда ће се у ставку инфо листе додати следеће променљиве:
         "testhash_name_00000"  = "кључ1"
         "testhash_value_00000" = "вредност 1"
         "testhash_name_00001"  = "кључ2"
         "testhash_value_00001" = "вредност 2"
    */

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_add_from_infolist

WeeChat ≥ 2.2.

Додаје ставке инфо листе у хеш табелу.

Прототип:

    int weechat_hashtable_add_from_infolist (struct t_hashtable *hashtable,
                                             struct t_infolist *infolist,
                                             const char *prefix);

Аргументи:

- hashtable: показивач на хеш табелу

- infolist: показивач на инфо листу

- prefix: стринг који се користи као префикс за имена у инфо листи

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    weechat_hashtable_add_from_infolist (hashtable, infolist, "testhash");

    /* ако инфо листа садржи:
         "testhash_name_00000"  = "кључ1"
         "testhash_value_00000" = "вредност 1"
         "testhash_name_00001"  = "кључ2"
         "testhash_value_00001" = "вредност 2"
       онда ће се у хеш табелу додати следеће променљиве:
         "кључ1" => "вредност 1"
         "кључ2" => "вредност 2"
    */

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_remove

WeeChat ≥ 0.3.3.

Уклања ставку из хеш табеле.

Прототип:

    void weechat_hashtable_remove (struct t_hashtable *hashtable, const void *key);

Аргументи:

- hashtable: показивач на хеш табелу

- key: показивач на кључ

C пример:

    weechat_hashtable_remove (hashtable, "my_key");

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_remove_all

WeeChat ≥ 0.3.3.

Уклања све ставке из хеш табеле.

Прототип:

    void weechat_hashtable_remove_all (struct t_hashtable *hashtable);

Аргументи:

- hashtable: показивач на хеш табелу

C пример:

    weechat_hashtable_remove_all (hashtable);

Белешка | Ова функција није доступна у API скриптовања.

#### hashtable_free

WeeChat ≥ 0.3.3.

Ослобађа меморију коју заузима хеш табела.

Прототип:

    void weechat_hashtable_free (struct t_hashtable *hashtable);

Аргументи:

- hashtable: показивач на хеш табелу

C пример:

    weechat_hashtable_free (hashtable);

Белешка | Ова функција није доступна у API скриптовања.

### 3.11. Конфигурациони фајлови

Функције за конфигурационе фајлове.

#### config_new

Ажурирано у верзији 1.5, 4.0.0.

Креира нови конфигурациони фајл.

Прототип:

    struct t_config_file *weechat_config_new (const char *name,
                                              int (*callback_reload)(const void *pointer,
                                                                     void *data,
                                                                     struct t_config_file *config_file),
                                              const void *callback_reload_pointer,
                                              void *callback_reload_data);

Аргументи:

- name: име конфигурационог фајла (без путање или екстензије); приоритет је дозвољен испред имена, у формату `nnn|име` где је `nnn` цео позитиван број који представља приоритет; подразумевани приоритет је 1000; када се извршава команда `/reload` фајлови се сортирају према приоритету, од вишег ка нижем (погледајте приоритет конфигурационих фајлова испод)

- callback_reload: функција која се позива када се командом `/reload` поново учита конфигурациони фајл (није обавезна, може да буде NULL, погледајте испод), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - повратна вредност:

    - WEECHAT_CONFIG_READ_OK

    - WEECHAT_CONFIG_READ_MEMORY_ERROR

    - WEECHAT_CONFIG_READ_FILE_NOT_FOUND

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

- callback_reload_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, онда је алоциран са malloc (или неком сличном функцијом) и аутоматски се ослобађа када се ослободи конфигурациони фајл

Функција повратног позива код поновног учитавања:

- Функција повратног позива сме само да позове функцију config_reload, не сме да уклања конфигурациони фајл.

- Функција повратног позива је потребна само ако треба да се обаве неке ствари пре и/или након позива функције config_reload.
  Ако се не наведе функција повратног позива, програм WeeChat ће позвати своју интерну функцију за поновно учитавање, тако да ће се конфигурациони фајл поново учитати у свим случајевима.

Повратна вредност:

- показивач на нови конфигурациони фајл, NULL у случају грешке

Белешка | Ова функција НЕ креира фајл на диску. Фајл ће се креирати позивом функције config_write. Ово функцију би требало да позовете само након додавања неких одељака (са config_new_section) и опција (са config_new_option).

Приоритет подразумеваних конфигурационих фајлова:

Rank | File | Priority
--- | --- | ---
1 | sec.conf | 120000
2 | weechat.conf | 110000
3 | plugins.conf | 100000
4 | charset.conf | 16000
5 | logger.conf | 15000
6 | exec.conf | 14000
7 | trigger.conf | 13000
8 | spell.conf | 12000
9 | alias.conf | 11000
10 | buflist.conf | 10000
11 | fifo.conf | 9000
12 | typing.conf | 8000
13 | xfer.conf | 7000
14 | irc.conf | 6000
15 | relay.conf | 5000
16 | guile.conf | 4070
17 | lua.conf | 4050
18 | perl.conf | 4040
19 | php.conf | 4030
20 | python.conf | 4020
21 | ruby.conf | 4010
22 | tcl.conf | 4000
23 | script.conf | 3000
24 | fset.conf | 2000

C пример:

    int
    my_config_reload_cb (const void *pointer, void *data,
                         struct t_config_file *config_file)
    {
        /* ... */

        return WEECHAT_RC_OK;
    }

    struct t_config_file *config_file = weechat_config_new ("test",
                                                            &my_config_reload_cb,
                                                            NULL, NULL);

Скрипта (Python):

    # прототип
    def config_new(name: str, callback_reload: str, callback_reload_data: str) -> str: ...

    # пример
    def my_config_reload_cb(data: str, config_file: str) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    config_file = weechat.config_new("test", "my_config_reload_cb", "")

#### config_set_version

WeeChat ≥ 4.0.0.

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

Прототип:

    int config_file_set_version (struct t_config_file *config_file,
                                 int version,
                                 struct t_hashtable *(*callback_update)(const void *pointer,
                                                                        void *data,
                                                                        struct t_config_file *config_file,
                                                                        int version_read,
                                                                        struct t_hashtable *data_read),
                                 const void *callback_update_pointer,
                                 void *callback_update_data);

Аргументи:

- config_file: показивач на конфигурациони фајл

- version: верзија, мора бити ≥ 2

- callback_update: функција која се позива када се чита конфигурациони фајл, за сваки одељак и сваку опцију, ако је прочитана верзија мања од очекиване верзије, (није обавезно, ноже да буде NULL, погледајте испод), аргументи и повратна вредност:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - int version_read: верзија прочитана у конфигурационом фајлу (подразумевано 1)

  - struct t_hashtable *data_read: хеш табела са подацима прочитаним из конфигурационом фајлу (погледајте испод)

  - повратна вредност:

    - или „data_read” показивач (довршена хеш табелом), или показивача на нову хеш табелу (коју је креирала функција повратног позива, са кључевима и вредностима типа „string”)

- callback_update_pointer: показивач који се прослеђује функцији повратног позива када је позове WeeChat

- callback_update_data: показивач који се прослеђује функцији повратног позива када је позове WeeChat; ако није NULL, мора да је алоциран са malloc (или сличном функцијом) и аутоматски се ослобађа када се ослободи конфигурациони фајл

Функција повратног позива за ажурирање:

- Функција повратног озива прихвата хеш табелу са подацима прочитаним из конфигурационог фајла:

Кључ | Доступност | Вредност
--- | --- | ---
`config` | Увек постављено | Име конфигурационог фајла, без екстензије (нпр.: `weechat`)
`section` | Увек постављено | Име одељка који се чита
`option` | Само за опцију | Име опције
`value` | Само за опцију | Вредност опције (ако није NULL)
`value_null` | Само за опцију | Опција као NULL вредност (вредност је увек `1`)

- Функција повратног позива може да ажурира „section” за линију са одељком и „option”, „value” и „value_null” за линију са опцијом.

- Ако је функција повратног позива поставила „option” на празан стринг, игнорише се линија прочитана из конфигурационог фајла.

- Поље „value_null” се поставља да би се за опцију форсирала NULL вредност.

Повратна вредност:

- 1 ако је OK, 0 у случају грешке

C пример:

    struct t_hashtable *
    my_config_update_cb (const void *pointer, void *data,
                         struct t_config_file *config_file,
                         int version_read,
                         struct t_hashtable *data_read)
    {
        const char *ptr_section, *ptr_option;

        /* врати се сад ако је верзија већ ажурна */
        if (version_read >= 2)
            return NULL;

        ptr_section = hashtable_get (data_read, "section");
        ptr_option = hashtable_get (data_read, "option");

        /* промени име одељка „abc” на „def” */
        if (ptr_section && !ptr_option && (strcmp (ptr_section, "abc") == 0))
        {
            hashtable_set (data_read, "section", "def");
            return data_read;
        }

        /* ограничи остале измене на одељак „test” */
        if (!ptr_section || !ptr_option || (strcmp (ptr_section, "test") != 0))
            return NULL;

        /* промени име опције „test1” на „test2” */
        if (strcmp (ptr_option, "test1") == 0)
        {
            hashtable_set (data_read, "option", "test2");
            return data_read;
        }

        /* постави вредност опције „test” на „xxx” */
        if (strcmp (ptr_option, "test") == 0)
        {
            hashtable_set (data_read, "value", "xxx");
            return data_read;
        }

        /* постави вредност опције „test_null” на NULL */
        if (strcmp (ptr_option, "test_null") == 0)
        {
            hashtable_set (data_read, "value_null", "1");
            return data_read;
        }

        /* нема измена */
        return NULL;
    }

    struct t_config_file *config_file = weechat_config_new ("test", NULL, NULL, NULL);
    weechat_config_set_version (config_file, 2, &my_config_update_cb, NULL, NULL);
    weechat_config_read (config_file);

Скрипта (Python):

    # прототип
    def config_set_version(config_file: str, version: int, callback_update: str, callback_update_data: str) -> int: ...

    # пример
    def my_config_update_cb(data: str, config_file: str, version_read: int, data_read: Dict[str, str]) -> Dict[str, str]:
        # врати се сад ако је верзија већ ажурна
        if version_read >= 2:
            return {}

        section = data_read.get("section")
        option = data_read.get("option")

        # промени име одељка „abc” на „def”
        if section and not option and section == "abc":
            data_read["section"] = "def"
            return data_read

        # ограничи остале измене на одељак „test”
        if not section or not option or section != "test":
            return {}

        # промени име опције „test1” на „test2” */
        if option == "test1":
            data_read["option"] = "test2"
            return data_read

        # set value to "xxx" for option "test"
        if option == "test":
            data_read["value"] = "xxx"
            return data_read

        # постави вредност опције „test_null” на NULL
        if option == "test_null":
            data_read["value_null"] = "1"
            return data_read

        # no changes
        return {}

    config_file = weechat.config_new("test", "", "")
    weechat.config_set_version(config_file, 2, "my_config_update_cb", "")
    weechat.config_read(config_file)

#### config_new_section

Ажурирано у верзији 1.5.

Креира нови одељак у конфигурационом фајлу.

Прототип:

    struct t_config_section *weechat_config_new_section (
        struct t_config_file *config_file,
        const char *name,
        int user_can_add_options,
        int user_can_delete_options,
        int (*callback_read)(const void *pointer,
                             void *data,
                             struct t_config_file *config_file,
                             struct t_config_section *section,
                             const char *option_name,
                             const char *value),
        const void *callback_read_pointer,
        void *callback_read_data,
        int (*callback_write)(const void *pointer,
                              void *data,
                              struct t_config_file *config_file,
                              const char *section_name),
        const void *callback_write_pointer,
        void *callback_write_data,
        int (*callback_write_default)(const void *pointer,
                                      void *data,
                                      struct t_config_file *config_file,
                                      const char *section_name),
        const void *callback_write_default_pointer,
        void *callback_write_default_data,
        int (*callback_create_option)(const void *pointer,
                                      void *data,
                                      struct t_config_file *config_file,
                                      struct t_config_section *section,
                                      const char *option_name,
                                      const char *value),
        const void *callback_create_option_pointer,
        void *callback_create_option_data,
        int (*callback_delete_option)(const void *pointer,
                                      void *data,
                                      struct t_config_file *config_file,
                                      struct t_config_section *section,
                                      struct t_config_option *option),
        const void *callback_delete_option_pointer,
        void *callback_delete_option_data);

Аргументи:

- config_file: показивач на конфигурациони фајл

- name: име одељка

- user_can_add_options: 1 ако корисник у одељку може да креира нове опције, или 0 ако је то забрањено

- user_can_delete_options: 1 ако корисник може да брише опције у одељку, или 0 ако је то забрањено

- callback_read: функција која се позива када се опција у одељку прочита са диска (у већини случајева би требало да буде NULL, осим ако опције у одељку захтевају прилагођену функцију), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - struct t_config_section *section: показивач на одељак

  - const char *option_name: име опције

  - const char *value: вредност

  - повратна вредност:

    - WEECHAT_CONFIG_OPTION_SET_OK_CHANGED

    - WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE

    - WEECHAT_CONFIG_OPTION_SET_ERROR

    - WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND

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

- callback_read_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се ослободи одељак

- callback_write: функција која се позива када се одељак уписује у фајл (у већини случајева би требало да буде NULL, осим ако је потребно да се одељак упише прилагођеном функцијом), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - struct t_config_section *section: показивач на одељак

  - const char *section_name: име одељка

  - повратна вредност:

    - WEECHAT_CONFIG_WRITE_OK

    - WEECHAT_CONFIG_WRITE_ERROR

    - WEECHAT_CONFIG_WRITE_MEMORY_ERROR

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

- callback_write_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се ослободи одељак

- callback_write_default: функција која се позива када у фајл мора да се упишу подразумеване опције за одељак, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - const char *section_name: име одељка

  - повратна вредност:

    - WEECHAT_CONFIG_WRITE_OK

    - WEECHAT_CONFIG_WRITE_ERROR

    - WEECHAT_CONFIG_WRITE_MEMORY_ERROR

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

- callback_write_default_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се одељак ослободи

- callback_create_option: функција која се позива када се у одељку креира нова опција (NULL ако одељак не дозвољава креирање нових опција), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - struct t_config_section *section: показивач на одељак

  - const char *option_name: име опције

  - const char *value: вредност

  - повратна вредност:

    - WEECHAT_CONFIG_OPTION_SET_OK_CHANGED

    - WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE

    - WEECHAT_CONFIG_OPTION_SET_ERROR

    - WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND

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

- callback_create_option_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се ослободи одељак

- callback_delete_option: функција која се позива када се у одељку обрише опција (NULL ако одељак не дозвољава брисање опција), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_file *config_file: показивач на конфигурациони фајл

  - struct t_config_section *section: показивач на одељак

  - struct t_config_option *option: показивач на опцију

  - повратна вредност:

    - WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET

    - WEECHAT_CONFIG_OPTION_UNSET_OK_RESET

    - WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED

    - WEECHAT_CONFIG_OPTION_UNSET_ERROR

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

- callback_delete_option_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или слична функција) и аутоматски се ослобађа када се ослободи одељак

Повратна вредност:

- показивач на нови одељак у конфигурационом фајлу, NULL у случају грешке

C пример:

    int
    my_section_read_cb (const void *pointer, void *data,
                        struct t_config_file *config_file,
                        struct t_config_section *section,
                        const char *option_name,
                        const char *value)
    {
        /* ... */

        return WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
        /* return WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; */
        /* return WEECHAT_CONFIG_OPTION_SET_ERROR; */
        /* return WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND; */
    }

    int
    my_section_write_cb (const void *pointer, void *data,
                         struct t_config_file *config_file,
                         const char *section_name)
    {
        /* ... */

        return WEECHAT_CONFIG_WRITE_OK;
        /* return WEECHAT_CONFIG_WRITE_ERROR; */
        /* return WEECHAT_CONFIG_WRITE_MEMORY_ERROR; */
    }

    int
    my_section_write_default_cb (const void *pointer, void *data,
                                 struct t_config_file *config_file,
                                 const char *section_name)
    {
        /* ... */

        return WEECHAT_CONFIG_WRITE_OK;
        /* return WEECHAT_CONFIG_WRITE_ERROR; */
        /* return WEECHAT_CONFIG_WRITE_MEMORY_ERROR; */
    }

    int
    my_section_create_option_cb (const void *pointer, void *data,
                                 struct t_config_file *config_file,
                                 struct t_config_section *section,
                                 const char *option_name,
                                 const char *value)
    {
        /* ... */

        return WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
        /* return WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; */
        /* return WEECHAT_CONFIG_OPTION_SET_ERROR; */
        /* return WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND; */
    }

    int
    my_section_delete_option_cb (const void *pointer, void *data,
                                 struct t_config_file *config_file,
                                 struct t_config_section *section,
                                 struct t_config_option *option)
    {
        /* ... */

        return WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED;
        /* return WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET; */
        /* return WEECHAT_CONFIG_OPTION_UNSET_OK_RESET; */
        /* return WEECHAT_CONFIG_OPTION_UNSET_ERROR; */
    }

    /* стандардни одељак, корисник не може да додаје/брише опције */
    struct t_config_section *new_section1 =
        weechat_config_new_section (config_file, "section1", 0, 0,
                                    NULL, NULL, NULL,
                                    NULL, NULL, NULL,
                                    NULL, NULL, NULL,
                                    NULL, NULL, NULL,
                                    NULL, NULL, NULL);

    /* специјални одељак, корисник може да додаје/брише опције и за упис/читање
       опција је потребна функција повратног позива */
    struct t_config_section *new_section2 =
        weechat_config_new_section (config_file, "section2", 1, 1,
                                    &my_section_read_cb, NULL, NULL,
                                    &my_section_write_cb, NULL, NULL,
                                    &my_section_write_default_cb, NULL, NULL,
                                    &my_section_create_option_cb, NULL, NULL,
                                    &my_section_delete_option_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def config_new_section(config_file: str, name: str,
                           user_can_add_options: int, user_can_delete_options: int,
                           callback_read: str, callback_read_data: str,
                           callback_write: str, callback_write_data: str,
                           callback_write_default: str, callback_write_default_data: str,
                           callback_create_option: str, callback_create_option_data: str,
                           callback_delete_option: str, callback_delete_option_data: str) -> str: ...

    # пример
    def my_section_read_cb(data: str, config_file: str, section: str, option_name: str, value: Union[str, None]) -> int:
        # ...
        return weechat.WEECHAT_CONFIG_OPTION_SET_OK_CHANGED
        # return weechat.WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE
        # return weechat.WEECHAT_CONFIG_OPTION_SET_ERROR
        # return weechat.WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND

    def my_section_write_cb(data: str, config_file: str, section_name: str) -> int:
        # ...
        return weechat.WEECHAT_CONFIG_WRITE_OK
        # return weechat.WEECHAT_CONFIG_WRITE_ERROR
        # return weechat.WEECHAT_CONFIG_WRITE_MEMORY_ERROR

    def my_section_write_default_cb(data: str, config_file: str, section_name: str) -> int:
        # ...
        return weechat.WEECHAT_CONFIG_WRITE_OK
        # return weechat.WEECHAT_CONFIG_WRITE_ERROR
        # return weechat.WEECHAT_CONFIG_WRITE_MEMORY_ERROR

    def my_section_create_option_cb(data: str, config_file: str, section: str, option_name: str, value: Union[str, None]) -> int:
        # ...
        return weechat.WEECHAT_CONFIG_OPTION_SET_OK_CHANGED
        # return weechat.WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE
        # return weechat.WEECHAT_CONFIG_OPTION_SET_ERROR
        # return weechat.WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND

    def my_section_delete_option_cb(data: str, config_file: str, section: str, option: str) -> int:
        # ...
        return weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED
        # return weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET
        # return weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_RESET
        # return weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR

    section = weechat.config_new_section(config_file, "section1", 1, 1,
        "my_section_read_cb", "",
        "my_section_write_cb", "",
        "my_section_write_default_cb", "",
        "my_section_create_option_cb", "",
        "my_section_delete_option_cb", "")

#### config_search_section

Тражи одељак у конфигурационом фајлу.

Прототип:

    struct t_config_section *weechat_config_search_section (
        struct t_config_file *config_file,
        const char *section_name);

Аргументи:

- config_file: показивач на конфигурациони фајл

- section_name: име одељка који се тражи

Повратна вредност:

- показивач на пронађени одељак, NULL у случају да се одељак не пронађе

C пример:

    struct t_config_section *section = weechat_config_search_section (config_file,
                                                                      "section");

Скрипта (Python):

    # прототип
    def config_search_section(config_file: str, section_name: str) -> str: ...

    # пример
    section = weechat.config_search_section(config_file, "section")

#### config_new_option

Ажурирано у верзији 1.5, 4.1.0.

Креира нову опцију у одељку конфигурационог фајла.

Прототип:

    struct t_config_option *weechat_config_new_option (
        struct t_config_file *config_file,
        struct t_config_section *section,
        const char *name,
        const char *type,
        const char *description,
        const char *string_values,
        int min,
        int max,
        const char *default_value,
        const char *value,
        int null_value_allowed,
        int (*callback_check_value)(const void *pointer,
                                    void *data,
                                    struct t_config_option *option,
                                    const char *value),
        const void *callback_check_value_pointer,
        void *callback_check_value_data,
        void (*callback_change)(const void *pointer,
                                void *data,
                                struct t_config_option *option),
        const void *callback_change_pointer,
        void *callback_change_data,
        void (*callback_delete)(const void *pointer,
                                void *data,
                                struct t_config_option *option),
        const void *callback_delete_pointer,
        void *callback_delete_data);

Аргументи:

- config_file: показивач на конфигурациони фајл

- section: показивач на одељак

- name: име опције; у програм у WeeChat верзије ≥ 1.4, име може да укључи и име родитељске опције (у случају да је ова опција „null”, вредност родитељске опције ће се приказати у излазу команде `/set`), тада је синтакса: „име << фајл.одељак.опција”

- type: тип опције:

  - boolean: логичка вредност (on/off)

  - integer: целобројна вредност

  - string: стринг вредност

  - color: боја

  - enum: листа стринг вредности (интерно се чува као цео број)

- description: опис опције

- string_values: вредности као стринг (раздвојене са `|`) (није обавезно, потребно је за тип enum)

- min: минимална вредност (за integer тип)

- max: максимална вредност (за integer тип)

- default_value: подразумевана вредност опције (користи се када се опција ресетује)

- value: вредност за опцију

- null_value_allowed: 1 ако се за опцију дозвољава null (недефинисана вредност), у супротном 0

- callback_check_value: функција која се позива за проверу нове вредности опције (није обавезна), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_option *option: показивач на опцију

  - const char *value: нова вредност опције

  - повратна вредност:

    - 1 ако је вредност ОК

    - 0 ако је вредност неважећа

- callback_check_value_pointer: показивач који се прослеђује check_value функцији повратног позива када је позове програм WeeChat

- callback_check_value_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се ослободи опција

- callback_change: функција која се позива када се промени вредност опције (није обавезна), аргументи су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_option *option: показивач на опцију

- callback_change_pointer: показивач који се прослеђује change функцији повратног позива када је позове програм WeeChat

- callback_change_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се ослободи опција

- callback_delete: функција која се позива када се опција брише (није обавезна), аргументи су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_config_option *option: показивач на опцију

- callback_delete_pointer: показивач који се прослеђује delete функцији повратног позива када је позове програм WeeChat

- callback_delete_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или слична функција) и аутоматски се ослобађа када се ослободи опција

Повратна вредност:

- показивач на нову опцију у одељку, NULL у случају грешке

C пример:

    /* логичка */
    struct t_config_option *option_bool =
        weechat_config_new_option (config_file, section, "option_bool", "boolean",
                                   "My option, type boolean",
                                   NULL,
                                   0, 0,
                                   "on",
                                   "on",
                                   0,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL);

    /* целобројна */
    struct t_config_option *option_int =
        weechat_config_new_option (config_file, section, "option_int", "integer",
                                   "My option, type integer",
                                   NULL,
                                   0, 100,
                                   "15",
                                   "15",
                                   0,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL);

    /* стринг */
    struct t_config_option *option_str =
        weechat_config_new_option (config_file, section, "option_str", "string",
                                   "My option, type string",
                                   NULL,
                                   0, 0,
                                   "test",
                                   "test",
                                   1,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL);

    /* боја */
    struct t_config_option *option_col =
        weechat_config_new_option (config_file, section, "option_col", "color",
                                   "My option, type color",
                                   NULL,
                                   0, 0,
                                   "lightblue",
                                   "lightblue",
                                   0,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL);

    /* целобројна (са стринг вредностима) */
    struct t_config_option *option_enum =
        weechat_config_new_option (config_file, section, "option_enum", "enum",
                                   "My option, type enum",
                                   "top|bottom|left|right",
                                   0, 0,
                                   "bottom",
                                   "bottom",
                                   0,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL,
                                   NULL, NULL, NULL);

Скрипта (Python):

    # прототип
    def config_new_option(config_file: str, section: str, name: str, type: str, description: str,
                          string_values: str, min: int, max: int,
                          default_value: Union[str, None], value: Union[str, None], null_value_allowed: int,
                          callback_check_value: str, callback_check_value_data: str,
                          callback_change: str, callback_change_data: str,
                          callback_delete: str, callback_delete_data: str) -> str: ...

    # пример
    def option_str_check_value_cb(data: str, option: str, value: str) -> int:
        # ...
        return 1
        # return 0

    def option_str_change_cb(data: str, option: str) -> None:
        # ...

    def option_str_delete_cb(data: str, option: str) -> None:
        # ...

    option_bool = weechat.config_new_option(config_file, section, "option_bool", "boolean",
        "My option, type boolean",
        "", 0, 0, "on", "on", 0,
        "", "",
        "", "",
        "", "")

    option_int = weechat.config_new_option(config_file, section, "option_int", "integer",
        "My option, type integer",
        "", 0, 100, "15", "15", 0,
        "", "",
        "", "",
        "", "")

    option_str = weechat.config_new_option(config_file, section, "option_str", "string",
        "My option, type string",
        "", 0, 0, "test", "test", 1,
        "option_str_check_value_cb", "",
        "option_str_change_cb", "",
        "option_str_delete_cb", "")

    option_col = weechat.config_new_option(config_file, section, "option_col", "color",
        "My option, type color",
        "", 0, 0, "lightblue", "lightblue", 0,
        "", "",
        "", "",
        "", "")

    option_enum = weechat.config_new_option(config_file, section, "option_enum", "enum",
        "My option, type enum",
        "top|bottom|left|right",
        0, 0, "bottom", "bottom", 0,
        "", "",
        "", "",
        "", "")

Белешка | У језику Ruby, 3 функције повратног позива + подаци (6 стрингова) морају да се наведу у низу од 6 стрингова (услед Ruby ограничења од 15 аргумената по функцији), за више информација, погледајте WeeChat водич за скриптовање ↗ (исправљено у верзији 0.4.1).

#### config_search_option

Тражи опцију у одељку конфигурационог фајла.

Прототип:

    struct t_config_option *weechat_config_search_option (
        struct t_config_file *config_file,
        struct t_config_section *section,
        const char *option_name);

Аргументи:

- config_file: показивач на конфигурациони фајл

- section: показивач на одељак

- name: име опције која се тражи

Повратна вредност:

- показивач на нађену опцију, NULL у случају да се опција не нађе

C пример:

    struct t_config_option *option =
        weechat_config_search_option (config_file, section, "option");

Скрипта (Python):

    # прототип
    def config_search_option(config_file: str, section: str, option_name: str) -> str: ...

    # пример
    option = weechat.config_search_option(config_file, section, "option")

#### config_search_section_option

Тражи одељак и опцију у конфигурационом фајлу или одељку.

Прототип:

    void weechat_config_search_section_option (struct t_config_file *config_file,
                                               struct t_config_section *section,
                                               const char *option_name,
                                               struct t_config_section **section_found,
                                               struct t_config_option **option_found);

Аргументи:

- config_file: показивач на конфигурациони фајл

- section: показивач на одељак

- option_name: име опције

- section_found: показивач на показивач одељка, ако се пронађе, поставиће се на одељак опције

- option_found: показивач на показивач опције, ако се пронађе, поставиће се на показивач опције

C пример:

    struct t_config_section *ptr_section;
    struct t_config_option *ptr_option;

    weechat_config_search_section_option(config_file,
                                         section,
                                         "option",
                                         &ptr_section,
                                         &ptr_option);
    if (ptr_option)
    {
        /* опција је пронађена */
    }
    else
    {
        /* опција није пронађена */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### config_search_with_string

Враћа инфо о фајлу/одељку/опцији опције са пуним именом.

Прототип:

    void weechat_config_search_with_string (const char *option_name,
                                            struct t_config_file **config_file,
                                            struct t_config_section **section,
                                            struct t_config_option **option,
                                            char **pos_option_name);

Аргументи:

- option_name: пуно име опције (у формату: „фајл.одељак.опција”)

- config_file: показивач на показивач конфигурационог фајла, ако се опција пронађе, поставиће се на показивач конфигурационог фајла

- section: показивач на показивач одељка, ако се пронађе, поставиће се на одељак у коме је опција

- option: показивач на показивач опције, ако се пронађе, поставиће се на показивач опције

- pos_option_name: показивач на показивач стринга, ако се пронађе, поставиће се на показивач имена опције

C пример:

    struct t_config_file *ptr_config_file;
    struct t_config_section *ptr_section;
    struct t_config_option *ptr_option;
    char *option_name;

    weechat_config_search_with_string ("file.section.option",
                                       &ptr_config_file,
                                       &ptr_section,
                                       &ptr_option,
                                       &option_name);
    if (ptr_option)
    {
        /* опција је пронађена */
    }
    else
    {
        /* опција није пронађена */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### config_string_to_boolean

Проверава да ли је текст „true” или „false”, као логичка вредност.

Прототип:

    int weechat_config_string_to_boolean (const char *text);

Аргументи:

- text: текст који се анализира

Повратна вредност:

- 1 ако је текст „true” („on”, „yes”, „y”, „true”, „t”, „1”)

- 0 ако је текст „false” („off”, „no”, „n”, „false”, „f”, „0”)

C пример:

    if (weechat_config_string_to_boolean (option_value))
    {
        /* вредност је "true" */
    }
    else
    {
        /* вредност је "false" */
    }

Скрипта (Python):

    # прототип
    def config_string_to_boolean(text: str) -> int: ...

    # пример
    if weechat.config_string_to_boolean(text):
        # ...

#### config_option_reset

Ресетује опцију на њену подразумевану вредности.

Прототип:

    int weechat_config_option_reset (struct t_config_option *option,
                                     int run_callback);

Аргументи:

- option: показивач на опцију

- run_callback: 1 за позив функције повратног позива ако је вредност опције промењена, у супротном 0

Повратна вредност:

- WEECHAT_CONFIG_OPTION_SET_OK_CHANGED ако је вредност опције ресетована

- WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE ако вредност није измењена

- WEECHAT_CONFIG_OPTION_SET_ERROR ако је дошло до грешке

C пример:

    switch (weechat_config_option_reset (option, 1))
    {
        case WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_ERROR:
            /* .... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_option_reset(option: str, run_callback: int) -> int: ...

    # пример
    rc = weechat.config_option_reset(option, 1)
    if rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_ERROR:
        # ...

#### config_option_set

Поставља нову вредност опције.

Прототип:

    int weechat_config_option_set (struct t_config_option *option,
                                   const char *value, int run_callback);

Аргументи:

- option: показивач на опцију

- value: нова вредност опције, могуће су и специјалне вредности које зависе од типа опције:

  - boolean:

    - `toggle`: пребацује текућу вредност

  - integer, color или enum:

    - `++N`: додаје `N` (било који цео број) на текућу вредност

    - `--N`: одузима `N` (било који цео број) од текуће вредности

- run_callback: 1 за позив change функције повратног позива ако је вредност измењена, у супротном 0

Повратна вредност:

- WEECHAT_CONFIG_OPTION_SET_OK_CHANGED ако је вредност опције измењена

- WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE ако вредност није измењена

- WEECHAT_CONFIG_OPTION_SET_ERROR ако је дошло до грешке

C пример:

    switch (weechat_config_option_set (option, "new_value", 1))
    {
        case WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_ERROR:
            /* .... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_option_set(option: str, value: str, run_callback: int) -> int: ...

    # пример
    rc = weechat.config_option_set(option, "new_value", 1)
    if rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_ERROR:
        # ...

#### config_option_set_null

Поставља опцију на null (недефинисану вредност).

Прототип:

    int weechat_config_option_set_null (struct t_config_option *option,
                                        int run_callback);

Аргументи:

- option: показивач на опцију

- run_callback: 1 за позив change функције повратног позива ако је вредност опције измењена, у супротном 0

Белешка | Вредност можете да поставите на null само ако је то дозвољено за опцију (погледајте config_new_option).

Повратна вредност:

- WEECHAT_CONFIG_OPTION_SET_OK_CHANGED ако је вредност опције измењена

- WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE ако вредност није измењена

- WEECHAT_CONFIG_OPTION_SET_ERROR ако је дошло до грешке

C пример:

    switch (weechat_config_option_set_null (option, 1))
    {
        case WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_ERROR:
            /* .... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_option_set_null(option: str, run_callback: int) -> int: ...

    # пример
    rc = weechat.config_option_set_null(option, 1)
    if rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_ERROR:
        # ...

#### config_option_unset

Уклања/ресетује опцију.

Прототип:

    int weechat_config_option_unset (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност:

- WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET ако вредност опције није ресетована

- WEECHAT_CONFIG_OPTION_UNSET_OK_RESET ако је вредност опције ресетована

- WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED ако је опција уклоњена

- WEECHAT_CONFIG_OPTION_UNSET_ERROR ако је дошло до грешке

C пример:

    switch (weechat_config_option_unset (option))
    {
        case WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_UNSET_OK_RESET:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED:
            /* .... */
            break;
        case WEECHAT_CONFIG_OPTION_UNSET_ERROR:
            /* .... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_option_unset(option: str) -> int: ...

    # пример
    rc = weechat.config_option_unset(option)
    if rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_RESET:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
        # ...

#### config_option_rename

Мења име опције.

Прототип:

    void weechat_config_option_rename (struct t_config_option *option,
                                       const char *new_name);

Аргументи:

- option: показивач на опцију

- new_name: ново име опције

C пример:

    weechat_config_option_rename (option, "new_name");

Скрипта (Python):

    # прототип
    def config_option_rename(option: str, new_name: str) -> int: ...

    # пример
    weechat.config_option_rename(option, "new_name")

#### config_option_get_string

WeeChat ≥ 1.9.

Враћа стринг вредност особине опције.

Прототип:

    const char *weechat_config_option_get_string (struct t_config_option *option,
                                                  const char *property);

Аргументи:

- option: показивач на опцију

- property: име особине:

  - config_name: име фајла

  - section_name: име одељка

  - name: име опције

  - parent_name: име родитељске опције

  - type: тип опције, једно од:

    - boolean

    - integer

    - string

    - color

    - enum

  - description: опис опције

Повратна вредност:

- стринг вредност особине

C пример:

    const char *type = weechat_config_option_get_string (option, "type");

Белешка | Ова функција није доступна у API скриптовања.

#### config_option_get_pointer

Враћа показивач на особину опције.

Прототип:

    void *weechat_config_option_get_pointer (struct t_config_option *option,
                                             const char *property);

Аргументи:

- option: показивач на опцију

- property: име особине:

  - config_file: показивач на конфигурациони фајл (struct t_config_file *)

  - section: показивач на одељак (struct t_config_section *)

  - name: име опције (char *)

  - parent_name: име родитељске опције (char *) (WeeChat ≥ 1.4)

  - type: тип опције (int *)

  - description: опис опције (char *)

  - string_values: стринг вредности (char *)

  - min: минимална вредност (int *)

  - max: максимална вредност (int *)

  - default_value: подразумевана вредност (зависи од типа)

  - value: текућа вредност (зависи од типа)

  - prev_option: показивач на претходну опцију (struct t_config_option *)

  - next_option: показивач на наредну опцију (struct t_config_option *)

Повратна вредност:

- показивач на тражену опцију

C пример:

    char *description = weechat_config_option_get_pointer (option, "description");

Белешка | Ова функција није доступна у API скриптовања.

#### config_option_is_null

Проверава да ли је опција „null” (недефинисана вредност).

Прототип:

    int weechat_config_option_is_null (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност:

- 1 ако је вредност опције „null”

- 0 ако вредност опције није „null”

C пример:

    if (weechat_config_option_is_null (option))
    {
        /* вредност је "null" */
    }
    else
    {
        /* вредност није "null" */
    }

Скрипта (Python):

    # пример
    def config_option_is_null(option: str) -> int: ...
        # ...

    # пример
    if weechat.config_option_is_null(option):
        # ...

#### config_option_default_is_null

Проверава да ли је подразумевана вредност опције „null” (недефинисана вредност).

Прототип:

    int weechat_config_option_default_is_null (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност:

- 1 ако је подразумевана вредност опције „null”

- 0 ако подразумевана вредност опције није „null”

C пример:

    if (weechat_config_option_default_is_null (option))
    {
        /* подразумевана вредност је "null" */
    }
    else
    {
        /* подразумевана вредност није "null" */
    }

Скрипта (Python):

    # пример
    def config_option_default_is_null(option: str) -> int: ...

    # пример
    if weechat.config_option_default_is_null(option):
        # ...

#### config_boolean

Враћа логичку вредност опције.

Прототип:

    int weechat_config_boolean (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: логичка вредност опције (0 или 1)

- integer: 0

- string: 0

- color: 0

- enum: 0

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    if (weechat_config_boolean (option))
    {
        /* вредност је "true" */
    }
    else
    {
        /* вредност је "false" */
    }

Скрипта (Python):

    # прототип
    def config_boolean(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    if weechat.config_boolean(option):
        # ...

#### config_boolean_default

Враћа подразумевану логичку вредност опције.

Прототип:

    int weechat_config_boolean_default (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: подразумевана логичка вредност опције (0 или 1)

- integer: 0

- string: 0

- color: 0

- enum: 0

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    if (weechat_config_boolean_default (option))
    {
        /* вредност је "true" */
    }
    else
    {
        /* вредност је "false" */
    }

Скрипта (Python):

    # прототип
    def config_boolean_default(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    if weechat.config_boolean_default(option):
        # ...

#### config_boolean_inherited

WeeChat ≥ 4.3.0.

Враћа наслећену логичку вредност опције: вредност опције ако није NULL, или вредност опције-родитеља (ако опција наслеђује вредност од друге опције).
Ако се не пронађе опција-родитељ, враћа се подразумевана вредност опције.
Ако је вредност опције-родитеља NULL, враћа се подразумевана вредност опције-родитеља.

Прототип:

    int weechat_config_boolean_inherited (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност: погледајте функције config_boolean и config_boolean_default.

C пример:

    struct t_config_option *option = weechat_config_get ("irc.server.libera.autoconnect");
    int autoconnect = weechat_config_boolean_inherited (option);

Скрипта (Python):

    # прототип
    def config_boolean_inherited(option: str) -> int: ...

    # пример
    option = weechat.config_get("irc.server.libera.autoconnect")
    autoconnect = weechat.config_boolean_inherited(option)

#### config_integer

Return integer value of option.

Прототип:

    int weechat_config_integer (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, у зависности од типа опције:

- boolean: логичка вредност опције (0 or 1)

- integer: целобројна вредност опције

- string: 0

- color: индекс боје

- enum: целобројна вредност опције (индекс enum вредности)

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    int value = weechat_config_integer (option);

Скрипта (Python):

    # прототип
    def config_integer(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_integer(option)

#### config_integer

Враћа целобројну вредност опције.

Прототип:

    int weechat_config_integer (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: логичка вредност опције (0 или 1)

- integer: целобројна вредност опције

- string: 0

- color: индекс боје

- enum: целобројна вредност опције (индекс enum вредности)

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    int value = weechat_config_integer (option);

Скрипта (Python):

    # прототип
    def config_integer(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_integer(option)

#### config_integer_default

Враћа подразумевану целобројну вредност опције.

Прототип:

    int weechat_config_integer_default (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: подразумевана логичка вредност опције (0 или 1)

- integer: подразумевана целобројна вредност опције

- string: 0

- color: подразумевани индекс боје

- enum: подразумевана целобројна вредност опције (индекс enum вредности)

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    int value = weechat_config_integer_default (option);

Скрипта (Python):

    # прототип
    def config_integer_default(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_integer_default(option)

#### config_integer_inherited

WeeChat ≥ 4.3.0.

Враћа наслеђену целобројну вредност опције: вредност опције ако није NULL, или вредност опције-родитеља (ако опција наслеђује вредност од друге опције).
Ако се не пронађе опција-родитељ, враћа се подразумевана вредност опције.
Ако је вредност опције-родитељ NULL, враћа подразумевану вредност опције-родитеља.

Прототип:

    int weechat_config_integer_inherited (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност: погледајте функције config_integer и config_integer_default.

C пример:

    struct t_config_option *option = weechat_config_get ("irc.server.libera.autojoin_delay");
    int delay = weechat_config_integer_inherited (option);

Скрипта (Python):

    # прототип
    def config_integer_inherited(option: str) -> int: ...

    # пример
    option = weechat.config_get("irc.server.libera.autojoin_delay")
    delay = weechat.config_integer_inherited(option)

#### config_string

Враћа стринг вредност опције.

Прототип:

    const char *weechat_config_string (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: „on” ако је вредност истинита, у супротном „off”

- integer: NULL

- string: стринг вредност опције

- color: име боје

- enum: стринг вредност опције

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    const char *value = weechat_config_string (option);

Скрипта (Python):

    # прототип
    def config_string(option: str) -> str: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_string(option)

#### config_string_default

Враћа подразумевану стринг вредност опције.

Прототип:

    const char *weechat_config_string_default (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: „on” ако је подразумевана вредност истинита, у супротном „off”

- integer: NULL

- string: подразумевана стринг вредност опције

- color: име подразумеване боје

- enum: подразумевана стринг вредност опције

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    const char *value = weechat_config_string_default (option);

Скрипта (Python):

    # прототип
    def config_string_default(option: str) -> str: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_string_default(option)

#### config_string_inherited

WeeChat ≥ 4.3.0.

Враћа наслеђену стринг вредност опције: вредност опције ако није NULL, или вредност опције-родитеља (ако опција наслеђује вредност од друге опције).
Ако се не пронађе опција-родитељ, враћа се подразумевана вредност опције.
Ако је вредност опције-родитељ NULL, враћа подразумевану вредност опције-родитеља.

Прототип:

    const char *weechat_config_string_inherited (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност: погледај функције config_string и config_string_default.

C пример:

    struct t_config_option *option = weechat_config_get ("irc.server.libera.msg_quit");
    const char *msg_quit = weechat_config_string_inherited (option);

Скрипта (Python):

    # прототип
    def config_string_inherited(option: str) -> str: ...

    # пример
    option = weechat.config_get("irc.server.libera.msg_quit")
    msg_quit = weechat.config_string_inherited(option)

#### config_color

Враћа вредност опције као боју.

Прототип:

    const char *weechat_config_color (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: NULL

- integer: NULL

- string: NULL

- color: име боје

- enum: NULL

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    const char *color = weechat_config_color (option);

Скрипта (Python):

    # прототип
    def config_color(option: str) -> str: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    color = weechat.config_color(option)

#### config_color_default

Враћа подразумевану вредност опције као боју.

Прототип:

    const char *weechat_config_color_default (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, зависи од типа опције:

- boolean: NULL

- integer: NULL

- string: NULL

- color: име подразумеване боје

- enum: NULL

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    const char *color = weechat_config_color_default (option);

Скрипта (Python):

    # прототип
    def config_color_default(option: str) -> str: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    color = weechat.config_color_default(option)

#### config_color_inherited

WeeChat ≥ 4.3.0.

Враћа наслеђену вредност боје опције: вредност опције ако није NULL, или вредност опције-родитеља (ако опција наслеђује вредност од друге опције).
Ако се не пронађе опција-родитељ, враћа се подразумевана вредност опције.
Ако је вредност опције-родитељ NULL, враћа подразумевану вредност опције-родитеља.

Прототип:

    const char *weechat_config_color_inherited (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност: погледајте функције config_color и config_color_default.

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    const char *color = weechat_config_color_inherited (option);

Скрипта (Python):

    # прототип
    def config_color_inherited(option: str) -> str: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    color = weechat.config_color_inherited(option)

#### config_enum

WeeChat ≥ 4.1.0.

Враћа enum вредност опције, као цео број.

Прототип:

    int weechat_config_enum (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Враћена вредност, у зависности од типа опције:

- boolean: логичка вредност опције (0 или 1)

- integer: целобројна вредност опције

- string: 0

- color: индекс боје

- enum: целобројна вредност опције (индекс enum вредности)

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    int value = weechat_config_enum (option);

Скрипта (Python):

    # прототип
    def config_enum(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_enum(option)

#### config_enum_default

WeeChat ≥ 4.1.0.

Враћа подразумевану enum вредност опције, као цео број.

Прототип:

    int weechat_config_enum_default (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност, у зависности од типа опције:

- boolean: подразумевана логичка вредност опције (0 или 1)

- integer: подразумевана целобројна вредност опције

- string: 0

- color: подразумевани индекс боје

- enum: подразумевана целобројна вредност опције (индекс enum вредности)

C пример:

    struct t_config_option *option = weechat_config_get ("plugin.section.option");
    int value = weechat_config_enum_default (option);

Скрипта (Python):

    # прототип
    def config_enum_default(option: str) -> int: ...

    # пример
    option = weechat.config_get("plugin.section.option")
    value = weechat.config_enum_default(option)

#### config_enum_inherited

WeeChat ≥ 4.3.0.

Враћа наслеђену enum вредност опције: вредност опције ако није NULL, или вредност опције-родитеља (ако опција наслеђује вредност од друге опције).
Ако се не пронађе опција-родитељ, враћа се подразумевана вредност опције.
Ако је вредност опције-родитељ NULL, враћа подразумевану вредност опције-родитеља.

Прототип:

    int weechat_config_enum_inherited (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

Повратна вредност: погледајте функције config_enum и config_enum_default.

C пример:

    struct t_config_option *option = weechat_config_get ("irc.server.libera.sasl_fail");
    int sasl_fail = weechat_config_enum_inherited (option);

Скрипта (Python):

    # прототип
    def config_enum_inherited(option: str) -> int: ...

    # пример
    option = weechat.config_get("irc.server.libera.sasl_fail")
    sasl_fail = weechat.config_enum_inherited(option)

#### config_write_option

Уписује линију у конфигурациони фајл са опцијом и њеном вредности (ова функција би требало да се позове само у „write” или „write_default” функцијама повратног позива за одељак).

Прототип:

    void weechat_config_write_option (struct t_config_file *config_file,
                                      struct t_config_option *option);

Аргументи:

- config_file: показивач на конфигурациони фајл

- option: показивач на опцију

C пример:

    int
    my_section_write_cb (const void *pointer, void *data,
                         struct t_config_file *config_file,
                         const char *section_name)
    {
        weechat_config_write_line (config_file, "my_section", NULL);

        weechat_config_write_option (config_file, option);

        return WEECHAT_RC_OK;
    }

Скрипта (Python):

    # прототип
    def config_write_option(config_file: str, option: str) -> int: ...

    # пример
    def my_section_write_cb(data: str, config_file: str, section_name: str) -> int:
        weechat.config_write_line(config_file, "my_section", "")
        weechat.config_write_option(config_file, option)
        return weechat.WEECHAT_RC_OK

#### config_write_line

Уписује линију у конфигурациони фајл (ова функција би требало да се позива само у „write” или „write_default” функцијама повратног позива за одељак).

Прототип:

    void weechat_config_write_line (struct t_config_file *config_file,
                                    const char *option_name,
                                    const char *value, ...);

Аргументи:

- config_file: показивач на конфигурациони фајл

- option_name: име опције

- value: вредност (ако је NULL, онда се уписује линија са именом одељка, на пример: "[section]")

C пример:

    int
    my_section_write_cb (const void *pointer, void *data,
                         struct t_config_file *config_file,
                         const char *section_name)
    {
        weechat_config_write_line (config_file, "my_section", NULL);

        weechat_config_write_line (config_file, "option", "%s;%d",
                                   "value", 123);

        return WEECHAT_RC_OK;
    }

Скрипта (Python):

    # прототип
    def config_write_line(config_file: str, option_name: str, value: str) -> int: ...

    # пример
    def my_section_write_cb(data: str, config_file: str, section_name: str) -> int:
        weechat.config_write_line(config_file, "my_section", "")
        weechat.config_write_line(config_file, "option", "value")
        return weechat.WEECHAT_RC_OK

#### config_write

Уписује конфигурациони фајл на диск.

Прототип:

    int weechat_config_write (struct t_config_file *config_file);

Аргументи:

- config_file: показивач на конфигурациони фајл

Повратна вредност:

- WEECHAT_CONFIG_WRITE_OK ако је конфигурација уписана

- WEECHAT_CONFIG_WRITE_MEMORY_ERROR ако није било довољно слободне меморије

- WEECHAT_CONFIG_WRITE_ERROR ако је дошло до неке друге грешке

C пример:

    switch (weechat_config_write (config_file))
    {
        case WEECHAT_CONFIG_WRITE_OK:
            /* ... */
            break;
        case WEECHAT_CONFIG_WRITE_MEMORY_ERROR:
            /* ... */
            break;
        case WEECHAT_CONFIG_WRITE_ERROR:
            /* ... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_write(config_file: str) -> int: ...

    # пример
    rc = weechat.config_write(config_file)
    if rc == weechat.WEECHAT_CONFIG_WRITE_OK:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_WRITE_MEMORY_ERROR:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_WRITE_ERROR:
        # ...

#### config_read

Чита конфигурациони фајл са диска.

Прототип:

    int weechat_config_read (struct t_config_file *config_file);

Аргументи:

- config_file: показивач на конфигурациони фајл

Повратна вредност:

- WEECHAT_CONFIG_READ_OK ако је конфигурација учитана

- WEECHAT_CONFIG_READ_MEMORY_ERROR ако није било довољно слободне меморије

- WEECHAT_CONFIG_READ_FILE_NOT_FOUND ако фајл није пронађен

C пример:

    switch (weechat_config_read (config_file))
    {
        case WEECHAT_CONFIG_READ_OK:
            /* ... */
            break;
        case WEECHAT_CONFIG_READ_MEMORY_ERROR:
            /* ... */
            break;
        case WEECHAT_CONFIG_READ_FILE_NOT_FOUND:
            /* ... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_read(config_file: str) -> int: ...

    # пример
    rc = weechat.config_read(config_file)
    if rc == weechat.WEECHAT_CONFIG_READ_OK:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_READ_MEMORY_ERROR:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_READ_FILE_NOT_FOUND:
        # ...

#### config_reload

Поново учитава конфигурацију са диска.

Прототип:

    int weechat_config_reload (struct t_config_file *config_file);

Аргументи:

- config_file: показивач на конфигурациони фајл

Повратна вредност:

- WEECHAT_CONFIG_READ_OK ако је конфигурација поново учитана

- WEECHAT_CONFIG_READ_MEMORY_ERROR ако није било довољно слободне меморије

- WEECHAT_CONFIG_READ_FILE_NOT_FOUND ако фајл није пронађен

C пример:

    switch (weechat_config_reload (config_file))
    {
        case WEECHAT_CONFIG_READ_OK:
            /* ... */
            break;
        case WEECHAT_CONFIG_READ_MEMORY_ERROR:
            /* ... */
            break;
        case WEECHAT_CONFIG_READ_FILE_NOT_FOUND:
            /* ... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_reload(config_file: str) -> int: ...

    # пример
    rc = weechat.config_reload(config_file)
    if rc == weechat.WEECHAT_CONFIG_READ_OK:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_READ_MEMORY_ERROR:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_READ_FILE_NOT_FOUND:
        # ...

#### config_option_free

Ослобађа меморију коју заузима опција.

Прототип:

    void weechat_config_option_free (struct t_config_option *option);

Аргументи:

- option: показивач на опцију

C пример:

    weechat_config_option_free (option);

Скрипта (Python):

    # прототип
    def config_option_free(option: str) -> int: ...

    # пример
    weechat.config_option_free(option)

#### config_section_free_options

Ослобађа меморију коју заузимају све опцију у одељку.

Прототип:

    void weechat_config_section_free_options (struct t_config_section *section);

Аргументи:

- section: показивач на одељак

C пример:

    weechat_config_section_free_options (section);

Скрипта (Python):

    # прототип
    def config_section_free_options(section: str) -> int: ...

    # пример
    weechat.config_section_free_options(section)

#### config_section_free

Ослобађа меморију коју заузима одељак.

Прототип:

    void weechat_config_section_free (struct t_config_section *section);

Аргументи:

- section: показивач на одељак

C пример:

    weechat_config_section_free (section);

Скрипта (Python):

    # прототип
    def config_section_free(section: str) -> int: ...

    # пример
    weechat.config_section_free(section)

#### config_free

Ослобађа меморију коју заузима конфигурациони фајл.

Прототип:

    void weechat_config_free (struct t_config_file *config_file);

Аргументи:

- config_file: показивач на конфигурациони фајл

C пример:

    weechat_config_free (config_file);

Скрипта (Python):

    # прототип
    def config_free(config_file: str) -> int: ...

    # пример
    weechat.config_free(config_file)

#### config_get

Тражи опцију према пуном имену.

Прототип:

    struct t_config_option *weechat_config_get (const char *option_name);

Аргументи:

- option_name: пуно име опције (у формату: „фајл.одељак.опција”)

Повратна вредност:

- показивач на нађену опцију, NULL у случају да се опција не нађе

C пример:

    struct t_config_option *option = weechat_config_get ("weechat.look.item_time_format");

Скрипта (Python):

    # прототип
    def config_get(option_name: str) -> str: ...

    # пример
    option = weechat.config_get("weechat.look.item_time_format")

#### config_get_plugin

Тражи опцију у конфигурационом фајлу додатака (plugins.conf).

Прототип:

    const char *weechat_config_get_plugin (const char *option_name);

Аргументи:

- option_name: име опције, програм WeeChat ће додати префикс „plugins.var.xxx.”(где је „xxx” име текућег додатка)

Повратна вредност:

- вредност пронађене опције, NULL у случају да се опција не пронађе

C пример:

    /* ако је текући додатак „test”, онда се у фајлу plugins.conf
       тражи вредност опције „plugins.var.test.option” */
    char *value = weechat_config_get_plugin ("option");

Скрипта (Python):

    # прототип
    def config_get_plugin(option_name: str) -> str: ...

    # пример
    value = weechat.config_get_plugin("option")

#### config_is_set_plugin

Проверава да ли је опција постављена у конфигурационом фајлу додатака (plugins.conf).

Прототип:

    int weechat_config_is_set_plugin (const char *option_name);

Аргументи:

- option_name: име опције, програм WeeChat ће додати префикс „plugins.var.xxx.”(где је „xxx” име текућег додатка)

Повратна вредност:

- 1 ако је опција постављена, 0 ако опција не постоји

C пример:

    if (weechat_config_is_set_plugin ("option"))
    {
        /* опција је постављена */
    }
    else
    {
        /* опција не постоји */
    }

Скрипта (Python):

    # прототип
    def config_is_set_plugin(option_name: str) -> int: ...

    # пример
    if weechat.config_is_set_plugin("option"):
        # опција је постављена
        # ...
    else:
        # опција не постоји
        # ...

#### config_set_plugin

Поставља нову вредност опције у конфигурационом фајлу додатака (plugins.conf).

Прототип:

    int weechat_config_set_plugin (const char *option_name, const char *value);

Аргументи:

- option_name: име опције, програм WeeChat ће додати префикс „plugins.var.xxx.”(где је „xxx” име текућег додатка)

- value: нова вредност опције

Повратна вредност:

- WEECHAT_CONFIG_OPTION_SET_OK_CHANGED ако је вредност опције измењена

- WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE ако вредност није измењена

- WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND ако опција није пронађена

- WEECHAT_CONFIG_OPTION_SET_ERROR ако је дошло до неке друге грешке

C пример:

    switch (weechat_config_set_plugin ("option", "test_value"))
    {
        case WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
            /* ... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
            /* ... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND:
            /* ... */
            break;
        case WEECHAT_CONFIG_OPTION_SET_ERROR:
            /* ... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_set_plugin(option_name: str, value: str) -> int: ...

    # пример
    rc = weechat.config_set_plugin("option", "test_value")
    if rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_CHANGED:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_SET_ERROR:
        # ...

#### config_set_desc_plugin

WeeChat ≥ 0.3.5.

Поставља опис за опцију у конфигурационом фајлу додатака (plugins.conf).

Прототип:

    void weechat_config_set_desc_plugin (const char *option_name,
                                         const char *description);

Аргументи:

- option_name: име опције, програм WeeChat ће додати префикс „plugins.desc.xxx.”(где је „xxx” име текућег додатка)

- description: опис опције

Белешка | Ако опција (plugins.var.xxx.име_опције) не постоји, то не представља проблем. Будуће креирање опције под овим именом ће употребити овај опис.

C пример:

    weechat_config_set_desc_plugin ("option", "description of option");

Скрипта (Python):

    # прототип
    def config_set_desc_plugin(option_name: str, description: str) -> int: ...

    # пример
    version = weechat.info_get("version_number", "") or 0
    if int(version) >= 0x00030500:
        weechat.config_set_desc_plugin("option", "description of option")

#### config_unset_plugin

Брише опцију из конфигурационог фајла додатака (plugins.conf).

Прототип:

    int weechat_config_unset_plugin (const char *option_name);

Аргументи:

- option_name: име опције, програм WeeChat ће додати префикс „plugins.var.xxx.”(где је „xxx” име текућег додатка)

Повратна вредност:

- WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET ако вредност опције није ресетована

- WEECHAT_CONFIG_OPTION_UNSET_OK_RESET ако је вредност опције ресетована

- WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED ако је опција уклоњена

- WEECHAT_CONFIG_OPTION_UNSET_ERROR ако је дошло до грешке

C пример:

    switch (weechat_config_unset_plugin ("option"))
    {
        case WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET:
            /* ... */
            break;
        case WEECHAT_CONFIG_OPTION_UNSET_OK_RESET:
            /* ... */
            break;
        case WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED:
            /* ... */
            break;
        case WEECHAT_CONFIG_OPTION_UNSET_ERROR:
            /* ... */
            break;
    }

Скрипта (Python):

    # прототип
    def config_unset_plugin(option_name: str) -> int: ...

    # пример
    rc = weechat.config_unset_plugin("option")
    if rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_RESET:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED:
        # ...
    elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
        # ...

### 3.12. Тастерске пречице

Функције за тастерске пречице.

#### key_bind

WeeChat ≥ 0.3.6, ажурирано у верзији 1.8.

Додаје нове тастерске пречице.

Белешка | За разлику од команде `/key bind`, ова функција никада неће изменити постојећу тастерску пречицу, може само да креира нове. Ако желите да уклоните тастерску пречицу, употребите key_unbind.

Прототип:

    int weechat_key_bind (const char *context, struct t_hashtable *keys);

Аргументи:

- context: контекст за тастере:

  - default: подразумевани контекст (уобичајене акције)

  - search: контекст претраге (када се тражи текст у баферу)

  - cursor: слободно померање курсора по екрану

  - mouse: тастери за догађаје миша

- keys: хеш табела са тастерским пречицама; може да садржи следеће специјалне кључеве:

  - __quiet: не приказују се пречице додате у core бафер (WeeChat ≥ 1.8)

Повратна вредност:

- број додатих тастерских пречица

C пример:

    struct t_hashtable *keys = weechat_hashtable_new (8,
                                                      WEECHAT_HASHTABLE_STRING,
                                                      WEECHAT_HASHTABLE_STRING,
                                                      NULL,
                                                      NULL);
    if (keys)
    {
        weechat_hashtable_set (keys, "@chat(plugin.buffer):button1", "hsignal:test_mouse");
        weechat_hashtable_set (keys, "@chat(plugin.buffer):wheelup", "/mycommand up");
        weechat_hashtable_set (keys, "@chat(plugin.buffer):wheeldown", "/mycommand down");
        weechat_key_bind ("mouse", keys);
        weechat_hashtable_free (keys);
    }

Скрипта (Python):

    # прототип
    def key_bind(context: str, keys: Dict[str, str]) -> int: ...

    # пример
    keys = {"@chat(python.test):button1": "hsignal:test_mouse",
            "@chat(python.test):wheelup": "/mycommand up",
            "@chat(python.test):wheeldown": "/mycommand down"}
    weechat.key_bind("mouse", keys)

#### key_unbind

WeeChat ≥ 0.3.6, ажурирано у верзији 2.0.

Уклања тастерску пречицу (или више њих).

Опрез | Када се ова функција позива, обезбедите да не уклоните корисникове тастерске пречице.

Прототип:

    int weechat_key_unbind (const char *context, const char *key);

Аргументи:

- context: контекст за тастере (погледајте key_bind)

- key: тастер који се уклања или специјална вредност „area:XXX” којом се уклањају све пречице које имају XXX као први или други део; ако тастер почиње са „quiet:”, тастери који се уклањају се неће приказати у core баферу (WeeChat ≥ 2.0).

Повратна вредност:

- број уклоњених тастерских пречица

C примери:

    /* уклања једну тастерску пречицу */
    weechat_key_unbind ("mouse", "@chat(plugin.buffer):button1");

    /* уклања све тастере са делом "chat(plugin.buffer)" */
    weechat_key_unbind ("mouse", "area:chat(plugin.buffer)");

Скрипта (Python):

    # прототип
    def key_unbind(context: str, key: str) -> int: ...

    # примери

    # уклања једну тастерску пречицу
    weechat.key_unbind("mouse", "@chat(plugin.buffer):button1")

    # уклања све тастере са делом "chat(python.test)"
    weechat.key_unbind("mouse", "area:chat(python.test)")

### 3.13. Приказ

Функције које приказују текст у баферима.

#### prefix

Враћа префикс.

Прототип:

    const char *weechat_prefix (const char *prefix);

Аргументи:

- prefix: име префикса (погледајте табелу испод)

Повратна вредност:

- вредност префикса (стринг са префиксом и кодовима боја), празан стринг ако се префикс не пронађе

Листа префикса:

Префикс | Вредност | Боја | Опис
--- | --- | --- | ---
`error` | `=!=` | yellow | Порука о грешки.
`network` | `--` | magenta | Порука са мреже.
`action` | `*` | white | Сопствена акција.
`join` | `-->` | lightgreen | Неко се придружио текућем разговору.
`quit` | `<--` | lightred | Неко напушта текући разговор.

Белешка | Командом `/set` могу да се прилагоде вредности и боје.

C пример:

    weechat_printf (NULL, "%sОво је грешка...", weechat_prefix ("error"));

Скрипта (Python):

    # прототип
    def prefix(prefix: str) -> str: ...

    # пример
    weechat.prnt("", "%sОво је грешка..." % weechat.prefix("error"))

#### color

Враћа стринг кода боје за приказ.

Прототип:

    const char *weechat_color (const char *color_name);

Аргументи:

- color_name: име боје, једно од::

  - Име опције WeeChat боје (из weechat.color.xxx), на пример chat_delimiters

  - име опције (у формату: фајл.одељак.опција), на пример irc.color.message_quit (WeeChat ≥ 1.2)

  - боја са необавезним атрибутима/позадином (погледајте испод)

  - атрибут:

    - blink: поставља трептање

    - -blink: уклања трептање

    - dim: поставља „dim” (затамњено)

    - -dim: уклања „dim” (затамњено)

    - bold: поставља подебљан испис

    - -bold: уклања подебљан испис

    - reverse: поставља обрнути приказ

    - -reverse: уклања обрнути приказ

    - italic: поставља испис у курзиву

    - -italic: уклања испис у курзиву

    - underline: поставља подвучени испис

    - -underline: уклања подвучени испис

    - emphasis: пребацује активност наглашавања текста (напомена: ово би требало да се користи само у тракама, јер програм WeeChat користи наглашавање текста када претражује текст у баферу) (WeeChat ≥ 0.4.2)

  - име боје траке:

    - bar_fg: боја предњег плана траке

    - bar_delim: боја граничника за траку

    - bar_bg: боја позадине за траку

  - ресет:

    - reset: ресетује боје и атрибуте

    - resetcolor: ресетује боју (задржава атрибуте) (WeeChat ≥ 0.3.6)

Формат боје је: атрибути (није обавезно) + име боје + ",позадина" (није обавезно). Могући су следећи атрибути:

- `%`: трептање

- `.`: „dim” (затамњено)

- `*`: подебљани текст

- `!`: обрнути видео

- `/`: курзив

- `_`: подвучен текст

- `|`: задржава атрибуте: када се мења боја, не ресетују се подебљано/обрнуто/курзив/подвучено (WeeChat ≥ 0.3.6)

Примери:

- `yellow`: жуто

- `_green`: подвучено зелено

- `*214`: подебљано наранџасто

- `yellow,red`: жуто на црвеном

- `|cyan`: цијан (и задржава било које атрибуте постављена раније)

Повратна вредност:

- стринг са кодом боје, или празан стринг ако се боја не пронађе

C пример:

    weechat_printf (NULL, "Color: %sblue %sdefault color %syellow on red",
                    weechat_color ("blue"),
                    weechat_color ("chat"),
                    weechat_color ("yellow,red"));

Скрипта (Python):

    # прототип
    def color(color_name: str) -> str: ...

    # пример
    weechat.prnt("", "Color: %sblue %sdefault color %syellow on red"
        % (weechat.color("blue"), weechat.color("chat"), weechat.color("yellow,red")))

#### printf

Приказује поруку у баферу.

Прототип:

    void weechat_printf (struct t_gui_buffer *buffer, const char *message, ...);

Ова функција је пречица за функцију printf_datetime_tags.
Следећа два позива дају потпуно исти резултат:

    weechat_printf (buffer, "message");
    weechat_printf_datetime_tags (buffer, 0, 0, NULL, "message");

Аргументи:

- buffer: показивач на бафер, ако је NULL, порука се приказује у WeeChat баферу

- message: порука која треба да се прикаже

Белешка | Први табулатор у поруци („\t”) се користи за раздвајање префикса од поруке. Ако ваша порука садржи табове и не желите префикс, онда користите размак, па таб, па онда поруку (погледајте пример испод): ово ће да искључи префикс (размак пре таба се неће приказивати).

Белешка | Ако постоје два таба („\t”) на почетку поруке, време се неће приказивати и порука неће имати поравнање. Уз то, датум у поруци ће се поставити на 0.

C пример:

    weechat_printf (NULL, "Hello on WeeChat buffer");
    weechat_printf (buffer, "Hello on this buffer");
    weechat_printf (buffer, "%sThis is an error!", weechat_prefix ("error"));
    weechat_printf (buffer, " \tMessage without prefix but with \t some \t tabs");
    weechat_printf (buffer, "\t\tMessage without time/alignment");
    weechat_printf (buffer, "\t\t");  /* empty line (without time) */

Скрипта (Python):

    # прототип
    def prnt(buffer: str, message: str) -> int: ...

    # пример
    weechat.prnt("", "Здраво на WeeChat баферу")
    weechat.prnt(buffer, "Здраво на овом баферу")
    weechat.prnt(buffer, "%sОво је грешка!" % weechat.prefix("error"))
    weechat.prnt(buffer, " \tПорука без префикса, али са \t мало \t табова")
    weechat.prnt(buffer, "\t\tПорука без времена/поравнања")
    weechat.prnt(buffer, "\t\t")  # празна линија (без времена)

Белешка | У скриптама се функција зове „print” („prnt” у језику Python).

#### printf_date_tags

Приказује поруку у баферу, уз употребу прилагођеног датума и ознака.

Прототип:

    void weechat_printf_date_tags (struct t_gui_buffer *buffer, time_t date,
                                   const char *tags, const char *message, ...);

Ова функција је пречица за функцију printf_datetime_tags.
Следећа два позива дају потпуно исти резултат:

    weechat_printf_date_tags (buffer, 0, NULL, "message");
    weechat_printf_datetime_tags (buffer, 0, 0, NULL, "message");

Аргументи:

- buffer: показивач на бафер, ако је NULL, порука се приказује у WeeChat баферу

- date: датум за поруку (0 значи текући датум/време)

- tags: листа ознака раздвојених запетама (NULL значи да нема ознака)

- message: порука која треба да се прикаже

За листу ознака које се уобичјаено користе у програму WeeChat, погледајте Корисничко упутство / Ознаке линија ↗.

C пример:

    weechat_printf_date_tags (NULL, time (NULL) - 120, "notify_message",
                              "Message 2 minutes ago, with a tag 'notify_message'");

Скрипта (Python):

    # прототип
    def prnt_date_tags(buffer: str, date: int, tags: str, message: str) -> int: ...

    # пример
    time = int(time.time())
    weechat.prnt_date_tags("", time - 120, "notify_message",
        "Message 2 minutes ago, with a tag 'notify_message'")

Белешка | Функција се у скриптама зове „print_date_tags” („prnt_date_tags” у језику Python).

#### printf_datetime_tags

WeeChat ≥ 4.2.0.

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

Прототип:

    void weechat_printf_datetime_tags (struct t_gui_buffer *buffer, time_t date,
                                       int date_usec, const char *tags, const char *message, ...);

Аргументи:

- buffer: показивач на бафер, ако је NULL, порука се приказује у WeeChat баферу

- date: датум за поруку (0 значи текући датум/време)

- date_usec: микросекунде датума (између 0 и 999999)

- tags: листа ознака раздвојених запетама (NULL значи да нема ознака)

- message: порука која треба да се прикаже

За листу ознака које се уобичјаено користе у програму WeeChat, погледајте Корисничко упутство / Ознаке линија ↗.

C пример:

    struct timeval tv_now;

    gettimeofday (&tv_now, NULL);
    weechat_printf_datetime_tags (NULL, tv_now.tv_sec - 120, tv_now.tv_usec,
                                  "notify_message",
                                  "Message 2 minutes ago, with a tag 'notify_message'");

Скрипта (Python):

    # прототип
    def prnt_datetime_tags(buffer: str, date: int, date_usec: int, tags: str, message: str) -> int: ...

    # пример
    now = time.time()
    time_sec = int(now)
    time_usec = int((now * 1000000) % 1000000)
    weechat.prnt_datetime_tags("", time_sec - 120, time_usec, "notify_message",
                               "Message 2 minutes ago, with a tag 'notify_message'")

Белешка | Функција се у скриптама зове „print_datetime_tags” („prnt_datetime_tags” у језику Python).

#### printf_y

Приказује поруку на линији бафера са слободним садржајем.

Прототип:

    void weechat_printf_y (struct t_gui_buffer *buffer, int y, const char *message, ...);

Ова функција је скраћеница за функцију printf_y_datetime_tags.
Следећа два позива враћају потпуно исти резултат:

    weechat_printf_y (buffer, 0, "порука");
    weechat_printf_y_datetime_tags (buffer, 0, 0, 0, NULL, "порука");

Аргументи:

- buffer: показивач на бафер

- y: број линије (прва линија је 0); негативна вредност додаје линију иза последње приказане линије: апсолутна вредност y је број линија након последње линије (на пример -1 је непосредно након последње линије, -2 је 2 линије након последње линије) (WeeChat ≥ 1.0)

- message: порука која треба да се прикаже

C пример:

    weechat_printf_y (buffer, 2, "Моја порука на трећој линији");

Скрипта (Python):

    # прототип
    def prnt_y(buffer: str, y: int, message: str) -> int: ...

    # пример
    weechat.prnt_y("", 2, "Моја порука на трећој линији")

Белешка | У скриптама се функција зове „print_y” („prnt_y” у језику Python).

#### printf_y_date_tags

WeeChat ≥ 3.5.

Приказује поруку на линији бафера са произвољним садржајем, користећи прилагођене ознаке времена и датума.

Прототип:

    void weechat_printf_y_date_tags (struct t_gui_buffer *buffer, int y, time_t date,
                                     const char *tags, const char *message, ...);

Ова функција је скраћеница за функцију printf_y_datetime_tags.
Следећа два позива враћају потпуно исти резултат:

    weechat_printf_y_date_tags (buffer, 0, 0, NULL, "порука");
    weechat_printf_y_datetime_tags (buffer, 0, 0, 0, NULL, "порука");

Аргументи:

- buffer: показивач на бафер

- y: број линије (прва линија је 0); негативна вредност додаје линију иза последње приказане линије: апсолутна вредност y је број линија након последње линије (на пример -1 је непосредно након последње линије, -2 је 2 линије након последње линије)

- date: датум за поруку (0 значи текући датум/време)

- tags: листа ознака раздвојених запетама (NULL значи да нема ознака)

- message: порука која треба да се прикаже

C пример:

    weechat_printf_y_date_tags (buffer, 2, 0, "my_tag", "My message on third line with a tag");

Скрипта (Python):

    # прототип
    def prnt_y_date_tags(buffer: str, y: int, date: int, tags: str, message: str) -> int: ...

    # пример
    weechat.prnt_y_date_tags("", 2, 0, "my_tag", "My message on third line with a tag")

Белешка | У скриптама се функција зове „print_y_date_tags” („prnt_y_date_tags” у језику Python).

#### printf_y_datetime_tags

WeeChat ≥ 4.2.0.

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

Прототип:

    void weechat_printf_y_datetime_tags (struct t_gui_buffer *buffer, int y, time_t date,
                                         int date_usec, const char *tags, const char *message, ...);

Аргументи:

- buffer: показивач на бафер

- y: број линије (прва линија је 0); негативна вредност додаје линију иза последње приказане линије: апсолутна вредност y је број линија након последње линије (на пример -1 је непосредно након последње линије, -2 је 2 линије након последње линије)

- date: датум за поруку (0 значи текући датум/време)

- date_usec: микросекунде датума (између 0 и 999999)

- tags: листа ознака раздвојених запетама (NULL значи да нема ознака)

- message: порука која треба да се прикаже

C пример:

    weechat_printf_y_datetime_tags (buffer, 2, 0, 0, "my_tag", "My message on third line with a tag");

Скрипта (Python):

    # прототип
    def prnt_y_datetime_tags(buffer: str, y: int, date: int, date_usec: int, tags: str, message: str) -> int: ...

    # пример
    weechat.prnt_y_datetime_tags("", 2, 0, 0, "my_tag", "My message on third line with a tag")

Белешка | У скриптама се функција зове „print_y_datetime_tags” („prnt_y_datetime_tags” у језику Python).

#### log_printf

Уписује поруку у WeeChat лог фајл (weechat.log).

Прототип:

    void weechat_log_printf (const char *message, ...);

Аргументи:

- message: порука која треба да се упише

C пример:

    weechat_log_printf ("Моја порука у лог фајлу");

Скрипта (Python):

    # прототип
    def log_print(message: str) -> int: ...

    # пример
    weechat.log_print("Моја порука у лог фајлу")

Белешка | Функција се у скриптама зове „log_print”.

### 3.14. Куке

#### Приоритет куке

WeeChat ≥ 0.3.4.

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

Да бисте поставили приоритет, морате да користите следећу синтаксу за аргумент за који је дозвољен приоритет: `nnn|име` где је `nnn` позитиван цео број са приоритетом, а `име` је име аргумента (приоритет се не појављује у имену, он се аутоматски уклања из стринга).
Дозвољен је само један приоритет по куки.

Подразумевани приоритет је 1000.

C примери:

    /* модификатор кука са приоритетом = 2000 */
    /* високи приоритет: позива се пре осталих функција повратног позива модификатора */
    weechat_hook_modifier ("2000|input_text_display", &modifier_cb, NULL, NULL);

    /* качи се на два сигнала са приоритетом = 3000 */
    /* високи приоритет: позива се пре осталих функција повратног позива сигнала */
    weechat_hook_signal ("3000|quit;upgrade", &signal_cb, NULL, NULL);

    /* качи се на линије које се исписују у форматираним баферима са приоритетом = 500 */
    /* низак приоритет: позива се након осталих функција повратног позива линија */
    weechat_hook_line ("500|formatted", "*", NULL, &line_cb, NULL, NULL);

Приоритет дозвољавају следећи типови кука:

- command

- completion

- command_run

- line

- signal

- hsignal

- config

- modifier

- info

- info_hashtable

- infolist

- hdata

- focus

#### hook_command

Ажурирано у верзијама 1.5, 1.7.

Качи се на команду.

Прототип:

    struct t_hook *weechat_hook_command (const char *command,
                                         const char *description,
                                         const char *args,
                                         const char *args_description,
                                         const char *completion,
                                         int (*callback)(const void *pointer,
                                                         void *data,
                                                         struct t_gui_buffer *buffer,
                                                         int argc,
                                                         char **argv,
                                                         char **argv_eol),
                                         const void *callback_pointer,
                                         void *callback_data);

Аргументи:

- command: име команде (након команде се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- description: опис команде (приказује се са `/help команда`)

- args: аргументи за команду (приказује се са `/help команда`)

- args_description: опис аргумената (приказује се са `/help команда`)

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

- callback: функција која се позива када се употреби команда, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: бафер у коме се извршава команда

  - int argc: број аргумената дат уз команду

  - char **argv: аргументи дати уз команду

  - char **argv_eol: аргументи дати за команду (све до краја линије за сваки аргумент)

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

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

Формат довршавања може да буде:

- %(име): довршавање име

- %(име:аргументи): довршавање име са аргументи који се шаљу функцији повратног позива (WeeChat ≥ 1.7)

- било који стринг: користи се у довршавању без икаквих измена

На пример, шаблон `list || add %(filters_names) || del %(filters_names)|-all` ће у аргументима команде да довршава са следећим вредностима:

- први аргумент: `list`, `add` и `del`

- други аргумент, зависно од првог аргумента:

  - `list`: ништа

  - `add`: имена филтера

  - `del`: имена филтера и `-all`

Подразумевани кодови довршавања су:

Plugin | Name | Description
--- | --- | ---
alias | alias | list of aliases
alias | alias_value | value of alias
buflist | buflist_items | buflist bar items
buflist | buflist_items_used | buflist bar items used (according to option buflist.look.use_items)
exec | exec_commands_ids | ids (numbers and names) of executed commands
fset | fset_options | configuration files, sections, options and words of options
guile | guile_script | list of scripts
irc | irc_channel | current IRC channel
irc | irc_channel_nicks_hosts | nicks and hostnames of current IRC channel
irc | irc_channel_topic | topic of current IRC channel
irc | irc_channels | channels on all IRC servers
irc | irc_channels_autojoin | channels automatically joined on the current server (option "autojoin")
irc | irc_ignores_numbers | numbers for defined ignores
irc | irc_modelist_masks | modelist masks of current IRC channel; required argument: modelist mode
irc | irc_modelist_numbers | modelist numbers of current IRC channel; required argument: modelist mode
irc | irc_msg_kick | default kick message
irc | irc_msg_part | default part message for IRC channel
irc | irc_notify_nicks | nicks in notify list
irc | irc_privates | privates on all IRC servers
irc | irc_raw_filters | filters for irc raw buffer
irc | irc_server | current IRC server
irc | irc_server_channels | channels on current IRC server
irc | irc_server_nick | nick on current IRC server
irc | irc_server_nicks | nicks on all channels of current IRC server
irc | irc_server_prefix_modes_filter | arguments to filter by prefix mode (for example: "-o", "-h", "-v", "-*")
irc | irc_server_privates | privates on current IRC server
irc | irc_servers | IRC servers (internal names)
irc | nick | nicks of current IRC channel
lua | lua_script | list of scripts
perl | perl_script | list of scripts
php | php_script | list of scripts
python | python_script | list of scripts
relay | relay_free_port | first free port for relay plugin
relay | relay_protocol_name | all possible protocol.name for relay plugin
relay | relay_relays | protocol.name of current relays for relay plugin
relay | relay_remotes | relay remotes
ruby | ruby_script | list of scripts
script | script_extensions | list of script extensions
script | script_files | files in script directories
script | script_languages | list of script languages
script | script_scripts | list of scripts in repository
script | script_scripts_installed | list of scripts installed (from repository)
script | script_tags | tags of scripts in repository
spell | spell_dicts | list of installed dictionaries
spell | spell_langs | list of all languages supported
tcl | tcl_script | list of scripts
trigger | trigger_add_arguments | arguments for command that adds a trigger: trigger name, hooks, hook arguments, hook conditions, hook regex, hook command, hook return code, post actions
trigger | trigger_hook_arguments | default arguments for a hook
trigger | trigger_hook_command | default command for a hook
trigger | trigger_hook_conditions | default conditions for a hook
trigger | trigger_hook_rc | default return codes for hook callback
trigger | trigger_hook_regex | default regular expression for a hook
trigger | trigger_hooks | hooks for triggers
trigger | trigger_hooks_filter | hooks for triggers (for filter in monitor buffer)
trigger | trigger_names | triggers
trigger | trigger_names_default | default triggers
trigger | trigger_names_disabled | disabled triggers
trigger | trigger_names_enabled | enabled triggers
trigger | trigger_option_value | value of a trigger option
trigger | trigger_options | options for triggers
trigger | trigger_post_action | trigger post actions
weechat | bars_items | names of bar items
weechat | bars_names | names of bars
weechat | bars_options | options for bars
weechat | buffer_local_variable_value | value of a buffer local variable
weechat | buffer_local_variables | buffer local variables
weechat | buffer_properties_get | properties that can be read on a buffer
weechat | buffer_properties_set | properties that can be set on a buffer
weechat | buffer_properties_setauto | properties that can be automatically set on a buffer
weechat | buffers_names | names of buffers
weechat | buffers_numbers | numbers of buffers
weechat | buffers_plugins_names | names of buffers (including plugins names)
weechat | colors | color names
weechat | commands | commands (weechat and plugins); optional argument: prefix to add before the commands
weechat | config_files | configuration files
weechat | config_option_values | values for a configuration option
weechat | config_options | configuration options
weechat | cursor_areas | areas ("chat" or bar name) for free cursor movement
weechat | custom_bar_item_add_arguments | arguments for command that adds a custom bar item: item name, conditions, content
weechat | custom_bar_item_conditions | conditions for custom bar item
weechat | custom_bar_item_contents | contents for custom bar item
weechat | custom_bar_items_names | names of custom bar items
weechat | env_value | value of an environment variable
weechat | env_vars | environment variables
weechat | eval_variables | variables that can be used in /eval command
weechat | filename | filename; optional argument: default path (evaluated, see /help eval)
weechat | filters_names | names of filters
weechat | filters_names_disabled | names of disabled filters
weechat | filters_names_enabled | names of enabled filters
weechat | hook_types | hook types
weechat | infolists | names of infolists hooked
weechat | infos | names of infos hooked
weechat | keys_codes | key codes
weechat | keys_codes_for_reset | key codes that can be reset (keys added, redefined or removed)
weechat | keys_contexts | key contexts
weechat | layouts_names | names of layouts
weechat | nicks | nicks in nicklist of current buffer
weechat | palette_colors | palette colors
weechat | plugins_commands | commands defined by plugins; optional argument: prefix to add before the commands
weechat | plugins_installed | names of plugins installed
weechat | plugins_names | names of plugins
weechat | proxies_names | names of proxies
weechat | proxies_options | options for proxies
weechat | secured_data | names of secured data (file sec.conf, section data)
weechat | weechat_commands | weechat commands; optional argument: prefix to add before the commands
weechat | windows_numbers | numbers of windows
xfer | nick | nicks of DCC chat

Специјални кодови:

- `%%команда`: поновна употреба шаблона довршавања из команде команда

- `%-`: заустављање довршавања

- `%*`: понављање последњег довршавања

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_command_cb (const void *pointer, void *data, struct t_gui_buffer *buffer,
                   int argc, char **argv, char **argv_eol)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    /* овај пример је инспирисан командом /filter */
    struct t_hook *my_command_hook =
        weechat_hook_command ("мојфилтер",
                              "опис за myfilter",
                              "[list] | [enable|disable|toggle [име]] | "
                              "[add име plugin.buffer tags regex] | "
                              "[del име|-all]",
                              "опис аргумената...",
                              "list"
                              " || enable %(filters_names)"
                              " || disable %(filters_names)"
                              " || toggle %(filters_names)"
                              " || add %(filters_names) %(buffers_plugins_names)|*"
                              " || del %(filters_names)|-all",
                              &my_command_cb, NULL, NULL);

На пример, ако је команда која се позива `/command abc def ghi`, онда argv и argv_eol имају следеће вредности:

- argv:

  - argv[0] == "/command"

  - argv[1] == "abc"

  - argv[2] == "def"

  - argv[3] == "ghi"

- argv_eol:

  - argv_eol[0] == "/command abc def ghi"

  - argv_eol[1] == "abc def ghi"

  - argv_eol[2] == "def ghi"

  - argv_eol[3] == "ghi"

У скриптама, args има вредност "abc def ghi".

Скрипта (Python):

    # прототип
    def hook_command(command: str, description: str, args: str, args_description: str,
                     completion: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_command_cb(data: str, buffer: str, args: str) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_command("мојфилтер", "опис за мојфилтер",
        "[list] | [enable|disable|toggle [име]] | [add име plugin.buffer tags regex] | [del име|-all]",
        "опис аргумената...",
        "list"
        " || enable %(filters_names)"
        " || disable %(filters_names)"
        " || toggle %(filters_names)"
        " || add %(filters_names) %(buffers_plugins_names)|*"
        " || del %(filters_names)|-all",
        "my_command_cb", "")

#### hook_completion

Ажурирано у верзијама 1.5, 1.7.

Качи се на довршавање.

Прототип:

    struct t_hook *weechat_hook_completion (const char *completion_item,
                                            const char *description,
                                            int (*callback)(const void *pointer,
                                                            void *data,
                                                            const char *completion_item,
                                                            struct t_gui_buffer *buffer,
                                                            struct t_gui_completion *completion),
                                            const void *callback_pointer,
                                            void *callback_data);

Аргументи:

- completion_item: име ставке довршавања, након ње у закаченој команди (аргумент completion) можете да користите %(име) (или %(име:аргументи) у WeeChat ≥ 1.7) (након ставке довршавања се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- description: опис довршавања

- callback: функција се позива када се употреби ставка довршавања (корисник нешто довршава употребом ове ставке), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *completion_item: име ставке довршавања (у WeeChat ≥ 1.7 може да укључи и аргументе у формату: име:аргументи)

  - struct t_gui_buffer *buffer: бафер у коме се врши довршавање

  - struct t_gui_completion *completion: структура која се користи за додавање речи довршавања (погледајте completion_list_add)

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Белешка | Имена довршавања су глобална (програм WeeChat и додаци их заједнички користе). Тако да се препоручује да изаберете име са јединственим префиксом, као што је „plugin_xxx” (где је „xxx” име ваше ставке).

Важно | Функција повратног позива сме да се позива само функције довршавања као што је completion_list_add и НЕ сме да ажурира командну линију. Да бисте ажурирали командну линију када се притисне `Tab`, употребите функцију hook_command_run са командом: `/input complete_next` (а ако ваша функција повратног позива успешно ажурира командну линију, морате да вратите WEECHAT_RC_OK_EAT, тако да програм WeeChat не изврши довршавање).

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_completion_cb (const void *pointer, void *data, const char *completion_item,
                      struct t_gui_buffer *buffer,
                      struct t_gui_completion *completion)
    {
        weechat_completion_list_add (completion, "реч1", 0, WEECHAT_LIST_POS_SORT);
        weechat_completion_list_add (completion, "тест_реч2", 0, WEECHAT_LIST_POS_SORT);
        return WEECHAT_RC_OK;
    }

    struct t_hook *my_completion_hook = weechat_hook_completion ("plugin_ставка",
                                                                 "моје лично довршавање!",
                                                                 &my_completion_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_completion(completion_item: str, description: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_completion_cb(data: str, completion_item: str, buffer: str, completion: str) -> int:
        weechat.completion_list_add(completion, "реч1", 0, weechat.WEECHAT_LIST_POS_SORT)
        weechat.completion_list_add(completion, "тест_реч2", 0, weechat.WEECHAT_LIST_POS_SORT)
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_completion("plugin_ставка", "моје лично довршавање!",
                                   "my_completion_cb", "")

#### hook_completion_get_string

WeeChat ≥ 0.3.4.

Застарело од WeeChat верзије 2.9 (још увек постоји из разлога компатибилности).
Ову функцију је заменила completion_get_string.

#### hook_completion_list_add

Застарело од WeeChat верзије 2.9 (још увек постоји из разлога компатибилности).
Ову функцију је заменила completion_list_add.

#### hook_command_run

Ажурирано у верзији 1.5.

Закачи се на команду када је програм WeeChat покрене.

Прототип:

    struct t_hook *weechat_hook_command_run (const char *command,
                                             int (*callback)(const void *pointer,
                                                             void *data,
                                                             struct t_gui_buffer *buffer,
                                                             const char *command),
                                             const void *callback_pointer,
                                             void *callback_data);

Аргументи:

- command: команда која се качи (дозвољен је џокер `*`) (након команде се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- callback: функција која се позива када се команда покрене, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: бафер у коме се извршава команда

  - const char *command: команда која се извршава, са својим аргументима

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_OK_EAT: након функције повратног позива, програм WeeChat неће извршити команду

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_command_run_cb (const void *pointer, void *data,
                       struct t_gui_buffer *buffer, const char *command)
    {
        weechat_printf (NULL, "Трошим довршавање!");
        return WEECHAT_RC_OK_EAT;
    }

    struct t_hook *my_command_run_hook =
        weechat_hook_command_run ("/input complete*",
                                  &my_command_run_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_command_run(command: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_command_run_cb(data: str, buffer: str, command: str) -> int:
        weechat.prnt("", "Трошим довршавање!")
        return weechat.WEECHAT_RC_OK_EAT

    hook = weechat.hook_command_run("/input complete*", "my_command_run_cb", "")

#### hook_timer

Ажурирано у верзији 1.5.

Качи се на тајмер.

Прототип:

    struct t_hook *weechat_hook_timer (long interval,
                                       int align_second,
                                       int max_calls,
                                       int (*callback)(const void *pointer,
                                                       void *data,
                                                       int remaining_calls),
                                       const void *callback_pointer,
                                       void *callback_data);

Аргументи:

- interval: интервал између два позива (у милисекундама, па је 1000 = 1 секунда)

- align_second: поравнање на секундама. На пример, ако је текуће време 09:00, а интервал = 60000 (60 секунди) и align_second = 60, онда се тајмер позива сваког минута у 0 секунди

- max_calls: колико пута ће се позвати тајмер (ако је 0, онда тајмер не стаје)

- callback: функција која се позива када се достигне време, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - int remaining_calls: број преосталих позива (-1 ако тајмер не стаје)

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_timer_cb (const void *pointer, void *data, int remaining_calls)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    /* тајмер се позива сваких 20 секунди */
    struct t_hook *my_timer_hook =
        weechat_hook_timer (20 * 1000, 0, 0, &my_timer_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_timer(interval: int, align_second: int, max_calls: int, callback: str, callback_data: str) -> str: ...

    # пример
    def my_timer_cb(data: str, remaining_calls: int) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    # тајмер се позива сваких 20 секунди
    hook = weechat.hook_timer(20 * 1000, 0, 0, "my_timer_cb", "")

#### hook_fd

Ажурирано у верзијама 1.3, 1.5, 2.0.

Качи се на фајл дескриптор (фајла или сокета).

Прототип:

    struct t_hook *weechat_hook_fd (int fd,
                                    int flag_read,
                                    int flag_write,
                                    int flag_exception,
                                    int (*callback)(const void *pointer,
                                                    void *data,
                                                    int fd),
                                    const void *callback_pointer,
                                    void *callback_data);

Аргументи:

- fd: фајл дескриптор

- flag_read: 1 = хвата се догађај читања, 0 = игнорише се

- flag_write: 1 = хвата се догађај уписа, 0 = игнорише се

- flag_exception: 1 = хвата се догађај изузетка, 0 = игнорише се (WeeChat ≥ 1.3: овај аргумент се игнорише и више се не користи)

- callback: функција која се позива када се за фајл (или сокет) догоди изабрани догађај, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - int fd: фајл дескриптор

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

Важно | У скриптама, са програмом WeeChat ≥ 2.0, аргумент функције повратног позива fd је цео број (у WeeChat ≤ 1.9, био је стринг). Да би постојала компатибилност са свим верзијама, препоручује се да пре употребе конвертујете аргумент у цео број, на пример у језику Python: `int(fd)`.

C пример:

    int
    my_fd_cb (const void *pointer, void *data, int fd)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    int sock = socket (AF_INET, SOCK_STREAM, 0);
    /* set socket options */
    /* ... */
    struct t_hook *my_fd_hook = weechat_hook_fd (sock, 1, 0, 0, &my_fd_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_fd(fd: int, flag_read: int, flag_write: int, flag_exception: int, callback: str, callback_data: str) -> str: ...

    # пример
    def my_fd_cb(data: str, fd: int) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    sock = ...
    hook = weechat.hook_fd(sock, 1, 0, 0, "my_fd_cb", "")

#### hook_process

Ажурирано у верзији 1.5.

Качи се на процес (покренут рачвањем), и хвата његов излаз.

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

Прототип:

    struct t_hook *weechat_hook_process (const char *command,
                                         int timeout,
                                         int (*callback)(const void *pointer,
                                                         void *data,
                                                         const char *command,
                                                         int return_code,
                                                         const char *out,
                                                         const char *err),
                                         const void *callback_pointer,
                                         void *callback_data);

Аргументи:

- command: команда која се покреће у дете процесу, URL (WeeChat ≥ 0.3.7) или функција (WeeChat ≥ 1.5) (погледајте испод)

- timeout: тајмаут за команду (у милисекундама): када овај тајмаут истекне, дете процес се убија (0 значи да нема тајмаута)

- callback: функција која се позива када су доступни подаци из дете процеса, или када се дете процес заврши, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *command: команда коју извршава дете

  - int return_code: повратни кôд:

    - ≥ 0: повратни кôд детета за команду, а за URL су могуће следеће вредности:

      - 0: трансфер OK

      - 1: неважећи URL

      - 2: грешка трансфера

      - 3: нема довољно слободне меморије

      - 4: грешка са фајлом

    - < 0:

      - WEECHAT_HOOK_PROCESS_RUNNING (-1): подаци су доступни, али се дете још увек извршава

      - WEECHAT_HOOK_PROCESS_ERROR (-2): грешка приликом покретања команде

      - WEECHAT_HOOK_PROCESS_CHILD (-3): у дете процесу је позвана функција повратног позива (користи се само у C API, не у скриптинг API)

  - out: стандардни излаз команде (stdout)

  - err: излаз грешака команде (stderr)

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

    - повратни кôд дете процеса (у случају функције са „func:” у команди)

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

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

Команда може да буде URL у следећем формату: „url:https://www.example.com”, за преузимање садржаја URL адресе (WeeChat ≥ 0.3.7). За URL могу да се користе опције функцијом hook_process_hashtable.

Команда такође може да буде и име функције у формату: „func:име”, чиме се извршава функција „име” (WeeChat ≥ 1.5). Ова функција прихвата један аргумент (data) и мора да врати стринг, који се прослеђује функцији повратног позива.
У C API, функција повратног позива се позива са повратним кодом постављеним на WEECHAT_HOOK_PROCESS_CHILD, што значи да се функција повратног позива извршава у дете процесу (након рачвања).
У API скриптовања, функција име се директно позива и њен резултат (стринг) се прослеђује функцији повратног позива (као и излаз спољне команде.)

Савет | Ако желите да добијете информације у вези са WeeChat (као што је текућа стабилна верзија, последњи гит комит, итд.), можете да употребите URL адресе на овој страници ↗.

Белешка | Величина бафера за слање података је 64KB (постоји 2 бафера: један за stdout и једна за stderr). Ако је излаз из дете процеса (stdout или stderr) дужи од 64KB, функција повратног позива ће се позивати више пута.

Важно | Чак и ако се у највећем броју случајева ваша функција повратног позива зове само једном, у свом коду морате обезбедити да нема проблема са вишеструким позивањем: морате да спајате податке примљене у више позива и да податке употребљавате само када повратни кôд није негативан.

C пример:

    /* пример са спољном командом */
    int
    my_process_cb (const void *pointer, void *data, const char *command,
                   int return_code, const char *out, const char *err)
    {
        if (return_code == WEECHAT_HOOK_PROCESS_ERROR)
        {
            weechat_printf (NULL, "Грешка у команди ’%s’", command);
            return WEECHAT_RC_OK;
        }

        if (return_code >= 0)
        {
            weechat_printf (NULL, "return_code = %d", return_code);
        }

        if (out)
        {
            weechat_printf (NULL, "stdout: %s", out);
        }

        if (err)
        {
            weechat_printf (NULL, "stderr: %s", err);
        }

        return WEECHAT_RC_OK;
    }

    struct t_hook *my_process_hook = weechat_hook_process ("ls", 5000,
                                                           &my_process_cb, NULL, NULL);

    /* пример са функцијом повратног позива која се зове у дете процесу */
    int
    my_process_func_cb (const void *pointer, void *data, const char *command,
                        int return_code, const char *out, const char *err)
    {
        if (return_code == WEECHAT_HOOK_PROCESS_CHILD)
        {
            /* одради нешто блокирајуће... */
            /* ... */

            /* stdout ће се послати као "out" и функцији повратног позива родитеља */
            printf ("ово је резултат");

            /* повратни кôд процеса */
            return 0;
        }
        else
        {
            if (return_code == WEECHAT_HOOK_PROCESS_ERROR)
            {
                weechat_printf (NULL, "Грешка у команди ’%s’", command);
                return WEECHAT_RC_OK;
            }

            if (return_code >= 0)
            {
                weechat_printf (NULL, "return_code = %d", return_code);
            }

            if (out)
            {
                weechat_printf (NULL, "stdout: %s", out);
            }

            if (err)
            {
                weechat_printf (NULL, "stderr: %s", err);
            }

            return WEECHAT_RC_OK;
        }
    }

    struct t_hook *my_process_hook = weechat_hook_process ("func:get_status", 5000,
                                                           &my_process_func_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_process(command: str, timeout: int, callback: str, callback_data: str) -> str: ...

    # пример са спољном командом
    def my_process_cb(data: str, command: str, return_code: int, out: str, err: str) -> int:
        if return_code == weechat.WEECHAT_HOOK_PROCESS_ERROR:
            weechat.prnt("", "Грешка у команди ’%s’" % command)
            return weechat.WEECHAT_RC_OK
        if return_code >= 0:
            weechat.prnt("", "return_code = %d" % return_code)
        if out:
            weechat.prnt("", "stdout: %s" % out)
        if err:
            weechat.prnt("", "stderr: %s" % err)
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_process("ls", 5000, "my_process_cb", "")

    # пример са скрипт функцијом
    def get_status(data: str) -> str:
        # одради нешто блокирајуће...
        # ...
        return "ово је резултат"

    def my_process_cb(data: str, command: str, return_code: int, out: str, err: str) -> int:
        if return_code == weechat.WEECHAT_HOOK_PROCESS_ERROR:
            weechat.prnt("", "Грешка у команди ’%s’" % command)
            return weechat.WEECHAT_RC_OK
        if return_code >= 0:
            weechat.prnt("", "return_code = %d" % return_code)
        if out:
            weechat.prnt("", "stdout: %s" % out)
        if err:
            weechat.prnt("", "stderr: %s" % err)
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_process("func:get_status", 5000, "my_process_cb", "")

#### hook_process_hashtable

WeeChat ≥ 0.3.7, ажурирано у верзији 1.5.

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

Прототип:

    struct t_hook *weechat_hook_process_hashtable (const char *command,
                                                   struct t_hashtable *options,
                                                   int timeout,
                                                   int (*callback)(const void *pointer,
                                                                   void *data,
                                                                   const char *command,
                                                                   int return_code,
                                                                   const char *out,
                                                                   const char *err),
                                                   const void *callback_pointer,
                                                   void *callback_data);

Аргументи су исти као за функцију hook_process, уз један додатни аргумент:

- options: опције за команду која се извршава; хеш табела се дуплира у функцији, тако да након овог позива безбедно можете да ослободите меморију коју заузима

За стандардну команду (која не почиње са „url:”), можете користите следеће опције:

Опција | Мин WeeChat | Вредност | Подразумевана | Опис
--- | --- | --- | --- | ---
argN (N ≥ 1) | 0.4.0 | било који стринг | без аргумената | Аргументи команде; ако се овим опцијама не наведе ниједан аргумент, команда се аутоматски дели на начин на који то ради командно окружење (па се онда аргументи команде учитавају у command аргумент).
stdin | 0.4.3 | (не користи се) | без stdin | Креира пајп за упис података на стандардни улаз (stdin) дете процеса (погледајте функцију hook_set).
buffer_flush | 1.0 | број бајтова | 65536 | Минимални број бајтова након којег се испира stdout/stderr (да се излаз пошаље функцији повратног позива), између 1 и 65536. Ако је вредност 1, излаз се тренутно шаље функцији повратног позива.
detached | 1.0 | (не користи се) | нема одвајања | Процес се покреће у одвојеном режиму: stdout и stderr се преусмеравају на /dev/null.

За команду "url:…​", погледајте доступне опције у функцији hook_url.

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_process_cb (const void *pointer, void *data, const char *command,
                   int return_code, const char *out, const char *err)
    {
        if (return_code == WEECHAT_HOOK_PROCESS_ERROR)
        {
            weechat_printf (NULL, "Грешка у команди ’%s’", command);
            return WEECHAT_RC_OK;
        }

        if (return_code >= 0)
        {
            weechat_printf (NULL, "return_code = %d", return_code);
        }

        if (out)
        {
            weechat_printf (NULL, "stdout: %s", out);
        }

        if (err)
        {
            weechat_printf (NULL, "stderr: %s", err);
        }

        return WEECHAT_RC_OK;
    }

    /* пример 1: преузимање URL */
    struct t_hashtable *options_url1 = weechat_hashtable_new (8,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              NULL,
                                                              NULL);
    if (options_url1)
    {
        weechat_hashtable_set (options_url1, "file_out", "/tmp/weechat.org.html");
        struct t_hook *my_process_hook = weechat_hook_process_hashtable ("url:https://weechat.org/",
                                                                         options_url1,
                                                                         20000,
                                                                         &my_process_cb, NULL, NULL);
        weechat_hashtable_free (options_url1);
    }

    /* пример 2: отварање URL са прилагођеним HTTP заглављима */
    struct t_hashtable *options_url2 = weechat_hashtable_new (8,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              NULL,
                                                              NULL);
    if (options_url2)
    {
        weechat_hashtable_set (options_url2, "httpheader",
                               "Header1: value1\n"
                               "Header2: value2");
        struct t_hook *my_process_hook = weechat_hook_process_hashtable ("url:http://localhost:8080/",
                                                                         options_url2,
                                                                         20000,
                                                                         &my_process_cb, NULL, NULL);
        weechat_hashtable_free (options_url2);
    }

    /* пример 3: извршавање обавештавања програма са поруком која је пристигла од некога */
    struct t_hashtable *options_cmd1 = weechat_hashtable_new (8,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              NULL,
                                                              NULL);
    if (options_cmd1)
    {
        weechat_hashtable_set (options_cmd1, "arg1", "-from");
        weechat_hashtable_set (options_cmd1, "arg2", nick);
        weechat_hashtable_set (options_cmd1, "arg3", "-msg");
        weechat_hashtable_set (options_cmd1, "arg4", message);  /* аргумент којем се не верује */
        struct t_hook *my_process_hook = weechat_hook_process_hashtable ("my-notify-command",
                                                                         options_cmd1,
                                                                         20000,
                                                                         &my_process_cb, NULL, NULL);
        weechat_hashtable_free (options_cmd1);
    }

    /* пример 4: позив командног окружења да изврши команду (команда мора бити БЕЗБЕДНА) */
    struct t_hashtable *options_cmd2 = weechat_hashtable_new (8,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              NULL,
                                                              NULL);
    if (options_cmd2)
    {
        weechat_hashtable_set (options_cmd2, "arg1", "-c");
        weechat_hashtable_set (options_cmd2, "arg2", "ls -l /tmp | grep something");
        struct t_hook *my_process_hook = weechat_hook_process_hashtable ("sh",
                                                                         options_cmd2,
                                                                         20000,
                                                                         &my_process_cb, NULL, NULL);
        weechat_hashtable_free (options_cmd2);
    }

Скрипта (Python):

    # прототип
    def hook_process_hashtable(command: str, options: Dict[str, str], timeout: int, callback: str, callback_data: str) -> str: ...

    # пример
    def my_process_cb(data: str, command: str, return_code: int, out: str, err: str) -> int:
        if return_code == weechat.WEECHAT_HOOK_PROCESS_ERROR:
            weechat.prnt("", "Грешка у команди ’%s’" % command)
            return weechat.WEECHAT_RC_OK
        if return_code >= 0:
            weechat.prnt("", "return_code = %d" % return_code)
        if out:
            weechat.prnt("", "stdout: %s" % out)
        if err:
            weechat.prnt("", "stderr: %s" % err)
        return weechat.WEECHAT_RC_OK

    # пример 1: преузимање URL
    hook1 = weechat.hook_process_hashtable("url:https://weechat.org/",
                                           {"file_out": "/tmp/weechat.org.html"},
                                           20000, "my_process_cb", "")

    # пример 2: отварање URL са прилагођеним HTTP заглављима
    options = {
        "httpheader": "\n".join([
            "Header1: value1",
            "Header2: value2",
        ]),
    }
    hook2 = weechat.hook_process_hashtable("url:http://localhost:8080/",
                                           options,
                                           20000, "my_process_cb", "")

    # пример 3: извршавање обавештавања програма са поруком која је пристигла од некога
    hook3 = weechat.hook_process_hashtable("my-notify-command",
                                           {"arg1": "-from",
                                            "arg2": nick,
                                            "arg3": "-msg",
                                            "arg4": message},  # аргумент којем се не верује
                                           20000, "my_process_cb", "")

    # пример 4: позив командног окружења да изврши команду (команда мора бити БЕЗБЕДНА)
    hook4 = weechat.hook_process_hashtable("sh",
                                           {"arg1": "-c",
                                            "arg2": "ls -l /tmp | grep something"},
                                           20000, "my_process_cb", "")

#### hook_url

WeeChat ≥ 4.1.0.

URL трансфер.

Ова функција личи на hook_process и hook_process_hashtable са командом "url:…​" али уместо новог процеса користи нит, па тако мање оптерећује систем и препоручује се њена употреба.

Прототип:

    struct t_hook *weechat_hook_url (const char *url,
                                     struct t_hashtable *options,
                                     int timeout,
                                     int (*callback)(const void *pointer,
                                                     void *data,
                                                     const char *url,
                                                     struct t_hashtable *options,
                                                     struct t_hashtable *output),
                                     const void *callback_pointer,
                                     void *callback_data);

Аргументи:

- url: URL

- options: опције URL трансфера (погледајте испод); хеш табела се дуплира у функцији, тако да након овог позива безбедно можете да ослободите меморију коју заузима

- timeout: истек времена URL трансфера (у милисекундама): након овог периода, трансфер се зауставља (0 значи без истека времена)

- callback: функција која се позива када се заврши трансфер, аргументи и повратна вредност:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *url: URL

  - struct t_hashtable *options: опције

  - struct t_hashtable *output: резултат (кључеви и вредности су стрингови), који може да садржи следеће кључеве:

    - response_code: HTTP кôд одзива

    - headers: HTTP заглавља у одзиву

    - output: стандардни излаз (поставља се само ако у опцијама није постављено file_out)

    - error: порука о грешки (поставља се само у случају грешке)

    - error_code: error code (integer, set only in case of error):

      - `1`: invalid URL

      - `2`: transfer error (Curl error)

      - `3`: not enough memory

      - `4`: file error

      - `5`: transfer stopped (hook removed during the transfer)

      - `6`: transfer timeout

      - `100`: thread creation error

    - error_code_pthread: return code of function pthread_create (integer, set only if error_code is `100`)

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Доступне су следеће Curl опције (погледајте `man curl_easy_setopt` за опис сваке од опција):

Option | Type (1) | Constants (2)
--- | --- | ---
verbose | long |
header | long |
noprogress | long |
nosignal | long |
wildcardmatch | long |
failonerror | long |
keep_sending_on_error | long |
proxy | string |
proxyport | long |
port | long |
pre_proxy | string |
httpproxytunnel | long |
interface | string |
dns_cache_timeout | long |
proxytype | long | http, socks4, socks5, socks4a, socks5_hostname, http_1_0, https
buffersize | long |
tcp_nodelay | long |
localport | long |
localportrange | long |
address_scope | long |
noproxy | string |
socks5_gssapi_nec | long |
tcp_keepalive | long |
tcp_keepidle | long |
tcp_keepintvl | long |
unix_socket_path | string |
abstract_unix_socket | string |
path_as_is | long |
proxy_service_name | string |
service_name | string |
default_protocol | string |
tcp_fastopen | long |
socks5_auth | long |
haproxyprotocol | long |
doh_url | string |
protocols_str | string |
redir_protocols_str | string |
netrc | long | ignored, optional, required
userpwd | string |
proxyuserpwd | string |
httpauth | mask | none, basic, digest, ntlm, any, anysafe, digest_ie, only, negotiate, gssapi, bearer, aws_sigv4
proxyauth | mask | none, basic, digest, ntlm, any, anysafe, digest_ie, only, negotiate, gssapi, bearer, aws_sigv4
netrc_file | string |
username | string |
password | string |
proxyusername | string |
proxypassword | string |
tlsauth_type | mask | none, srp
tlsauth_username | string |
tlsauth_password | string |
sasl_authzid | string |
sasl_ir | long |
xoauth2_bearer | string |
login_options | string |
disallow_username_in_url | long |
autoreferer | long |
followlocation | long |
post | long |
postfields | string |
referer | string |
useragent | string |
httpheader | list |
cookie | string |
cookiefile | string |
postfieldsize | long |
maxredirs | long |
httpget | long |
cookiejar | string |
http_version | long | none, 1_0, 1_1, 2_0, 2, 2tls, 2_prior_knowledge, 3
cookiesession | long |
http200aliases | list |
unrestricted_auth | long |
postfieldsize_large | long long |
cookielist | string |
ignore_content_length | long |
accept_encoding | string |
transfer_encoding | long |
http_content_decoding | long |
http_transfer_decoding | long |
copypostfields | string |
postredir | mask | post_301, post_302
expect_100_timeout_ms | long |
headeropt | mask | unified, separate
proxyheader | list |
pipewait | long |
stream_weight | long |
request_target | string |
http09_allowed | long |
hsts | string |
hsts_ctrl | mask | enable, readonlyfile
mail_from | string |
mail_rcpt | list |
mail_auth | string |
mail_rcpt_allowfails | long |
tftp_blksize | long |
tftp_no_options | long |
ftpport | string |
quote | list |
postquote | list |
ftp_use_epsv | long |
prequote | list |
ftp_use_eprt | long |
ftp_create_missing_dirs | long |
ftpsslauth | long | default, ssl, tls
ftp_account | string |
ftp_skip_pasv_ip | long |
ftp_filemethod | long | multicwd, nocwd, singlecwd
ftp_alternative_to_user | string |
ftp_ssl_ccc | long | ccc_none, ccc_active, ccc_passive
dirlistonly | long |
append | long |
ftp_use_pret | long |
rtsp_request | long | options, describe, announce, setup, play, pause, teardown, get_parameter, set_parameter, record, receive
rtsp_session_id | string |
rtsp_stream_uri | string |
rtsp_transport | string |
rtsp_client_cseq | long |
rtsp_server_cseq | long |
aws_sigv4 | string |
crlf | long |
range | string |
resume_from | long |
customrequest | string |
nobody | long |
infilesize | long |
upload | long |
timecondition | long | none, ifmodsince, ifunmodsince, lastmod
timevalue | long |
transfertext | long |
filetime | long |
maxfilesize | long |
proxy_transfer_mode | long |
resume_from_large | long long |
infilesize_large | long long |
maxfilesize_large | long long |
timevalue_large | long long |
upload_buffersize | long |
mime_options | mask | formescape
timeout | long |
low_speed_limit | long |
low_speed_time | long |
fresh_connect | long |
forbid_reuse | long |
connecttimeout | long |
ipresolve | long | whatever, v4, v6
connect_only | long |
max_send_speed_large | long long |
max_recv_speed_large | long long |
timeout_ms | long |
connecttimeout_ms | long |
maxage_conn | long |
maxconnects | long |
use_ssl | long | none, try, control, all
resolve | list |
dns_servers | string |
accepttimeout_ms | long |
dns_interface | string |
dns_local_ip4 | string |
dns_local_ip6 | string |
connect_to | list |
happy_eyeballs_timeout_ms | long |
dns_shuffle_addresses | long |
upkeep_interval_ms | long |
maxlifetime_conn | long |
sslcert | string |
sslversion | long | default, tlsv1, sslv2, sslv3, tlsv1_0, tlsv1_1, tlsv1_2, tlsv1_3, max_default, max_none, max_tlsv1_0, max_tlsv1_1, max_tlsv1_2, max_tlsv1_3
ssl_verifypeer | long |
cainfo | string |
ssl_verifyhost | long |
ssl_cipher_list | string |
sslcerttype | string |
sslkey | string |
sslkeytype | string |
sslengine | string |
sslengine_default | long |
capath | string |
ssl_sessionid_cache | long |
keypasswd | string |
issuercert | string |
crlfile | string |
certinfo | long |
gssapi_delegation | long | none, policy_flag, flag
ssl_options | long | allow_beast, no_revoke, no_backends, ok, too_late, unknown_backend, no_partialchain, revoke_best_effort, native_ca, auto_client_cert
ssl_enable_alpn | long |
pinnedpublickey | string |
ssl_verifystatus | long |
proxy_cainfo | string |
proxy_capath | string |
proxy_crlfile | string |
proxy_keypasswd | string |
proxy_pinnedpublickey | string |
proxy_sslcert | string |
proxy_sslcerttype | string |
proxy_sslkey | string |
proxy_sslkeytype | string |
proxy_sslversion | long | default, tlsv1, sslv2, sslv3, tlsv1_0, tlsv1_1, tlsv1_2, tlsv1_3, max_default, max_none, max_tlsv1_0, max_tlsv1_1, max_tlsv1_2, max_tlsv1_3
proxy_ssl_cipher_list | list |
proxy_ssl_options | long | allow_beast, no_revoke, no_backends, ok, too_late, unknown_backend, no_partialchain, revoke_best_effort, native_ca, auto_client_cert
proxy_ssl_verifyhost | long |
proxy_ssl_verifypeer | long |
proxy_tlsauth_password | string |
proxy_tlsauth_type | string |
proxy_tlsauth_username | string |
tls13_ciphers | list |
proxy_tls13_ciphers | list |
proxy_issuercert | string |
ssl_ec_curves | string |
doh_ssl_verifyhost | long |
doh_ssl_verifypeer | long |
doh_ssl_verifystatus | long |
ca_cache_timeout | long |
ssh_auth_types | mask | none, policy_flag, flag
ssh_public_keyfile | string |
ssh_private_keyfile | string |
ssh_host_public_key_md5 | string |
ssh_knownhosts | string |
ssh_compression | long |
ssh_host_public_key_sha256 | string |
telnetoptions | list |
ws_options | mask | binary, close, cont, offset, ping, pong, raw_mode, text
new_file_perms | long |
new_directory_perms | long |
quick_exit | long |

Белешка | (1) За опције типа „mask”, формат је: „вредност1+вредност2+вредност3”; за опције типа „list”, ставке листе морају да се раздвоје преломом линије (`\n`). (2) Ако су доступне константе, оне морају да се користе као вредност опције.

За улазни/излазни фајл су дозвољене следеће две додатне опције (стрингови):

Опција | Тип | Опис
--- | --- | ---
file_in | string | фајл који се чита и шаље URL адресама (post фајл)
file_out | string | преузети URL/фајл се уписује у овај фајл (уместо на стандардни излаз)

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_url_cb (const void *pointer, void *data, const char *url,
               struct t_hashtable *options, struct t_hashtable *output)
    {
        weechat_printf (NULL, "response_code: %s", weechat_hashtable_get (output, "response_code"));
        weechat_printf (NULL, "headers: %s", weechat_hashtable_get (output, "headers"));
        weechat_printf (NULL, "output: %s", weechat_hashtable_get (output, "output"));
        weechat_printf (NULL, "error: %s", weechat_hashtable_get (output, "error"));
        return WEECHAT_RC_OK;
    }

    /* example 1: output to a file */
    struct t_hashtable *options_url1 = weechat_hashtable_new (8,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              NULL,
                                                              NULL);
    if (options_url1)
    {
        weechat_hashtable_set (options_url1, "file_out", "/tmp/weechat.org.html");
        struct t_hook *my_url_hook = weechat_hook_url ("https://weechat.org/",
                                                       options_url1,
                                                       20000,
                                                       &my_url_cb, NULL, NULL);
        weechat_hashtable_free (options_url1);
    }

    /* example 2: custom HTTP headers, output sent to callback */
    struct t_hashtable *options_url2 = weechat_hashtable_new (8,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              WEECHAT_HASHTABLE_STRING,
                                                              NULL,
                                                              NULL);
    if (options_url2)
    {
        weechat_hashtable_set (options_url2, "httpheader",
                               "Header1: value1\n"
                               "Header2: value2");
        struct t_hook *my_url_hook = weechat_hook_url ("http://localhost:8080/",
                                                       options_url2,
                                                       20000,
                                                       &my_url_cb, NULL, NULL);
        weechat_hashtable_free (options_url2);
    }

Скрипта (Python):

    # прототип
    def hook_url(url: str, options: Dict[str, str], timeout: int, callback: str, callback_data: str) -> str: ...

    # пример
    def my_url_cb(data: str, url: str, options: Dict[str, str], output: Dict[str, str]) -> int:
        weechat.prnt("", "output: %s" % output)
        return weechat.WEECHAT_RC_OK

    # пример 1: излаз у фајл
    hook1 = weechat.hook_url("https://weechat.org/",
                             {"file_out": "/tmp/weechat.org.html"},
                             20000, "my_url_cb", "")

    # пример 2: произвољна HTTP заглавља, излаз се шаље функцији повратног позива
    options = {
        "httpheader": "\n".join([
            "Header1: value1",
            "Header2: value2",
        ]),
    }
    hook2 = weechat.hook_url("http://localhost:8080/", options, 20000, "my_url_cb", "")

#### hook_connect

Ажурирано у верзијама 1.5, 2.0, 4.4.0.

Качи се на везу (везу у позадини са удаљеним хостом).

Прототип:

    struct t_hook *weechat_hook_connect (const char *proxy,
                                         const char *address,
                                         int port,
                                         int ipv6,
                                         int retry,
                                         void *gnutls_sess,
                                         void *gnutls_cb,
                                         int gnutls_dhkey_size,
                                         const char *gnutls_priorities,
                                         const char *local_hostname,
                                         int (*callback)(const void *pointer,
                                                         void *data,
                                                         int status,
                                                         int gnutls_rc,
                                                         int sock,
                                                         const char *error,
                                                         const char *ip_address),
                                         const void *callback_pointer,
                                         void *callback_data);

Аргументи:

- proxy: име проксија који се користи за везу (није обавезно, NULL значи да је веза без проксија)

- address: име или IP адреса са којом се повезује

- port: број порта

- ipv6:

  - `WEECHAT_HOOK_CONNECT_IPV6_DISABLE` (1): искључује IPv6 (користи се само IPv4)

  - `WEECHAT_HOOK_CONNECT_IPV6_AUTO` (1): користи се IPv6 са преласком на IPv4 по потреби

  - `WEECHAT_HOOK_CONNECT_IPV6_FORCE` (1): форсира се IPv6 (не користи се IPv4) (WeeChat ≥ 4.4.0)

- retry: број поновних покушаја, користи се за прелаз на IPv4 хостове ако се IPv6 хостови успостављају везу али онда не прихватају клијента

- gnutls_sess: GnuTLS сесија (није обавезна)

- gnutls_cb: GnuTLS функција повратног позива (није обавезна)

- gnutls_dhkey_size: величина кључа који се користи током Дифи-Хелман размене кључева (GnuTLS)

- gnutls_priorities: приоритети за gnutls (у вези синтаксе, погледајте документацију функције gnutls_priority_init у gnutls упутству), основне вредности су следеће:

  - PERFORMANCE

  - NORMAL (подразумевано)

  - SECURE128

  - SECURE256

  - EXPORT

  - NONE

- local_hostname: име локалног хоста које ће се користити за везу (није обавезно)

- callback: функција која се позива када је веза OK или не успе да се успостави, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - int status: статус везе (2):

    - WEECHAT_HOOK_CONNECT_OK: веза је OK

    - WEECHAT_HOOK_CONNECT_ADDRESS_NOT_FOUND: адреса није пронађена

    - WEECHAT_HOOK_CONNECT_IP_ADDRESS_NOT_FOUND: IP адреса није пронађена

    - WEECHAT_HOOK_CONNECT_CONNECTION_REFUSED: повезивање је одбијено

    - WEECHAT_HOOK_CONNECT_PROXY_ERROR: грешка са проксијем

    - WEECHAT_HOOK_CONNECT_LOCAL_HOSTNAME_ERROR: грешка са именом локалног хоста

    - WEECHAT_HOOK_CONNECT_GNUTLS_INIT_ERROR: GnuTLS init грешка

    - WEECHAT_HOOK_CONNECT_GNUTLS_HANDSHAKE_ERROR: грешка код GnuTLS руковања

    - WEECHAT_HOOK_CONNECT_MEMORY_ERROR: нема довољно слободне меморије

    - WEECHAT_HOOK_CONNECT_TIMEOUT: тајмаут

    - WEECHAT_HOOK_CONNECT_SOCKET_ERROR: сокет није могао да се креира

  - gnutls_rc: повратна вредност функције gnutls_handshake() (2)

  - sock: сокет који се употребљен за везу (2)

  - const char *error: повратна вредност gnutls_strerror(gnutls_rc)

  - const char *ip_address: IP адреса није нађена

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Белешка | (1) Констате за параметар ipv6 су доступне почевши од WeeChat 4.4.0. У старијим издањима су дозвољене вредности `1` (користи се IPv6 са преласком на IPv4 у случају потребе) и `0` (искључује се IPv6, користи се само IPv4). (2) У скриптама и програмом WeeChat ≥ 2.0, аргументи функције повратног позива status, gnutls_rc и sock су цели бројеви (у програму WeeChat ≤ 1.9, били су стрингови). Да би се одржала компатибилност са свим верзијама, препоручује се да аргумент пре употребе конвертујете у цео број, на пример у језику Python: `int(sock)`.

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_connect_cb (const void *pointer, void *data, int status, int gnutls_rc,
                   int sock, const char *error, const char *ip_address)
    {
        switch (status)
        {
            case WEECHAT_HOOK_CONNECT_OK:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_ADDRESS_NOT_FOUND:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_IP_ADDRESS_NOT_FOUND:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_CONNECTION_REFUSED:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_PROXY_ERROR:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_LOCAL_HOSTNAME_ERROR:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_GNUTLS_INIT_ERROR:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_GNUTLS_HANDSHAKE_ERROR:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_MEMORY_ERROR:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_TIMEOUT:
                /* ... */
                break;
            case WEECHAT_HOOK_CONNECT_SOCKET_ERROR:
                /* ... */
                break;
        }
        return WEECHAT_RC_OK;
    }

    struct t_hook *my_connect_hook = weechat_hook_connect (NULL,
                                                           "my.server.org", 1234,
                                                           WEECHAT_HOOK_CONNECT_IPV6_AUTO,
                                                           0,
                                                           NULL, NULL, 0,  /* GnuTLS */
                                                           NULL,
                                                           &my_connect_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_connect(proxy: str, address: str, port: int, ipv6: int, retry: int, local_hostname: str,
                     callback: str, callback_data: str) -> str: ...

    # пример
    def my_connect_cb(data: str, status: int, gnutls_rc: int, sock: int, error: str, ip_address: str) -> int:
        if status == weechat.WEECHAT_HOOK_CONNECT_OK:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_ADDRESS_NOT_FOUND:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_IP_ADDRESS_NOT_FOUND:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_CONNECTION_REFUSED:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_PROXY_ERROR:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_LOCAL_HOSTNAME_ERROR:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_GNUTLS_INIT_ERROR:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_GNUTLS_HANDSHAKE_ERROR:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_MEMORY_ERROR:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_TIMEOUT:
            # ...
        elif status == weechat.WEECHAT_HOOK_CONNECT_SOCKET_ERROR:
            # ...
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_connect("", "my.server.org", 1234,
                                weechat.WEECHAT_HOOK_CONNECT_IPV6_AUTO, 0, "",
                                "my_connect_cb", "")

#### hook_line

WeeChat ≥ 2.3, ажурирано у 4.2.0.

Качи се на линију која треба да се испише у бафер.

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

- кука линије (ова кука): може да промени бафер, префикс, поруку, ознаке, ниво обавештавања, … (погледајте испод)

- кука модификатора „weechat_print”: може да промени префикс и поруку у баферу са форматираним садржајем.

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

Белешка | „line” (кука линије) је једина од ове три куке која може да ради над баферима са слободним садржајем.

Прототип:

    struct t_hook *weechat_hook_line (const char *buffer_type,
                                      const char *buffer_name,
                                      const char *tags,
                                      struct t_hashtable *(*callback)(const void *pointer,
                                                                      void *data,
                                                                      struct t_hashtable *line),
                                      const void *callback_pointer,
                                      void *callback_data);

Аргументи:

- buffer_type: хвата линије у наведеном типу бафера (ако је NULL или празан стринг, подразумева се formatted) (WeeChat ≥ 3.7: пре типа бафера се дозвољава приоритет, погледајте белешку у вези са приоритетима):

  - formatted: хвата линије само у форматираним баферима (подразумевано)

  - free: хвата линије само у баферима са слободним садржајем

  - *: хвата линије у баферима свих типова

- buffer_name: листа маски бафера раздвојених запетама (погледајте buffer_match_list); NULL, празан стринг или „*” се подудара са било којим бафером

- tags: хвата само поруке које имају наведене ознаке (није обавезно): листа ознака раздвојених запетама које морају да се налазе у поруци (логичко „или”); можете да комбинујете више ознака у релацији логичко „и” граничником `+`; у ознакама је дозвољена употреба џокера `*`

- callback: функција која се позива када се линија дода у бафер, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_hashtable *line: хеш табела са инфо о линији, кључеви и вредности су стрингови (погледајте табелу испод)

  - return value: хеш табела са новим вредностима (погледајте табелу испод)

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

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

Кључ | Вредност (форматирани бафер) | Вредност (слободни бафер) | Примери
--- | --- | --- | ---
buffer | Показивач на бафер. | Показивач на бафер. | `0x1234abcd`
buffer_name | Име бафера. | Име бафера. | `core.weechat` `irc.server.libera` `irc.libera.#weechat`
buffer_type | "formatted" | "free" | `formatted` `free`
y | Нема ("-1"). | Број линије (≥ "0"). | `-1` `8`
date | Датум линије (временска ознака). | Нема ("0"). | `1533792000`
date_usec | Микросекунде датума линије (између 0 и 999999). | N/A ("0"). | `123456`
date_printed | Датум када је линија била приказана (временска ознака). | Нема ("0"). | `1533792012`
date_usec_printed | Микросекунде датума када је линија била приказана (између 0 и 999999). | N/A ("0"). | `654321`
str_time | Датум за приказ (са могућим кодовима боја у себи). | Нема (празан стринг). | `09:07:20`
tags_count | Број ознака у линији (≥ "0"). | Нема ("0"). | `2`
tags | Листа ознака раздвојених запетама. | Нема (празан стринг). | `irc_join,nick_test`
displayed | "0" = линија је филтрирана (скривена је) "1" = линија није филтрирана (приказана је). | "0" = линија је филтрирана (скривена је) "1" = линија није филтрирана (приказана је). | `0` `1`
notify_level | "-1" = без обавештавања "0" = низак ниво "1" = порука "2" = приватна порука "3" = истицање | Нема ("0"). | `2`
highlight | "0" = без истицања "1" = линија има истицање. | Нема ("0"). | `0` `1`
prefix | Префикс линије. | Нема (празан стринг). | `-->`
message | Порука у линији. | Порука у линији. | `test (~test@example.com) је приступио у #channel`

Функција повратног позива може да врати хеш табелу са неким измењеним пољима како би се линија ажурирала. Програм WeeChat било коју неважећу вредност у пољу игнорише без упозорења.

У хеш табелу могу да се поставе следећи кључеви (кључеви и вредности у овој хеш табели су стрингови):

Кључ | Дозвољена вредност (форматирани бафер) | Дозвољена вредност (слободни бафер) | Резултат
--- | --- | --- | ---
buffer | Показивач на бафер са форматираним садржајем. | Показивач на бафер са слободним садржајем. | Линија се приказује у овом баферу. Ако је вредност празна, линија се брише (тада се све остало у хеш табели игнорише); наредне куке типа „line” се не позивају.
buffer_name | Име бафера са форматираним садржајем. | Име бафера са слободним садржајем. | Линија се приказује у овом баферу. Ако је и `buffer` постављено, вредност `buffer_name` има виши приоритет и она се користи. Ако је вредност празна, линија се брише (тада се све остало у хеш табели игнорише); наредне куке типа „line” се не позивају.
y | Нема. | Цео број (≥ „0”). | Број линије се поставља на ову вредност.
date | Временска ознака. | Нема. | Датум се поставља на ову вредност. Сагласно овоме се поставља и вредност `str_time`.
date_usec | Цео број ("0" до "999999"). | Нема. | Микросекунде датума линије се постављају на ову вредност. Сагласно овоме се поставља и вредност `str_time`.
date_printed | Временска ознака. | Нема. | Датум се поставља на ову временску ознаку (не приказује се).
date_usec_printed | Цео број ("0" до "999999"). | Нема. | Микросекунде исписаног датума се постављају на ову вредност.
str_time | Стринг. | Нема. | Овај стринг се користи за приказ датума линије. Ако је и `date` постављено, вредност `str_time` има виши приоритет и она се користи.
tags | Стринг. | Нема. | Ознаке линије се замењују овом листом ознака раздвојених запетама. Сагласно њој се ажурирају `notify_level` и `highlight`.
notify_level | Цео број („-1” до „3”). | Нема. | Ниво обавештавања се поставља на ову вредност. Када се линија дода у бафер, сагласно овој вредности се ажурира врућа листа. Вредност `highlight` се ажурира сагласно са овом вредности. Ако је и `tags` постављено, вредност `notify_level` има виши приоритет и она се користи.
highlight | Цео број („0” или „1”). | Нема. | „0” искључује истицање у линији, „1” форсира истицање у линији. Ако су постављени `tags` или `notify_level`, вредност `highlight` има виши приоритет и она се користи.
prefix | Стринг. | N/A. | Префикс линије се поставља на ову вредност.
message | Стринг. | Стринг. | Порука линије се поставља на ову вредност.

C пример:

    int
    my_line_cb (const void *pointer, void *data, struct t_hashtable *line)
    {
        struct t_hashtable *hashtable;

        hashtable = weechat_hashtable_new (8,
                                           WEECHAT_HASHTABLE_STRING,
                                           WEECHAT_HASHTABLE_STRING,
                                           NULL,
                                           NULL);
        /* force a highlight on the line */
        weechat_hashtable_set (hashtable, "highlight", "1");
        return hashtable;
    }

    /* хвата линије са ознаком „irc_join” */
    struct t_hook *my_line_hook =
        weechat_hook_line ("", "", "irc_join", &my_line_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_line(buffer_type: str, buffer_name: str, tags: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_line_cb(data: str, line: Dict[str, str]) -> Dict[str, str]:
        # force a highlight on the line
        return {"highlight": "1"}

    # хвата линије са ознаком „irc_join”
    hook = weechat.hook_line("", "", "irc_join", "my_line_cb", "")

#### hook_print

Ажурирано у верзијама 0.4.3, 1.0, 1.5, 4.2.0.

Качи се на поруку која се исписује. Позива се када се у бафер са форматираним садржајем дода линија.

За више информација о кукама које се позивају када се линија исписује, погледајте hook_line.

Прототип:

    struct t_hook *weechat_hook_print (struct t_gui_buffer *buffer,
                                       const char *tags,
                                       const char *message,
                                       int strip_colors,
                                       int (*callback)(const void *pointer,
                                                       void *data,
                                                       struct t_gui_buffer *buffer,
                                                       time_t date,
                                                       int date_usec,
                                                       int tags_count,
                                                       const char **tags,
                                                       int displayed,
                                                       int highlight,
                                                       const char *prefix,
                                                       const char *message),
                                       const void *callback_pointer,
                                       void *callback_data);

Аргументи:

- buffer: показивач на бафер, ако је NULL, хватају се поруке из било ког бафера

- tags: хватају се само поруке са наведеним ознакама (није обавезно):

  - у WeeChat ≥ 0.4.3: листа ознака раздвојених запетама које морају да се налазе у поруци (логичко „или”); више ознака могу да се комбинују у релацији логичко „и” граничником `+`; у ознакама је дозвољен џокер `*`

  - у WeeChat ≤ 0.4.2: листа ознака раздвојених запетама које морају све да се налазе у поруци (логичко „и”)

- message: хватају се само поруке са овим стрингом (није обавезно, не прави се разлика у величини слова)

- strip_colors: ако је 1, пре позива функције повратног позива, из поруке се уклањају боје

- callback: функција која се позива када се порука исписује, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: показивач на бафер

  - time_t date: датум

  - int date_usec: микросекунде датума

  - int tags_count: број ознака за линију

  - const char **tags: низ са ознакама за линију

  - int displayed: 1 ако се линија приказује, 0 ако је филтрирана (скривена)

  - int highlight: 1 ако линија има истицање, у супротном 0

  - const char *prefix: префикс

  - const char *message: порука

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

Важно | У скриптама, са програмом WeeChat ≥ 1.0, аргументи функције повратног позива displayed и highlight су цели бројеви (у WeeChat ≤ 0.4.3, били су стрингови). Да би се обезбедила компатибилност са свим верзијама, препоручује се да пре употребе аргумент конвертујете у цео број, на пример у језику Python: `if int(highlight):`.

C пример:

    int
    my_print_cb (const void *pointer, void *data, struct t_gui_buffer *buffer,
                 time_t date, int date_usec, int tags_count, const char **tags,
                 int displayed, int highlight,
                 const char *prefix, const char *message)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    /* хвата све поруке у свим баферима, без боје */
    struct t_hook *my_print_hook =
        weechat_hook_print (NULL, NULL, NULL, 1, &my_print_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_print(buffer: str, tags: str, message: str, strip_colors: int, callback: str, callback_data: str) -> str: ...

    # пример
    def my_print_cb(data: str, buffer: str, date: str, tags: str, displayed: int, highlight: int, prefix: str, message: str) -> int:
        if highlight:
            # ...
        return weechat.WEECHAT_RC_OK

    # хвата све поруке у свим баферима, без боје
    hook = weechat.hook_print("", "", "", 1, "my_print_cb", "")

#### hook_signal

Ажурирано у верзији 1.5, 3.6.

Качи се на сигнал.

Прототип:

    struct t_hook *weechat_hook_signal (const char *signal,
                                        int (*callback)(const void *pointer,
                                                        void *data,
                                                        const char *signal,
                                                        const char *type_data,
                                                        void *signal_data),
                                        const void *callback_pointer,
                                        void *callback_data);

Аргументи:

- signal: сигнал који се хвата, дозвољава се џокер `*`, више сигнала може да се раздвоји тачка запетама (испред једног или више сигнала се дозвољава приоритет, погледајте напомену у вези са приоритетима) (погледајте табелу испод)

- callback: функција која се позива када се прими сигнал, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *signal: примљени сигнал

  - const char *type_data: туп података који су послати уз сигнал:

    - WEECHAT_HOOK_SIGNAL_STRING: стринг

    - WEECHAT_HOOK_SIGNAL_INT: цео број

    - WEECHAT_HOOK_SIGNAL_POINTER: показивач

  - void *signal_data: подаци послати уз сигнал

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_OK_EAT (тренутно прекида слање сигнала) (WeeChat ≥ 0.4.0)

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

Листа сигнала који шаљу програм WeeChat и додаци:

Додатак | Сигнал | Мин WeeChat | Аргументи | Опис
--- | --- | --- | --- | ---
guile | guile_script_loaded | 0.3.9 | Стринг: путања до скрипте. | Учитана је Scheme скрипта.
guile | guile_script_unloaded | 0.3.9 | Стринг: путања до скрипте. | Scheme скрипта је уклоњена из меморије.
guile | guile_script_installed | 0.3.9 | Стринг: листа путања инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) Scheme скрипт(а/е).
guile | guile_script_removed | 0.3.9 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) Scheme скрипт(а/е).
irc | xxx,irc_in_yyy (1) |  | Стринг: порука. | IRC порука од сервера (пре него што је употреби irc додатак, сигнал се шаље само ако се порука не игнорише). Почевши од верзије 2.2, шаље се комплетна IRC порука, заједно са ознакама. Ако је повратни код функције повратног позива WEECHAT_RC_OK_EAT, онда се IRC порука одмах брише и не обрађује се (WeeChat ≥ 3.3).
irc | xxx,irc_in2_yyy (1) |  | Стринг: порука. | IRC порука од сервера (након што је употреби irc додатак, сигнал се шаље само ако се порука не игнорише). Почевши од верзије 2.2, шаље се комплетна IRC порука, заједно са ознакама.
irc | xxx,irc_raw_in_yyy (1) | 0.3.2 | Стринг: порука. | IRC порука од сервера (пре него што је употреби irc додатак, сигнал се шаље чак и када се порука игнорише). Почевши од верзије 2.2, шаље се комплетна IRC порука, заједно са ознакама. Ако је повратни кôд функције повратног позива WEECHAT_RC_OK_EAT, онда се IRC порука одмах брише и обрађује се (WeeChat ≥ 3.3).
irc | xxx,irc_raw_in2_yyy (1) | 0.3.2 | Стринг: порука. | IRC порука од сервера (након што је употреби irc додатак, сигнал се шаље чак и када се порука игнорише). Почевши од верзије 2.2, шаље се комплетна IRC порука, заједно са ознакама.
irc | xxx,irc_out1_yyy (1) | 0.3.7 | Стринг: порука. | IRC порука која се шаље серверу пре аутоматске поделе (да стане у 512 бајтова, подразумевано).
irc | xxx,irc_out_yyy (1) |  | Стринг: порука. | IRC порука која се шаље серверу након аутоматске поделе (да стане у 512 бајтова, подразумевано). Упозорење: стринг може да садржи неважеће UTF-8 податке. Уместо овог, препоручује се употреба сигнала „xxx,irc_out1_yyy”.
irc | xxx,irc_outtags_yyy (1) | 0.3.4 | Стринг: ознаке + „;” + порука. | Ознаке + IRC порука која се шаље серверу. Упозорење: стринг може да садржи неважеће UTF-8 податке. Уместо овог, препоручује се употреба сигнала „xxx,irc_out1_yyy”.
irc | irc_ctcp |  | Стринг: порука. | Примљена је CTCP.
irc | irc_dcc |  | Стринг: порука. | Нови DCC.
irc | irc_pv |  | Стринг: порука. | Примљена је приватна порука.
irc | irc_channel_opened |  | Показивач: бафер. | Отворен је канал.
irc | irc_pv_opened |  | Показивач: бафер. | Отворен је приватни бафер.
irc | irc_server_opened | 0.3.7 | Показивач: бафер. | Отворен је серверски бафер.
irc | irc_server_connecting |  | Стринг: име сервера. | Повезивање са сервером.
irc | irc_server_connected |  | Стринг: име сервера. | Успостављена је веза са сервером.
irc | irc_server_disconnected |  | Стринг: име сервера. | Прекинута је веза са сервером.
irc | irc_server_lag_changed | 1.8 | Стринг: име сервера. | Променило се кашњење у комуникацији са сервером.
irc | irc_ignore_removing |  | Показивач: игнорисање. | Уклања се игнорисање.
irc | irc_ignore_removed |  | - | Уклоњено је игнорисање.
irc | irc_notify_join | 0.3.8 | Стринг: име сервера + „,” + надимак. | Надимак из листе обавештавања се прикључио серверу.
irc | irc_notify_quit | 0.3.8 | Стринг: име сервера + „,” + надимак. | Надимак из листе обавештавања је напустио сервер.
irc | irc_notify_away | 0.3.8 | Стринг: име сервера + „,” + надимак + „,” + порука о одсутности. | Надимак из листе обавештавања је сада одсутан са сервера.
irc | irc_notify_still_away | 0.3.8 | Стринг: име сервера + „,” + надимак + „,” + порука о одсутности. | Надимак из листе обавештавања је још увек одсутан са сервера (промењена је порука о одсутности).
irc | irc_notify_back | 0.3.8 | Стринг: име сервера + „,” + надимак. | Надимак из листе обавештавања се вратио (уклоњен је статус одсутности).
javascript | javascript_script_loaded | 1.2 | Стринг: путања до скрипте. | Учитана је JavaScript скрипта.
javascript | javascript_script_unloaded | 1.2 | String: path to script. | JavaScript скрипта је уклоњена из меморије.
javascript | javascript_script_installed | 1.2 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) JavaScript скрипт(а/е).
javascript | javascript_script_removed | 1.2 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) JavaScript скрипт(а/е).
logger | logger_start |  | Показивач: бафер. | Почиње логовање бафера.
logger | logger_stop |  | Показивач: бафер. | Престаје логовање бафера.
logger | logger_backlog |  | Показивач: бафер. | Приказивање ранијих линија из бафера.
lua | lua_script_loaded | 0.3.9 | Стринг: путања до скрипте. | Учитана је Lua скрипта.
lua | lua_script_unloaded | 0.3.9 | Стринг: путања до скрипте. | Lua скрипта је уклоњена из меморије.
lua | lua_script_installed | 0.3.9 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) Lua скрипт(а/е).
lua | lua_script_removed | 0.3.9 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) Lua скрипт(а/е).
perl | perl_script_loaded | 0.3.9 | Стринг: путања до скрипте. | Учитана је Perl скрипта.
perl | perl_script_unloaded | 0.3.9 | Стринг: путања до скрипте. | Perl скрипта је уклоњена из меморије.
perl | perl_script_installed | 0.3.9 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) Perl скрипт(а/е).
perl | perl_script_removed | 0.3.9 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) Perl скрипт(а/е).
php | php_script_loaded | 2.0 | Стринг: путања до скрипте. | Учитана је PHP скрипта.
php | php_script_unloaded | 2.0 | Стринг: путања до скрипте. | PHP скрипта је уклоњена из меморије.
php | php_script_installed | 2.0 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) PHP скрипт(а/е).
php | php_script_removed | 2.0 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) PHP скрипт(а/е).
python | python_script_loaded | 0.3.9 | Стринг: путања до скрипте. | Учитана је Python скрипта.
python | python_script_unloaded | 0.3.9 | Стринг: путања до скрипте. | Python скрипта је уклоњена из меморије.
python | python_script_installed | 0.3.9 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) Python скрипт(а/е).
python | python_script_removed | 0.3.9 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) Python скрипт(а/е).
relay | relay_client_connecting | 1.0 | Показивач: релеј клијент. | Релеј клијент се повезује.
relay | relay_client_waiting_auth | 1.0 | Показивач: релеј клијент. | Чека се на аутентификацију релеј клијента.
relay | relay_client_auth_ok | 1.0 | Показивач: релеј клијент. | Успешна аутентификација релеј клијента.
relay | relay_client_connected | 1.0 | Показивач: релеј клијент. | Релеј клијент се повезао.
relay | relay_client_auth_failed | 1.0 | Показивач: релеј клијент. | Аутентификација релеј клијента није успела.
relay | relay_client_disconnected | 1.0 | Показивач: релеј клијент. | Прекинута је веза релеј клијентом.
ruby | ruby_script_loaded | 0.3.9 | Стринг: путања до скрипте. | Учитана је Ruby скрипта.
ruby | ruby_script_unloaded | 0.3.9 | Стринг: путања до скрипте. | Ruby скрипта је уклоњена из меморије.
ruby | ruby_script_installed | 0.3.9 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталиран(а/е) Ruby скрипт(а/е).
ruby | ruby_script_removed | 0.3.9 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) Ruby скрипт(а/е).
spell | spell_suggest | 2.4 | Показивач: бафер. | Нови предлог за погрешно написану реч.
tcl | tcl_script_loaded | 0.3.9 | Стринг: путања до скрипте. | Учитана је Tcl скрипта.
tcl | tcl_script_unloaded | 0.3.9 | Стринг: путања до скрипте. | Tcl скрипта је уклоњена из меморије.
tcl | tcl_script_installed | 0.3.9 | Стринг: листа путања до инсталираних скрипти раздвојених запетама. | Инсталран(а/е) Tcl скрипт(а/е).
tcl | tcl_script_removed | 0.3.9 | Стринг: листа уклоњених скрипти раздвојених запетама. | Уклоњен(а/е) Tcl скрипт(а/е).
typing | typing_self_typing | 3.3 | Показивач: бафер. | Корисник куца поруку (шаље typing додатак, користи irc додатак).
typing | typing_self_paused | 3.3 | Показивач: бафер. | Корисник је застао током куцања поруке (шаље typing додатак, користи irc додатак).
typing | typing_self_cleared | 3.3 | Показивач: бафер. | Корисник је обрисао унос и није послао поруку (шаље typing додатак, користи irc додатак).
typing | typing_self_sent | 3.3 | Показивач: бафер. | Порука (не команда) је послата баферу (шаље typing додатак, користи irc додатак).
typing | typing_set_nick | 3.3 | Стринг: показивач на бафер + ";" + стање (једно од: "off", "typing", "paused", "cleared") + ";" + надимак. | Поставља стање куцања за надимак у баферу (шаље irc додатак, обрађује typing додатак).
typing | typing_reset_buffer | 3.3 | Показивач: бафер. | Уклања стање куцања за све надимке у баферу (шаље irc додатак, обрађује typing додатак).
weechat | buffer_opened |  | Показивач: бафер. | Отворен је бафер.
weechat | buffer_closing |  | Показивач: бафер. | Бафер се затвара.
weechat | buffer_closed |  | Показивач: бафер. | Бафер је затворен.
weechat | buffer_cleared |  | Показивач: бафер. | Бафер је очишћен.
weechat | buffer_filters_enabled | 2.0 | Показивач: бафер. | У баферу су укључени филтери.
weechat | buffer_filters_disabled | 2.0 | Показивач: бафер. | У баферу су искључени филтери.
weechat | buffer_hidden |  | Показивач: бафер. | Бафер је скривен.
weechat | buffer_unhidden |  | Показивач: бафер. | Бафер је откривен.
weechat | buffer_line_added | 0.3.7 | Показивач: линија. | У бафер је додата линија.
weechat | buffer_line_data_changed | 4.4.0 | Показивач: подаци линије. | У баферу су ажурирани подаци линије.
weechat | buffer_lines_hidden |  | Показивач: бафер. | У баферу су сакривене линије.
weechat | buffer_localvar_added |  | Показивач: бафер. | Додата је локална променљива.
weechat | buffer_localvar_changed |  | Показивач: бафер. | Измењена је локална променљива.
weechat | buffer_localvar_removed |  | Показивач: бафер. | Уклоњена је локална променљива.
weechat | buffer_merged |  | Показивач: бафер. | Бафер је спојен.
weechat | buffer_unmerged |  | Показивач: бафер. | Бафер је раздвојен.
weechat | buffer_moved |  | Показивач: бафер. | Бафер је померен.
weechat | buffer_renamed |  | Показивач: бафер. | Баферу је промењено име.
weechat | buffer_switch |  | Показивач: бафер. | Прелази се на други бафер.
weechat | buffer_title_changed |  | Показивач: бафер. | Промењен је наслов бафера.
weechat | buffer_modes_changed | 4.3.0 | Показивач: бафер. | Промењени су режими бафера.
weechat | buffer_time_for_each_line_changed | 4.4.0 | Показивач: бафер. | Време приказа за сваку измењену линију.
weechat | buffer_type_changed |  | Показивач: бафер. | Промењен је тип бафера.
weechat | buffer_zoomed | 0.4.3 | Показивач: бафер. | Зумиран је спојени бафер.
weechat | buffer_unzoomed | 0.4.3 | Показивач: бафер. | Одзумиран је спојени бафер.
weechat | buffer_user_input_xxx (2) | 3.8 | Стринг: текст који се шаље у бафер. | Текст који се шаље у кориснички бафер као улаз (шаље се само за бафере креиране са `/buffer add`). Ако је повратни код функције повратног позива WEECHAT_RC_OK_EAT, онда стринг „q” више не може да се користи за затварање бафера.
weechat | buffer_user_closing_xxx (2) | 3.8 | - | Корсинички бафер се затвара (шаље се само за бафере креиране са `/buffer add`).
weechat | cursor_start | 3.2 | - | Почетак режима померања курсора.
weechat | cursor_end | 3.2 | - | Крај режима померања курсора.
weechat | day_changed | 0.3.2 | Стринг: нови датум, формат је: "2010-01-31". | Променио се системски датум.
weechat | debug_dump |  | Стринг: име додатка. | Захтев за испис.
weechat | debug_libs |  | - | Приказује спољне библиотеке које се користе.
weechat | filter_added |  | Показивач: филтер. | Додат је филтер.
weechat | filter_removing |  | Показивач: филтер. | Уклањање филтера.
weechat | filter_removed |  | - | Филтер је уклоњен.
weechat | filters_enabled |  | - | Укључени су филтери.
weechat | filters_disabled |  | - | Искључени су филтери.
weechat | hotlist_changed |  | Показивач: бафер (може да буде NULL). | Променила се врућа листа.
weechat | input_paste_pending |  | - | Чека се на налепљивање.
weechat | input_search |  | Показивач: бафер. | Претрага текста у баферу.
weechat | input_prompt_changed | 4.3.0 | Показивач: бафер. | Промењено је питање уноса.
weechat | input_text_changed |  | Показивач: бафер. | Променио се текст уноса.
weechat | input_text_cursor_moved |  | Показивач: бафер. | Померио се курсор текста уноса.
weechat | key_bind |  | Стринг: тастер. | Додата је пречица.
weechat | key_unbind |  | Стринг: тастер. | Уклоњена је пречица.
weechat | key_pressed |  | Стринг: притиснути тастер. | Притиснут је тастер.
weechat | key_combo_default | 1.0 | Стринг: комбинација тастера. | Комбинација тастера у default контексту.
weechat | key_combo_search | 1.0 | Стринг: комбинација тастера. | Комбинација тастера у search контексту.
weechat | key_combo_cursor | 1.0 | Стринг: комбинација тастера. | Комбинација тастера у cursor контексту.
weechat | layout_buffers_applied | 4.4.0 | Стринг: име распореда. | Распоред који се примењује за бафере.
weechat | layout_windows_applied | 4.4.0 | Стринг: име распореда. | Распоред који се примењује за прозоре.
weechat | mouse_enabled | 1.1 | - | Укључен је миш.
weechat | mouse_disabled | 1.1 | - | Искључен је миш.
weechat | nicklist_group_added | 0.3.2 | Стринг: показивач на бафер + „,” + име групе. | У листу надимака је додата група.
weechat | nicklist_group_changed | 0.3.4 | Стринг: показивач на бафер + „,” + име групе. | У листи надимака је измењена група.
weechat | nicklist_group_removing | 0.4.1 | Стринг: показивач на бафер + „,” + име надимка. | Уклања се група из листе надимака.
weechat | nicklist_group_removed | 0.3.2 | Стринг: показивач на бафер + „,” + име надимка. | Група је уклоњена из листе надимака.
weechat | nicklist_nick_added | 0.3.2 | Стринг: показивач на бафер + „,” + име надимка. | Додат је надимак у листу надимака.
weechat | nicklist_nick_changed | 0.3.4 | Стринг: показивач на бафер + „,” + име надимка. | У листи надимака је промењен надимак.
weechat | nicklist_nick_removing | 0.4.1 | Стринг: показивач на бафер + „,” + име надимка. | Уклањање надимка из листе надимака.
weechat | nicklist_nick_removed | 0.3.2 | Стринг: показивач на бафер + „,” + име надимка. | Надимак је уклоњен из листе надимака.
weechat | partial_completion |  | - | Догодило се делимично довршавање.
weechat | plugin_loaded | 0.3.9 | Стринг: путања до учитаног додатка. | Учитан је додатак.
weechat | plugin_unloaded | 0.3.9 | Стринг: име додатка који се уклања из меморије (пример: „irc”). | Додатак је уклоњен из меморије.
weechat | quit |  | Стринг: аргументи за /quit. | Корисник је задао команду `/quit`.
weechat | signal_sighup | 1.3 | - | Примљен је сигнал SIGHUP.
weechat | signal_sigquit | 1.2 | - | Примљен је сигнал SIGQUIT (захтев за излаз са core исписом).
weechat | signal_sigterm | 1.2 | - | Примљен је сигнал SIGTERM (складно прекидање WeeChat процеса).
weechat | signal_sigwinch | 0.4.3 | - | Примљен је сигнал SIGWINCH (промењена је величина терминала).
weechat | upgrade |  | Стринг: „quit” ако је уз /upgrade наведен аргумент „-quit”, „save” ако је уз /upgrade наведен аргумент „-save”, у супротном NULL. | Корисник је задао команду `/upgrade`.
weechat | upgrade_ended | 0.3.4 | - | Завршетак процеса ажурирања (команда `/upgrade`).
weechat | weechat_highlight |  | Стринг: порука са префиксом. | Догодило се истицање.
weechat | weechat_pv |  | Стринг: порука са префиксом. | Приказана је приватна порука.
weechat | window_closing | 0.3.6 | Показивач: прозор. | Затварање прозора.
weechat | window_closed | 0.3.6 | Показивач: прозор. | Прозор је затворен.
weechat | window_opened | 0.4.1 | Показивач: прозор. | Прозор је отворен.
weechat | window_scrolled |  | Показивач: прозор. | Скроловање у прозору.
weechat | window_switch | 0.3.7 | Показивач: прозор. | Прелазак на други прозор.
weechat | window_zoom |  | Показивач: текући прозор. | Зумирање прозора.
weechat | window_zoomed |  | Показивач: текући прозор. | Прозор је зумиран.
weechat | window_unzoom |  | Показивач: текући прозор. | Одзумирање прозора.
weechat | window_unzoomed |  | Показивач: текући прозор. | Прозор је одзумиран.
xfer | xfer_add |  | Показивач: инфолиста са xfer информацијама. | Нови xfer.
xfer | xfer_send_ready |  | Показивач: инфолиста са xfer информацијама. | Xfer је спреман.
xfer | xfer_accept_resume |  | Показивач: инфолиста са xfer информацијама. | Прихватање наставка xfer.
xfer | xfer_send_accept_resume |  | Показивач: инфолиста са xfer информацијама. | Xfer је настављен.
xfer | xfer_start_resume |  | Показивач: инфолиста са xfer информацијама. | Почетак наставка.
xfer | xfer_resume_ready |  | Показивач: инфолиста са xfer информацијама. | Xfer наставак је спреман.
xfer | xfer_ended | 0.3.2 | Показивач: инфолиста са xfer информацијама. | Xfer се завршио.

Белешка | (1) xxx је име IRC сервера, yyy је име IRC команде. (2) xxx је име бафера.

C пример:

    int
    my_signal_cb (const void *pointer, void *data, const char *signal,
                  const char *type_data, void *signal_data)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    /* хвата сигнале „quit” и „upgrade” */
    struct t_hook *my_signal_hook = weechat_hook_signal ("quit;upgrade",
                                                         &my_signal_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_signal(signal: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_signal_cb(data: str, signal: str, signal_data: str) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    # хвата сигнале „quit” и „upgrade”
    hook = weechat.hook_signal("quit;upgrade", "my_signal_cb", "")

#### hook_signal_send

Ажурирано у верзији 1.0, 4.5.0.

Шаље сигнал.

Прототип:

    int weechat_hook_signal_send (const char *signal, const char *type_data,
                                  void *signal_data);

Аргументи:

- signal: сигнал који се шаље; пре имена сигнала су дозвољене заставице (погледајте испод) (WeeChat ≥ 4.5.0)

- type_data: тип података који се шаљу уз сигнал (погледајте hook_signal)

- signal_data: подаци који се шаљу уз сигнал

Име сигнала може да садржи заставице у следећем формату: `[flags:ааа,ббб]сигнал` где су `ааа` и `ббб` имена заставица, а `сигнал` је име сигнала.
Подржане су следеће заставице:

- stop_on_error: извршавање се тренутно прекида ако функција повратног позива враћа WEECHAT_RC_ERROR (преостале функције повратног позива се НЕ извршавају) (WeeChat ≥ 4.5.0)

- ignore_eat: сматра се да било која функција повратног позива која враћа WEECHAT_RC_OK_EAT уствари враћа WEECHAT_RC_OK и извршавају се преостале функције повратног позива (WeeChat ≥ 4.5.0)

Повратна вредност (WeeChat ≥ 1.0):

- повратни кôд последње извршене функције повратног позива (WEECHAT_RC_OK ако ниједна функција повратног позива није била извршена):

  - WEECHAT_RC_OK

  - WEECHAT_RC_OK_EAT

  - WEECHAT_RC_ERROR

C пример:

    int rc = weechat_hook_signal_send ("my_signal", WEECHAT_HOOK_SIGNAL_STRING, my_string);
    int rc2 = weechat_hook_signal_send ("[flags:stop_on_error,ignore_eat]my_signal2",
                                        WEECHAT_HOOK_SIGNAL_STRING, my_string);

Скрипта (Python):

    # прототип
    def hook_signal_send(signal: str, type_data: str, signal_data: str) -> int: ...

    # примери
    rc = weechat.hook_signal_send("my_signal", weechat.WEECHAT_HOOK_SIGNAL_STRING, my_string)
    rc2 = weechat.hook_signal_send("[flags:stop_on_error,ignore_eat]my_signal2",
                                   weechat.WEECHAT_HOOK_SIGNAL_STRING, my_string)

##### Сигнал logger_backlog

Сигнал „logger_backlog” може да се пошаље ако желите да се прикажу раније линије (историја разговора) из бафера (на пример, ако отворите сопствени бафер у вашем додатку/скрипти).

Аргумент је показивач на бафер.

C пример:

    weechat_hook_signal_send ("logger_backlog", WEECHAT_HOOK_SIGNAL_POINTER, buffer);

Скрипта (Python):

    weechat.hook_signal_send("logger_backlog", weechat.WEECHAT_HOOK_SIGNAL_POINTER, buffer)

##### Сигнали xxx_script_install

За инсталацију скрипте може да се пошаље један од осам сигнала, у зависности од језика:

- perl_script_install

- python_script_install

- ruby_script_install

- lua_script_install

- tcl_script_install

- guile_script_install

- javascript_script_install

- php_script_install

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

1. Учитавање и уклањање из меморије инсталиране скрипте.

2. Померање нове скрипте у директоријум ~/.local/share/weechat/xxx/ (где је xxx језик).

3. Креирање линка на нову скрипту у директоријуму ~/.local/share/weechat/xxx/autoload/ (само ако је скрипта веђ била аутоучитана, или ако је за нову скрипту укључена опција script.scripts.autoload).

4. Учитавање нове скрипте (ако је скрипта била учитана).

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

Аргумент је стринг са путањом до скрипте која се инсталира.

C пример:

    weechat_hook_signal_send ("python_script_install", WEECHAT_HOOK_SIGNAL_STRING, "/путања/до/test.py");

Скрипта (Python):

    weechat.hook_signal_send("python_script_install", WEECHAT_HOOK_SIGNAL_STRING, "/путања/до/test.py")

##### Сигнали xxx_script_remove

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

- perl_script_remove

- python_script_remove

- ruby_script_remove

- lua_script_remove

- tcl_script_remove

- guile_script_remove

- javascript_script_remove

- php_script_remove

За сваку скрипту из листе, функција повратног позива ће скрипту прво уклонити из меморије, па ће је затим обрисати

Додатак script користи ове сигнале за уклањање скрипти.

Аргумент је стринг са листом скрипти за уклањање раздвојених запетама (скрипта је име без путање, на пример script.py).

C пример:

    /* уклањање из меморије и брисање скрипти test.py и script.py */
    weechat_hook_signal_send ("python_script_remove", WEECHAT_HOOK_SIGNAL_STRING,
                              "test.py,script.py");

Скрипта (Python):

    # уклањање из меморије и брисање скрипти test.py и script.py
    weechat.hook_signal_send("python_script_remove", WEECHAT_HOOK_SIGNAL_STRING,
                             "test.py,script.py")

##### Сигнал irc_input_send

WeeChat ≥ 0.3.4, ажурирано у верзији 1.5.

Сигнал „irc_input_send” може да се пошаље да би се симулирао унос у irc бафер (сервера, канала или приватни).

Аргумент је стринг у следећем формату:

- интерно име сервера (обавезно)

- тачка зарез

- име канала (није обавезно)

- тачка зарез

- листа опција раздвојених запетама (није обавезна):

  - priority_high: ред са високим приоритетом (као што су корисничке поруке); ово је подразумевани приоритет

  - priority_low: ред са ниским приоритетом (као што су поруке које аутоматски шаље програм WeeChat)

  - user_message: форсира корисничку поруку (не извршава команду)

- тачка зарез

- листа ознака које се користе када се шаље порука раздвојених запетама (није обавезна)

- тачка зарез

- текст или команда (обавезан)

C примери:

    /* реци "Здраво!" на libera серверу, #weechat каналу */
    weechat_hook_signal_send ("irc_input_send", WEECHAT_HOOK_SIGNAL_STRING,
                              "libera;#weechat;priority_high,user_message;;Здраво!");

    /* шаље команду "/whois FlashCode" на libera сервер, са ниским приоритетом */
    weechat_hook_signal_send ("irc_input_send", WEECHAT_HOOK_SIGNAL_STRING,
                              "libera;;priority_low;;/whois FlashCode");

Скрипта (Python):

    # реци "Здраво!" на libera серверу, #weechat каналу
    weechat.hook_signal_send("irc_input_send", weechat.WEECHAT_HOOK_SIGNAL_STRING,
                             "libera;#weechat;priority_high,user_message;;Здраво!")

    # шаље команду "/whois FlashCode" на libera сервер, са ниским приоритетом
    weechat.hook_signal_send("irc_input_send", weechat.WEECHAT_HOOK_SIGNAL_STRING,
                             "libera;;priority_low;;/whois FlashCode")

#### hook_hsignal

WeeChat ≥ 0.3.4, ажурирано у верзији 1.5, 3.6.

Качи се на hsignal (сигнал са хеш табелом).

Прототип:

    struct t_hook *weechat_hook_hsignal (const char *signal,
                                         int (*callback)(const void *pointer,
                                                         void *data,
                                                         const char *signal,
                                                         struct t_hashtable *hashtable),
                                         const void *callback_pointer,
                                         void *callback_data);

Аргументи:

- signal: сигнал који се хвата, дозвољава се џокер `*`, више сигнала може да се раздвоји двотачкама (испред једног или више сигнала се дозвољава приоритет, погледајте напомену у вези са приоритетима) (погледајте табелу испод)

- callback: функција која се позива када се прими сигнал, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *signal: примљени сигнал

  - struct t_hashtable *hashtable: хеш табела

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_OK_EAT (тренутно прекида слање сигнала) (WeeChat ≥ 0.4.0)

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

Листа hsignalа:

Додатак | Сигнал | Мин WeeChat | Аргументи | Опис
--- | --- | --- | --- | ---
irc | irc_redirection_xxx_yyy (1) | 0.3.4 | Погледајте hsignal_irc_redirect_command | Преусмеравање излаза.
weechat | nicklist_group_added | 0.4.1 | buffer (struct t_gui_buffer *): бафер parent_group (struct t_gui_nick_group *): родитељ група group (struct t_gui_nick_group *): група | У листу надимака је додата група.
weechat | nicklist_nick_added | 0.4.1 | buffer (struct t_gui_buffer *): бафер parent_group (struct t_gui_nick_group *): родитељ група nick (struct t_gui_nick *): надимак | Надимак је додат у листу надимака.
weechat | nicklist_group_removing | 0.4.1 | buffer (struct t_gui_buffer *): бафер parent_group (struct t_gui_nick_group *): родитељ група group (struct t_gui_nick_group *): група | Уклањање групе из листе надимака.
weechat | nicklist_nick_removing | 0.4.1 | buffer (struct t_gui_buffer *): бафер parent_group (struct t_gui_nick_group *): родитељ група nick (struct t_gui_nick *): надимак | Уклањање надимка из листе надимака.
weechat | nicklist_group_changed | 0.4.1 | buffer (struct t_gui_buffer *): бафер parent_group (struct t_gui_nick_group *): родитељ група group (struct t_gui_nick_group *): група | У листи надимака је измењена група.
weechat | nicklist_nick_changed | 0.4.1 | buffer (struct t_gui_buffer *): бафер parent_group (struct t_gui_nick_group *): родитељ група nick (struct t_gui_nick *): надимак | Надимак је промењен у листи надимака.

Белешка | (1) xxx је аргумент сигнала који се користи у преусмеравању, yyy је шаблон преусмеравања.

C пример:

    int
    my_hsignal_cb (const void *pointer, void *data, const char *signal,
                   struct t_hashtable *hashtable)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    struct t_hook *my_hsignal_hook = weechat_hook_hsignal ("test",
                                                           &my_hsignal_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_hsignal(signal: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_hsignal_cb(data: str, signal: str, hashtable: Dict[str, str]) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_hsignal("test", "my_hsignal_cb", "")

#### hook_hsignal_send

WeeChat ≥ 0.3.4, ажурирано у верзији 1.0, 4.5.0.

Шаље hsignal (сигнал са хеш табелом).

Прототип:

    int weechat_hook_hsignal_send (const char *signal, struct t_hashtable *hashtable);

Аргументи:

- signal: сигнал који се шаље; испред имена сигнала су дозвољене заставице (see function hook_signal_send) (WeeChat ≥ 4.5.0)

- hashtable: хеш табела

Повратна вредност (WeeChat ≥ 1.0):

- повратни кôд последње извршене функције повратног позива (WEECHAT_RC_OK ако ниједна функција повратног позива није била извршена):

  - WEECHAT_RC_OK

  - WEECHAT_RC_OK_EAT

  - WEECHAT_RC_ERROR

C пример:

    int rc, rc2;
    struct t_hashtable *hashtable = weechat_hashtable_new (8,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           NULL,
                                                           NULL);
    if (hashtable)
    {
        weechat_hashtable_set (hashtable, "key", "value");
        rc = weechat_hook_hsignal_send ("my_hsignal", hashtable);
        rc2 = weechat_hook_hsignal_send ("[flags:stop_on_error,ignore_eat]my_hsignal2", hashtable);
        weechat_hashtable_free (hashtable);
    }

Скрипта (Python):

    # прототип
    def hook_hsignal_send(signal: str, hashtable: Dict[str, str]) -> int: ...

    # примери
    rc = weechat.hook_hsignal_send("my_hsignal", {"key": "value"})
    rc2 = weechat.hook_hsignal_send("[flags:stop_on_error,ignore_eat]my_hsignal2", {"key": "value"})

##### Hsignal irc_redirect_command

WeeChat ≥ 0.3.4.

„irc_redirect_command” hsignal се шаље када желите да излаз irc команде преусмерите у функцију повратног позива.

Аргумент је хеш табела са следећим ставкама (кључеви и вредности су стрингови):

- server: интерно име сервера (обавезно)

- pattern: шаблон за преусмеравање који треба да се користи (обавезан), или подразумевани (који дефинише irc додатак), или кориснички шаблон (погледајте Hsignal irc_redirect_pattern), подразумевани шаблони су:

  - ison

  - list

  - mode_channel

  - mode_channel_ban ("mode #channel b")

  - mode_channel_ban_exception ("mode #channel e")

  - mode_channel_invite ("mode #channel I")

  - mode_user

  - monitor

  - names

  - ping

  - time

  - topic

  - userhost

  - who

  - whois

  - whowas

- signal: име сигнала (обавезно)

- count: колико пута ће преусмеравање радити (није обавезно, подразумевано је 1)

- string: стринг који мора бити у примљеној irc поруци (није обавезно, али се препоручује, ако поруке могу да се идентификују стрингом)

- timeout: тајмаут за преусмеравање, у секундама (није обавезан, подразумевано је 60)

- cmd_filter: листа irc команди које се филтирају, раздвојене запетама (само ове команде ће се слати функцијама повратног позива, остале ће се игнорисати) (није обавезно)

Чим пошаљете овај hsignal, морате послати команду irc серверу и преусмеравање ће се употребити за ту команду.

Када се прими комплетан одговор на вашу команду, послаће се hsignal. Овај hsignal има име irc_redirection_xxx_yyy где је xxx signal, а_yyy_ употребљени pattern.

Хеш табела која се шаље у hsignal има следећи садржај (кључеви и вредности су стрингови):

- output: излаз команде (поруке се раздвајају са „\n”)

- output_size: број бајтова у output (као стринг)

- error: стринг грешке (у случају да је дошло до грешке):

  - timeout: преусмеравање је прекинуто након истека тајмаута

- server: интерно име сервера

- pattern: шаблон преусмеравања

- signal: име сигнала

- command: преусмерена команда

C пример:

    int
    test_whois_cb (const void *pointer, void *data, const char *signal,
                   struct t_hashtable *hashtable)
    {
        weechat_printf (NULL, "error = %s", weechat_hashtable_get (hashtable, "error"));
        weechat_printf (NULL, "output = %s", weechat_hashtable_get (hashtable, "output"));
        return WEECHAT_RC_OK;
    }

    weechat_hook_hsignal ("irc_redirection_test_whois", &test_whois_cb, NULL, NULL);
    struct t_hashtable *hashtable = weechat_hashtable_new (8,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           NULL,
                                                           NULL);
    if (hashtable)
    {
        weechat_hashtable_set (hashtable, "server", "libera");
        weechat_hashtable_set (hashtable, "pattern", "whois");
        weechat_hashtable_set (hashtable, "signal", "test");
        weechat_hashtable_set (hashtable, "string", "FlashCode");
        weechat_hook_hsignal_send ("irc_redirect_command", hashtable);
        weechat_hook_signal_send ("irc_input_send", WEECHAT_HOOK_SIGNAL_STRING,
                                  "libera;;2;;/whois FlashCode");
        weechat_hashtable_free (hashtable);
    }

Скрипта (Python):

    def test_whois_cb(data: str, signal: str, hashtable: Dict[str, str]) -> int:
        weechat.prnt("", "error = %s" % hashtable["error"])
        weechat.prnt("", "output = %s" % hashtable["output"])
        return weechat.WEECHAT_RC_OK

    weechat.hook_hsignal("irc_redirection_test_whois", "test_whois_cb", "")
    weechat.hook_hsignal_send("irc_redirect_command",
                              {"server": "libera", "pattern": "whois", "signal": "test",
                               "string": "FlashCode"})
    weechat.hook_signal_send("irc_input_send", weechat.WEECHAT_HOOK_SIGNAL_STRING,
                             "libera;;2;;/whois FlashCode")

##### Hsignal irc_redirect_pattern

WeeChat ≥ 0.3.4.

Hsignal „irc_redirect_pattern” може да се пошаље када желите да креирате шаблон за irc преусмеравање (погледајте Hsignal irc_redirect_command).

Аргумент је хеш табела са следећим ставкама (кључеви и вредности су стрингови):

- pattern: име шаблона (обавезно)

- timeout: подразумевани тајмаут за шаблон, у секундама (није обавезан, подразумевано је 60)

- cmd_start: листа команди које покрећу преусмеравање раздвојених запетама (није обавезна)

- cmd_stop: листа команди које заустављају преусмеравање раздвојених запетама (обавезна)

- cmd_extra: листа команди које могу да се приме након команди заустављања раздвојених запетама (није обавезна)

За сваку команду у cmd_start, cmd_stop и cmd_extra може да се зада цео број са позицијом „стринга” који мора да се нађе у примљеној поруци, на пример:

    352:1,354,401:1

За команде 352 и 401, „string” мора да се пронађе у примљеној поруци као први аргумент.

Важно | Када се употреби за преусмеравање, шаблон се уништава. Ако вам је потребан шаблон за више преусмеравања, морате да га креирате пре сваког преусмеравања.

C пример:

    struct t_hashtable *hashtable = weechat_hashtable_new (8,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           WEECHAT_HASHTABLE_STRING,
                                                           NULL,
                                                           NULL);
    if (hashtable)
    {
        weechat_hashtable_set (hashtable, "pattern", "my_whois");
        weechat_hashtable_set (hashtable, "timeout", "30");
        weechat_hashtable_set (hashtable, "cmd_start", "311:1");
        weechat_hashtable_set (hashtable, "cmd_stop", "318:1,401:1,402:1,431:1,461");
        weechat_hashtable_set (hashtable, "cmd_extra", "318:1");
        weechat_hook_hsignal_send ("irc_redirect_pattern", hashtable);
        /*
         * now redirect irc whois command with hsignal irc_redirect_command,
         * using pattern "my_whois"
         */
        /* ... */
        weechat_hashtable_free (hashtable);
    }

Скрипта (Python):

    weechat.hook_hsignal_send("irc_redirect_pattern",
                              {"pattern": "my_whois", "timeout": "30",
                               "cmd_start": "311:1",
                               "cmd_stop": "318:1,401:1,402:1,431:1,461",
                               "cmd_extra": "318:1"})
    # сада преусмерите irc whois команду са hsignal irc_redirect_command
    # користећи шаблон "my_whois"
    # ...

#### hook_config

Ажурирано у верзији 1.5.

Качи се на опцију конфигурације.

Прототип:

    struct t_hook *weechat_hook_config (const char *option,
                                        int (*callback)(const void *pointer,
                                                        void *data,
                                                        const char *option,
                                                        const char *value),
                                        const void *callback_pointer,
                                        void *callback_data);

Аргументи:

- option: опција, формат је пуно име, као што се користи у команди `/set` на пример: `weechat.look.item_time_format`), дозвољава се џокер `*` (испред опције се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- callback: функција која се позива када се измени опција конфигурације, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *option: име опције

  - const char *value: нова вредност опције

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    int
    my_config_cb (const void *pointer, void *data, const char *option,
                  const char *value)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    /* хвата измене опције „weechat.look.item_time_format” */
    struct t_hook *my_config_hook = weechat_hook_config ("weechat.look.item_time_format",
                                                         &my_config_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_config(option: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_config_cb(data: str, option: str, value: str) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    # хвата измене опције „weechat.look.item_time_format”
    hook = weechat.hook_config("weechat.look.item_time_format", "my_config_cb", "")

#### hook_modifier

Ажурирано у верзији 1.5.

Качи се на модификатор.

Прототип:

    struct t_hook *weechat_hook_modifier (const char *modifier,
                                          char *(*callback)(const void *pointer,
                                                            void *data,
                                                            const char *modifier,
                                                            const char *modifier_data,
                                                            const char *string),
                                          const void *callback_pointer,
                                          void *callback_data);

Аргументи:

- modifier: modifier name (испред модификатора се дозвољава приоритет, погледајте напомену у вези са приоритетима) (погледајте табелу испод)

- callback: функција која се позива када се употреби модификатор, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *modifier: име модификатора

  - const char *modifier_data: подаци за модификатор

  - const char *string: стринг који се модификује

  - return value: нови стринг

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

Листа модификатора које користе програм WeeChat и додаци:

Модификатор | Мин WeeChat | Подаци модификатора | Стринг | Излаз
--- | --- | --- | --- | ---
irc_batch | 4.0.0 | Име сервера + "," + тип пакета + "," + параметри пакета | Садржај више порука, раздвојен карактером новог реда („\n”). | Нов садржај порука (број може да се разликује), празан стринг одбацује све поруке у пакету.
irc_cap_sync_req | 4.0.0 | Име сервера + "," + подржане могућности сервера (раздвојене размацима) | Могућности које се захтевају (раздвојене размацима). | Нов садржај могућности које се захтевају (раздвојен размацима).
irc_in_xxx (1) |  | Име сервера | Садржај поруке примљене са IRC сервера (пре декодирања скупа карактера). Упозорење: стринг може да садржи неважеће UTF-8 податке; користите га само за сирове операције над поруком. Уместо њега се препоручује употреба irc_in2_xxx. | Нови садржај поруке.
irc_in2_xxx (1) | 0.3.5 | Име сервера | Садржај поруке примљене са IRC сервера (након декодирања скупа карактера). | Нови садржај поруке.
irc_out1_xxx (1) | 0.3.7 | Име сервера | Садржај поруке које треба да се пошаље IRC серверу пре аутоматске поделе (да стане у 512 подразумевано). | Нови садржај поруке.
irc_out_xxx (1) |  | Име сервера | Садржај поруке које треба да се пошаље IRC серверу након аутоматске поделе (да стане у 512 подразумевано). | Нови садржај поруке.
relay_client_irc_in | 4.0.0 | Стринг са показивачем на релеј клијента (нпр. "0x1234abcd") | Садржај поруке примљене од релеј IRC клијента. | Нови садржај поруке.
relay_client_irc_out1 | 4.0.0 | Стринг са показивачем на релеј клијента (нпр. "0x1234abcd") | Садржај поруке која треба да се пошаље релеј IRC клијенту пре аутоматске поделе (тако да стане у подразумевано 512 бајтова). | Нови садржај поруке.
relay_client_irc_out | 4.0.0 | Стринг са показивачем на релеј клијента (нпр. "0x1234abcd") | Садржај поруке која треба да се пошаље релеј IRC клијенту након аутоматске поделе (тако да стане у подразумевано 512 бајтова). | Нови садржај поруке.
bar_condition_yyy (2) |  | Стринг са показивачем на прозор (нпр: "0x1234abcd") | Празан стринг. | "1" да се прикаже трака, "0" да се сакрије.
history_add | 0.3.2 | Стринг са показивачем на бафер (нпр: "0x1234abcd") | Садржај командне линије која треба да се дода у историју команди (бафера и глобалну). | Стринг који се додаје у историју команди.
input_text_content |  | Стринг са показивачем на бафер (нпр: "0x1234abcd") | Садржај командне линије. | Нови садржај командне линије.
input_text_display |  | Стринг са показивачем на бафер (нпр: "0x1234abcd") | Садржај командне линије, без ознаке курсора. | Нови стринг, само за приказ (командна линија се не мења).
input_text_display_with_cursor |  | Стринг са показивачем на бафер (нпр: "0x1234abcd") | Садржај командне линије, са ознаком курсора. | Нови стринг, само за приказ (командна линија се не мења).
input_text_for_buffer | 0.3.7 | Стринг са показивачем на бафер (нпр: "0x1234abcd") | Садржај командне линије која се шаље у бафер (текст или команда). | Нови садржај командне линије који се шаље у бафер.
weechat_print |  | показивач на бафер (нпр: "0x1234abcd") + ";" + ознаке (3) | Порука која се исписује. | Нова порука која се исписује. За више информација о кукама које се позивају када се линија исписује, погледајте hook_line.

Белешка | (1) xxx је име IRC команде. (2) yyy је име траке. (3) У верзијама програма WeeChat ≤ 2.8, формат је био: додатак + ";" + buffer_name + ";" + ознаке.

C пример:

    char *
    my_modifier_cb (const void *pointer, void *data, const char *modifier,
                    const char *modifier_data,
                    const char *string)
    {
        char *result;
        int length;

        if (!string)
            return NULL;

        length = strlen (string) + 5;
        result = malloc (length);
        if (result)
        {
            /* додаје „xxx” у било коју поруку која се исписује */
            snprintf (result, length, "%s xxx", string);
        }

        return result;
    }

    struct t_hook *my_modifier_hook = weechat_hook_modifier ("weechat_print",
                                                             &my_modifier_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_modifier(modifier: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_modifier_cb(data: str, modifier: str, modifier_data: str, string: str) -> str:
        return "%s xxx" % string

    hook = weechat.hook_modifier("weechat_print", "my_modifier_cb", "")

#### hook_modifier_exec

Извршава модификатор(е)

Прототип:

    char *weechat_hook_modifier_exec (const char *modifier,
                                      const char *modifier_data,
                                      const char *string);

Аргументи:

- modifier: име модификатора

- modifier_data: подаци модификатора

- string: стринг који треба да се измени

Повратна вредност:

- измењени стринг, NULL у случају грешке

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

Модификатор | Мин WeeChat | Подаци модификатора | Стринг | Излаз
--- | --- | --- | --- | ---
charset_decode |  | plugin.buffer_name | Било који стринг. | Стринг декодиран из скупа карактера пронађеног за додатак/бафер у UTF-8.
charset_encode |  | plugin.buffer_name | Било који стринг. | Стринг кодиран из UTF-8 у скуп карактера пронађен за додатак/бафер.
irc_color_decode |  | "1" да се боје задрже, "0" да се боје уклоне | Било који стринг. | Стринг у којем су IRC боје конвертоване у WeeChat боје (или су уклоњене IRC боје).
irc_color_encode |  | "1" да се боје задрже, "0" да се боје уклоне | Било који стринг. | Стринг са IRC бојама (или са уклоњеним IRC бојама).
irc_color_decode_ansi | 1.0 | "1" да се боје задрже, "0" да се боје уклоне | Било који стринг. | Стринг у којем су ANSI боје конвертоване у IRC боје (или су уклоњене ANSI боје).
irc_command_auth | 0.4.1 | Име сервера | Команда аутентификације (на пример: `/msg nickserv identify лозинка`). | Команда са скривеном лозинком (на пример: `/msg nickserv identify ********`).
irc_message_auth | 0.4.1 | Име сервера | Порука која се приказује након што се `/msg` пошаље nickserv боту. | Порука са скривеном лозинком.
irc_tag_escape_value | 3.3 | - | Било који стринг. | Стринг са означеном вредности IRC ознаке, погледајте ову страницу ↗.
irc_tag_unescape_value | 3.3 | - | Било који стринг. | Стринг са неозначеном вредности IRC ознаке, погледајте ову страницу ↗.
color_decode | 4.3.0 | Стринг замене за уклоњене боје | Било који стринг. | Стринг са WeeChat бојама се претвара у стринг замене (боје се уклањају ако је стринг замене празан).
color_decode_ansi | 1.0 | "1" да се боје задрже, "0" да се боје уклоне | Било који стринг. | Стринг у којем су ANSI боје конвертоване у WeeChat боје (или су уклоњене WeeChat боје).
color_encode_ansi | 2.7 | - | Било који стринг. | Стринг са WeeChat бојама конвертованим у ANSI боје.
eval_path_home | 2.7 | Није обавезно: `directory=xxx` где `xxx` може бити: `config`, `data`, `cache`, `runtime` | Било који стринг. | Израчуната путања, резултат функције string_eval_path_home.

C пример:

    char *new_string = weechat_hook_modifier_exec ("my_modifier",
                                                   my_data, my_string);

Скрипта (Python):

    # прототип
    def hook_modifier_exec(modifier: str, modifier_data: str, string: str) -> str: ...

    # пример
    weechat.hook_modifier_exec("my_modifier", my_data, my_string)

#### hook_info

Ажурирано у верзијама 1.5, 2.5.

Качи се на информацију (функција поратног позива узима и враћа стринг).

Прототип:

    struct t_hook *weechat_hook_info (const char *info_name,
                                      const char *description,
                                      const char *args_description,
                                      char *(*callback)(const void *pointer,
                                                        void *data,
                                                        const char *info_name,
                                                        const char *arguments),
                                      const void *callback_pointer,
                                      void *callback_data);

Аргументи:

- info_name: име инфо (пре имена инфо се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- description: опис

- args_description: опис аргумената (није обавезан, може да буде NULL)

- callback: функција која се позива када се затражи инфо, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *info_name: име инфо

  - const char *arguments: додатни аргументи, у зависности од инфо

  - return value: вредност тражене инфо

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

Белешка | У програму WeeChat ≥ 2.5, функција повратног позива враћа алоцирани стринг (у WeeChat ≤ 2.4 је то био показивач на статички стринг).

C пример:

    char *
    my_info_cb (const void *pointer, void *data, const char *info_name,
                const char *arguments)
    {
        /* ... */
        return strdup ("some_info");
    }

    /* додаје инфо „my_info” */
    struct t_hook *my_info_hook = weechat_hook_info ("my_info",
                                                     "Нека инфо",
                                                     "Инфо о аргументима",
                                                     &my_info_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_info(info_name: str, description: str, args_description: str,
                  callback: str, callback_data: str) -> str: ...

    # пример
    def my_info_cb(data: str, info_name: str, arguments: str) -> str:
        return „some_info”

    hook = weechat.hook_info("my_info", "Нека инфо", "Инфо о аргументима",
                             "my_info_cb", "")

#### hook_info_hashtable

WeeChat ≥ 0.3.4, ажурирано у верзији 1.5.

Качи се на информацију (функција повратног позива узима и враћа хеш табелу).

Прототип:

    struct t_hook *weechat_hook_info_hashtable (const char *info_name,
                                                const char *description,
                                                const char *args_description,
                                                const char *output_description,
                                                struct t_hashtable *(*callback)(const void *pointer,
                                                                                void *data,
                                                                                const char *info_name,
                                                                                struct t_hashtable *hashtable),
                                                const void *callback_pointer,
                                                void *callback_data);

Аргументи:

- info_name: име инфо (пре имена инфо се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- description: опис

- args_description: опис очекиване хеш табеле (није обавезан, може да буде NULL)

- output_description: опис хеш табеле коју враћа функција повратног позива (није обавезно, може да буде NULL)

- callback: функција која се позива када се затражи инфо, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *info_name: име инфо

  - struct t_hashtable *hashtable: хеш табела, зависно од информација

  - повратна вредност: тражена хеш табела

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    struct t_hashtable *
    my_info_hashtable_cb (const void *pointer, void *data, const char *info_name,
                          struct t_hashtable *hashtable)
    {
        /* ... */
        return pointer_to_new_hashtable;
    }

    /* додаје инфо "my_info_hashtable" */
    struct t_hook *my_info_hook = weechat_hook_info_hashtable ("my_info_hashtable",
                                                               "Нека инфо",
                                                               "Инфо о улазној хеш табели",
                                                               "Инфо о излазној хеш табели",
                                                               &my_info_hashtable_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_info_hashtable(info_name: str, description: str, args_description: str,
                            output_description: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_info_hashtable_cb(data: str, info_name: str, hashtable: Dict[str, str]) -> Dict[str, str]:
        return {"test_key": "test_value"}

    hook = weechat.hook_info_hashtable("my_info_hashtable", "Нека инфо",
                                       "Инфо о улазној хеш табели",
                                       "Инфо о излазној хеш табели",
                                       "my_info_hashtable_cb", "")

#### hook_infolist

Ажурирано у верзији 1.5.

Качи се на инфолисту: функција повратног позива ће вратити показивач на тражену инфолисту.

Прототип:

    struct t_hook *weechat_hook_infolist (const char *infolist_name,
                                          const char *description,
                                          const char *pointer_description,
                                          const char *args_description,
                                          struct t_infolist *(*callback)(const void *pointer,
                                                                         void *data,
                                                                         const char *infolist_name,
                                                                         void *obj_pointer,
                                                                         const char *arguments),
                                          const void *callback_pointer,
                                          void *callback_data);

Аргументи:

- infolist_name: име инфолисте (пре имена инфолисте се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- description: опис

- pointer_description: опис показивача (није обавезно, може да буде NULL)

- args_description: опис аргумената (није обавезан, може да буде NULL)

- callback: функција која се позива када се затражи инфолиста, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *infolist_name: име инфолисте

  - void *pointer: показивач на објекат који инфолиста мора да врати (да би се добила само једна ставка у инфолисти)

  - const char *arguments: додатни аргументи, зависно од инфолисте

  - повратна вредност: тражена инфолиста

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    struct t_infolist *
    my_infolist_cb (const void *pointer, void *data, const char *infolist_name,
                    void *obj_pointer, const char *arguments)
    {
        struct t_infolist *my_infolist;

        /* изградња инфолисте */
        /* ... */

        return my_infolist;
    }

    /* додаје инфолисту "my_infolist" */
    struct t_hook *my_infolist = weechat_hook_infolist ("my_infolist",
                                                        "Инфолиста са неким подацима",
                                                        "Инфо о показивачу",
                                                        "Инфо о аргументима",
                                                        &my_infolist_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_infolist(infolist_name: str, description: str, pointer_description: str,
                      args_description: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_infolist_cb(data: str, infolist_name: str, pointer: str, arguments: str) -> str:
        # изградња инфолисте
        # ...
        return my_infolist

    hook = weechat.hook_infolist("my_infolist", "Инфолиста са неким подацима",
                                 "Инфо о показивачу", "Инфо о аргументима",
                                 "my_infolist_cb", "")

#### hook_hdata

Ажурирано у верзији 1.5.

Качи се на hdata: функција повратног позива ће вратити показивач на тражени.

Прототип:

    struct t_hook *weechat_hook_hdata (const char *hdata_name,
                                       const char *description,
                                       struct t_hdata *(*callback)(const void *pointer,
                                                                   void *data,
                                                                   const char *hdata_name),
                                       const void *callback_pointer,
                                       void *callback_data);

Аргументи:

- hdata_name: име hdata (испред имена hdata се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- description: опис

- callback: функција која се позива када се затражи hdata, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - const char *hdata_name: име hdata

  - повратна вредност: тражени hdata

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    struct t_hdata *
    my_hdata_cb (const void *pointer, void *data, const char *hdata_name)
    {
        struct t_hdata *my_hdata;

        /* изградња hdata */
        /* ... */

        return my_hdata;
    }

    /* додаје hdata "my_hdata" */
    struct t_hook *my_hdata = weechat_hook_hdata ("my_hdata",
                                                  "Hdata за моју структуру",
                                                  &my_hdata_cb, NULL, NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### hook_focus

Ажурирано у верзији 1.5, 4.0.0, 4.1.0.

Качи се на фокус: догађај миша или тастер притиснут у режиму померања курсора.

Прототип:

    struct t_hook *weechat_hook_focus (const char *area,
                                       struct t_hashtable *(*callback)(const void *pointer,
                                                                       void *data,
                                                                       struct t_hashtable *info),
                                       const void *callback_pointer,
                                       void *callback_data);

Аргументи:

- area: „chat” за површину чета (разговора), или име ставке траке (испред површине се дозвољава приоритет, погледајте напомену у вези са приоритетима)

- callback: функција која се позива када се направи фокус, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_hashtable *info: хеш табела са инфо о фокусу у стрингови које су вратили остали позиви фокус функција повратног позива (са вишим приоритетом) (погледате табелу испод)

  - повратна вредност: или показивач на „info” (завршену хеш табелу), или показивач на нову хеш табелу (коју је креирала функција повратног позива, са кључевима и вредностима типа „стринг”), садржај ове нове хеш табеле ће се додати у info за остале позиве фокус функције повратног позива

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

- callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се кука обрише

Важно | У случају гестикулације мишем, ваша функција повратног позива ће се позвати два пута: први пута када се тастер притисне (овде се површина увек подудара са вашом површином), а други пут када се тастер отпусти, па тада је могуће да се површина не подудара са вашом површином: зато у својој функцији повратног позива увек морате да тестирате да ли се површина подудара пре него што употребите инфо из хеш табеле.

Садржај хеш табеле која се шаље функцији повратног позива (кључеви и вредности су типа „стринг”):

Кључ (1) | Опис | Примери вредности | Вредност ако нема
--- | --- | --- | ---
_x | Колона на екрану. | "0" …​ "n" |
_y | Линија на екрану. | "0" …​ "n" |
_key | Догађај тастера или миша. | "button1", "button2-gesture-left", …​ |
_window | Показивач на прозор. | "0x1234abcd" | ""
_window_number | Број прозора. | "1" …​ "n" | "*"
_buffer | Показивач на бафер. | "0x1234abcd" | ""
_buffer_number | Број бафера. | "1" …​ "n" | "-1"
_buffer_plugin | Име додатка бафера. | "core", "irc", …​ | ""
_buffer_name | Име бафера. | "weechat", "libera.#weechat", …​ | ""
_buffer_full_name | Пуно име бафера. | "core.weechat", "irc.libera.#weechat", …​ | ""
_buffer_localvar_XXX (2) | Локалне променљиве бафера. | any value | not set
_chat | Индикатор површине разговора. | "0" or "1" | "0"
_chat_line | Показивач на линију (WeeChat ≥ 1.2). | "0x1234abcd" | ""
_chat_line_x | Колона у линији (3). | "0" …​ "n" | "-1"
_chat_line_y | Број линије (3). | "0" …​ "n" | "-1"
_chat_line_date | Датум/време линије. | "1313237175" | "0"
_chat_line_date_usec | Микросекунде датума/времена линије. | "123456" | "0"
_chat_line_date_printed | Датум/време линије (4). | "1313237175" | "0"
_chat_line_date_usec_printed | Микросекунде датума/времемна приказа линије (4). | "123456" | "0"
_chat_line_time | Приказано време. | "14:06:15" | ""
_chat_line_tags | Ознаке линије. | "irc_privmsg,nick_flashy,log1" | ""
_chat_line_nick | Надимак линије. | "FlashCode" | ""
_chat_line_prefix | Префикс линије. | "@FlashCode" | ""
_chat_line_message | Порука линије. | "Hello world!" | ""
_chat_focused_line | Линија на (x, y) (WeeChat ≥ 4.0.0). | "Здраво свима!" | ""
_chat_focused_line_bol | Текст од почетка линије до (x-1, y) (WeeChat ≥ 4.1.0). | "Здраво" | ""
_chat_focused_line_eol | Текст од (x, y) до краја линије (WeeChat ≥ 4.1.0). | "аво свима!" | ""
_chat_word | Реч на (x,y). | "Здраво" | ""
_chat_bol | Текст од почетка поруке до (x-1, y). | "Зд" | ""
_chat_eol | Текст од (x, y) до краја поруке. | "раво свете!" | ""
_bar_name | Име траке. | "title", "nicklist", …​ | ""
_bar_filling | Испуна траке. | "horizontal", "vertical", …​ | ""
_bar_item_name | Име ставке траке. | "buffer_nicklist", "hotlist", …​ | ""
_bar_item_line | Линија у ставки траке. | "0" …​ "n" | "-1"
_bar_item_col | Колона у ставки траке. | "0" …​ "n" | "-1"
_bar_window | Показивач на прозор траке (WeeChat ≥ 2.9). | "0x1234abcd" | ""

Белешка | (1) Постоје исти кључеви са суфиксом „2” (тј: „_x2”, „_y2”, „_window2”, …​) са инфо о другој тачки (корисно је само за гестикулације мишем, како бисте знали где је отпуштен тастер миша). (2) `XXX` је име локалне променљиве у баферу. (3) Поставља се само за бафере са слободним садржајем. (4) То је датум када је програм WeeChat додао линију у бафер (веће или једнако од „_chat_line_date”).

Додатне инфо за ставку траке „buffer_nicklist”:

Додатак (1) | Кључ | Опис
--- | --- | ---
irc | irc_nick | Показивач на IRC надимак (WeeChat ≥ 3.0).
irc | irc_host | Хост за надимак (ако се зна).
weechat | nick | Име надимка.
weechat | prefix | Префикс за надимак.
weechat | group | Име групе.

Белешка | (1) Име додатка које дефинише hook_focus за враћање инфо о овој ставки траке (на пример, ако је додатак „irc”, инфо о томе ће бити доступна само за irc бафере).

Повратна вредност:

- показивач на нову куку, NULL у случају грешке

C пример:

    struct t_hashtable *
    my_focus_nicklist_cb (const void *pointer, void *data, struct t_hashtable *info)
    {
        /* додавање стрингова у хеш табелу */
        /* ... */

        return info;
    }

    /* додаје фокус на nicklist */
    struct t_hook *my_focus = weechat_hook_focus ("buffer_nicklist",
                                                  &my_focus_nicklist_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def hook_focus(area: str, callback: str, callback_data: str) -> str: ...

    # пример
    def my_focus_nicklist_cb(data: str, info: Dict[str, str]) -> Dict[str, str]:
        # изградња dict
        # ...
        return my_dict

    hook = weechat.hook_focus("buffer_nicklist", "my_focus_nicklist_cb", "")

#### hook_set

WeeChat ≥ 0.3.9 (скрипте: WeeChat ≥ 0.4.3).

Поставља стринг вредност особине куке.

Прототип:

    void weechat_hook_set (struct t_hook *hook, const char *property,
                           const char *value);

Аргументи:

- hook: нешто за шта се прикачила „weechat_hook_xxx()”

- property: име особине (погледајте табелу испод)

- value: нова вредност за особину

Особине:

Име | Мин WeeChat | Тип куке | Вредност | Опис
--- | --- | --- | --- | ---
subplugin |  | било који тип | било који стринг | Име под додатка (обично је то име скрипте које се приказује у `/help команда` за куку типа command).
keep_spaces_right | 4.6.0 | command, command_run | "0" или "1" | Задржава размаке на крају аргумената команде када се извршава.
stdin | 0.4.3 | process, process_hashtable | било који стринг | Шаље податке на стандардни улаз (stdin) дете процеса.
stdin_close | 0.4.3 | process, process_hashtable | (не користи се) | Затвара пајп који се користи за слање података на стандардни улаз (stdin) дете процеса.
signal | 1.0 | process, process_hashtable | број сигнала или једно од следећих имена: `hup`, `int`, `quit`, `kill`, `term`, `usr1`, `usr2` | Шаље сигнал дете процесу.

C пример:

    struct t_hook *my_command_hook =
        weechat_hook_command ("abcd", "опис",
                              "args", "опис аргумената",
                              "", &my_command_cb, NULL, NULL);
    weechat_hook_set (my_command_hook, "subplugin", "test");

Скрипта (Python):

    # прототип
    def hook_set(hook: str, property: str, value: str) -> int: ...

    # пример
    def my_process_cb(data: str, command: str, return_code: int, out: str, err: str) -> int:
        # ...
        return weechat.WEECHAT_RC_OK

    hook = weechat.hook_process_hashtable("/путања/до/команде", {"stdin": "1"},
                                          20000, "my_process_cb", "")
    weechat.hook_set(hook, "stdin", "подаци који се шаљу на stdin дете процеса")
    weechat.hook_set(hook, "stdin_close", "")  # није обавезно

#### unhook

Откачи се са нечега на шта је прикачено.

Прототип:

    void weechat_unhook (struct t_hook *hook);

Аргументи:

- hook: нешто за шта се прикачила „weechat_hook_xxx()”

C пример:

    struct t_hook *my_hook = weechat_hook_command ( /* ... */ );
    /* ... */
    weechat_unhook (my_hook);

Скрипта (Python):

    # прототип
    def unhook(hook: str) -> int: ...

    # пример
    weechat.unhook(my_hook)

#### unhook_all

Ажурирано у верзији 1.5.

Откачи се са свега на шта се закачио текући додатак.

Прототип:

    void weechat_unhook_all (const char *subplugin);

Аргументи:

- subplugin: ако није NULL, откаче се само куке које имају постављен овај „subplugin” (овај аргумент није доступан у API скриптовања)

C пример:

    weechat_unhook_all (NULL);

Скрипта (Python):

    # прототип
    def unhook_all() -> int: ...

    # пример
    weechat.unhook_all()

### 3.15. Бафери

Функције за креирање/упит/затварање бафера.

#### buffer_new

Ажурирано у верзији 1.5.

Отвара нови бафер.

Белешка | Ако желите да тренутно поставите особине бафера (тип бафера, локалне променљиве, тастерске пречице, итд.), онда је боље да упторебите функцију buffer_new_props која ове особине поставља током креирања бафера, пре слања сигнала buffer_opened.

Прототип:

    struct t_gui_buffer *weechat_buffer_new (const char *name,
                                             int (*input_callback)(const void *pointer,
                                                                   void *data,
                                                                   struct t_gui_buffer *buffer,
                                                                   const char *input_data),
                                             const void *input_callback_pointer,
                                             void *input_callback_data,
                                             int (*close_callback)(const void *pointer,
                                                                   void *data,
                                                                   struct t_gui_buffer *buffer),
                                             const void *close_callback_pointer,
                                             void *close_callback_data);

Аргументи:

- name: име бафера (мора бити јединствено за додатак)

- input_callback: функција која се позива када се унесе текст уноса за бафер, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: показивач на бафер

  - const char *input_data: подаци уноса

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- input_callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се бафер затвори

- close_callback: функција која се позива када се затвори бафер, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: показивач на бафер

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- close_callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се затвори бафер

Повратна вредност:

- показивач на нови бафер, NULL у случају грешке

C пример:

    int
    my_input_cb (const void *pointer, void *data,
                 struct t_gui_buffer *buffer, const char *input_data)
    {
        weechat_printf (buffer, "Текст: %s", input_data);
        return WEECHAT_RC_OK;
    }

    int
    my_close_cb (const void *pointer, void *data, struct t_gui_buffer *buffer)
    {
        weechat_printf (NULL, "Затвориће се бафер ’%s’!",
                        weechat_buffer_get_string (buffer, "name"));
        return WEECHAT_RC_OK;
    }

    struct t_gui_buffer *my_buffer = weechat_buffer_new ("my_buffer",
                                                         &my_input_cb, NULL, NULL,
                                                         &my_close_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def buffer_new(name: str, input_callback: str, input_callback_data: str,
                   close_callback: str, close_callback_data: str) -> str: ...

    # пример
    def my_input_cb(data: str, buffer: str, input_data: str) -> int:
        weechat.prnt(buffer, "Текст: %s" % input_data)
        return weechat.WEECHAT_RC_OK

    def my_close_cb(data: str, buffer: str) -> int:
        weechat.prnt("", "Затвориће се бафер ’%s’!" % weechat.buffer_get_string(buffer, "name"))
        return weechat.WEECHAT_RC_OK

    buffer = weechat.buffer_new("my_buffer", "my_input_cb", "", "my_close_cb", "")

#### buffer_new_props

WeeChat ≥ 3.5.

Отвара нови бафер и поставља особине.

Прототип:

    struct t_gui_buffer *weechat_buffer_new_props (const char *name,
                                                   struct t_hashtable *properties,
                                                   int (*input_callback)(const void *pointer,
                                                                         void *data,
                                                                         struct t_gui_buffer *buffer,
                                                                         const char *input_data),
                                                   const void *input_callback_pointer,
                                                   void *input_callback_data,
                                                   int (*close_callback)(const void *pointer,
                                                                         void *data,
                                                                         struct t_gui_buffer *buffer),
                                                   const void *close_callback_pointer,
                                                   void *close_callback_data);

Аргументи:

- name: име бафера (мора бити јединствено за додатак)

- properties: особине које треба да се примене (за дозвољене особине погледајте функцију buffer_set)

- input_callback: функција која се позива када се унесе текст уноса за бафер, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: показивач на бафер

  - const char *input_data: подаци уноса

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- input_callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се бафер затвори

- close_callback: функција која се позива када се затвори бафер, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_buffer *buffer: показивач на бафер

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- close_callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се затвори бафер

Повратна вредност:

- показивач на нови бафер, NULL у случају грешке

C пример:

    int
    my_input_cb (const void *pointer, void *data,
                 struct t_gui_buffer *buffer, const char *input_data)
    {
        weechat_printf (buffer, "Текст: %s", input_data);
        return WEECHAT_RC_OK;
    }

    int
    my_close_cb (const void *pointer, void *data, struct t_gui_buffer *buffer)
    {
        weechat_printf (NULL, "Затвориће се бафер ’%s’!",
                        weechat_buffer_get_string (buffer, "name"));
        return WEECHAT_RC_OK;
    }

    struct t_hashtable *properties = weechat_hashtable_new (8,
                                                            WEECHAT_HASHTABLE_STRING,
                                                            WEECHAT_HASHTABLE_STRING,
                                                            NULL,
                                                            NULL);
    /* бафер са произвољним садржајем */
    weechat_hashtable_set (properties, "type", "free");
    /* овај бафер се не логује */
    weechat_hashtable_set (properties, "localvar_set_no_log", "1");
    /* везивање пречице alt-c за овај бафер */
    weechat_hashtable_set (properties, "key_bind_meta-c", "/my_command");

    struct t_gui_buffer *my_buffer = weechat_buffer_new_props ("my_buffer",
                                                               properties,
                                                               &my_input_cb, NULL, NULL,
                                                               &my_close_cb, NULL, NULL);

Скрипта (Python):

    # прототип
    def buffer_new_props(name: str, properties: Dict[str, str],
                         input_callback: str, input_callback_data: str,
                         close_callback: str, close_callback_data: str) -> str: ...

    # пример
    def my_input_cb(data: str, buffer: str, input_data: str) -> int:
        weechat.prnt(buffer, "Текст: %s" % input_data)
        return weechat.WEECHAT_RC_OK

    def my_close_cb(data: str, buffer: str) -> int:
        weechat.prnt("", "Затвориће се бафер ’%s’!" % weechat.buffer_get_string(buffer, "name"))
        return weechat.WEECHAT_RC_OK

    properties = {
        "type": "free",                    # бафер са произвољним садржајем
        "localvar_set_no_log": "1",        # овај бафер се не логује
        "key_bind_meta-c": "/my_command",  # везивање пречице alt-c за овај бафер
    }
    buffer = weechat.buffer_new_props("my_buffer", properties, "my_input_cb", "", "my_close_cb", "")

#### current_buffer

Враћа показивач на текући бафер (бафер који се приказује у текућем прозору).

Прототип:

    struct t_gui_buffer *weechat_current_buffer ();

Повратна вредност:

- показивач на текући бафер

C пример:

    weechat_printf (weechat_current_buffer (), "Текст у текућем баферу");

Скрипта (Python):

    # прототип
    def current_buffer() -> str: ...

    # пример
    weechat.prnt(weechat.current_buffer(), "Текст у текућем баферу")

#### buffer_search

Ажурирано у верзији 1.0, 4.3.0.

Претражује бафер на додатак/име, пуно име или јединствени идентификатор (`id`).

Прототип:

    struct t_gui_buffer *weechat_buffer_search (const char *plugin,
                                                const char *name);

Аргументи:

- plugin: име додатка, доступне су следеће специјалне вредности:

  - `==`: име које се користи је пуно име бафера (на пример: `irc.libera.#weechat` уместо `libera.#weechat`) (WeeChat ≥ 1.0)

  - `==id`: име које се користи је јединствени идентификатор бафера (`id`) (WeeChat ≥ 4.3.0)

- name: име бафера, ако је NULL или празан стринг, враћа се текући бафер (бафер који се приказује у текућем прозору); ако име почиње са `(?i)`, претрага не прави разлику у величини слова (WeeChat ≥ 1.0)

Повратна вредност:

- показивач на пронађени бафер, или NULL ако се бафер не пронађе

C примери:

    struct t_gui_buffer *buffer1 = weechat_buffer_search ("irc", "libera.#weechat");
    struct t_gui_buffer *buffer2 = weechat_buffer_search ("==", "irc.libera.#test");  /* WeeChat ≥ 1.0 */
    struct t_gui_buffer *buffer3 = weechat_buffer_search ("==id", "1709797810942688");  /* WeeChat ≥ 4.3.0 */

Скрипта (Python):

    # прототип
    def buffer_search(plugin: str, name: str) -> str: ...

    # пример
    buffer = weechat.buffer_search("my_plugin", "my_buffer")

#### buffer_search_main

Тражи главни бафер програма WeeChat (core бафер, први бафер који се прикаже када се покреће програм WeeChat).

Прототип:

    struct t_gui_buffer *weechat_buffer_search_main ();

Повратна вредност:

- показивач на главни бафер програма WeeChat (core бафер)

C пример:

    struct t_gui_buffer *weechat_buffer = weechat_buffer_search_main ();

Скрипта (Python):

    # прототип
    def buffer_search_main() -> str: ...

    # пример
    buffer = weechat.buffer_search_main()

#### buffer_clear

Чисти садржај бафера.

Прототип:

    void weechat_buffer_clear (struct t_gui_buffer *buffer);

Аргументи:

- buffer: показивач на бафер

C пример:

    struct t_gui_buffer *my_buffer = weechat_buffer_search ("my_plugin",
                                                            "my_buffer");
    if (my_buffer)
    {
        weechat_buffer_clear (my_buffer);
    }

Скрипта (Python):

    # прототип
    def buffer_clear(buffer: str) -> int: ...

    # пример
    buffer = weechat.buffer_search("my_plugin", "my_buffer")
    if buffer:
        weechat.buffer_clear(buffer)

#### buffer_close

Затвара бафер.

Прототип:

    void weechat_buffer_close (struct t_gui_buffer *buffer);

Аргументи:

- buffer: показивач на бафер

C пример:

    struct t_gui_buffer *my_buffer = weechat_buffer_new ("my_buffer",
                                                         &my_input_cb, NULL,
                                                         &my_close_cb, NULL);
    /* ... */
    weechat_buffer_close (my_buffer);

Скрипта (Python):

    # прототип
    def buffer_close(buffer: str) -> int: ...

    # пример
    buffer = weechat.buffer_new("my_buffer", "my_input_cb", "", "my_close_cb", "")
    # ...
    weechat.buffer_close(buffer)

#### buffer_merge

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

Прототип:

    void weechat_buffer_merge (struct t_gui_buffer *buffer,
                               struct t_gui_buffer *target_buffer);

Аргументи:

- buffer: показивач на бафер

- target_buffer: циљни бафер, онај са којим се бафер спаја

C пример:

    /* merge current buffer with weechat "core" buffer */
    weechat_buffer_merge (weechat_current_buffer (),
                          weechat_buffer_search_main ());

Скрипта (Python):

    # прототип
    def buffer_merge(buffer: str, target_buffer: str) -> int: ...

    # пример
    # спаја текући бафер са WeeChat „core” бафером
    weechat.buffer_merge(weechat.current_buffer(), weechat.buffer_search_main())

#### buffer_unmerge

Издваја бафер из групе спојених бафера.

Прототип:

    void weechat_buffer_unmerge (struct t_gui_buffer *buffer,
                                 int number);

Аргументи:

- buffer: показивач на бафер

- number: циљни број за издвојени бафер, ако је < 1, онда ће се бафер померити на број buffer + 1

C пример:

    weechat_buffer_unmerge (weechat_current_buffer (), 1);

Скрипта (Python):

    # прототип
    def buffer_unmerge(buffer: str, number: int) -> int: ...

    # пример
    weechat.buffer_unmerge(weechat.current_buffer(), 1)

#### buffer_get_integer

Враћа целобројну вредност особине бафера.

Прототип:

    int weechat_buffer_get_integer (struct t_gui_buffer *buffer,
                                    const char *property);

Аргументи:

- buffer: показивач на бафер

- property: име особине:

  - opening: 1 ако се бафер отвара, у супротном 0 (WeeChat ≥ 4.2.0)

  - number: број бафера (почиње се од 1)

  - layout_number: број бафера сачуван у распореду

  - layout_number_merge_order: редослед у спајању за распоред

  - type: тип бафера (0: форматиран, 1: слободни садржај)

  - notify: ниво обавештавања за бафер

  - num_displayed: број прозора који приказују бафер

  - active: 2 ако је то једини активни бафер (спојен), 1 ако је бафер активан, 0 ако је бафер спојен и није изабран

  - hidden: 1 ако је бафер скривен, у супротном 0 (WeeChat ≥ 1.0)

  - zoomed: 1 ако је бафер спојен и зумиран, у супротном 0 (WeeChat ≥ 1.0)

  - print_hooks_enabled: 1 ако су укључене print куке, у супротном 0

  - day_change: 1 ако су приказују поруке о промени дана, у супротном 0 (WeeChat ≥ 0.4.3)

  - clear: 1 ако бафер може да се очисти командом `/buffer clear`, у супротном 0 (WeeChat ≥ 1.0)

  - filter: 1 ако су у баферу укључени филтери, у успротном 0 (WeeChat ≥ 1.0)

  - closing: 1 ако се бафер затвара, у супротном 0 (WeeChat ≥ 1.0)

  - lines_hidden: 1 ако је у баферу скривена бар једна линија (филтрирана), или 0 ако се приказују све линије

  - prefix_max_length: максимална дужина префикса у овом баферу

  - next_line_id: id следеће линије у баферу (WeeChat ≥ 3.8)

  - time_for_each_line: 1 ако се време приказује са сваку линију у баферу (подразумевано), у супротном 0

  - nicklist: 1 ако је укључена листа надимака, у супротном 0

  - nicklist_case_sensitive: 1 ако се у надимцима прави разлика у величини слова, у супротном 0

  - nicklist_max_length: максимална дужина надимка

  - nicklist_display_groups: 1 ако се приказују групе, у супротном 0

  - nicklist_count: број надимака и група у листи надимака

  - nicklist_visible_count: број приказаних надимака/група

  - nicklist_groups_count: број група у листи надимака

  - nicklist_groups_visible_count: број приказаних група

  - nicklist_nicks_count: број надимака у листи надимака

  - nicklist_nicks_visible_count: број приказаних надимака

  - input: 1 ако је укључен унос, у супротном 0

  - input_get_any_user_data: 1 ако се било који кориснички подаци, укљуљчујући команде, шаљу функцији повратног позива уноса, иначе 0

  - input_get_unknown_commands: 1 ако се непознате команде шаљу функцији повратног позива уноса, у супротном 0

  - input_get_empty: 1 ако се функцији повратног позива уноса шаље празан унос, у супротном 0

  - input_multiline: 1 ако се више линија шаље као једна порука функцији повратног позива уноса, у супротном 0

  - input_size: величина уноса (у бајтовима)

  - input_length: дужина уноса (број карактера)

  - input_pos: позиција курсора у баферу уноса

  - input_1st_display: први карактер приказан на екрану

  - num_history: број команди у историји

  - text_search: тип претраге текста:

    - 0: у овом тренутку нема претраге

    - 1: претрага у линијама бафера

    - 2: претрага у историји команди

  - text_search_direction: смер претраге:

    - 0: претрага уназад (смер: најстарије поруке/команде)

    - 1: претрага унапред (смер: најновије поруке/команде)

  - text_search_exact: 1 ако претрага текста прави разлику у величини слова

  - text_search_regex: 1 ако се претражује регуларним изразом

  - text_search_where:

    - 0: у овом тренутку нема претраге

    - 1: претрага у поруци

    - 2: претрага у префиксу

    - 3: претрага у префиксу и поруци

  - text_search_history:

    - 0: у овом тренутку нема претраге

    - 1: претрага у локалној историји бафера

    - 2: претрага у глобалној историји

  - text_search_found: 1 ако се текст пронађе, у супротном 0

Повратна вредност:

- целобројна вредност особине

C пример:

    weechat_printf (NULL, "број мог бафера је: %d",
                    weechat_buffer_get_integer (my_buffer, "number"));

Скрипта (Python):

    # прототип
    def buffer_get_integer(buffer: str, property: str) -> int: ...

    # пример
    weechat.prnt("", "број мог бафера је: %d" % weechat.buffer_get_integer(my_buffer, "number"))

#### buffer_get_string

Враћа стринг вредност особине бафера.

Прототип:

    const char *weechat_buffer_get_string (struct t_gui_buffer *buffer,
                                           const char *property);

Аргументи:

- buffer: показивач на бафер

- property: име особине:

  - id: јединствени идентификатор (WeeChat ≥ 4.3.0)

  - plugin: име додатка који је креирао овај бафер („core” за главни бафер програма WeeChat)

  - name: име бафера

  - full_name: пуно име бафера („додатак.име”) (WeeChat ≥ 0.3.7)

  - old_full_name: старо пуно име бафера („додатак.име”), постављено пре промене имена бафера (WeeChat ≥ 2.8)

  - short_name: кратко име бафера (напомена: користи се само за приказ и корисник може да га промени, ово не сме да се употребљава за проналажење имена бафера, уместо њега употребите name, full_name или локалну променљиву channel)

  - type: тип бафера: „formatted” или „free” (WeeChat ≥ 4.2.0)

  - title: наслов бафера

  - modes: режими (WeeChat ≥ 4.3.0)

  - nicklist_last_id_assigned: последњи јединствени идентификатор употребљен у овом баферу за групу или надимак (WeeChat ≥ 4.3.0)

  - input_prompt: питање уноса (WeeChat ≥ 4.3.0)

  - input: текст уноса

  - text_search_input: сачувани унос пре претраге текста

  - highlight_words: листа речи које се истичу

  - highlight_disable_regex: POSIX прооширени регуларни израз за искључивање истицања

  - highlight_regex: POSIX проширени регуларни израз за истицање

  - highlight_tags_restrict: ограничава истицање само на поруке са наведеним ознакама

  - highlight_tags: истицање се форсира за поруке са наведеним ознакама

  - hotlist_max_level_nicks: максимални ниво вруће листе за неке надимке

  - localvar_xxx: враћа садржај локалне променљиве „xxx” (замените „xxx” са именом локалне променљиве коју желите да прочитате)

Повратна вредност:

- стринг вредност особине

C пример:

    weechat_printf (NULL, "име / кратко име бафера су: %s / %s",
                    weechat_buffer_get_string (my_buffer, "name"),
                    weechat_buffer_get_string (my_buffer, "short_name"));

Скрипта (Python):

    # прототип
    def buffer_get_string(buffer: str, property: str) -> str: ...

    # пример
    weechat.prnt("", "име / кратко име бафера су: %s / %s"
        % (weechat.buffer_get_string(my_buffer, "name"),
        weechat.buffer_get_string(my_buffer, "short_name")))

#### buffer_get_pointer

Враћа вредност показивача на особину бафера.

Прототип:

    void *weechat_buffer_pointer (struct t_gui_buffer *buffer,
                                  const char *property);

Аргументи:

- buffer: показивач на бафер

- property: име особине:

  - plugin: показивач на додатак који је креирао овај бафер (NULL за главни бафер програма WeeChat)

  - text_search_regex_compiled: компајлирани регуларни израз

  - text_search_ptr_history: пронађена историја

  - highlight_disable_regex_compiled: компајлиран регуларни израз highlight_disable_regex

  - highlight_regex_compiled: компајлиран регуларни израз highlight_regex

Повратна вредност:

- вредност показивача на особину

C пример:

    weechat_printf (NULL, "показивач на додатак мог бафера: %p",
                    weechat_buffer_get_pointer (my_buffer, "plugin"));

Скрипта (Python):

    # прототип
    def buffer_get_pointer(buffer: str, property: str) -> str: ...

    # пример
    weechat.prnt("", "показивач на додатак мог бафера: %s" % weechat.buffer_get_pointer(my_buffer, "plugin"))

#### buffer_set

Поставља стринг вредност особине бафера.

Прототип:

    void weechat_buffer_set (struct t_gui_buffer *buffer, const char *property,
                             const char *value);

Аргументи:

- buffer: показивач на бафер

- property: име особине (погледајте табелу испод)

- value: нова вредност за особину

Особине:

Име | Мин WeeChat | Вредност | Опис
--- | --- | --- | ---
hotlist |  | "+", "-", WEECHAT_HOTLIST_LOW, WEECHAT_HOTLIST_MESSAGE, WEECHAT_HOTLIST_PRIVATE, WEECHAT_HOTLIST_HIGHLIGHT, "-1" | "+": укључује врућу листу (глобално подешавање, не користи се показивач на бафер) "-": искључује врућу листу (глобално подешавање, не користи се показивач на бафер) приоритет: бафер се на врућу листу додаје са овим приоритетом (услови дефинисани у опцији weechat.look.hotlist_add_conditions се НЕ проверавају) "-1": уклања бафер из вруће листе (WeeChat ≥ 1.0).
hotlist_conditions | 4.5.0 | WEECHAT_HOTLIST_LOW, WEECHAT_HOTLIST_MESSAGE, WEECHAT_HOTLIST_PRIVATE, WEECHAT_HOTLIST_HIGHLIGHT | приоритет: бафер се на врућу листу додаје са овим приоритетом (услови дефинисани у опцији weechat.look.hotlist_add_conditions се проверавају).
completion_freeze |  | "0" или "1" | "0": нема замрзавања довршавања (подразумевана вредност) (глобално подешавање, не користи се показивач на бафер) "1": довршавање се не зауставља када се ажурира командна линија (глобално подешавање, не користи се показивач на бафер).
unread |  | празан стринг, "0", "+N", "-N" или "N" (N је цео број) | празан стринг: поставља ознаку непрочитано након последње линије бафера "0": уклања ознаку непрочитано из бафера "N": помера ознаку непрочитано N линија од краја према првој линији бафера "-N": помера ознаку непрочитано N линија према првој линији бафера "+N": помера ознаку непрочитано N линија према последњој линији бафера.
display |  | "1" или "auto" | "1": прелазак на овај бафер у текућем прозору "auto": прелазак на овај бафер у текућем прозору, не ресетује се маркер прочитаних линија.
hidden | 1.0 | "0" или "1" | "0": бафер се открива "1": бафер се скрива.
number |  | број | Помера бафер на наведени број.
name |  | било који стринг | Поставља ново име бафера.
short_name |  | било који стринг | Поставља ново кратко име бафера.
type |  | "formatted" или "free" | Поставља тип бафера: "formatted" (за приказ порука разговора), или "free" (за слободни садржај); када је вредност "free", особина clear се форсира на "0" (WeeChat ≥ 1.0).
notify |  | "0", "1", "2", "3" | Поставља ниво обавештавања за овај бафер: "0" = никада се не додаје на врућу листу, "1" = додаје само за истицања, "2" = додаје за истицања и поруке, "3" = додаје за све поруке.
print_hooks_enabled |  | "0" или "1" | "0" да се искључе print куке, "1" да се укључе (подразумевано за нови бафер).
day_change | 0.4.3 | "0" или "1" | "0" да се скривају поруке о измени дана, "1" да се приказују (подразумевано за нови бафер).
clear | 1.0 | "0" или "1" | "0" да се спречи могућност да корисник очисти бафер командом `/buffer clear`, "1" да се дозволи кориснику да очисти бафер (подразумевано за нови бафер) (напомена: чак и када се постави на "0", бафер још увек може да се очисти функцијом buffer_clear).
filter | 1.0 | "0" или "1" | "0": искључује филтере у баферу "1": укључује филтере у баферу.
title |  | било који стринг | Поставља нови наслов бафера.
modes | 4.3.0 | било који стринг | Поставља нове режиме за бафер.
time_for_each_line |  | "0" или "1" | "0" да се скрива време у свим линијама бафера, "1" да се приказује у свим линијама (подразумевано за нови бафер).
nicklist |  | "0" или "1" | "0" да се листа надимака уклони из бафера, "1" да се у бафер дода листа надимака.
nicklist_case_sensitive |  | "0" или "1" | "0" да листа надимака не прави разлику у величини слова, "1" да листа надимака прави разлику у величини слова.
nicklist_display_groups |  | "0" или "1" | "0" да се сакрију групе у листи надимака, "1" да се приказују групе у листи надимака.
highlight_words |  | "-" или листа речи раздвојених запетама | "-" је специјална вредност која искључује било какво истицање у овом баферу, или листа речи за истицање у баферу раздвојених запетама, на пример: "abc,def,ghi".
highlight_words_add |  | листа речи раздвојених запетама | Лист речи раздвојених запетама које се истичу у овом баферу, ове речи се додају на постојеће речи које се истичу у баферу.
highlight_words_del |  | листа речи раздвојених запетама | Лист речи раздвојених запетама које треба да се уклоне из речи које се истичу у овом баферу.
highlight_disable_regex |  | било који стринг | POSIX проширени регуларни израз за искључивање истицања.
highlight_regex |  | било који стринг | POSIX проширени регуларни израз за истицање.
highlight_tags_restrict |  | листа речи или ознака раздвојених запетама | Ограничава истицање порука у овом баферу само на поруке са наведеним ознакама (граничником „+” је могуће комбиновање више ознака у релацији логичко „и”, на пример: "nick_toto+irc_action").
highlight_tags |  | листа речи или ознака раздвојених запетама | Форсира истицање порука са наведеним ознакама у овом баферу ( (граничником „+” је могуће комбиновање више ознака у релацији логичко „и”, на пример: "nick_toto+irc_action").
hotlist_max_level_nicks |  | листа „надимак:ниво” раздвојена запетама | Листа надимака са максималним нивоом вруће листе раздвојених запетама за овај бафер (ниво може бити: -1: никада у врућој листи, 0: низак, 1: порука, 2: приватна, 3: истицање), на пример: „joe:2,mike:-1,robert:-1” (joe никада неће изазвати истицање у баферу, mike и robert никада неће изменити врућу листу).
hotlist_max_level_nicks_add |  | листа „надимак:ниво” раздвојена запетама | Листа надимака са максималним нивоом вруће листе раздвојених запетама, ови надимци се додају на постојеће надимке у баферу.
hotlist_max_level_nicks_del |  | листа надимака раздвојених запетама | Листа надимака раздвојених запетама који треба да се уклоне из максималних нивоа вруће листе.
key_bind_xxx |  | било који стринг | Прави нову тастерску пречицу xxx, специфичну за овај бафер, вредност је команда која се извршава за тај тастер.
key_unbind_xxx |  | - | Уклања тастерску пречицу xxx за овај бафер.
input_prompt | 4.3.0 | било који стринг | Поставља нову вредност за питање уноса.
input |  | било који стринг | Поставља нову вредност за унос у бафер.
input_pos |  | позиција | Поставља позицију курсора у уносу бафера.
input_get_any_user_data | 4.3.0 | "0" или "1" | "0" да се прихвате само корисничке поруке (подразумевано понашање), "1" да се прихвати све, укључујући и команде.
input_get_unknown_commands |  | "0" или "1" | "0" да се за овај бафер искључе непознате команде (подразумевано понашање), "1" да се прихвате непознате команде, на пример ако корисник откуца „/unknowncmd”, бафер ће то да прихвати (без исписа грешке о непознатој команди).
input_get_empty |  | "0" или "1" | "0" да се искључи празан унос у овај бафер (подразумевано понашање), "1" да се прихвати празан унос.
input_multiline |  | "0" или "1" | "0" да се овом баферу свака линија шаље одвојено (подразумевано понашање), "1" да се више линија пошаље као једна порука.
localvar_set_xxx |  | било који стринг | Поставља нову вредност локалне променљиве xxx (променљива се креира ако не постоји).
localvar_del_xxx |  | - | Уклања локалну променљиву xxx.

C пример:

    /* искључивање вруће листе (за све бафере) */
    weechat_buffer_set (NULL, "hotlist", "-");

    /* поновно укључивање вруће листе */
    weechat_buffer_set (NULL, "hotlist", "+");

    /* промена имена бафера
    weechat_buffer_set (my_buffer, "name", "my_new_name");

    /* додавање нове локалне променљиве „toto” са вредности „abc” */
    weechat_buffer_set (my_buffer, "localvar_set_toto", "abc");

    /* уклањање локалне променљиве „toto” */
    weechat_buffer_set (my_buffer, "localvar_del_toto", "");

Скрипта (Python):

    # прототип
    def buffer_set(buffer: str, property: str, value: str) -> int: ...

    # примери

    # искључује врућу листу (за све бафере)
    weechat.buffer_set("", "hotlist", "-")

    # поново укључује врућу листу
    weechat.buffer_set("", "hotlist", "+")

    # промена имена бафера
    weechat.buffer_set(my_buffer, "name", "my_new_name")

    # додаје нову локалну променљиву „toto” са вредношћу „abc”
    weechat.buffer_set(my_buffer, "localvar_set_toto", "abc")

    # уклања локалну променљиву „toto”
    weechat.buffer_set(my_buffer, "localvar_del_toto", "")

#### buffer_set_pointer

Поставља вредност показивача на особину бафера.

Прототип:

    void weechat_buffer_set_pointer (struct t_gui_buffer *buffer, const char *property,
                                     void *pointer);

Аргументи:

- buffer: показивач на бафер

- property: име особине:

  - close_callback: поставља функцију повратног позива затварања

  - close_callback_data: поставља податке за функцију повратног позива затварања

  - input_callback: поставља функцију повратног позива уноса

  - input_callback_data: поставља податке за функцију повратног позива уноса

  - nickcmp_callback: поставља функцију повратног позива за поређење надимака (ова функција повратног позива се зове када се у листи надимака тражи надимак) (WeeChat ≥ 0.3.9)

  - nickcmp_callback_data: поставља податке за функцију повратног позива за поређење надимака (WeeChat ≥ 0.3.9)

- pointer: нова вредност показивача за особину

Прототипи за функције повратног позива:

    int close_callback (const void *pointer, void *data,
                        struct t_gui_buffer *buffer);

    int input_callback (const void *pointer, void *data,
                        struct t_gui_buffer *buffer, const char *input_data);

    int nickcmp_callback (const void *pointer, void *data,
                          struct t_gui_buffer *buffer,
                          const char *nick1, const char *nick2);

C пример:

    int
    my_close_cb (const void *pointer, void *data, struct t_gui_buffer *buffer)
    {
        /* ... */
        return WEECHAT_RC_OK;
    }

    weechat_buffer_set_pointer (my_buffer, "close_callback", &my_close_cb);

Белешка | Ова функција није доступна у API скриптовања.

#### buffer_string_replace_local_var

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

Прототип:

    char *weechat_buffer_string_replace_local_var (struct t_gui_buffer *buffer,
                                                   const char *string);

Аргументи:

- buffer: показивач на бафер

- string: стринг са текстом и локалним променљивама у формату „$пром”

Повратна вредност:

- стринг са вредностима локалних променљивих

C пример:

    weechat_buffer_set (my_buffer, "localvar_set_toto", "abc");

    char *str = weechat_buffer_string_replace_local_var (my_buffer,
                                                         "тест са $toto");
    /* str садржи „тест са abc” */

Скрипта (Python):

    # прототип
    def buffer_string_replace_local_var(buffer: str, string: str) -> str: ...

    # пример
    weechat.buffer_set(my_buffer, "localvar_set_toto", "abc")
    str = weechat.buffer_string_replace_local_var(my_buffer, "тест са $toto")
    # str садржи „тест са abc”

#### buffer_match_list

WeeChat ≥ 0.3.5, ажурирано у верзији 4.0.0.

Проверава да ли се бафер подудара са листом бафера.

Прототип:

    int weechat_buffer_match_list (struct t_gui_buffer *buffer, const char *string);

Аргументи:

- buffer: показивач на бафер

- string: листа бафера раздвојених запетама:

  - `*` значи сви бафери

  - име које почиње са `!` се не узима у обзир

  - у имену је дозвољен џокер `*`

Белешка | Од верзије 4.0.0, поређење имена бафера прави разлику у величини слова.

Повратна вредност:

- 1 ако се бафер подудара са листом бафера, 0 у супротном

C пример:

    struct t_gui_buffer *buffer = weechat_buffer_search ("irc", "libera.#weechat");
    if (buffer)
    {
        weechat_printf (NULL, "%d", weechat_buffer_match_list (buffer, "*"));                    /* 1 */
        weechat_printf (NULL, "%d", weechat_buffer_match_list (buffer, "*,!*#weechat*"));        /* 0 */
        weechat_printf (NULL, "%d", weechat_buffer_match_list (buffer, "irc.libera.*"));         /* 1 */
        weechat_printf (NULL, "%d", weechat_buffer_match_list (buffer, "irc.oftc.*,python.*"));  /* 0 */
    }

Скрипта (Python):

    # прототип
    def buffer_match_list(buffer: str, string: str) -> int: ...

    # пример
    buffer = weechat.buffer_search("irc", "libera.#weechat")
    if buffer:
        weechat.prnt("", "%d" % weechat.buffer_match_list(buffer, "*"))                    # 1
        weechat.prnt("", "%d" % weechat.buffer_match_list(buffer, "*,!*#weechat*"))        # 0
        weechat.prnt("", "%d" % weechat.buffer_match_list(buffer, "irc.libera.*"))         # 1
        weechat.prnt("", "%d" % weechat.buffer_match_list(buffer, "irc.oftc.*,python.*"))  # 0

### 3.16. Линије бафера

Функције за линије бафера.

#### line_search_by_id

WeeChat ≥ 4.4.0.

Претрага линије у баферу по идентификатору.

Прототип:

    struct t_gui_line *weechat_line_search_by_id (struct t_gui_buffer *buffer, int id);

Повратна вредност:

- показивач на пронађену линију, NULL ако се не пронађе

C пример:

    struct t_gui_line *line = weechat_line_search_by_id (buffer, 123);

Скрипта (Python):

    # прототип
    def line_search_by_id(buffer: str, line_id: int) -> str: ...

    # пример
    line = weechat.line_search_by_id(buffer, 123)

### 3.17. Прозори

Функције за упите о прозорима.

#### current_window

Враћа показивач на текући прозор.

Прототип:

    struct t_gui_window *weechat_current_window ();

Повратна вредност:

- показивач на текући прозор

C пример:

    struct t_gui_window *current_window = weechat_current_window ();

Скрипта (Python):

    # прототип
    def current_window() -> str: ...

    # пример
    current_window = weechat.current_window()

#### window_search_with_buffer

WeeChat ≥ 0.3.5.

Враћа показивач на прозор који приказује бафер.

Прототип:

    struct t_gui_window *weechat_window_search_with_buffer (struct t_gui_buffer *buffer);

Аргументи:

- buffer: показивач на бафер

Повратна вредност:

- показивач на прозор који приказује бафер (NULL ако ниједан прозор не приказује бафер)

C пример:

    weechat_printf (NULL,
                    "прозор који приказује core бафер: %p",
                    weechat_window_search_with_buffer (weechat_buffer_search_main ()));

Скрипта (Python):

    # прототип
    def window_search_with_buffer(buffer: str) -> str: ...

    # пример
    weechat.prnt("", "прозор који приказује core бафер: %s"
        % weechat.window_search_with_buffer(weechat.buffer_search_main()))

#### window_get_integer

Враћа целобројну вредност особине прозора.

Прототип:

    int weechat_window_get_integer (struct t_gui_window *window,
                                    const char *property);

Аргументи:

- window: показивач на прозор

- property: име особине:

  - number: број прозора (почиње од 1)

  - win_x: X позиција прозора у терминалу (прва колона је 0)

  - win_y: Y позиција прозора у терминалу (прва линија је 0)

  - win_width: ширина прозора у карактерима

  - win_height: висина прозора у карактерима

  - win_width_pct: процентуална величина, у односу на родитељски прозор (на пример, 50 значи половина величине)

  - win_height_pct: процентуална величина, у односу на родитељски прозор (на пример, 50 значи половина величине)

  - win_chat_x: X позиција прозора разговора у терминалу (прва колона је 0)

  - win_chat_y: Y позиција прозора разговора у терминалу (прва линија је 0)

  - win_chat_width: ширина прозора за разговор у карактерима

  - win_chat_height: висина прозора за разговор у карактерима

  - first_line_displayed: 1 ако је на екрану приказана прва линија бафера, у супротном 0

  - scrolling: 1 ако је у прозору активно скроловање (не приказује се последња линија)

  - lines_after: број линија које се не приказују након последње приказане (када се скролује)

Повратна вредност:

- целобројна вредност особине

C пример:

    weechat_printf (NULL, "current window is at position (x,y): (%d,%d)",
                    weechat_window_get_integer (weechat_current_window (), "win_x"),
                    weechat_window_get_integer (weechat_current_window (), "win_y"));

Скрипта (Python):

    # прототип
    def window_get_integer(window: str, property: str) -> int: ...

    # пример
    weechat.prnt("", "текући прозор је на позицији (x,y): (%d,%d)"
        % (weechat.window_get_integer(weechat.current_window(), "win_x"),
        weechat.window_get_integer(weechat.current_window(), "win_y")))

#### window_get_string

Враћа стринг вредност особине прозора.

Белешка | Ова функција се сада не користи, резервисана је будућу верзију.

Прототип:

    const char *weechat_window_get_string (struct t_gui_window *window,
                                           const char *property);

Аргументи:

- window: показивач на прозор

- property: име особине

Повратна вредност:

- стринг вредност особине

Скрипта (Python):

    # прототип
    def window_get_string(window: str, property: str) -> str: ...

#### window_get_pointer

Враћа вредност показивача на особину прозора.

Прототип:

    void *weechat_window_get_pointer (struct t_gui_window *window,
                                      const char *property);

Аргументи:

- window: показивач на прозор

- property: име особине:

  - current: показивач на текући прозор

  - buffer: показивач на бафер који се приказује у прозору

Повратна вредност:

- вредност показивача на особину

C пример:

    weechat_printf (NULL,
                    "бафер који се приказује у текућем прозору: %p",
                    weechat_window_get_pointer (weechat_current_window (), "buffer"));

Скрипта (Python):

    # прототип
    def window_get_pointer(window: str, property: str) -> str: ...

    # пример
    weechat.prnt("", "бафер који се приказује у текућем прозору: %s"
        % weechat.window_get_pointer(weechat.current_window(), "buffer"))

#### window_set_title

Поставља наслов за терминал.

Прототип:

    void weechat_window_set_title (const char *title);

Аргументи:

- title: нови наслов за терминал; стринг се израчунава, тако да је могуће коришћење променљивих као што је `${info:version}` (погледајте string_eval_expression)

C пример:

    weechat_window_set_title ("овде иде нови наслов");

Скрипта (Python):

    # прототип
    def window_set_title(title: str) -> int: ...

    # пример
    weechat.window_set_title("овде иде нови наслов")

### 3.18. Листа надимака

Функције за листу надимака бафера.

#### nicklist_add_group

Додаје групу у листу надимака.

Прототип:

    struct t_gui_nick_group *weechat_nicklist_add_group (struct t_gui_buffer *buffer,
                                                         struct t_gui_nick_group *parent_group,
                                                         const char *name,
                                                         const char *color,
                                                         int visible);

Аргументи:

- buffer: показивач на бафер

- parent_group: показивач на родитеља групе, NULL ако група нема родитеља (корен листе надимака)

- name: име групе

- color: име опције боја:

  - Име WeeChat опције, на пример weechat.color.nicklist_group

  - поја са необавезном позадином, на пример yellow или yellow,red

  - име боје траке:

    - bar_fg: боја предњег плана траке

    - bar_delim: боја граничника за траку

    - bar_bg: боја позадине за траку

- visible:

  - 1: групе и подгрупе/надимци су видљиви

  - 0: групе и подгрупе/надимци су скривени

Белешка | Име групе може да почне једном или две цифре, иза којих долази вертикална црта, па име групе. Када се на почетку наиђе на овакав стринг, он се користи за сортирање група у листи надимака. На пример, групе „1|test” и „2|abc” ће се приказати у том редоследу: прво „test”, па „abc”.

Повратна вредност:

- показивач на нову групу, NULL у случају грешке

C пример:

    struct t_gui_nick_group *my_group =
        weechat_nicklist_add_group (my_buffer,
                                    my_parent_group,
                                    "test_group",
                                    "weechat.color.nicklist_group",
                                    1);

Скрипта (Python):

    # прототип
    def nicklist_add_group(buffer: str, parent_group: str, name: str, color: str, visible: int) -> str: ...

    # пример
    group = weechat.nicklist_add_group(my_buffer, my_parent_group, "test_group",
        "weechat.color.nicklist_group", 1)

#### nicklist_search_group

Ажурирано у верзији 4.3.0.

Претражује групу у листи надимака по имену или јединственом идентификатору (`id`).

Прототип:

    struct t_gui_nick_group *weechat_nicklist_search_group (struct t_gui_buffer *buffer,
                                                            struct t_gui_nick_group *from_group,
                                                            const char *name);

Аргументи:

- buffer: показивач на бафер

- from_group: тражи само од ове групе, ако је NULL, онда се претражује цела листа надимака

- name: име групе која се тражи; са WeeChat ≥ 4.3.0, јединствени идентификатор може да се наведе у следећем формату: `==id:xxx` (где је `xxx` идентификатор)

Повратна вредност:

- показивач на пронађену групу, NULL ако се не пронађе

C пример:

    struct t_gui_nick_group *ptr_group1 = weechat_nicklist_search_group (my_buffer,
                                                                         NULL, "test_group");
    struct t_gui_nick_group *ptr_group2 = weechat_nicklist_search_group (my_buffer,
                                                                         NULL, "==id:1714382231198764");

Скрипта (Python):

    # прототип
    def nicklist_search_group(buffer: str, from_group: str, name: str) -> str: ...

    # пример
    group1 = weechat.nicklist_search_group(my_buffer, "", "test_group")
    group2 = weechat.nicklist_search_group(my_buffer, "", "==id:1714382231198764")

#### nicklist_add_nick

Додаје надимак у групу.

Прототип:

    struct t_gui_nick *weechat_nicklist_add_nick (struct t_gui_buffer *buffer,
                                                  struct t_gui_nick_group *group,
                                                  const char *name,
                                                  const char *color,
                                                  const char *prefix,
                                                  const char *prefix_color,
                                                  int visible);

Аргументи:

- buffer: показивач на бафер

- group: показивач на групу

- name: име надимка

- color: име опције боја:

  - Име WeeChat опције (из weechat.color.xxx), на пример chat_delimiters

  - поја са необавезном позадином, на пример yellow или yellow,red

  - име боје траке:

    - bar_fg: боја предњег плана траке

    - bar_delim: боја граничника за траку

    - bar_bg: боја позадине за траку

- prefix: префикс који се приказује испред надимка

- prefix_color: име опције боја:

  - Име WeeChat опције (из weechat.color.xxx), на пример chat_delimiters

  - поја са необавезном позадином, на пример yellow или yellow,red

  - име боје траке:

    - bar_fg: боја предњег плана траке

    - bar_delim: боја граничника за траку

    - bar_bg: боја позадине за траку

- visible:

  - 1: надимак је видљив

  - 0: надимак је скривен

Повратна вредност:

- показивач на нови надимак, NULL у случају грешке

C пример:

    struct t_gui_nick *my_nick =
        weechat_nicklist_add_nick (my_buffer, my_group,
                                   "test_nick",
                                   (nick_away) ? "weechat.color.nicklist_away" : "bar_fg",
                                   "@", "lightgreen",
                                   1);

Скрипта (Python):

    # прототип
    def nicklist_add_nick(buffer: str, group: str, name: str, color: str, prefix: str, prefix_color: str, visible: int) -> str: ...

    # пример
    if nick_away:
        color = "weechat.color.nicklist_away"
    else:
        color = "bar_fg"
    nick = weechat.nicklist_add_nick(my_buffer, my_group, "test_nick", color, "@", "lightgreen", 1)

#### nicklist_search_nick

Ажурирано у верзији 4.3.0.

Претражује надимак у листи надимака по имену или јединственом идентификатору (`id`).

Прототип:

    struct t_gui_nick *weechat_nicklist_search_nick (struct t_gui_buffer *buffer,
                                                     struct t_gui_nick_group *from_group,
                                                     const char *name);

Аргументи:

- buffer: показивач на бафер

- from_group: тражи само од ове групе, ако је NULL, онда се претражује цела листа надимака

- name: име надимка који се тражи; са WeeChat ≥ 4.3.0, јединствени идентификатор може да се наведе у следећем формату: `==id:xxx` (где је `xxx` идентификатор)

Повратна вредност:

- показивач на пронађени надимак, NULL ако се не пронађе

C пример:

    struct t_gui_nick *ptr_nick1 = weechat_nicklist_search_nick (my_buffer,
                                                                 NULL, "test_nick");
    struct t_gui_nick *ptr_nick2 = weechat_nicklist_search_nick (my_buffer,
                                                                 NULL, "==id:1714382252187496");

Скрипта (Python):

    # прототип
    def nicklist_search_nick(buffer: str, from_group: str, name: str) -> str: ...

    # пример
    nick1 = weechat.nicklist_search_nick(my_buffer, "", "test_nick")
    nick2 = weechat.nicklist_search_nick(my_buffer, "", "==id:1714382252187496")

#### nicklist_remove_group

Уклања групу из листе надимака.

Прототип:

    void weechat_nicklist_remove_group (struct t_gui_buffer *buffer,
                                        struct t_gui_nick_group *group);

Аргументи:

- buffer: показивач на бафер

- group: показивач на групу која треба да се уклони (уклониће се и све подгрупе/надимци)

C пример:

    weechat_nicklist_remove_group (my_buffer, my_group);

Скрипта (Python):

    # прототип
    def nicklist_remove_group(buffer: str, group: str) -> int: ...

    # пример
    weechat.nicklist_remove_group(my_buffer, my_group)

#### nicklist_remove_nick

Уклања надимак из листе надимака.

Прототип:

    void weechat_nicklist_remove_nick (struct t_gui_buffer *buffer,
                                       struct t_gui_nick *nick);

Аргументи:

- buffer: показивач на бафер

- nick: показивач на надимак који треба да се уклони

C пример:

    weechat_nicklist_remove_nick (my_buffer, my_nick);

Скрипта (Python):

    # прототип
    def nicklist_remove_nick(buffer: str, nick: str) -> int: ...

    # пример
    weechat.nicklist_remove_nick(my_buffer, my_nick)

#### nicklist_remove_all

Уклања све групе/надимке из листе надимака.

Прототип:

    void weechat_nicklist_remove_all (struct t_gui_buffer *buffer);

Аргументи:

- buffer: показивач на бафер

C пример:

    weechat_nicklist_remove_all (my_buffer);

Скрипта (Python):

    # прототип
    def nicklist_remove_all(buffer: str) -> int: ...

    # пример
    weechat.nicklist_remove_all(my_buffer)

#### nicklist_get_next_item

WeeChat ≥ 0.3.7.

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

Прототип:

    void weechat_nicklist_get_next_item (struct t_gui_buffer *buffer,
                                         struct t_gui_nick_group **group,
                                         struct t_gui_nick **nick);

Аргументи:

- buffer: показивач на бафер

- group: показивач на показивач групе

- nick: показивач на показивач надимка

C пример:

    struct t_gui_nick_group *ptr_group;
    struct t_gui_nick *ptr_nick;

    ptr_group = NULL;
    ptr_nick = NULL;
    weechat_nicklist_get_next_item (buffer, &ptr_group, &ptr_nick);
    while (ptr_group || ptr_nick)
    {
        if (ptr_nick)
        {
            /* надимак */
            /* ... */
        }
        else
        {
            /* група */
            /* ... */
        }
        weechat_nicklist_get_next_item (buffer, &ptr_group, &ptr_nick);
    }

Белешка | Ова функција није доступна у API скриптовања.

#### nicklist_group_get_integer

WeeChat ≥ 0.3.4.

Враћа целобројну вредност особине групе.

Прототип:

    int weechat_nicklist_group_get_integer (struct t_gui_buffer *buffer,
                                            struct t_gui_nick_group *group,
                                            const char *property);

Аргументи:

- buffer: показивач на бафер

- group: показивач на групу

- property: име особине:

  - visible: 1 ако је група видљива, у супротном 0

  - level: ниво групе (корен је 0)

Повратна вредност:

- целобројна вредност особине

C пример:

    int visible = weechat_nicklist_group_get_integer (buffer, group, "visible");

Скрипта (Python):

    # прототип
    def nicklist_group_get_integer(buffer: str, group: str, property: str) -> int: ...

    # пример
    visible = weechat.nicklist_group_get_integer(buffer, group, "visible")

#### nicklist_group_get_string

WeeChat ≥ 0.3.4.

Враћа стринг вредност особине групе.

Прототип:

    const char *weechat_nicklist_group_get_string (struct t_gui_buffer *buffer,
                                                   struct t_gui_nick_group *group,
                                                   const char *property);

Аргументи:

- buffer: показивач на бафер

- group: показивач на групу

- property: име особине:

  - id: јединствени идентификатор (WeeChat ≥ 4.3.0)

  - name: име групе

  - color: боја групе у листи надимака

Повратна вредност:

- стринг вредност особине

C пример:

    const char *color = weechat_nicklist_group_get_string (buffer, group, "color");

Скрипта (Python):

    # прототип
    def nicklist_group_get_string(buffer: str, group: str, property: str) -> str: ...

    # пример
    color = weechat.nicklist_group_get_string(buffer, group, "color")

#### nicklist_group_get_pointer

WeeChat ≥ 0.3.4.

Враћа вредност показивача на особину групе.

Прототип:

    void *weechat_nicklist_group_get_pointer (struct t_gui_buffer *buffer,
                                              struct t_gui_nick_group *group,
                                              const char *property);

Аргументи:

- buffer: показивач на бафер

- group: показивач на групу

- property: име особине:

  - parent: показивач на родитељску групу

Повратна вредност:

- вредност показивача на особину

C пример:

    struct t_gui_nick_group *parent = weechat_nicklist_group_get_pointer (buffer, group, "parent");

Скрипта (Python):

    # прототип
    def nicklist_group_get_pointer(buffer: str, group: str, property: str) -> str: ...

    # пример
    parent = weechat.nicklist_group_get_pointer(buffer, group, "parent")

#### nicklist_group_set

WeeChat ≥ 0.3.4, ажурирано у верзији 4.3.0.

Поставља стринг вредност особине групе.

Прототип:

    void weechat_nicklist_group_set (struct t_gui_buffer *buffer,
                                     struct t_gui_nick_group *group,
                                     const char *property,
                                     const char *value);

Аргументи:

- buffer: показивач на бафер

- group: показивач на групу

- property: име особине (погледајте табелу испод)

- value: нова вредност за особину

Особине:

Име | Мин WeeChat | Вредност | Опис
--- | --- | --- | ---
id | 4.3.0 | long long integer ≥ 0 | Нови id за групу (мора да биде јединствен за бафер). Напомена: не препоручује се да мењате овај идентификатор.
color |  | Име опције WeeChat боје | Погледајте аргумент „color” функције nicklist_add_group.
visible |  | "0", "1" | "0" = скривена група, "1" = видљива група.

C примери:

    /* мења боју групе на "bar_fg" */
    weechat_nicklist_group_set (buffer, group, "color", "bar_fg");

    /* мења боју групе на жуту */
    weechat_nicklist_group_set (buffer, group, "color", "yellow");

    /* скрива групу у листи надимака */
    weechat_nicklist_group_set (buffer, group, "visible", "0");

Скрипта (Python):

    # прототип
    def nicklist_group_set(buffer: str, group: str, property: str, value: str) -> int: ...

    # примери

    # мења боју групе на "bar_fg"
    weechat.nicklist_group_set(buffer, group, "color", "bar_fg")

    # мења боју групе на жуту
    weechat.nicklist_group_set(buffer, group, "color", "yellow")

    # скрива групу у листи надимака
    weechat.nicklist_group_set(buffer, group, "visible", "0")

#### nicklist_nick_get_integer

WeeChat ≥ 0.3.4.

Враћа целобројну вредност особине надимка.

Прототип:

    int weechat_nicklist_nick_get_integer (struct t_gui_buffer *buffer,
                                           struct t_gui_nick *nick,
                                           const char *property);

Аргументи:

- buffer: показивач на бафер

- nick: показивач на надимак

- property: име особине:

  - visible: 1 ако је надимак видљив, у супротном 0

Повратна вредност:

- целобројна вредност особине

C пример:

    int visible = weechat_nicklist_nick_get_integer (buffer, nick, "visible");

Скрипта (Python):

    # прототип
    def nicklist_nick_get_integer(buffer: str, nick: str, property: str) -> int: ...

    # пример
    visible = weechat.nicklist_nick_get_integer(buffer, nick, "visible")

#### nicklist_nick_get_string

WeeChat ≥ 0.3.4.

Враћа стринг вредност особине надимка.

Прототип:

    const char *weechat_nicklist_nick_get_string (struct t_gui_buffer *buffer,
                                                  struct t_gui_nick *nick,
                                                  const char *property);

Аргументи:

- buffer: показивач на бафер

- nick: показивач на надимак

- property: име особине:

  - id: јединствени идентификатор (WeeChat ≥ 4.3.0)

  - name: име надимка

  - color: боја надимка у листи надимака

  - prefix: префикс надимка

  - prefix_color: боја префикса у листи надимака

Повратна вредност:

- стринг вредност особине

C пример:

    const char *color = weechat_nicklist_nick_get_string (buffer, nick, "color");

Скрипта (Python):

    # прототип
    def nicklist_nick_get_string(buffer: str, nick: str, property: str) -> str: ...

    # пример
    color = weechat.nicklist_nick_get_string(buffer, nick, "color")

#### nicklist_nick_get_pointer

WeeChat ≥ 0.3.4.

Враћа вредност показивача на особину надимка.

Прототип:

    void *weechat_nicklist_nick_get_pointer (struct t_gui_buffer *buffer,
                                             struct t_gui_nick *nick,
                                             const char *property);

Аргументи:

- buffer: показивач на бафер

- nick: показивач на надимак

- property: име особине:

  - group: показивач на групу у којој се налази овај надимак

Повратна вредност:

- вредност показивача на особину

C пример:

    struct t_gui_nick_group *group = weechat_nicklist_nick_get_pointer (buffer, nick, "group");

Скрипта (Python):

    # прототип
    def nicklist_nick_get_pointer(buffer: str, nick: str, property: str) -> str: ...

    # пример
    group = weechat.nicklist_nick_get_pointer(buffer, nick, "group")

#### nicklist_nick_set

WeeChat ≥ 0.3.4, ажурирано у верзији 4.3.0.

Поставља стринг вредност особине надимка.

Прототип:

    void weechat_nicklist_nick_set (struct t_gui_buffer *buffer,
                                    struct t_gui_nick *nick,
                                    const char *property,
                                    const char *value);

Аргументи:

- buffer: показивач на бафер

- nick: показивач на надимак

- property: име особине (погледајте табелу испод)

- value: нова вредност за особину

Особине:

Име | Мин WeeChat | Вредност | Опис
--- | --- | --- | ---
id | 4.3.0 | long long integer ≥ 0 | Нови id за надимак (мора да буде јединствен за бафер). Напомена: не препоручује се да мењате овај идентификатор.
color |  | име опције WeeChat боје | Погледајте аргумент „color” функције nicklist_add_nick.
prefix |  | било који стринг | Префикс надимка.
prefix_color |  | име опције WeeChat боје | Погледајте аргумент „prefix_color” функције nicklist_add_nick.
visible |  | "0", "1" | "0" = скривени надимак, "1" = видљиви надимак.

C примери:

    /* мења боју надимка у цијан */
    weechat_nicklist_nick_set (buffer, nick, "color", "cyan");

    /* мења префикс на „+” */
    weechat_nicklist_nick_set (buffer, nick, "prefix", "+");

    /* мења боју префикса у жуту */
    weechat_nicklist_nick_set (buffer, nick, "prefix_color", "yellow");

    /* скрива надимак у листи надимака */
    weechat_nicklist_nick_set (buffer, nick, "visible", "0");

Скрипта (Python):

    # прототип
    def nicklist_nick_set(buffer: str, nick: str, property: str, value: str) -> int: ...

    # примери

    # мења боју надимка у цијан
    weechat.nicklist_nick_set(buffer, nick, "color", "cyan")

    # мења префикс у „+”
    weechat.nicklist_nick_set(buffer, nick, "prefix", "+")

    # мења боју префикса у жуту
    weechat.nicklist_nick_set(buffer, nick, "prefix_color", "yellow")

    # скрива надимак у листи надимака
    weechat.nicklist_nick_set(buffer, nick, "visible", "0")

### 3.19. Траке

Функције за траке.

#### bar_item_search

Тражи ставку траке.

Прототип:

    struct t_gui_bar_item *weechat_bar_item_search (const char *name);

Аргументи:

- name: име ставке траке

Повратна вредност:

- показивач на пронађену ставку траке, NULL ако се ставка траке не пронађе

C пример:

    struct t_gui_bar_item *bar_item = weechat_bar_item_search ("myitem");

Скрипта (Python):

    # прототип
    def bar_item_search(name: str) -> str: ...

    # пример
    bar_item = weechat.bar_item_search("myitem")

#### bar_item_new

Ажурирано у верзијама 0.4.2, 1.5.

Креира нову ставку траке.

Прототип:

    struct t_gui_bar_item *weechat_bar_item_new (const char *name,
                                                 char *(*build_callback)(const void *pointer,
                                                                         void *data,
                                                                         struct t_gui_bar_item *item,
                                                                         struct t_gui_window *window,
                                                                         struct t_gui_buffer *buffer,
                                                                         struct t_hashtable *extra_info),
                                                 const void *build_callback_pointer,
                                                 void *build_callback_data);

Аргументи:

- name: име ставке траке

- build_callback: функција која се позива када се изгради нова ставка траке, аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_gui_bar_item *item: показивач на ставку

  - struct t_gui_window *window: показивач на прозор (NULL када се позове за корену траку)

  - struct t_gui_buffer *buffer: бафер који се приказује у прозору (ако је прозор NULL, онда је то текући бафер) или бафер наведен у ставки траке према синтакси: „@бафер:ставка” (WeeChat ≥ 0.4.2)

  - struct t_hashtable *extra_info: увек је NULL (аргумент је резервисан за будуће верзије) (WeeChat ≥ 0.4.2)

  - повратна вредност: садржај ставке траке

- build_callback_pointer: показивач који се прослеђује функцији повратног позива изградње, када је позове програм WeeChat

- build_callback_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако није NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се уклони ставка траке

Повратна вредност:

- показивач на нову ставку траке, NULL ако је дошло до грешке

C пример:

    char *
    my_build_callback (const void *pointer, void *data,
                       struct t_gui_bar_item *item,
                       struct t_gui_window *window,
                       struct t_gui_buffer *buffer,
                       struct t_hashtable *extra_info)
    {
        return strdup ("my content");
    }

    struct t_gui_bar_item *my_item = weechat_bar_item_new ("myitem",
                                                           &my_build_callback,
                                                           NULL, NULL);

Скрипта (Python):

Важно | Из разлога компатибилности за верзијама ≤ 0.4.1, подразумевана функција повратног позива има само 3 аргумента: data, item и window (нема buffer и extra_info). Ако желите да користите функцију повратног позива са свим аргументима, морате додати „(extra)” испред имена, погледајте пример испод (подржано је само у WeeChat ≥ 0.4.2).

    # прототип
    def bar_item_new(name: str, build_callback: str, build_callback_data: str) -> str: ...

    # пример (функција повратног позива без „buffer” и „extra_info”)
    def my_build_callback(data: str, item: str, window: str) -> str:
        return "my content"

    bar_item = weechat.bar_item_new("myitem", "my_build_callback", "")

    # пример (функција повратног позива са свим аргументима, за WeeChat ≥ 0.4.2)
    def my_build_callback2(data: str, item: str, window: str, buffer: str, extra_info: Dict[str, str]) -> str:
        return "my content"

    bar_item2 = weechat.bar_item_new("(extra)myitem2", "my_build_callback2", "")  # WeeChat ≥ 0.4.2

#### bar_item_update

Ажурира садржај ставке траке, позивањем њене функције повратног позива изградње.

Прототип:

    void weechat_bar_item_update (const char *name);

Аргументи:

- name: име ставке траке

C пример:

    weechat_bar_item_update ("myitem");

Скрипта (Python):

    # прототип
    def bar_item_update(name: str) -> int: ...

    # пример
    weechat.bar_item_update("myitem")

#### bar_item_remove

Уклања ставку траке.

Прототип:

    void weechat_bar_item_remove (struct t_gui_bar_item *item);

Аргументи:

- item: показивач на ставку траке

C пример:

    weechat_bar_item_remove (&my_item);

Скрипта (Python):

    # прототип
    def bar_item_remove(item: str) -> int: ...

    # пример
    weechat.bar_item_remove(myitem)

#### bar_search

Тражи траку.

Прототип:

    struct t_gui_bar *weechat_bar_search (const char *name);

Аргументи:

- name: име траке

Повратна вредност:

- показивач на пронађену траку, NULL ако се трака не пронађе

C пример:

    struct t_gui_bar *bar = weechat_bar_search ("mybar");

Скрипта (Python):

    # прототип
    def bar_search(name: str) -> str: ...

    # пример
    bar = weechat.bar_search("mybar")

#### bar_new

Ажурирано у верзији 2.9, 4.0.0.

Креира нову траку.

Прототип:

    struct t_gui_bar *weechat_bar_new (const char *name,
                                       const char *hidden,
                                       const char *priority,
                                       const char *type,
                                       const char *condition,
                                       const char *position,
                                       const char *filling_top_bottom,
                                       const char *filling_left_right,
                                       const char *size,
                                       const char *size_max,
                                       const char *color_fg,
                                       const char *color_delim,
                                       const char *color_bg,
                                       const char *color_bg_inactive,
                                       const char *separator,
                                       const char *items);

Аргументи:

- name: име траке

- hidden:

  - on: трака је скривена

  - off: трака је видљива

- priority: приоритет траке (цео број)

- type:

  - root: трака је приказана једном, ван прозора

  - window: трака се приказује у сваком прозору

- condition: услов за приказивање траке:

  - active: трака се приказује само у активном прозору

  - inactive: трака се приказује само у неактивним прозорима

  - nicklist: трака се приказује у прозорима са листом надимака

  - израчунати услови: погледајте WeeChat Корисничко упутство / Услови трака ↗.

- position: top, bottom, left или right

- filling_top_bottom:

  - horizontal: ставке се попуњавају хоризонтално (размак након сваке ставке)

  - vertical: ставке се попуњавају вертикално (прелом линије након сваке ставке)

  - columns_horizontal: ставке се попуњавају хоризонтално, приказане по колонама

  - columns_vertical: ставке се попуњавају вертикално, приказане по колонама

- filling_left_right:

  - horizontal: ставке се попуњавају хоризонтално (размак након сваке ставке)

  - vertical: ставке се попуњавају вертикално (прелом линије након сваке ставке)

  - columns_horizontal: ставке се попуњавају хоризонтално, приказане по колонама

  - columns_vertical: ставке се попуњавају вертикално, приказане по колонама

- size: величина траке у карактерима (0 значи аутоматска величина)

- size_max: максимална величина траке (0 значи без ограничења)

- color_fg: боја текста у траци

- color_delim: боја граничника у траци

- color_bg: боја позадине траке

- color_bg_inactive: боја позадине за траку прозора која се не приказује у активном прозору

- separator:

  - on: трака има граничну линију са осталим прозорима/тракама

  - off: нема граничника

- items: листа ставки у траци раздвојених запетама (за размак између ставки), или са „+” (за спојене ставке)

Повратна вредност:

- показивач на нову траку, NULL у случају грешке

Белешка | Почевши од верзије 4.0.0, ако трака већ постоји, WeeChat примљене вредности као подразумеване вредности опција траке и уместо NULL враћа показивач на траку.

C пример:

    struct t_gui_bar *my_bar = weechat_bar_new (
        "mybar", "off", "100", "window", "", "top", "horizontal", "vertical",
        "0", "5", "default", "cyan", "blue", "darkgray", "off",
        "time,buffer_number+buffer_name");

Скрипта (Python):

    # прототип
    def bar_new(name: str, hidden: str, priority: str, type: str, condition: str, position: str,
                filling_top_bottom: str, filling_left_right: str, size: str, size_max: str,
                color_fg: str, color_delim: str, color_bg: str, color_bg_inactive: str,
                separator: str, items: str) -> str: ...

    # пример
    bar = weechat.bar_new("mybar", "off", "100", "window", "", "top", "horizontal", "vertical",
        "0", "5", "default", "cyan", "blue", "darkgray", "off", "time,buffer_number+buffer_name")

Белешка | У програму WeeChat верзије ≥ 2.9, у језику Ruby, 4 боје (color_fg, color_delim, color_bg, color_bg_inactive) морају да се наведу у низу од 4 стринга (услед ограничења језика Ruby од 15 аргумената по функцији), за више информација погледајте WeeChat водич за скриптовање ↗.

#### bar_set

Поставља нову вредност особине траке.

Прототип:

    int weechat_bar_set (struct t_gui_bar *bar, const char *property,
                         const char *value);

Аргументи:

- bar: показивач на траку

- property: name, hidden, priority, conditions, position, filling_top_bottom, filling_left_right, size, size_max, color_fg, color_delim, color_bg, separator, items (погледајте bar_new)

- value: нова вредност за особину

Повратна вредност:

- 1 ако је нова вредност постављена, 0 у случају грешке

C пример:

    weechat_bar_set (mybar, "position", "bottom");

Скрипта (Python):

    # прототип
    def bar_set(bar: str, property: str, value: str) -> int: ...

    # пример
    weechat.bar_set(my_bar, "position", "bottom")

#### bar_update

Освежава садржај траке на екрану.

Прототип:

    void weechat_bar_update (const char *name);

Аргументи:

- name: име траке

C пример:

    weechat_bar_update ("mybar");

Скрипта (Python):

    # прототип
    def bar_update(name: str) -> int: ...

    # пример
    weechat.bar_update("mybar")

#### bar_remove

Уклања траку.

Прототип:

    void weechat_bar_remove (struct t_gui_bar *bar);

Аргументи:

- bar: показивач на траку

C пример:

    weechat_bar_remove (mybar);

Скрипта (Python):

    # прототип
    def bar_remove(bar: str) -> int: ...

    # пример
    weechat.bar_remove(my_bar)

### 3.20. Команде

Функције за извршавање WeeChat команди.

#### command

Ажурирано у верзији 1.1, ажурирано у верзији 4.0.0.

Извршава команду или шаље текст у бафер.

Прототип:

    int weechat_command (struct t_gui_buffer *buffer, const char *command);

Аргументи:

- buffer: показивач на бафер (команда се извршава у овом баферу, употребите NULL за текући бафер)

- command: команда која се извршава (ако почиње са „/”), или текст који се шаље у бафер

Белешка | За бафер којем је `input_multiline` постављено на `0` (подразумевано), извршава се само прва команда (пре првог карактера прелома реда: `\n`).

Повратна вредност (WeeChat ≥ 1.1):

- WEECHAT_RC_OK ако је успешно

- WEECHAT_RC_ERROR ако је дошло до грешке

C пример:

    int rc;
    rc = weechat_command (weechat_buffer_search ("irc", "libera.#weechat"),
                          "/whois FlashCode");

Скрипта (Python):

    # прототип
    def command(buffer: str, command: str) -> int: ...

    # пример
    rc = weechat.command(weechat.buffer_search("irc", "libera.#weechat"), "/whois FlashCode")

#### command_options

WeeChat ≥ 2.5, ажурирано у верзији 4.0.0, 4.5.0.

Извршава команду или шаље текст у бафер са опцијама.

Прототип:

    int weechat_command_options (struct t_gui_buffer *buffer, const char *command,
                                 struct t_hashtable *options);

Аргументи:

- buffer: показивач на бафер (команда се извршава у овом баферу, употребите NULL за текући бафер)

- command: команда која се извршава (ако почиње са `/` или командним карактером), или текст који се шаље у бафер

- options: хеш табела са неким опцијама (кључеви и вредности морају бити стринг) (може да буде NULL):

  - commands: листа команди које смеју да се изврше током овог позива раздвојене запетама (за формат, погледајте функцију string_match_list); специјална вредност `-` (цртица-минус) искључује извршавање команди и стрингу command се шаље у бафер онакав какав је (WeeChat ≥ 4.5.0)

  - delay: пауза за извршавање команде, у милисекундама

  - split_newline: `1` да се команде поделе на карактеру прелома линије (`\n`) (WeeChat ≥ 4.0.0)

Повратна вредност:

- WEECHAT_RC_OK ако је успешно

- WEECHAT_RC_ERROR ако је дошло до грешке

C пример:

    /* дозвољава се било која команда одим /exec, команда се извршава у року од 2 секунде */
    int rc;
    struct t_hashtable *options = weechat_hashtable_new (8,
                                                         WEECHAT_HASHTABLE_STRING,
                                                         WEECHAT_HASHTABLE_STRING,
                                                         NULL,
                                                         NULL);
    weechat_hashtable_set (options, "commands", "*,!exec");
    weechat_hashtable_set (options, "delay", "2000");
    rc = weechat_command_options (NULL, "/some_command arguments", options);

Скрипта (Python):

    # прототип
    def command_options(buffer: str, command: str, options: Dict[str, str]) -> int: ...

    # пример: дозвољава се било која команда осим /exec
    rc = weechat.command_options("", "/some_command arguments", {"commands": "*,!exec", "delay": "2000"})

### 3.21. Довршавање

Функције за довршавање командне линије.

#### completion_new

WeeChat ≥ 2.9.

Креира ново довршавање.

Прототип:

    struct t_gui_completion *weechat_completion_new (struct t_gui_buffer *buffer);

Аргументи:

- buffer: показивач на бафер

Повратна вредност:

- показивач на ново довршавање

C пример:

    struct t_gui_completion *completion = weechat_completion_new (weechat_buffer_search_main ());

Скрипта (Python):

    # прототип
    def completion_new(buffer: str) -> str: ...

    # пример
    completion = weechat.completion_new(weechat.buffer_search_main())

#### completion_search

WeeChat ≥ 2.9.

Тражи могуће речи на датој позицији у стрингу, у контексту довршавања.

Прототип:

    int weechat_completion_search (struct t_gui_completion *completion, const char *data,
                                   int position, int direction);

Аргументи:

- completion: показивач на довршавање

- data: стринг који треба да се доврши

- position: индекс карактера у стрингу за довршавање (почиње од 0)

- direction: 1 за наредно довршавање, -1 за претходно довршавање

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    struct t_gui_completion *completion = weechat_completion_new (weechat_buffer_search_main ());
    if (weechat_completion_search (completion, "/help filt", 10, 1))
    {
        /* ... */
    }

Скрипта (Python):

    # прототип
    def completion_search(completion: str, data: str, position: int, direction: int) -> int: ...

    # пример
    completion = weechat.completion_new(weechat.buffer_search_main())
    if weechat.completion_search(completion, "/help filt", 10, 1):
        # ...

#### completion_get_string

WeeChat ≥ 2.9.

Враћа особину довршавања као стринг.

Прототип:

    const char *weechat_completion_get_string (struct t_gui_completion *completion,
                                               const char *property);

Аргументи:

- completion: показивач на довршавање

- property: име особине:

  - base_command: команда која се користи за довршавање

  - base_word: реч која се довршава

  - args: аргументи команде (укључујући и базну реч)

C пример:

    int
    my_completion_cb (const void *pointer, void *data, const char *completion_item,
                      struct t_gui_buffer *buffer,
                      struct t_gui_completion *completion)
    {
        /* добијање аргумената команде */
        const char *args = weechat_completion_get_string (completion, "args");

        /* довршавање које зависи од args */
        /* ... */

        return WEECHAT_RC_OK;
    }

Скрипта (Python):

    # прототип
    def completion_get_string(completion: str, property: str) -> str: ...

    # пример
    def my_completion_cb(data: str, completion_item: str, buffer: str, completion: str) -> int:
        # добавља аргументе команде
        args = weechat.completion_get_string(completion, "args")
        # довршавање у зависности од args
        # ...
        return weechat.WEECHAT_RC_OK

#### completion_set

WeeChat ≥ 4.6.0.

Поставља особину довршавања.

Прототип:

    void weechat_completion_get_string (struct t_gui_completion *completion,
                                        const char *property,
                                        const char *value);

Аргументи:

- completion: показивач на довршавање

- property: име особине (погледајте табелу испод)

- value: нова вредност за особину

Особине:

Име | Мин WeeChat | Вредност | Опис
--- | --- | --- | ---
add_space | 4.6.0 | "0" или "1" | "0": након довршавања се не додаје размак "1": након довршавања се додаје размак (подразумевано).

C пример:

    int
    my_completion_cb (const void *pointer, void *data, const char *completion_item,
                      struct t_gui_buffer *buffer,
                      struct t_gui_completion *completion)
    {
        /* не додај размак након довршавања */
        weechat_completion_set (completion, "add_space", "0");

        /* ... */

        return WEECHAT_RC_OK;
    }

Скрипта (Python):

    # прототип
    def completion_set(completion: str, property: str, value: str) -> int: ...

    # пример
    def my_completion_cb(data: str, completion_item: str, buffer: str, completion: str) -> int:
        # не додај размак након довршавања
        weechat.completion_set(completion, "add_space", "0")
        # ...
        return weechat.WEECHAT_RC_OK

#### completion_list_add

WeeChat ≥ 2.9.

Додаје реч за довршавање.

Прототип:

    void weechat_completion_list_add (struct t_gui_completion *completion,
                                      const char *word,
                                      int nick_completion,
                                      const char *where);

Аргументи:

- completion: показивач на довршавање

- word: реч која се додаје

- nick_completion: 1 ако је реч надимак, у супротном 0

- where: позиција у листи на коју ће се уметнути реч:

  - WEECHAT_LIST_POS_SORT: било која позиција, да листа остане сортирана

  - WEECHAT_LIST_POS_BEGINNING: почетак листе

  - WEECHAT_LIST_POS_END: крај листе

C пример: погледајте hook_completion.

Скрипта (Python):

    # прототип
    def completion_list_add(completion: str, word: str, nick_completion: int, where: str) -> int: ...

    # пример: погледајте функцију hook_completion

#### completion_free

WeeChat ≥ 2.9.

Ослобађа меморију коју користи довршавање.

Прототип:

    void weechat_completion_free (struct t_gui_completion *completion);

Аргументи:

- completion: показивач на довршавање

C пример:

    weechat_completion_free (completion);

Скрипта (Python):

    # прототип
    def completion_free(completion: str) -> int: ...

    # пример
    weechat.completion_free(completion)

### 3.22. Мрежа

Мрежне функције.

#### network_pass_proxy

Успоставља везу/аутентификацију са проксијем.

Важно | Ова функција је блокирајућа на позиву функције connect(), тако да једино сме да се позове из рачваног процеса па да не блокира програм WeeChat.

Прототип:

    int weechat_network_pass_proxy (const char *proxy,
                                    int sock,
                                    const char *address,
                                    int port);

Аргументи:

- proxy: име проксија који треба да се користи

- sock: сокет који треба да се користи

- address: адреса (име хоста или IP адреса)

- port: порт

Повратна вредност:

- 1 ако је веза OK, 0 у случају да је дошло до грешке

C пример:

    if (weechat_network_pass_proxy ("my_proxy", sock, "irc.libera.chat", 6667))
    {
        /* OK */
    }
    else
    {
        /* грешка */
    }

Белешка | Ова функција није доступна у API скриптовања.

#### network_connect_to

Ажурирано у верзији 0.4.3.

Успоставља везу са удаљеним хостом.

Важно | Ова функција је блокирајућа на позиву функције connect(), тако да једино сме да се позове из рачваног процеса па да не блокира програм WeeChat.

Прототип:

    int weechat_network_connect_to (const char *proxy,
                                    struct sockaddr *address,
                                    socklen_t address_length);

Аргументи:

- proxy: име проксија који треба да се користи

- address: адреса са којом се повезује (са портом)

- address_length: дужина аргумента address

Повратна вредност:

- број сокета (≥ 0) ако је веза OK, -1 у случају да је дошло до грешке

C пример:

    struct sockaddr *addr;
    socklen_t length;
    int sock;

    /* алоцирање/постављање адресе и порта у _addr_, постављање _length_ */
    /* ... */

    sock = weechat_network_connect_to (NULL, addr, length);
    if (sock >= 0)
    {
        /* OK */
    }
    else
    {
        /* грешка */
    }

Белешка | Ова функција није доступна у API скриптовања.

### 3.23. Информације

Функције које враћају информације.

#### info_get

Ажурирано у верзији 2.5.

Враћа инфо као стринг, из програма WeeChat или из додатка.

Прототип:

    char *weechat_info_get (const char *info_name, const char *arguments);

Аргументи:

- info_name: име инфо који желите да прочитате (погледајте табелу испод)

- arguments: аргументи тражене инфо (није обавезно, NULL у случају да није потребан аргумент)

Повратна вредност:

- стринг са траженом инфо, NULL у случају да је дошло до грешке (након употребе мора да се ослободи позивом „free”)

Белешка | У програму WeeChat ≥ 2.5, враћена вредност је алоцирани стринг (у WeeChat ≤ 2.4, то је био показивач на статички стринг).

Информације:

Plugin | Name | Description | Arguments
--- | --- | --- | ---
fifo | fifo_filename | name of FIFO pipe | -
guile | guile_eval | evaluation of source code | source code to execute
guile | guile_interpreter | name of the interpreter used | -
guile | guile_version | version of the interpreter used | -
irc | irc_buffer | get buffer pointer for an IRC server/channel/nick | server,channel,nick (channel and nicks are optional)
irc | irc_is_channel | 1 if string is a valid IRC channel name for server | server,channel (server is optional)
irc | irc_is_message_ignored | 1 if the nick is ignored (message is not displayed) | server,message (message is the raw IRC message)
irc | irc_is_nick | 1 if string is a valid IRC nick name | server,nickname (server is optional)
irc | irc_nick | get current nick on a server | server name
irc | irc_nick_color | get nick color code (deprecated since version 1.5, replaced by "nick_color") | nickname
irc | irc_nick_color_name | get nick color name (deprecated since version 1.5, replaced by "nick_color_name") | nickname
irc | irc_nick_from_host | get nick from IRC host | IRC host (like `:nick!name@server.com`)
irc | irc_ptr_channel | get pointer to an IRC channel | server,channel
irc | irc_ptr_nick | get pointer to an IRC nick | server,channel,nick
irc | irc_ptr_server | get pointer to an IRC server | server
irc | irc_server_cap | 1 if capability is enabled in server | server,capability
irc | irc_server_cap_value | value of capability, if enabled in server | server,capability
irc | irc_server_isupport | 1 if server supports this feature (from IRC message 005) | server,feature
irc | irc_server_isupport_value | value of feature, if supported by server (from IRC message 005) | server,feature
logger | logger_log_file | path to current log filename for the buffer | buffer pointer ("0x12345678") or buffer full name ("irc.libera.#weechat")
lua | lua_eval | evaluation of source code | source code to execute
lua | lua_interpreter | name of the interpreter used | -
lua | lua_version | version of the interpreter used | -
perl | perl_eval | evaluation of source code | source code to execute
perl | perl_interpreter | name of the interpreter used | -
perl | perl_version | version of the interpreter used | -
php | php_eval | evaluation of source code | source code to execute
php | php_interpreter | name of the interpreter used | -
php | php_version | version of the interpreter used | -
python | python_eval | evaluation of source code | source code to execute
python | python_interpreter | name of the interpreter used | -
python | python_version | version of the interpreter used | -
relay | relay_api_version | relay API version | -
relay | relay_api_version_number | relay API version (as number) | -
relay | relay_client_count | number of clients for relay | protocol,status (both are optional, for each argument "*" means all; protocols: irc, weechat; statuses: connecting, waiting_auth, connected, auth_failed, disconnected)
ruby | ruby_eval | evaluation of source code | source code to execute
ruby | ruby_interpreter | name of the interpreter used | -
ruby | ruby_version | version of the interpreter used | -
script | script_info | info on a script | script,info (script name with extension and info is a hdata variable
script | script_loaded | 1 if script is loaded | script name with extension
spell | spell_dict | comma-separated list of dictionaries used in buffer | buffer pointer ("0x12345678") or buffer full name ("irc.libera.#weechat")
tcl | tcl_eval | evaluation of source code | source code to execute
tcl | tcl_interpreter | name of the interpreter used | -
tcl | tcl_version | version of the interpreter used | -
weechat | auto_connect | 1 if automatic connection to servers is enabled, 0 if it has been disabled by the user (option "-a" or "--no-connect") | -
weechat | auto_load_scripts | 1 if scripts are automatically loaded, 0 if the auto-load has been disabled by the user (option "-s" or "--no-script") | -
weechat | buffer | buffer pointer | buffer full name
weechat | charset_internal | WeeChat internal charset | -
weechat | charset_terminal | terminal charset | -
weechat | color_ansi_regex | POSIX extended regular expression to search ANSI escape codes | -
weechat | color_rgb2term | RGB color converted to terminal color (0-255) | rgb,limit (limit is optional and is set to 256 by default)
weechat | color_term2rgb | terminal color (0-255) converted to RGB color | color (terminal color: 0-255)
weechat | cursor_mode | 1 if cursor mode is enabled | -
weechat | date | WeeChat compilation date/time | -
weechat | dir_separator | directory separator | -
weechat | filters_enabled | 1 if filters are enabled | -
weechat | inactivity | keyboard inactivity (seconds) | -
weechat | locale | locale used for translating messages | -
weechat | mouse | 1 if mouse is enabled | -
weechat | nick_color | get nick color code | nickname;colors (colors is an optional comma-separated list of colors to use; background is allowed for a color with format text:background; if colors is present, WeeChat options with nick colors and forced nick colors are ignored)
weechat | nick_color_ignore_case | get nick color code, ignoring case | nickname;range;colors (range is a number of chars (see function strcasecmp_range, 0 = convert to lower case without using a range), colors is an optional comma-separated list of colors to use; background is allowed for a color with format text:background; if colors is present, WeeChat options with nick colors and forced nick colors are ignored)
weechat | nick_color_name | get nick color name | nickname;colors (colors is an optional comma-separated list of colors to use; background is allowed for a color with format text:background; if colors is present, WeeChat options with nick colors and forced nick colors are ignored)
weechat | nick_color_name_ignore_case | get nick color name, ignoring case | nickname;range;colors (range is a number of chars (see function strcasecmp_range, 0 = convert to lower case without using a range), colors is an optional comma-separated list of colors to use; background is allowed for a color with format text:background; if colors is present, WeeChat options with nick colors and forced nick colors are ignored)
weechat | pid | WeeChat PID (process ID) | -
weechat | plugin_loaded | 1 if plugin is loaded | plugin name
weechat | term_color_pairs | number of color pairs supported in terminal | -
weechat | term_colors | number of colors supported in terminal | -
weechat | term_height | height of terminal | -
weechat | term_width | width of terminal | -
weechat | totp_generate | generate a Time-based One-Time Password (TOTP) | secret (in base32), timestamp (optional, current time by default), number of digits (optional, between 4 and 10, 6 by default)
weechat | totp_validate | validate a Time-based One-Time Password (TOTP): 1 if TOTP is correct, otherwise 0 | secret (in base32), one-time password, timestamp (optional, current time by default), number of passwords before/after to test (optional, 0 by default)
weechat | uptime | WeeChat uptime (format: "days:hh:mm:ss") | "days" (number of days) or "seconds" (number of seconds) (optional)
weechat | uptime_current | WeeChat uptime for the current process only (upgrades with /upgrade command are ignored) (format: "days:hh:mm:ss") | "days" (number of days) or "seconds" (number of seconds) (optional)
weechat | version | WeeChat version | -
weechat | version_git | WeeChat git version (output of command "git describe" for a development version only, empty for a stable release) | -
weechat | version_number | WeeChat version (as number) | version (optional, by default the version of the running WeeChat is returned)
weechat | weechat_cache_dir | WeeChat cache directory | -
weechat | weechat_config_dir | WeeChat config directory | -
weechat | weechat_daemon | 1 if WeeChat is running in daemon mode (headless, in background) | -
weechat | weechat_data_dir | WeeChat data directory | -
weechat | weechat_dir | WeeChat directory (deprecated since version 3.2, replaced by "weechat_config_dir", "weechat_data_dir", "weechat_state_dir" , "weechat_cache_dir" and "weechat_runtime_dir") | -
weechat | weechat_headless | 1 if WeeChat is running headless | -
weechat | weechat_libdir | WeeChat "lib" directory | -
weechat | weechat_localedir | WeeChat "locale" directory | -
weechat | weechat_runtime_dir | WeeChat runtime directory | -
weechat | weechat_sharedir | WeeChat "share" directory | -
weechat | weechat_site | WeeChat site | -
weechat | weechat_site_download | WeeChat site, download page | -
weechat | weechat_state_dir | WeeChat state directory | -
weechat | weechat_upgrading | 1 if WeeChat is upgrading (command `/upgrade`) | -
weechat | window | window pointer | window number

C пример:

    char *version = weechat_info_get ("version", NULL);
    char *date = weechat_info_get ("date", NULL);
    weechat_printf (NULL, "Тренутна WeeChat верзија је: %s (компајлирана %s)",
                    version, date);
    if (version)
        free (version);
    if (date)
        free (date);

    char *weechat_config_dir = weechat_info_get ("weechat_config_dir", NULL);
    weechat_printf (NULL, "WeeChat конфиг директоријум је: %s", weechat_config_dir);
    if (weechat_config_dir)
        free (weechat_config_dir);

Скрипта (Python):

    # прототип
    def info_get(info_name: str, arguments: str) -> str: ...

    # пример
    weechat.prnt("", "Текућа WeeChat везија је: %s (компајлирана %s)"
        % (weechat.info_get("version", ""), weechat.info_get("date", ""))
    weechat.prnt("", "WeeChat конфиг директоријум је: %s" % weechat.info_get("weechat_config_dir", ""))

#### info_get_hashtable

WeeChat ≥ 0.3.4.

Враћа инфо као хеш табелу, из програма WeeChat или из додатка.

Прототип:

    struct t_hashtable *weechat_info_get_hashtable (const char *info_name,
                                                    struct t_hashtable *hashtable);

Аргументи:

- info_name: име инфо који желите да прочитате (погледајте табелу испод)

- hashtable: хеш табела са аргументима (зависи од тражене инфо) (није обавезна, NULL у случају да аргумент није потребан)

Повратна вредност:

- хеш табела са траженом инфо, NULL у случају да је дошло до грешке (након употребе мора да се ослободи позивом hashtable_free)

Информације:

Plugin | Name | Description | Hashtable (input) | Hashtable (output)
--- | --- | --- | --- | ---
irc | irc_message_parse | parse an IRC message | "message": IRC message, "server": server name (optional) | "tags": tags, "tag_xxx": unescaped value of tag "xxx" (one key per tag), "message_without_tags": message without the tags, "nick": nick, "user": user, "host": host, "command": command, "channel": channel, "arguments": arguments (includes channel), "text": text (for example user message), "param1" …​ "paramN": parsed command parameters, "num_params": number of parsed command parameters, "pos_command": index of "command" message ("-1" if "command" was not found), "pos_arguments": index of "arguments" message ("-1" if "arguments" was not found), "pos_channel": index of "channel" message ("-1" if "channel" was not found), "pos_text": index of "text" message ("-1" if "text" was not found)
irc | irc_message_split | split an IRC message (to fit in 512 bytes by default) | "message": IRC message, "server": server name (optional) | "msg1" …​ "msgN": messages to send (without final "\r\n"), "args1" …​ "argsN": arguments of messages, "count": number of messages
weechat | focus_info | get focus info | "x": x coordinate (string with integer >= 0), "y": y coordinate (string with integer >= 0) | see function "hook_focus" in Plugin API reference
weechat | secured_data | secured data | - | secured data: names and values (be careful: the values are sensitive data: do NOT print/log them anywhere)

C пример:

    struct t_hashtable *hashtable_in, *hashtable_out;

    hashtable_in = weechat_hashtable_new (8,
                                          WEECHAT_HASHTABLE_STRING,
                                          WEECHAT_HASHTABLE_STRING,
                                          NULL,
                                          NULL);
    if (hashtable_in)
    {
        weechat_hashtable_set (
            hashtable_in,
            "message",
            "@time=2015-06-27T16:40:35.000Z;tag2=value\\sspace :nick!user@host PRIVMSG #weechat :Hello world!");
        hashtable_out = weechat_info_get_hashtable ("irc_message_parse",
                                                    hashtable_in);
        /*
         * сада hashtable_out има следеће кључеве/вредности:
         *   "tags"                : "time=2015-06-27T16:40:35.000Z;tag2=value\\sspace"
         *   "tag_time"            : "2015-06-27T16:40:35.000Z"
         *   "tag_tag2"            : "value space"
         *   "message_without_tags": ":nick!user@host PRIVMSG #weechat :Hello world!"
         *   "nick"                : "nick"
         *   "user"                : "user"
         *   "host"                : "nick!user@host"
         *   "command"             : "PRIVMSG"
         *   "channel"             : "#weechat"
         *   "arguments"           : "#weechat :Hello world!"
         *   "text"                : "Hello world!"
         *   "param1"              : "#weechat"
         *   "param2"              : "Hello world!"
         *   "num_params"          : "2"
         *   "pos_command"         : "65"
         *   "pos_arguments"       : "73"
         *   "pos_channel"         : "73"
         *   "pos_text"            : "83"
         */
        weechat_hashtable_free (hashtable_in);
        weechat_hashtable_free (hashtable_out);
    }

Белешка | Погледајте WeeChat водич за скриптовање / Парсирање поруке ↗ за више информација у вези излаза „irc_message_parse”.

Скрипта (Python):

    # прототип
    def info_get_hashtable(info_name: str, dict_in: Dict[str, str]) -> Dict[str, str]: ...

    # пример
    dict_in = {"message": ":nick!user@host PRIVMSG #weechat :message here"}
    weechat.prnt("", "message parsed: %s"
                 % weechat.info_get_hashtable("irc_message_parse", dict_in))

### 3.24. Инфолисте

Инфолиста је листа „ставки”. Свака ставка садржи променљиве.

На пример, инфолиста „irc_server” има N ставки (N је број дефинисаних IRC сервера). За сваку ставку постоје променљиве као што су „name”, „buffer”, „is_connected”…​

Свака променљива има тип и вредност. Могући типови су:

- integer: било која целобројна вредност

- string: било која стринг вредност

- pointer: било који показивач

- buffer: бафер фиксне величине, може да садржи било какве податке

- time: временска вредност

#### infolist_new

Креира нову инфолисту.

Прототип:

    struct t_infolist *weechat_infolist_new ();

Повратна вредност:

- показивач на нову инфолисту

C пример:

    struct t_infolist *infolist = weechat_infolist_new ();

Скрипта (Python):

    # прототип
    def infolist_new() -> str: ...

    # пример
    infolist = weechat.infolist_new()

#### infolist_new_item

Додаје ставку и инфолисту.

Прототип:

    struct t_infolist_item *weechat_infolist_new_item (struct t_infolist *infolist);

Аргументи:

- infolist: показивач на инфо листу

Повратна вредност:

- показивач на нову ставку

C пример:

    struct t_infolist_item *item = weechat_infolist_new_item (infolist);

Скрипта (Python):

    # прототип
    def infolist_new_item(infolist: str) -> str: ...

    # пример
    item = weechat.infolist_new_item(infolist)

#### infolist_new_var_integer

Додаје целобројну променљиву у ставку инфолисте.

Прототип:

    struct t_infolist_var *weechat_infolist_new_var_integer (struct t_infolist_item *item,
                                                             const char *name,
                                                             int value);

Аргументи:

- item: показивач на ставку инфолисте

- name: име променљиве

- value: целобројна вредност

Повратна вредност:

- показивач на нову променљиву

C пример:

    struct t_infolist_var *var = weechat_infolist_new_var_integer (item,
                                                                   "my_integer",
                                                                   123);

Скрипта (Python):

    # прототип
    def infolist_new_var_integer(item: str, name: str, value: int) -> str: ...

    # пример
    var = weechat.infolist_new_var_integer(item, "my_integer", 123)

#### infolist_new_var_string

Додаје стринг променљиву у ставку инфолисте.

Прототип:

    struct t_infolist_var *weechat_infolist_new_var_string (struct t_infolist_item *item,
                                                            const char *name,
                                                            const char *value);

Аргументи:

- item: показивач на ставку инфолисте

- name: име променљиве

- value: стринг вредност

Повратна вредност:

- показивач на нову променљиву

C пример:

    struct t_infolist_var *var = weechat_infolist_new_var_string (item,
                                                                  "my_string",
                                                                  "value");

Скрипта (Python):

    # прототип
    def infolist_new_var_string(item: str, name: str, value: str) -> str: ...

    # пример
    var = weechat.infolist_new_var_string(item, "my_string", "value")

#### infolist_new_var_pointer

Додаје показивач променљиву у ставку инфолисте.

Прототип:

    struct t_infolist_var *weechat_infolist_new_var_pointer (struct t_infolist_item *item,
                                                             const char *name,
                                                             void *pointer);

Аргументи:

- item: показивач на ставку инфолисте

- name: име променљиве

- pointer: показивач

Повратна вредност:

- показивач на нову променљиву

C пример:

    struct t_infolist_var *var = weechat_infolist_new_var_pointer (item,
                                                                   "my_pointer",
                                                                   &pointer);

Скрипта (Python):

    # прототип
    def infolist_new_var_pointer(item: str, name: str, pointer: str) -> str: ...

    # пример
    var = weechat.infolist_new_var_pointer(item, "my_pointer", pointer)

#### infolist_new_var_buffer

Додаје бафер променљиву у ставку инфолисте.

Прототип:

    struct t_infolist_var *weechat_infolist_new_var_buffer (struct t_infolist_item *item,
                                                            const char *name,
                                                            void *pointer,
                                                            int size);

Аргументи:

- item: показивач на ставку инфолисте

- name: име променљиве

- pointer: показивач на бафер

- size: величина бафера

Повратна вредност:

- показивач на нову променљиву

C пример:

    char buffer[256];
    /* ... */
    struct t_infolist_var *var = weechat_infolist_new_var_buffer (item,
                                                                  "my_buffer",
                                                                  &buffer,
                                                                  sizeof (buffer));

Белешка | Ова функција није доступна у API скриптовања.

#### infolist_new_var_time

Додаје временску променљиву у ставку инфолисте.

Прототип:

    struct t_infolist_var *weechat_infolist_new_var_time (struct t_infolist_item *item,
                                                          const char *name,
                                                          time_t time);

Аргументи:

- item: показивач на ставку инфолисте

- name: име променљиве

- time: временска вредност

Повратна вредност:

- показивач на нову променљиву

C пример:

    struct t_infolist_var *var = weechat_infolist_new_var_time (item,
                                                                "my_time",
                                                                time (NULL));

Скрипта (Python):

    # прототип
    def infolist_new_var_time(item: str, name: str, time: int) -> str: ...

    # пример
    var = weechat.infolist_new_var_time(item, "my_time", int(time.time()))

#### infolist_get

Враћа инфолисту из програма WeeChat или из додатка.

Важно | Садржај инфолисте је копија актуелних података. Тако да ако тражите инфолисту са доста информација (као што је „buffer_lines”), програм WeeChat ће алоцирати меморију да дуплира све податке, а то може одузети доста времена. Уместо да да користите велику инфолисту, пожељно је да користите hdata (мада инфолиста може да садржи више информација од hdata, који представља сирове податке), погледајте hdata.

Прототип:

    struct t_infolist *weechat_infolist_get (const char *infolist_name,
                                             void *pointer,
                                             const char *arguments);

Аргументи:

- infolist_name: име инфолисте коју желите да прочитате (погледајте табелу испод)

- pointer: показивач на ставку, ако желите само ову ставку из инфолисте (није обавезан, може да буде NULL)

- arguments: аргументи тражене инфолисте (нису обавезни, NULL ако аргументи нису потребни)

Повратна вредност:

- показивач на инфолисту, NULL у случају да је дошло до грешке

Инфолисте:

Plugin | Name | Description | Pointer | Arguments
--- | --- | --- | --- | ---
alias | alias | list of aliases | alias pointer (optional) | alias name (wildcard "*" is allowed) (optional)
alias | alias_default | list of default aliases | - | -
buflist | buflist | list of buffers in a buflist bar item | - | buflist bar item name (optional)
fset | fset_option | list of fset options | fset option pointer (optional) | option name (wildcard "*" is allowed) (optional)
guile | guile_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
irc | irc_channel | list of channels for an IRC server | channel pointer (optional) | server,channel (channel is optional)
irc | irc_color_weechat | mapping between IRC color codes and WeeChat color names | - | -
irc | irc_ignore | list of IRC ignores | ignore pointer (optional) | -
irc | irc_modelist | list of channel mode lists for an IRC channel | mode list pointer (optional) | server,channel,type (type is optional)
irc | irc_modelist_item | list of items in a channel mode list | mode list item pointer (optional) | server,channel,type,number (number is optional)
irc | irc_nick | list of nicks for an IRC channel | nick pointer (optional) | server,channel,nick (nick is optional)
irc | irc_notify | list of notify | notify pointer (optional) | server name (wildcard "*" is allowed) (optional)
irc | irc_server | list of IRC servers | server pointer (optional) | server name (wildcard "*" is allowed) (optional)
logger | logger_buffer | list of logger buffers | logger pointer (optional) | -
lua | lua_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
perl | perl_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
php | php_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
python | python_constant | list of scripting API constants | - | -
python | python_function | list of scripting API functions | - | -
python | python_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
relay | relay | list of relay clients | relay pointer (optional) | -
ruby | ruby_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
script | script_script | list of scripts | script pointer (optional) | script name with extension (wildcard "*" is allowed) (optional)
tcl | tcl_script | list of scripts | script pointer (optional) | script name (wildcard "*" is allowed) (optional)
weechat | bar | list of bars | bar pointer (optional) | bar name (wildcard "*" is allowed) (optional)
weechat | bar_item | list of bar items | bar item pointer (optional) | bar item name (wildcard "*" is allowed) (optional)
weechat | bar_window | list of bar windows | bar window pointer (optional) | -
weechat | buffer | list of buffers | buffer pointer (optional) | buffer name (wildcard "*" is allowed) (optional)
weechat | buffer_lines | lines of a buffer | buffer pointer | -
weechat | filter | list of filters | - | filter name (wildcard "*" is allowed) (optional)
weechat | history | history of commands | buffer pointer (if not set, return global history) (optional) | -
weechat | hook | list of hooks | hook pointer (optional) | type,arguments (type is command/timer/.., arguments to get only some hooks (wildcard "*" is allowed), both are optional)
weechat | hotlist | list of buffers in hotlist | - | -
weechat | key | list of key bindings | - | context ("default", "search", "cursor" or "mouse") (optional)
weechat | layout | list of layouts | - | -
weechat | nicklist | nicks in nicklist for a buffer | buffer pointer | nick_xxx or group_xxx to get only nick/group xxx (optional)
weechat | option | list of options | - | option name (wildcard "*" is allowed) (optional)
weechat | plugin | list of plugins | plugin pointer (optional) | plugin name (wildcard "*" is allowed) (optional)
weechat | proxy | list of proxies | proxy pointer (optional) | proxy name (wildcard "*" is allowed) (optional)
weechat | url_options | options for URL | - | -
weechat | window | list of windows | window pointer (optional) | "current" for current window or a window number (optional)
xfer | xfer | list of xfer | xfer pointer (optional) | -

C пример:

    struct t_infolist *infolist = weechat_infolist_get ("irc_server", NULL, NULL);

Скрипта (Python):

    # прототип
    def infolist_get(infolist_name: str, pointer: str, arguments: str) -> str: ...

    # пример
    infolist = weechat.infolist_get("irc_server", "", "")

#### infolist_next

Помера „курсор” на наредну ставку у инфолисти. Први позив ове функције за неку инфолисту помера курсор на прву ставку те инфолисте.

Прототип:

    int weechat_infolist_next (struct t_infolist *infolist);

Аргументи:

- infolist: показивач на инфо листу

Повратна вредност:

- 1 ако се курсор померио на наредну ставку, 0 у случају да је достигнут крај листе

C пример:

    if (weechat_infolist_next (infolist))
    {
        /* читање променљивих из ставке... */
    }
    else
    {
        /* нема више ниједне ставке */
    }

Скрипта (Python):

    # прототип
    def infolist_next(infolist: str) -> int: ...

    # пример
    rc = weechat.infolist_next(infolist)
    if rc:
        # читање променљивих из ставке...
    else:
        # нема више ниједне ставке

#### infolist_prev

Помера „курсор” на претходну ставку у инфолисти. Први позив ове функције над инфолистом помера курсор на крај те инфолисте.

Прототип:

    int weechat_infolist_prev (struct t_infolist *infolist);

Аргументи:

- infolist: показивач на инфо листу

Повратна вредност:

- 1 ако се курсор померио на претходну ставку, 0 у случају да је достигнут почетак листе

C пример:

    if (weechat_infolist_prev (infolist))
    {
        /* читање променљивих у ставки... */
    }
    else
    {
        /* нема више ниједне ставке */
    }

Скрипта (Python):

    # прототип
    def infolist_prev(infolist: str) -> int: ...

    # пример
    rc = weechat.infolist_prev(infolist)
    if rc:
        # читање променљивих из ставке...
    else:
        # нема више ниједне ставке

#### infolist_reset_item_cursor

Ресетује „курсор” за инфолисту.

Прототип:

    void weechat_infolist_reset_item_cursor (struct t_infolist *infolist);

Аргументи:

- infolist: показивач на инфо листу

C пример:

    weechat_infolist_reset_item_cursor (infolist);

Скрипта (Python):

    # прототип
    def infolist_reset_item_cursor(infolist: str) -> int: ...

    # пример
    weechat.infolist_reset_item_cursor(infolist)

#### infolist_search_var

WeeChat ≥ 0.4.3.

Тражи променљиву у текућој ставки инфолисте.

Прототип:

    struct t_infolist_var *weechat_infolist_search_var (struct t_infolist *infolist,
                                                        const char *name);

Аргументи:

- infolist: показивач на инфо листу

- name: име променљиве

Повратна вредност:

- показивач на пронађену променљиву, NULL у случају да се променљива не пронађе

C пример:

    if (weechat_infolist_search_var (infolist, "name"))
    {
        /* променљива „name” постоји */
        /* ... */
    }

Скрипта (Python):

    # прототип
    def infolist_search_var(infolist: str, name: str) -> str: ...

    # пример
    if weechat.infolist_search_var(infolist, "name"):
        # променљива „name” постоји
        # ...

#### infolist_fields

Враћа листу поља текуће ставке инфолисте.

Прототип:

    const char *weechat_infolist_fields (struct t_infolist *infolist);

Аргументи:

- infolist: показивач на инфо листу

Повратна вредност:

- стринг са листом поља текуће ставке инфолисте. Листа је раздвојена запетама и садржи слово за тип, након кога следи име променљиве. Типови су: „i” (integer), „s” (string), „p” (pointer), „b” (buffer), „t” (time).

C пример:

    const char *fields = weechat_infolist_fields (infolist);
    /* поља садрже нешто слично овоме:
       „i:my_integer,s:my_string,p:my_pointer,b:my_buffer,t:my_time” */

Скрипта (Python):

    # прототип
    def infolist_fields(infolist: str) -> str: ...

    # пример
    fields = weechat.infolist_fields(infolist)
    # поља садрже нешто слично овоме:
    # „i:my_integer,s:my_string,p:my_pointer,b:my_buffer,t:my_time”

#### infolist_integer

Враћа вредност целобројне променљиве из текуће ставке инфолисте.

Прототип:

    int weechat_infolist_integer (struct t_infolist *infolist, const char *var);

Аргументи:

- infolist: показивач на инфо листу

- var: име променљиве (мора бити типа „integer”)

Повратна вредност:

- целобројна вредност променљиве

C пример:

    weechat_printf (NULL, "integer = %d",
                    weechat_infolist_integer (infolist, "my_integer"));

Скрипта (Python):

    # прототип
    def infolist_integer(infolist: str, var: str) -> int: ...

    # пример
    weechat.prnt("", "integer = %d" % weechat.infolist_integer(infolist, "my_integer"))

#### infolist_string

Враћа вредност стринг променљиве из текуће ставке инфолисте.

Прототип:

    const char *weechat_infolist_string (struct t_infolist *infolist, const char *var);

Аргументи:

- infolist: показивач на инфо листу

- var: име променљиве (мора бити типа „string”)

Повратна вредност:

- стринг вредност променљиве

C пример:

    weechat_printf (NULL, "string = %s",
                    weechat_infolist_string (infolist, "my_string"));

Скрипта (Python):

    # прототип
    def infolist_string(infolist: str, var: str) -> str: ...

    # пример
    weechat.prnt("", "string = %s" % weechat.infolist_string(infolist, "my_string"))

#### infolist_pointer

Враћа вредност показивач променљиве из текуће ставке инфолисте.

Прототип:

    void *weechat_infolist_pointer (struct t_infolist *infolist, const char *var);

Аргументи:

- infolist: показивач на инфо листу

- var: име променљиве (мора бити типа „pointer”)

Повратна вредност:

- показивач вредност променљиве

C пример:

    weechat_printf (NULL, "pointer = %p", weechat_infolist_pointer (infolist, "my_pointer"));

Скрипта (Python):

    # прототип
    def infolist_pointer(infolist: str, var: str) -> str: ...

    # пример
    weechat.prnt("", "pointer = 0x%s" % weechat.infolist_pointer(infolist, "my_pointer"))

#### infolist_buffer

Враћа вредност бафер променљиве из текуће ставке инфолисте.

Прототип:

    void *weechat_infolist_buffer (struct t_infolist *infolist, const char *var,
                                   int *size);

Аргументи:

- infolist: показивач на инфо листу

- var: име променљиве (мора бити типа „buffer”)

- size: показивач на целобројну променљиву, поставиће се на величину бафера

Повратна вредност:

- показивач на бафер

C пример:

    int size;
    void *pointer = weechat_infolist_buffer (infolist, "my_buffer", &size);
    weechat_printf (NULL, "buffer = %p, size = %d", pointer, size);

Белешка | Ова функција није доступна у API скриптовања.

#### infolist_time

Враћа вредност временске променљиве из текуће ставке инфолисте.

Прототип:

    time_t weechat_infolist_time (struct t_infolist *infolist, const char *var);

Аргументи:

- infolist: показивач на инфо листу

- var: име променљиве (мора бити типа „time”)

Повратна вредност:

- временска вредност променљиве

C пример:

    weechat_printf (NULL, "time = %ld",
                    weechat_infolist_time (infolist, "my_time"));

Скрипта (Python):

    # прототип
    def infolist_time(infolist: str, var: str) -> int: ...

    # пример
    weechat.prnt("", "time = %d" % weechat.infolist_time(infolist, "my_time"))

#### infolist_free

Ослобађа меморију коју заузима инфолиста.

Прототип:

    void weechat_infolist_free (struct t_infolist *infolist);

Аргументи:

- infolist: показивач на инфо листу

C пример:

    weechat_infolist_free (infolist);

Скрипта (Python):

    # прототип
    def infolist_free(infolist: str) -> int: ...

    # пример
    weechat.infolist_free(infolist)

### 3.25. Hdata

Функције за hdata (сирови приступ подацима програма WeeChat или подацима додатака).

Важно | Hdata обезбеђује приступ за подацима у режиму само-за-читање. ИЗРИЧИТО ЈЕ ЗАБРАЊЕНО да се било шта уписује у меморију на коју показују hdata променљиве. Једини начин за ажурирање података је позив функције hdata_update.

#### hdata_new

WeeChat ≥ 0.3.6, ажурирано у верзијама 0.3.9 и 0.4.0.

Креира нови hdata.

Белешка | hdata у односу на инфолисту Hdata је брз начин за читање података из програма WeeChat или из додатака. Слично је са инфолистом, али постоје неке разлике: Брже је и користи мање меморије: директно читање без дуплирања. Може да садржи различите податке у односу на инфолисту: садржи само сирове податке у структурама (инфолиста може додати неке додатне податке из разлога једноставније употребе).

Прототип:

    struct t_hdata *weechat_hdata_new (const char *hdata_name, const char *var_prev, const char *var_next,
                                       int create_allowed, int delete_allowed,
                                       int (*callback_update)(void *data,
                                                              struct t_hdata *hdata,
                                                              void *pointer,
                                                              struct t_hashtable *hashtable),
                                       void *callback_update_data);

Аргументи:

- hdata_name: име hdata

- var_prev: име променљиве у структури која је показивач на претходни елемент у листи (може да буде NULL ако таква променљива не постоји)

- var_next: име променљиве у структури која је показивач на наредни елемент у листи (може да буде NULL ако таква променљива не постоји)

- create_allowed: 1 ако је дозвољено креирање структуре, у супротном 0 (WeeChat ≥ 0.4.0)

- delete_allowed: 1 ако је дозвољено брисање структуре, у супротном 0 (WeeChat ≥ 0.3.9)

- callback_update: функција повратног позива за ажурирање података у hdata, може да буде NULL ако није дозвољено ажурирање (WeeChat ≥ 0.3.9)_, аргументи и повратна вредност су:

  - void *data: показивач

  - struct t_hdata *hdata: показивач на hdata

  - struct t_hashtable *hashtable: хеш табела са променљивама које треба да се ажурирају (погледајте hdata_update)

  - повратна вредност: број ажурираних променљивих

- callback_update_data: показивач прослеђен функцији повратног позива када је позове програм WeeChat (WeeChat ≥ 0.3.9)

Повратна вредност:

- показивач на нови hdata

C пример:

    struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next", 0, 0, &callback_update, NULL);

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_new_var

WeeChat ≥ 0.3.6, ажурирано у верзијама 0.3.7, 0.3.9, 0.4.3, 3.4 и 4.3.0.

Креира нову променљиву у hdata.

Прототип:

    void weechat_hdata_new_var (struct t_hdata *hdata, const char *name, int offset, int type,
                                int update_allowed, const char *array_size, const char *hdata_name);

Аргументи:

- hdata: показивач на hdata

- name: име променљиве

- offset: померај променљиве од почетка структуре

- type: тип променљиве, једно од:

  - WEECHAT_HDATA_CHAR

  - WEECHAT_HDATA_INTEGER

  - WEECHAT_HDATA_LONG

  - WEECHAT_HDATA_LONGLONG (WeeChat ≥ 4.3.0)

  - WEECHAT_HDATA_STRING

  - WEECHAT_HDATA_SHARED_STRING (WeeChat ≥ 0.4.3)

  - WEECHAT_HDATA_POINTER

  - WEECHAT_HDATA_TIME

  - WEECHAT_HDATA_HASHTABLE (WeeChat ≥ 0.3.7)

  - WEECHAT_HDATA_OTHER

- update_allowed: 1 ако се дозвољава ажурирање променљиве, у супротном 0 (WeeChat ≥ 0.3.9)

- array_size: није NULL само ако је променљива низ, и може бити: (WeeChat ≥ 0.3.9)

  - име променљиве у hdata: ова променљива ће се користити као величина низа (динамичка величина низа)

  - вео број (као стринг): фиксна величина низа

  - *: аутоматска величина: величина низа се израчунава гледањем у вредности, када се наиђе на прво NULL (само за тип стринг, показивач или хеш табелу)

- hdata_name: име hdata (ако је то показивач на структуру са hdata)

Од WeeChat ≥ 3.4, испред array_size параметра може да се постави `*,` што представља показивач на динамички алоциран низ (без овог префикса, низ се сматра статички).

Примери променљивих и одговарајуће величине низа (WeeChat ≥ 3.4):

Декларација променљиве у C | Hdata тип | Величина низа | Опис
--- | --- | --- | ---
`int *numbers;` | `WEECHAT_HDATA_INTEGER` | `*,2` | Алоцирани низ од 2 цела броја.
`int *numbers;` | `WEECHAT_HDATA_INTEGER` | `*,array_size` | Алоцирани низ целих бројева, величина се чува у другој променљивој под називом "array_size".
`int numbers[3];` | `WEECHAT_HDATA_INTEGER` | `3` | Статички низ од 3 цела броја.
`char **words;` | `WEECHAT_HDATA_STRING` | `*,*` | Алоцирани низ стрингова, динамичке величине (иза последње речи мора да дође NULL показивач).
`char **words;` | `WEECHAT_HDATA_STRING` | `*,count_words` | Алоцирани низ стрингова, величина се чува у другој променљивој под називом "count_words".

C пример:

    struct t_myplugin_list
    {
        char *name;
        struct t_gui_buffer *buffer;
        int numbers[3];
        int tags_count;
        char **tags_array;
        char **string_split;
        struct t_myplugin_list *prev;
        struct t_myplugin_list *next;
    };

    /* ... */

    struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
    weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING, 0, NULL, NULL);
    weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER, 0, NULL, NULL);
    weechat_hdata_new_var (hdata, "numbers", offsetof (struct t_myplugin_list, numbers), WEECHAT_HDATA_INTEGER, 0, "3", NULL);
    weechat_hdata_new_var (hdata, "tags_count", offsetof (struct t_myplugin_list, tags_count), WEECHAT_HDATA_INTEGER, 0, NULL, NULL);
    weechat_hdata_new_var (hdata, "tags_array", offsetof (struct t_myplugin_list, tags_array), WEECHAT_HDATA_STRING, 0, "*,tags_count", NULL);
    weechat_hdata_new_var (hdata, "string_split", offsetof (struct t_myplugin_list, string_split), WEECHAT_HDATA_STRING, 0, "*,*", NULL);
    weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER, 0, NULL, "myplugin_list");
    weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER, 0, NULL, "myplugin_list");

За скраћење кода, може да се употреби макро „WEECHAT_HDATA_VAR”:

    WEECHAT_HDATA_VAR(struct t_myplugin_list, name, STRING, 0, NULL, NULL);
    WEECHAT_HDATA_VAR(struct t_myplugin_list, buffer, POINTER, 0, NULL, NULL);
    WEECHAT_HDATA_VAR(struct t_myplugin_list, numbers, INTEGER, 0, "3", NULL);
    WEECHAT_HDATA_VAR(struct t_myplugin_list, tags_count, INTEGER, 0, NULL, NULL);
    WEECHAT_HDATA_VAR(struct t_myplugin_list, tags_array, STRING, 0, "*,tags_count", NULL);
    WEECHAT_HDATA_VAR(struct t_myplugin_list, string_split, STRING, 0, "*,*", NULL);
    WEECHAT_HDATA_VAR(struct t_myplugin_list, prev, POINTER, 0, NULL, "myplugin_list");
    WEECHAT_HDATA_VAR(struct t_myplugin_list, next, POINTER, 0, NULL, "myplugin_list");

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_new_list

WeeChat ≥ 0.3.6, ажурирано у верзији 1.0.

Креира нови показивач на листу у hdata.

Прототип:

    void weechat_hdata_new_list (struct t_hdata *hdata, const char *name, void *pointer, int flags);

Аргументи:

- hdata: показивач на hdata

- name: име променљиве

- pointer: показивач на листу

- flags: комбинација следећих вредности: (WeeChat ≥ 1.0)

  - WEECHAT_HDATA_LIST_CHECK_POINTERS: листа која се користи за проверу показивача

C пример:

    struct t_myplugin_list
    {
        char *name;
        struct t_gui_buffer *buffer;
        int tags_count;
        char **tags_array;
        char **string_split;
        struct t_myplugin_list *prev;
        struct t_myplugin_list *next;
    };

    /* ... */

    struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next");
    weechat_hdata_new_var (hdata, "name", offsetof (struct t_myplugin_list, name), WEECHAT_HDATA_STRING, NULL, NULL);
    weechat_hdata_new_var (hdata, "buffer", offsetof (struct t_myplugin_list, buffer), WEECHAT_HDATA_POINTER, NULL, NULL);
    weechat_hdata_new_var (hdata, "tags_count", offsetof (struct t_myplugin_list, tags_count), WEECHAT_HDATA_INTEGER, NULL, NULL);
    weechat_hdata_new_var (hdata, "tags_array", offsetof (struct t_myplugin_list, tags_array), WEECHAT_HDATA_STRING, "tags_count", NULL);
    weechat_hdata_new_var (hdata, "string_split", offsetof (struct t_myplugin_list, string_split), WEECHAT_HDATA_STRING, "*", NULL);
    weechat_hdata_new_var (hdata, "prev", offsetof (struct t_myplugin_list, prev), WEECHAT_HDATA_POINTER, NULL, "myplugin_list");
    weechat_hdata_new_var (hdata, "next", offsetof (struct t_myplugin_list, next), WEECHAT_HDATA_POINTER, NULL, "myplugin_list");

    weechat_hdata_new_list (hdata, "buffers", &buffers, WEECHAT_HDATA_LIST_CHECK_POINTERS);
    weechat_hdata_new_list (hdata, "last_buffer", &last_buffer, 0);

За скраћивање кода, може да се користи макро „WEECHAT_HDATA_LIST”:

    WEECHAT_HDATA_LIST(buffers, WEECHAT_HDATA_LIST_CHECK_POINTERS);
    WEECHAT_HDATA_LIST(last_buffer, 0);

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_get

WeeChat ≥ 0.3.6.

Враћа hdata за структуру програма WeeChat или додатка.

Белешка | Hdata не садржи податке, то је само хеш табела са позицијама променљивих у структури. То значи да вам је за читање неких података потребан само овај hdata и показивач на објекат програма WeeChat/додатка.

Прототип:

    struct t_hdata *weechat_hdata_get (const char *hdata_name);

Аргументи:

- hdata_name: име hdata (погледајте листу испод)

Повратна вредност:

- показивач на hdata, NULL у случају да је дошло до грешке

Листа hdata:

Plugin | Name | Description | Lists | Variables
--- | --- | --- | --- | ---
fset | fset_option | fset options | - | index (integer) file (string) section (string) option (string) name (string) parent_name (string) type (integer) default_value (string) value (string) parent_value (string) min (string) max (string) description (string) string_values (string) marked (integer)
guile | guile_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "guile_script") next_script (pointer, hdata: "guile_script")
irc | irc_batch | irc batch | - | reference (string) parent_ref (string) type (string) parameters (string) start_time (time) messages (pointer) end_received (integer) messages_processed (integer) prev_batch (pointer, hdata: "irc_batch") next_batch (pointer, hdata: "irc_batch")
irc | irc_channel | irc channel | - | type (integer) name (string) topic (string) modes (string) limit (integer) key (string) join_msg_received (hashtable) checking_whox (integer) away_message (string) has_quit_server (integer) cycle (integer) part (integer) nick_completion_reset (integer) pv_remote_nick_color (string) hook_autorejoin (pointer) nicks_count (integer) nicks (pointer, hdata: "irc_nick") last_nick (pointer, hdata: "irc_nick") nicks_speaking (pointer) nicks_speaking_time (pointer, hdata: "irc_channel_speaking") last_nick_speaking_time (pointer, hdata: "irc_channel_speaking") modelists (pointer, hdata: "irc_modelist") last_modelist (pointer, hdata: "irc_modelist") join_smart_filtered (hashtable) typing_state (integer) typing_status_sent (time) buffer (pointer, hdata: "buffer") buffer_as_string (string) prev_channel (pointer, hdata: "irc_channel") next_channel (pointer, hdata: "irc_channel")
irc | irc_channel_speaking | irc channel_speaking | - | nick (string) time_last_message (time) prev_nick (pointer, hdata: "irc_channel_speaking") next_nick (pointer, hdata: "irc_channel_speaking")
irc | irc_ignore | irc ignore | irc_ignore_list last_irc_ignore | number (integer) mask (string) regex_mask (pointer) server (string) channel (string) prev_ignore (pointer, hdata: "irc_ignore") next_ignore (pointer, hdata: "irc_ignore")
irc | irc_list | irc data for /list buffer | - | buffer (pointer, hdata: "buffer") channels (pointer) filter_channels (pointer) name_max_length (integer) filter (string) sort (string) sort_fields (pointer) sort_fields_count (integer) selected_line (integer)
irc | irc_list_channel | irc channel on /list buffer | - | name (string) name2 (string) users (integer) topic (string)
irc | irc_modelist | irc modelist | - | type (char) state (integer) items (pointer, hdata: "irc_modelist_item") last_item (pointer, hdata: "irc_modelist_item") prev_modelist (pointer, hdata: "irc_modelist") next_modelist (pointer, hdata: "irc_modelist")
irc | irc_modelist_item | irc modelist item | - | number (integer) mask (string) setter (string) datetime (time) prev_item (pointer, hdata: "irc_modelist_item") next_item (pointer, hdata: "irc_modelist_item")
irc | irc_nick | irc nick | - | name (string) host (string) prefixes (string) prefix (string) away (integer) account (string) realname (string) color (string) prev_nick (pointer, hdata: "irc_nick") next_nick (pointer, hdata: "irc_nick")
irc | irc_notify | irc notify | - | server (pointer, hdata: "irc_server") nick (string) check_away (integer) is_on_server (integer) away_message (string) ison_received (integer) prev_notify (pointer, hdata: "irc_notify") next_notify (pointer, hdata: "irc_notify")
irc | irc_redirect | irc redirect | - | server (pointer, hdata: "irc_server") pattern (string) signal (string) count (integer) current_count (integer) string (string) timeout (integer) command (string) assigned_to_command (integer) start_time (time) cmd_start (hashtable) cmd_stop (hashtable) cmd_extra (hashtable) cmd_start_received (integer) cmd_stop_received (integer) cmd_filter (hashtable) output (string) output_size (integer) prev_redirect (pointer, hdata: "irc_redirect") next_redirect (pointer, hdata: "irc_redirect")
irc | irc_redirect_pattern | pattern for irc redirect | irc_redirect_patterns last_irc_redirect_pattern | name (string) temp_pattern (integer) timeout (integer) cmd_start (string) cmd_stop (string) cmd_extra (string) prev_redirect (pointer, hdata: "irc_redirect_pattern") next_redirect (pointer, hdata: "irc_redirect_pattern")
irc | irc_server | irc server | irc_servers last_irc_server | name (string) options (pointer) fake_server (integer) reloading_from_config (integer) reloaded_from_config (integer) addresses_eval (string) addresses_count (integer) addresses_array (string, array_size: "addresses_count") ports_array (integer, array_size: "addresses_count") retry_array (integer, array_size: "addresses_count") index_current_address (integer) current_address (string) current_ip (string) current_port (integer) current_retry (integer) sock (integer) hook_connect (pointer, hdata: "hook") hook_fd (pointer, hdata: "hook") hook_timer_connection (pointer, hdata: "hook") hook_timer_sasl (pointer, hdata: "hook") hook_timer_anti_flood (pointer, hdata: "hook") sasl_scram_client_first (string) sasl_scram_salted_pwd (other) sasl_scram_salted_pwd_size (integer) sasl_scram_auth_message (string) sasl_temp_username (string) sasl_temp_password (string) authentication_method (integer) sasl_mechanism_used (integer) is_connected (integer) tls_connected (integer) disconnected (integer) gnutls_sess (pointer) tls_cert (pointer) tls_cert_key (pointer) unterminated_message (string) nicks_count (integer) nicks_array (string, array_size: "nicks_count") nick_first_tried (integer) nick_alternate_number (integer) nick (string) nick_modes (string) host (string) checking_cap_ls (integer) cap_ls (hashtable) checking_cap_list (integer) cap_list (hashtable) multiline_max_bytes (integer) multiline_max_lines (integer) isupport (string) prefix_modes (string) prefix_chars (string) msg_max_length (integer) user_max_length (integer) host_max_length (integer) casemapping (integer) utf8mapping (integer) utf8only (integer) chantypes (string) chanmodes (string) monitor (integer) monitor_time (time) clienttagdeny (string) clienttagdeny_count (integer) clienttagdeny_array (string, array_size: "clienttagdeny_count") typing_allowed (integer) reconnect_delay (integer) reconnect_start (time) command_time (time) autojoin_time (time) autojoin_done (integer) disable_autojoin (integer) is_away (integer) away_message (string) away_time (time) lag (integer) lag_displayed (integer) lag_check_time (other) lag_next_check (time) lag_last_refresh (time) cmd_list_regexp (pointer) list (pointer, hdata: "irc_list") last_away_check (time) last_data_purge (time) outqueue (pointer) last_outqueue (pointer) redirects (pointer, hdata: "irc_redirect") last_redirect (pointer, hdata: "irc_redirect") notify_list (pointer, hdata: "irc_notify") last_notify (pointer, hdata: "irc_notify") notify_count (integer) join_manual (hashtable) join_channel_key (hashtable) join_noswitch (hashtable) echo_msg_recv (hashtable) names_channel_filter (hashtable) batches (pointer, hdata: "irc_batch") last_batch (pointer, hdata: "irc_batch") buffer (pointer, hdata: "buffer") buffer_as_string (string) channels (pointer, hdata: "irc_channel") last_channel (pointer, hdata: "irc_channel") prev_server (pointer, hdata: "irc_server") next_server (pointer, hdata: "irc_server")
lua | lua_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "lua_script") next_script (pointer, hdata: "lua_script")
perl | perl_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "perl_script") next_script (pointer, hdata: "perl_script")
php | php_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "php_script") next_script (pointer, hdata: "php_script")
python | python_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "python_script") next_script (pointer, hdata: "python_script")
ruby | ruby_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "ruby_script") next_script (pointer, hdata: "ruby_script")
script | script_script | scripts from repository | scripts_repo last_script_repo | name (string) name_with_extension (string) language (integer) author (string) mail (string) version (string) license (string) description (string) tags (string) requirements (string) min_weechat (string) max_weechat (string) sha512sum (string) url (string) popularity (integer) date_added (time) date_updated (time) status (integer) version_loaded (string) displayed (integer) install_order (integer) prev_script (pointer, hdata: "script_script") next_script (pointer, hdata: "script_script")
tcl | tcl_script | list of scripts | scripts last_script | filename (string) interpreter (pointer) name (string) author (string) version (string) license (string) description (string) shutdown_func (string) charset (string) unloading (integer) prev_script (pointer, hdata: "tcl_script") next_script (pointer, hdata: "tcl_script")
weechat | bar | bar | gui_bars last_gui_bar | name (string) options (pointer) items_count (integer) items_subcount (pointer) items_array (pointer) items_buffer (pointer) items_prefix (pointer) items_name (pointer) items_suffix (pointer) bar_window (pointer, hdata: "bar_window") bar_refresh_needed (integer) prev_bar (pointer, hdata: "bar") next_bar (pointer, hdata: "bar")
weechat | bar_item | bar item | gui_bar_items last_gui_bar_item | plugin (pointer, hdata: "plugin") name (string) build_callback (pointer) build_callback_pointer (pointer) build_callback_data (pointer) prev_item (pointer, hdata: "bar_item") next_item (pointer, hdata: "bar_item")
weechat | bar_window | bar window | - | bar (pointer, hdata: "bar") x (integer) y (integer) width (integer) height (integer) scroll_x (integer) scroll_y (integer) cursor_x (integer) cursor_y (integer) current_size (integer) items_count (integer) items_subcount (pointer) items_content (pointer) items_num_lines (pointer) items_refresh_needed (pointer) screen_col_size (integer) screen_lines (integer) coords_count (integer) coords (pointer) gui_objects (pointer) prev_bar_window (pointer, hdata: "bar_window") next_bar_window (pointer, hdata: "bar_window") Update allowed: scroll_x (integer) scroll_y (integer)
weechat | buffer | buffer | gui_buffer_last_displayed gui_buffers last_gui_buffer | id (longlong) opening (integer) plugin (pointer, hdata: "plugin") plugin_name_for_upgrade (string) number (integer) old_number (integer) layout_number (integer) layout_number_merge_order (integer) name (string) full_name (string) old_full_name (string) short_name (string) type (integer) notify (integer) num_displayed (integer) active (integer) hidden (integer) zoomed (integer) print_hooks_enabled (integer) day_change (integer) clear (integer) filter (integer) close_callback (pointer) close_callback_pointer (pointer) close_callback_data (pointer) closing (integer) title (string) modes (string) own_lines (pointer, hdata: "lines") mixed_lines (pointer, hdata: "lines") lines (pointer, hdata: "lines") next_line_id (integer) time_for_each_line (integer) chat_refresh_needed (integer) nicklist (integer) nicklist_case_sensitive (integer) nicklist_root (pointer, hdata: "nick_group") nicklist_max_length (integer) nicklist_display_groups (integer) nicklist_count (integer) nicklist_visible_count (integer) nicklist_groups_count (integer) nicklist_groups_visible_count (integer) nicklist_nicks_count (integer) nicklist_nicks_visible_count (integer) nicklist_last_id_assigned (longlong) nickcmp_callback (pointer) nickcmp_callback_pointer (pointer) nickcmp_callback_data (pointer) input (integer) input_callback (pointer) input_callback_pointer (pointer) input_callback_data (pointer) input_get_any_user_data (integer) input_get_unknown_commands (integer) input_get_empty (integer) input_multiline (integer) input_prompt (string) input_buffer (string) input_buffer_alloc (integer) input_buffer_size (integer) input_buffer_length (integer) input_buffer_pos (integer) input_buffer_1st_display (integer) input_undo_snap (pointer, hdata: "input_undo") input_undo (pointer, hdata: "input_undo") last_input_undo (pointer, hdata: "input_undo") ptr_input_undo (pointer, hdata: "input_undo") input_undo_count (integer) completion (pointer, hdata: "completion") history (pointer, hdata: "history") last_history (pointer, hdata: "history") ptr_history (pointer, hdata: "history") num_history (integer) text_search (integer) text_search_direction (integer) text_search_exact (integer) text_search_regex (integer) text_search_regex_compiled (pointer) text_search_where (integer) text_search_history (integer) text_search_found (integer) text_search_ptr_history (pointer, hdata: "history") text_search_input (string) highlight_words (string) highlight_regex (string) highlight_regex_compiled (pointer) highlight_disable_regex (string) highlight_disable_regex_compiled (pointer) highlight_tags_restrict (string) highlight_tags_restrict_count (integer) highlight_tags_restrict_array (pointer, array_size: "highlight_tags_restrict_count") highlight_tags (string) highlight_tags_count (integer) highlight_tags_array (pointer, array_size: "highlight_tags_count") hotlist (pointer, hdata: "hotlist") hotlist_max_level_nicks (hashtable) keys (pointer, hdata: "key") last_key (pointer, hdata: "key") keys_count (integer) local_variables (hashtable) prev_buffer (pointer, hdata: "buffer") next_buffer (pointer, hdata: "buffer")
weechat | buffer_visited | visited buffer | gui_buffers_visited last_gui_buffer_visited | buffer (pointer, hdata: "buffer") prev_buffer (pointer, hdata: "buffer_visited") next_buffer (pointer, hdata: "buffer_visited")
weechat | completion | structure with completion | weechat_completions last_weechat_completion | plugin (pointer, hdata: "plugin") buffer (pointer, hdata: "buffer") context (integer) case_sensitive (integer) base_command (string) base_command_arg_index (integer) base_word (string) base_word_pos (integer) position (integer) args (string) direction (integer) add_space (integer) partial_completion (integer) template_partial_completion (integer) list (pointer) word_found (string) word_found_is_nick (integer) position_replace (integer) diff_size (integer) diff_length (integer) partial_list (pointer) prev_completion (pointer, hdata: "completion") next_completion (pointer, hdata: "completion")
weechat | completion_word | structure with word found for a completion | - | word (string) nick_completion (char) count (integer)
weechat | config_file | config file | config_files last_config_file | plugin (pointer, hdata: "plugin") priority (integer) name (string) filename (string) file (pointer) version (integer) callback_reload (pointer) callback_reload_pointer (pointer) callback_reload_data (pointer) sections (pointer, hdata: "config_section") last_section (pointer, hdata: "config_section") prev_config (pointer, hdata: "config_file") next_config (pointer, hdata: "config_file")
weechat | config_option | config option | - | config_file (pointer, hdata: "config_file") section (pointer, hdata: "config_section") name (string) parent_name (string) type (integer) description (string) string_values (string, array_size: "*") min (integer) max (integer) default_value (pointer) value (pointer) null_value_allowed (integer) callback_check_value (pointer) callback_check_value_pointer (pointer) callback_check_value_data (pointer) callback_change (pointer) callback_change_pointer (pointer) callback_change_data (pointer) callback_delete (pointer) callback_delete_pointer (pointer) callback_delete_data (pointer) loaded (integer) prev_option (pointer, hdata: "config_option") next_option (pointer, hdata: "config_option")
weechat | config_section | config section | - | config_file (pointer, hdata: "config_file") name (string) user_can_add_options (integer) user_can_delete_options (integer) callback_read (pointer) callback_read_pointer (pointer) callback_read_data (pointer) callback_write (pointer) callback_write_pointer (pointer) callback_write_data (pointer) callback_write_default (pointer) callback_write_default_pointer (pointer) callback_write_default_data (pointer) callback_create_option (pointer) callback_create_option_pointer (pointer) callback_create_option_data (pointer) callback_delete_option (pointer) callback_delete_option_pointer (pointer) callback_delete_option_data (pointer) options (pointer, hdata: "config_option") last_option (pointer, hdata: "config_option") prev_section (pointer, hdata: "config_section") next_section (pointer, hdata: "config_section")
weechat | filter | filter | gui_filters last_gui_filter | enabled (integer) name (string) buffer_name (string) num_buffers (integer) buffers (pointer) tags (string) tags_count (integer) tags_array (pointer, array_size: "tags_count") regex (string) regex_prefix (pointer) regex_message (pointer) prev_filter (pointer, hdata: "filter") next_filter (pointer, hdata: "filter")
weechat | history | history of commands in buffer | gui_history last_gui_history | text (string) next_history (pointer, hdata: "history") prev_history (pointer, hdata: "history") Update allowed: __create __delete
weechat | hook | hook | weechat_hooks_command weechat_hooks_command_run weechat_hooks_completion weechat_hooks_config weechat_hooks_connect weechat_hooks_fd weechat_hooks_focus weechat_hooks_hdata weechat_hooks_hsignal weechat_hooks_info weechat_hooks_info_hashtable weechat_hooks_infolist weechat_hooks_line weechat_hooks_modifier weechat_hooks_print weechat_hooks_process weechat_hooks_signal weechat_hooks_timer weechat_hooks_url last_weechat_hook_command last_weechat_hook_command_run last_weechat_hook_completion last_weechat_hook_config last_weechat_hook_connect last_weechat_hook_fd last_weechat_hook_focus last_weechat_hook_hdata last_weechat_hook_hsignal last_weechat_hook_info last_weechat_hook_info_hashtable last_weechat_hook_infolist last_weechat_hook_line last_weechat_hook_modifier last_weechat_hook_print last_weechat_hook_process last_weechat_hook_signal last_weechat_hook_timer last_weechat_hook_url | plugin (pointer, hdata: "plugin") subplugin (string) type (integer) deleted (integer) running (integer) priority (integer) callback_pointer (pointer) callback_data (pointer) hook_data (pointer) prev_hook (pointer, hdata: "hook") next_hook (pointer, hdata: "hook")
weechat | hook_command | hook "command" | - | callback (pointer) command (string) description (string) args (string) args_description (string) completion (string) cplt_num_templates (integer) cplt_templates (pointer, array_size: "cplt_num_templates") cplt_templates_static (pointer, array_size: "cplt_num_templates") cplt_template_num_args (integer, array_size: "cplt_num_templates") cplt_template_args (pointer, array_size: "cplt_num_templates") cplt_template_num_args_concat (integer) cplt_template_args_concat (pointer, array_size: "cplt_template_num_args_concat") keep_spaces_right (integer)
weechat | hook_command_run | hook "command_run" | - | callback (pointer) command (string) keep_spaces_right (integer)
weechat | hook_completion | hook "completion" | - | callback (pointer) completion_item (string) description (string)
weechat | hook_config | hook "config" | - | callback (pointer) option (string)
weechat | hook_connect | hook "connect" | - | callback (pointer) proxy (string) address (string) port (integer) ipv6 (integer) sock (integer) retry (integer) gnutls_sess (pointer) gnutls_cb (pointer) gnutls_dhkey_size (integer) gnutls_priorities (string) local_hostname (string) child_read (integer) child_write (integer) child_recv (integer) child_send (integer) child_pid (integer) hook_child_timer (pointer, hdata: "hook") hook_fd (pointer, hdata: "hook") handshake_hook_fd (pointer, hdata: "hook") handshake_hook_timer (pointer, hdata: "hook") handshake_fd_flags (integer) handshake_ip_address (string) sock_v4 (integer, array_size: "4") sock_v6 (integer, array_size: "4")
weechat | hook_fd | hook "fd" | - | callback (pointer) fd (integer) flags (integer) error (integer)
weechat | hook_focus | hook "focus" | - | callback (pointer) area (string)
weechat | hook_hdata | hook "hdata" | - | callback (pointer) hdata_name (string) description (string)
weechat | hook_hsignal | hook "hsignal" | - | callback (pointer) signals (string, array_size: "num_signals") num_signals (integer)
weechat | hook_info | hook "info" | - | callback (pointer) info_name (string) description (string) args_description (string)
weechat | hook_info_hashtable | hook "info_hashtable" | - | callback (pointer) info_name (string) description (string) args_description (string) output_description (string)
weechat | hook_infolist | hook "infolist" | - | callback (pointer) infolist_name (string) description (string) pointer_description (string) args_description (string)
weechat | hook_line | hook "line" | - | callback (pointer) buffer_type (integer) buffers (string, array_size: "num_buffers") num_buffers (integer) tags_count (integer) tags_array (string, array_size: "tags_count")
weechat | hook_modifier | hook "modifier" | - | callback (pointer) modifier (string)
weechat | hook_print | hook "print" | - | callback (pointer) buffer (pointer, hdata: "buffer") tags_count (integer) tags_array (string, array_size: "tags_count") message (string) strip_colors (integer)
weechat | hook_process | hook "process" | - | callback (pointer) command (string) options (hashtable) detached (integer) timeout (long) child_read (integer, array_size: "3") child_write (integer, array_size: "3") child_pid (integer) hook_fd (pointer, array_size: "3", hdata: "hook") hook_timer (pointer, hdata: "hook") buffer (string, array_size: "3") buffer_size (integer, array_size: "3") buffer_flush (integer)
weechat | hook_signal | hook "signal" | - | callback (pointer) signals (string, array_size: "num_signals") num_signals (integer)
weechat | hook_timer | hook "timer" | - | callback (pointer) interval (long) align_second (integer) remaining_calls (integer) last_exec (time) last_exec_usec (long) next_exec (time) next_exec_usec (long)
weechat | hook_url | hook "url" | - | callback (pointer) url (string) options (hashtable) timeout (long) thread_id (long) thread_created (integer) thread_running (integer) hook_timer (pointer, hdata: "hook") output (hashtable)
weechat | hotlist | hotlist | gui_hotlist last_gui_hotlist | priority (integer) time (time) time_usec (long) buffer (pointer, hdata: "buffer") count (integer, array_size: "4") prev_hotlist (pointer, hdata: "hotlist") next_hotlist (pointer, hdata: "hotlist")
weechat | input_undo | structure with undo for input line | - | data (string) pos (integer) prev_undo (pointer, hdata: "input_undo") next_undo (pointer, hdata: "input_undo")
weechat | key | a key (keyboard shortcut) | gui_default_keys gui_default_keys_cursor gui_default_keys_histsearch gui_default_keys_mouse gui_default_keys_search gui_keys gui_keys_cursor gui_keys_histsearch gui_keys_mouse gui_keys_search last_gui_default_key last_gui_default_key_cursor last_gui_default_key_histsearch last_gui_default_key_mouse last_gui_default_key_search last_gui_key last_gui_key_cursor last_gui_key_histsearch last_gui_key_mouse last_gui_key_search | key (string) area_type (pointer) area_name (pointer) area_key (string) command (string) score (integer) prev_key (pointer, hdata: "key") next_key (pointer, hdata: "key")
weechat | layout | layout | gui_layout_current gui_layouts last_gui_layout | name (string) layout_buffers (pointer, hdata: "layout_buffer") last_layout_buffer (pointer, hdata: "layout_buffer") layout_windows (pointer, hdata: "layout_window") internal_id (integer) internal_id_current_window (integer) prev_layout (pointer, hdata: "layout") next_layout (pointer, hdata: "layout")
weechat | layout_buffer | buffer layout | - | plugin_name (string) buffer_name (string) number (integer) prev_layout (pointer, hdata: "layout_buffer") next_layout (pointer, hdata: "layout_buffer")
weechat | layout_window | window layout | - | internal_id (integer) parent_node (pointer, hdata: "layout_window") split_pct (integer) split_horiz (integer) child1 (pointer, hdata: "layout_window") child2 (pointer, hdata: "layout_window") plugin_name (string) buffer_name (string)
weechat | line | structure with one line | - | data (pointer, hdata: "line_data") prev_line (pointer, hdata: "line") next_line (pointer, hdata: "line")
weechat | line_data | structure with one line data | - | buffer (pointer, hdata: "buffer") id (integer) y (integer) date (time) date_usec (integer) date_printed (time) date_usec_printed (integer) str_time (string) tags_count (integer) tags_array (shared_string, array_size: "tags_count") displayed (char) notify_level (char) highlight (char) refresh_needed (char) prefix (shared_string) prefix_length (integer) message (string) Update allowed: date (time) date_usec (integer) date_printed (time) date_usec_printed (integer) tags_array (shared_string) prefix (shared_string) message (string)
weechat | lines | structure with lines | - | first_line (pointer, hdata: "line") last_line (pointer, hdata: "line") last_read_line (pointer, hdata: "line") lines_count (integer) first_line_not_read (integer) lines_hidden (integer) buffer_max_length (integer) buffer_max_length_refresh (integer) prefix_max_length (integer) prefix_max_length_refresh (integer)
weechat | nick | nick in nicklist | - | id (longlong) group (pointer, hdata: "nick_group") name (shared_string) color (shared_string) prefix (shared_string) prefix_color (shared_string) visible (integer) prev_nick (pointer, hdata: "nick") next_nick (pointer, hdata: "nick")
weechat | nick_group | group in nicklist | - | id (longlong) name (shared_string) color (shared_string) visible (integer) level (integer) parent (pointer, hdata: "nick_group") children (pointer, hdata: "nick_group") last_child (pointer, hdata: "nick_group") nicks (pointer, hdata: "nick") last_nick (pointer, hdata: "nick") prev_group (pointer, hdata: "nick_group") next_group (pointer, hdata: "nick_group")
weechat | plugin | plugin | weechat_plugins last_weechat_plugin | filename (string) handle (pointer) name (string) description (string) author (string) version (string) license (string) charset (string) priority (integer) initialized (integer) debug (integer) upgrading (integer) unload_with_upgrade (integer) variables (hashtable) prev_plugin (pointer, hdata: "plugin") next_plugin (pointer, hdata: "plugin")
weechat | proxy | proxy | weechat_proxies last_weechat_proxy | name (string) options (pointer) prev_proxy (pointer, hdata: "proxy") next_proxy (pointer, hdata: "proxy")
weechat | window | window | gui_current_window gui_windows last_gui_window | number (integer) win_x (integer) win_y (integer) win_width (integer) win_height (integer) win_width_pct (integer) win_height_pct (integer) win_chat_x (integer) win_chat_y (integer) win_chat_width (integer) win_chat_height (integer) win_chat_cursor_x (integer) win_chat_cursor_y (integer) bar_windows (pointer, hdata: "bar_window") last_bar_window (pointer, hdata: "bar_window") refresh_needed (integer) gui_objects (pointer) buffer (pointer, hdata: "buffer") layout_plugin_name (string) layout_buffer_name (string) scroll (pointer, hdata: "window_scroll") scroll_changed (integer) ptr_tree (pointer, hdata: "window_tree") prev_window (pointer, hdata: "window") next_window (pointer, hdata: "window")
weechat | window_scroll | scroll info in window | - | buffer (pointer, hdata: "buffer") first_line_displayed (integer) start_line (pointer, hdata: "line") start_line_pos (integer) scrolling (integer) start_col (integer) lines_after (integer) text_search_start_line (pointer, hdata: "line") prev_scroll (pointer, hdata: "window_scroll") next_scroll (pointer, hdata: "window_scroll")
weechat | window_tree | tree of windows | gui_windows_tree | parent_node (pointer, hdata: "window_tree") split_pct (integer) split_horizontal (integer) child1 (pointer, hdata: "window_tree") child2 (pointer, hdata: "window_tree") window (pointer, hdata: "window")

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("irc_server");

Скрипта (Python):

    # прототип
    def hdata_get(hdata_name: str) -> str: ...

    # пример
    hdata = weechat.hdata_get("irc_server")

#### hdata_get_var_offset

WeeChat ≥ 0.3.6.

Враћа померај променљиве у hdata.

Прототип:

    int weechat_hdata_get_var_offset (struct t_hdata *hdata, const char *name);

Аргументи:

- hdata: показивач на hdata

- name: име променљиве

Повратна вредност:

- померај променљиве, -1 у случају да је дошло до грешке

C пример:

    int offset = weechat_hdata_get_var_offset (hdata, "name");

Скрипта (Python):

    # прототип
    def hdata_get_var_offset(hdata: str, name: str) -> int: ...

    # пример
    offset = weechat.hdata_get_var_offset(hdata, "name")

#### hdata_get_var_type

WeeChat ≥ 0.3.6.

Повратни тип променљиве у hdata (као цео број).

Прототип:

    int weechat_hdata_get_var_type (struct t_hdata *hdata, const char *name);

Аргументи:

- hdata: показивач на hdata

- name: име променљиве

Повратна вредност:

- тип променљиве, -1 у случају да је дошло до грешке

C пример:

    int type = weechat_hdata_get_var_type (hdata, "name");
    switch (type)
    {
        case WEECHAT_HDATA_CHAR:
            /* ... */
            break;
        case WEECHAT_HDATA_INTEGER:
            /* ... */
            break;
        case WEECHAT_HDATA_LONG:
            /* ... */
            break;
        case WEECHAT_HDATA_LONGLONG:
            /* ... */
            break;
        case WEECHAT_HDATA_STRING:
            /* ... */
            break;
        case WEECHAT_HDATA_SHARED_STRING:
            /* ... */
            break;
        case WEECHAT_HDATA_POINTER:
            /* ... */
            break;
        case WEECHAT_HDATA_TIME:
            /* ... */
            break;
        case WEECHAT_HDATA_HASHTABLE:
            /* ... */
            break;
        case WEECHAT_HDATA_OTHER:
            /* ... */
            break;
        default:
            /* променљива није пронађена */
            break;
    }

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_get_var_type_string

WeeChat ≥ 0.3.6.

Повратни тип променљиве у hdata (као стринг).

Прототип:

    const char *weechat_hdata_get_var_type_string (struct t_hdata *hdata, const char *name);

Аргументи:

- hdata: показивач на hdata

- name: име променљиве

Повратна вредност:

- тип променљиве, NULL у случају да је дошло до грешке

C пример:

    weechat_printf (NULL, "type = %s", weechat_hdata_get_var_type_string (hdata, "name"));

Скрипта (Python):

    # прототип
    def hdata_get_var_type_string(hdata: str, name: str) -> str: ...

    # пример
    weechat.prnt("", "type = %s" % weechat.hdata_get_var_type_string("name"))

#### hdata_get_var_array_size

WeeChat ≥ 0.3.9.

Враћа величину низа за променљиву у hdata.

Прототип:

    int weechat_hdata_get_var_array_size (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве

Повратна вредност:

- величина низа за променљиву, -1 ако променљива није низ или у случају да је дошло до грешке

C пример:

    int array_size = weechat_hdata_get_var_array_size (hdata, pointer, "name");

Скрипта (Python):

    # прототип
    def hdata_get_var_array_size(hdata: str, pointer: str, name: str) -> int: ...

    # пример
    array_size = weechat.hdata_get_var_array_size(hdata, pointer, "name")

#### hdata_get_var_array_size_string

WeeChat ≥ 0.3.9.

Враћа величину низа за променљиву у hdata (као стринг).

Прототип:

    const char *weechat_hdata_get_var_array_size_string (struct t_hdata *hdata, void *pointer,
                                                         const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве

Повратна вредност:

- величина низа за променљиву као стринг, NULL у случају да променљива није низ, или ако је дошло до грешке

C пример:

    const char *array_size = weechat_hdata_get_var_array_size_string (hdata, pointer, "name");

Скрипта (Python):

    # прототип
    def hdata_get_var_array_size_string(hdata: str, pointer: str, name: str) -> str: ...

    # пример
    array_size = weechat.hdata_get_var_array_size_string(hdata, pointer, "name")

#### hdata_get_var_hdata

WeeChat ≥ 0.3.6.

Враћа hdata за променљиву у hdata.

Прототип:

    const char *weechat_hdata_get_var_hdata (struct t_hdata *hdata, const char *name);

Аргументи:

- hdata: показивач на hdata

- name: име променљиве

Повратна вредност:

- hdata за променљиву, NULL ако нема hdata или у случају да је дошло до грешке

C пример:

    weechat_printf (NULL, "hdata = %s", weechat_hdata_get_var_hdata (hdata, "name"));

Скрипта (Python):

    # прототип
    def hdata_get_var_hdata(hdata: str, name: str) -> str: ...

    # пример
    weechat.prnt("", "hdata = %s" % weechat.hdata_get_var_hdata(hdata, "name"))

#### hdata_get_var

WeeChat ≥ 0.3.6.

Враћа показивач на садржај променљиве у hdata.

Прототип:

    void *weechat_hdata_get_var (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве

Повратна вредност:

- показивач на садржај променљиве, NULL у случају да је дошло до грешке

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();
    void *pointer = weechat_hdata_get_var (hdata, buffer, "name");

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_get_var_at_offset

WeeChat ≥ 0.3.6.

Враћа показивач на садржај променљиве у hdata, користећи померај.

Прототип:

    void *weechat_hdata_get_var_at_offset (struct t_hdata *hdata, void *pointer, int offset);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- offset: померај променљиве

Повратна вредност:

- показивач на садржај променљиве, NULL у случају да је дошло до грешке

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();
    int offset = weechat_hdata_get_var_offset (hdata, "name");
    void *pointer = weechat_hdata_get_var_at_offset (hdata, buffer, offset);

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_get_list

WeeChat ≥ 0.3.6.

Враћа показивач на листу из hdata.

Прототип:

    void *weechat_hdata_get_list (struct t_hdata *hdata, const char *name);

Аргументи:

- hdata: показивач на hdata

- name: име листе

Повратна вредност:

- показивач на листу, NULL у случају да је дошло до грешке

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffers = weechat_hdata_get_list (hdata, "gui_buffers");

Скрипта (Python):

    # прототип
    def hdata_get_list(hdata: str, name: str) -> str: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffers = weechat.hdata_get_list(hdata, "gui_buffers")

#### hdata_check_pointer

WeeChat ≥ 0.3.7, ажурирано у верзији 1.0.

Проверава да ли показивач важи за hdata и показивач листе.

Прототип:

    int weechat_hdata_check_pointer (struct t_hdata *hdata, void *list, void *pointer);

Аргументи:

- hdata: показивач на hdata

- list: показивач на листу; ако је NULL (WeeChat ≥ 1.0), показивач се проверава са листама у hdata које имају заставицу „check pointers” (погледајте hdata_new_list), па ако таква листа не постоји, сматра се да је показивач важећи

- pointer: показивач који треба да се провери

Повратна вредност:

- 1 ако је показивач у листи, 0 ако се не пронађе

C пример:

    /* check if a buffer pointer is valid */
    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    if (weechat_hdata_check_pointer (hdata,
                                     weechat_hdata_get_list (hdata, "gui_buffers"),
                                     ptr_buffer))
    {
        /* важећи показивач */
    }
    else
    {
        /* неважећи показивач */
    }

Скрипта (Python):

    # прототип
    def hdata_check_pointer(hdata: str, list: str, pointer: str) -> int: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    if weechat.hdata_check_pointer(hdata, weechat.hdata_get_list(hdata, "gui_buffers"), ptr_buffer):
        # важећи показивач
        # ...
    else:
        # неважећи показивач
        # ...

#### hdata_move

WeeChat ≥ 0.3.6.

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

Прототип:

    void *weechat_hdata_move (struct t_hdata *hdata, void *pointer, int count);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- count: број скок(а/ова) који треба да се изврше (негативни или позитивни цео број различит од нуле)

Повратна вредност:

- показивач на достигнут елемент, NULL ако се елемент не пронађе (на пример, крај листе), или је дошло до грешке

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();

    /* помера се на наредни бафер, 2 пута */
    buffer = weechat_hdata_move (hdata, buffer, 2);

    /* помера се на претходни бафер */
    if (buffer)
        buffer = weechat_hdata_move (hdata, buffer, -1);

Скрипта (Python):

    # прототип
    def hdata_move(hdata: str, pointer: str, count: int) -> str: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffer = weechat.buffer_search_main()

    # помера се на наредни бафер, 2 пута
    buffer = weechat.hdata_move(hdata, buffer, 2)

    # помера се на претходни бафер
    if buffer:
        buffer = weechat.hdata_move(hdata, buffer, -1)

#### hdata_search

WeeChat ≥ 0.4.1, ажурирано у верзији 3.4.

Тражи елемент у листи: израз search се тражи за сваки елемент у листи, све док се елемент не пронађе (или наиђе на крај листе).

Прототип:

    void *weechat_hdata_search (struct t_hdata *hdata, void *pointer, const char *search,
                                struct t_hashtable *pointers, struct t_hashtable *extra_vars,
                                struct t_hashtable *options, int move);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- search: израз који се израчунава, подразумевани показивач у изразу је име hdata (и овај показивач се мења за сваки елемент у листи); за помоћ у вези израза, погледајте WeeChat корисничко упутство / Команда /eval ↗

- pointers: хеш табела за позив функције string_eval_expression

- extra_vars: хеш табела за позив функције string_eval_expression

- options: хеш табела за позив функције string_eval_expression

- move: број скок(а/ова) који треба да се изврши након неуспешне претраге (негативни или позитивни цео број, различит од 0)

Важно | Морате обезбедити да је search израз сигуран и да не садржи корисничке податке. Такви небезбедни подаци морају да се наведу у хеш табели extra_vars и да се на њих у search изразу укаже са `${xxx}` (погледајте пример испод).

Повратна вредност:

- показивач на пронађени елемент, NULL у случају да се не пронађе

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("irc_server");
    void *servers = weechat_hdata_get_list (hdata, "irc_servers");
    struct t_hashtable *extra_vars = weechat_hashtable_new (8,
                                                            WEECHAT_HASHTABLE_STRING,
                                                            WEECHAT_HASHTABLE_STRING,
                                                            NULL,
                                                            NULL);

    /* тражи irc сервер под именом „libera” */
    weechat_hashtable_set (extra_vars, "server_name", "libera");
    void *server = weechat_hdata_search (hdata, servers, "${irc_server.name} == ${server_name}",
                                         NULL, extra_vars, NULL, 1);
    if (server)
    {
        /* ... */
    }
    weechat_hashtable_free (extra_vars);

Скрипта (Python):

    # прототип
    def hdata_search(hdata: str, pointer: str, search: str,
                     pointers: Dict[str, str], extra_vars: Dict[str, str], options: Dict[str, str],
                     count: int) -> str: ...

    # пример
    hdata = weechat.hdata_get("irc_server")
    servers = weechat.hdata_get_list(hdata, "irc_servers")

    # тражи irc сервер под именом „libera”
    server = weechat.hdata_search(hdata, servers, "${irc_server.name} == ${server_name}",
                                  {}, {"server_name": "libera"}, {}, 1)
    if server:
        # ...

#### hdata_char

WeeChat ≥ 0.3.7.

Враћа вредност карактер променљиве у структури користећи hdata.

Прототип:

    char weechat_hdata_char (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „char”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- карактер вредност променљиве

C пример:

    weechat_printf (NULL, "letter = %c", weechat_hdata_char (hdata, pointer, "letter"));

Скрипта (Python):

    # прототип
    def hdata_char(hdata: str, pointer: str, name: str) -> int: ...

    # пример
    weechat.prnt("", "letter = %c" % weechat.hdata_char(hdata, pointer, "letter"))

#### hdata_integer

WeeChat ≥ 0.3.6.

Враћа вредност целобројне променљиве у структури користећи hdata.

Прототип:

    int weechat_hdata_integer (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „integer”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- целобројна вредност променљиве

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();
    weechat_printf (NULL, "number = %d", weechat_hdata_integer (hdata, buffer, "number"));

Скрипта (Python):

    # прототип
    def hdata_integer(hdata: str, pointer: str, name: str) -> int: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffer = weechat.buffer_search_main()
    weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))

#### hdata_long

WeeChat ≥ 0.3.6.

Враћа вредност дугачке променљиве у структури користећи hdata.

Прототип:

    long weechat_hdata_long (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „long”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- дугачка вредност променљиве

C пример:

    weechat_printf (NULL, "longvar = %ld", weechat_hdata_long (hdata, pointer, "longvar"));

Скрипта (Python):

    # прототип
    def hdata_long(hdata: str, pointer: str, name: str) -> int: ...

    # пример
    weechat.prnt("", "longvar = %d" % weechat.hdata_long(hdata, pointer, "longvar"))

#### hdata_longlong

WeeChat ≥ 4.3.0.

Повратна вредност „long long” променљиве у структури користећи hdata.

Прототип:

    long long weechat_hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „long long”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- „long long” вредност променљиве

C пример:

    weechat_printf (NULL, "longlongvar = %lld", weechat_hdata_longlong (hdata, pointer, "longlongvar"));

Скрипта (Python):

    # прототип
    def hdata_longlong(hdata: str, pointer: str, name: str) -> int: ...

    # пример
    weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))

#### hdata_string

WeeChat ≥ 0.3.6.

Враћа вредност стринг променљиве у структури користећи hdata.

Прототип:

    const char *weechat_hdata_string (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „string”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- стринг вредност променљиве

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();
    weechat_printf (NULL, "name = %s", weechat_hdata_string (hdata, buffer, "name"));

Скрипта (Python):

    # прототип
    def hdata_string(hdata: str, pointer: str, name: str) -> str: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffer = weechat.buffer_search_main()
    weechat.prnt("", "name = %s" % weechat.hdata_string(hdata, buffer, "name"))

#### hdata_pointer

WeeChat ≥ 0.3.6.

Враћа вредност показивач променљиве у структури користећи hdata.

Прототип:

    void *weechat_hdata_pointer (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „pointer”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- показивач вредност променљиве

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();
    weechat_printf (NULL, "lines = %p", weechat_hdata_pointer (hdata, buffer, "lines"));

Скрипта (Python):

    # прототип
    def hdata_pointer(hdata: str, pointer: str, name: str) -> str: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffer = weechat.buffer_search_main()
    weechat.prnt("", "lines = %x" % weechat.hdata_pointer(hdata, buffer, "lines"))

#### hdata_time

WeeChat ≥ 0.3.6.

Враћа вредност временске променљиве у структури користећи hdata.

Прототип:

    time_t weechat_hdata_time (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „time”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- временска вредност променљиве

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *ptr = weechat_buffer_search_main ();
    ptr = weechat_hdata_pointer (hdata, ptr, "lines");
    if (ptr)
    {
        hdata = weechat_hdata_get ("lines");
        ptr = weechat_hdata_pointer (hdata, ptr, "first_line");
        if (ptr)
        {
            hdata = weechat_hdata_get ("line");
            ptr = weechat_hdata_pointer (hdata, ptr, "data");
            if (ptr)
            {
                hdata = weechat_hdata_get ("line_data");
                time_t date = weechat_hdata_time (hdata, hdata, "date");
                weechat_printf (NULL, "time of last line displayed = %s", ctime (&date));
            }
        }
    }

Скрипта (Python):

    # прототип
    def hdata_time(hdata: str, pointer: str, name: str) -> int: ...

    # пример
    buf = weechat.buffer_search_main()
    ptr = weechat.hdata_pointer(weechat.hdata_get("buffer"), buf, "lines")
    if ptr:
        ptr = weechat.hdata_pointer(weechat.hdata_get("lines"), ptr, "first_line")
        if ptr:
            ptr = weechat.hdata_pointer(weechat.hdata_get("line"), ptr, "data")
            if ptr:
                date = weechat.hdata_time(weechat.hdata_get("line_data"), ptr, "date")
                weechat.prnt("", "time of first line displayed = %s" % time.strftime("%F %T", time.localtime(int(date))))

#### hdata_hashtable

WeeChat ≥ 0.3.7.

Враћа вредност хеш табела променљиве у структури користећи hdata.

Прототип:

    struct t_hashtable *weechat_hdata_hashtable (struct t_hdata *hdata, void *pointer, const char *name);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (мора бити типа „hashtable”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

Повратна вредност:

- хеш табела вредност променљиве (показивач на хеш табелу)

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer = weechat_buffer_search_main ();
    struct t_hashtable *hashtable = weechat_hdata_hashtable (hdata, buffer, "local_variables");
    weechat_printf (NULL, "%d local variables in core buffer",
                    weechat_hashtable_get_integer (hashtable, "items_count"));

Скрипта (Python):

    # прототип
    def hdata_hashtable(hdata: str, pointer: str, name: str) -> Dict[str, str]: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffer = weechat.buffer_search_main()
    hash = weechat.hdata_hashtable(hdata, buffer, "local_variables")
    weechat.prnt("", "локалне променљиве у core баферу:")
    for key in hash:
        weechat.prnt("", "  %s == %s" % (key, hash[key]))

#### hdata_compare

WeeChat ≥ 1.9, ажурирано у верзији 4.1.0.

Пореди hdata променљиву два објекта.

Прототип:

    int weechat_hdata_compare (struct t_hdata *hdata, void *pointer1, void *pointer2, const char *name, int case_sensitive);

Аргументи:

- hdata: показивач на hdata

- pointer1: показивач на први објекат програма WeeChat/додатка

- pointer2: показивач на други објекат програма WeeChat/додатка

- name: назив променљиве или путања до назива променљиве; у случају низова, име може бити „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”

- case_sensitive: 1 за поређење стрингова које разликује величину слова, у супротном 0

Повратна вредност:

- -1 ако је variable1 < variable2

- 0 ако је variable1 == variable2

- 1 ако је variable1 > variable2

C пример:

    struct t_hdata *hdata = weechat_hdata_get ("buffer");
    struct t_gui_buffer *buffer1 = weechat_buffer_search ("irc", "libera.#weechat");
    struct t_gui_buffer *buffer2 = weechat_buffer_search ("irc", "libera.#weechat-fr");
    weechat_printf (NULL, "comparison of buffer number = %d",
                    weechat_hdata_compare (hdata, buffer1, buffer2, "number", 0));
    weechat_printf (NULL, "comparison of number of lines = %d",
                    weechat_hdata_compare (hdata, buffer1, buffer2, "own_lines.lines_count", 0));
    weechat_printf (NULL, "comparison of local variable = %d",
                    weechat_hdata_compare (hdata, buffer1, buffer2, "local_variables.myvar", 0));

Скрипта (Python):

    # прототип
    def hdata_compare(hdata: str, pointer1: str, pointer2: str, name: str, case_sensitive: int) -> int: ...

    # пример
    hdata = weechat.hdata_get("buffer")
    buffer1 = weechat.buffer_search("irc", "libera.#weechat")
    buffer2 = weechat.buffer_search("irc", "libera.#weechat-fr")
    weechat.prnt("", "comparison of buffer number = %d" % weechat.hdata_compare(hdata, buffer1, buffer2, "number", 0))
    weechat.prnt("", "comparison of number of lines = %d" % weechat.hdata_compare(hdata, buffer1, buffer2, "own_lines.lines_count", 0))
    weechat.prnt("", "comparison of local variable = %d" % weechat.hdata_compare(hdata, buffer1, buffer2, "local_variables.myvar", 0))

#### hdata_set

WeeChat ≥ 0.3.9.

Поставља нову вредност променљиве у hdata.

Белешка | Ова функција може да се позива само из функције повратног позива ажурирања (погледајте hdata_new и hdata_update), ако је дозвољено ажурирање променљиве.

Прототип:

    int weechat_hdata_set (struct t_hdata *hdata, void *pointer, const char *name, const char *value);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- name: име променљиве (дозвољени типови: char, integer, long, string, pointer, time)

- value: нова вредност променљиве

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    weechat_hdata_set (hdata, pointer, "message", "test");

Белешка | Ова функција није доступна у API скриптовања.

#### hdata_update

WeeChat ≥ 0.3.9.

Ажурира податке у hdata.

Прототип:

    int weechat_hdata_update (struct t_hdata *hdata, void *pointer, struct t_hashtable *hashtable);

Аргументи:

- hdata: показивач на hdata

- pointer: показивач на објекат програма WeeChat/додатка

- hashtable: променљиве које треба да се ажурирају: кључеви су имена променљивих, вредност су нове вредности за те променљиве (кључеви и вредности су стрингови), дозвољени су и неки специјални кључеви:

  - кључ `__create_allowed` (са било којим вредности): враћа се 1 ако је за структуру дозвољено ажурирање, у супротном 0 (WeeChat ≥ 0.4.0)

  - кључ `__delete_allowed` (са било којом вредности): враћа се 1 ако је за структуру дозвољено брисање, у супротном 0

  - кључ `__update_allowed`, вредност је име променљиве: враћа се 1 ако је за ову променљиву дозвољено ажурирање, у супротном 0

  - кључ `__delete` (са било којом вредности): структура се брише (ако је то дозвољено)

Повратна вредност:

- број ажурираних променљивих

C пример:

    /* одузима један сад од последње приказане поруке у текућем баферу */

    struct t_gui_lines *own_lines;
    struct t_gui_line *line;
    struct t_gui_line_data *line_data;
    struct t_hdata *hdata;
    struct t_hashtable *hashtable;
    char str_date[64];

    own_lines = weechat_hdata_pointer (weechat_hdata_get ("buffer"), weechat_current_buffer (), "own_lines");
    if (own_lines)
    {
        line = weechat_hdata_pointer (weechat_hdata_get ("lines"), own_lines, "last_line");
        if (line)
        {
            line_data = weechat_hdata_pointer (weechat_hdata_get ("line"), line, "data");
            hdata = weechat_hdata_get ("line_data");
            hashtable = weechat_hashtable_new (8,
                                               WEECHAT_HASHTABLE_STRING,
                                               WEECHAT_HASHTABLE_STRING,
                                               NULL,
                                               NULL);
            if (hashtable)
            {
                snprintf (str_date, sizeof (str_date), "%ld", ((long int)weechat_hdata_time (hdata, line_data, "date")) - 3600);
                weechat_hashtable_set (hashtable, "date", str_date);
                weechat_hdata_update (hdata, line_data, hashtable);
                weechat_hashtable_free (hashtable);
            }
        }
    }

Скрипта (Python):

    # прототип
    def hdata_update(hdata: str, pointer: str, hashtable: Dict[str, str]) -> int: ...

    # пример: одузима један сад од последње приказане поруке у текућем баферу
    own_lines = weechat.hdata_pointer(weechat.hdata_get("buffer"), weechat.current_buffer(), "own_lines")
    if own_lines:
        line = weechat.hdata_pointer(weechat.hdata_get("lines"), own_lines, "last_line")
        if line:
            line_data = weechat.hdata_pointer(weechat.hdata_get("line"), line, "data")
            hdata = weechat.hdata_get("line_data")
            weechat.hdata_update(hdata, line_data, {"date": str(weechat.hdata_time(hdata, line_data, "date") - 3600)})

#### hdata_get_string

WeeChat ≥ 0.3.6.

Враћа стринг вредност hdata особине.

Прототип:

    const char *weechat_hdata_get_string (struct t_hdata *hdata, const char *property);

Аргументи:

- hdata: показивач на hdata

- property: име особине:

  - var_keys: стринг са листом кључева за променљиве у hdata (у формату: „кључ1,кључ2,кључ3")

  - var_values: стринг са листом вредности за променљиве у hdata (у формату: „вредност1,вредност2,вредност3”)

  - var_keys_values: стринг са листом кључева и вредности за променљиве у hdata (у формату: „кључ1:вредост1,кључ2:вредност2,кључ3:вредност3”)

  - var_prev: име променљиве у структури која је показивач на претходни елемент листе

  - var_next: име променљиве у структури која је показивач на наредни елемент листе

  - list_keys: стринг са листом кључева за листе у hdata (у формату: „кључ1,кључ2,кључ3”)

  - list_values: стринг са листом вредности за листе у hdata (у формату: „вредност1,вредност2,вредност3”)

  - list_keys_values: стринг са листом кључева и вредности за листе у hdata (у формату: „кључ1:вредност1,кључ2:вредност2,кључ3:вредност3”)

Повратна вредност:

- стринг вредност особине

C пример:

    weechat_printf (NULL, "променљиве у hdata: %s", weechat_hdata_get_string (hdata, "var_keys"));
    weechat_printf (NULL, "листе у hdata: %s", weechat_hdata_get_string (hdata, "list_keys"));

Скрипта (Python):

    # прототип
    def hdata_get_string(hdata: str, property: str) -> str: ...

    # пример
    weechat.prnt("", "променљиве у hdata: %s" % weechat.hdata_get_string(hdata, "var_keys"))
    weechat.prnt("", "листе у hdata: %s" % weechat.hdata_get_string(hdata, "list_keys"))

### 3.26. Ажурирање

Функције за ажурирање програма WeeChat (командом "/upgrade").

#### upgrade_new

Ажурирано у верзији 1.5.

Креира или чита фајл за ажурирање.

Прототип:

    struct t_upgrade_file *upgrade_file_new (const char *filename,
                                             int (*callback_read)(const void *pointer,
                                                                  void *data,
                                                                  struct t_upgrade_file *upgrade_file,
                                                                  int object_id,
                                                                  struct t_infolist *infolist),
                                             const void *callback_read_pointer,
                                             void *callback_read_data);

Аргументи:

- filename: име фајла (програм WeeChat овом имену додаје екстензију „.upgrade”)

- callback_read: функција која се зове за сваки објекат који се прочита у фајлу ажурирања (ако је NULL, фајл ажурирања се отвара у режиму уписа), аргументи и повратна вредност су:

  - const void *pointer: показивач

  - void *data: показивач

  - struct t_upgrade_file *upgrade_file: показивач на фајл ажурирања

  - int object_id: id објекта

  - struct t_infolist *infolist: инфолиста са садржајем објекта

  - повратна вредност:

    - WEECHAT_RC_OK

    - WEECHAT_RC_ERROR

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

- callback_read_data: показивач који се прослеђује функцији повратног позива када је позове програм WeeChat; ако је NULL, алоцирала га је malloc (или нека слична функција) и аутоматски се ослобађа када се затвори фајл ажурирања

Повратна вредност:

- показивач на фајл ажурирања

C пример:

    struct t_upgrade_file *upgrade_file = weechat_upgrade_new ("my_file",
                                                               NULL, NULL, NULL);

Скрипта (Python):

    # прототип
    def upgrade_new(filename: str, callback_read: str, callback_read_data: str) -> str: ...

    # пример
    upgrade_file = weechat.upgrade_new("my_file", "", "")

#### upgrade_write_object

Уписује објекат у фајл ажурирања.

Прототип:

    int weechat_upgrade_write_object (struct t_upgrade_file *upgrade_file,
                                      int object_id,
                                      struct t_infolist *infolist);

Аргументи:

- upgrade_file: показивач на фајл ажурирања

- object_id: id за објекат

- infolist: инфолиста која треба да се упише у фајл

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    if (weechat_upgrade_write_object (upgrade_file, 1, &infolist))
    {
        /* OK */
    }
    else
    {
        /* грешка */
    }

Скрипта (Python):

    # прототип
    def upgrade_write_object(upgrade_file: str, object_id: int, infolist: str) -> int: ...

    # пример
    weechat.upgrade_write_object(upgrade_file, 1, infolist)

#### upgrade_read

Ажурирано у верзији 1.5.

Чита фајл ажурирања.

Прототип:

    int weechat_upgrade_read (struct t_upgrade_file *upgrade_file);

Аргументи:

- upgrade_file: показивач на фајл ажурирања

Повратна вредност:

- 1 ако је све OK, 0 у случају грешке

C пример:

    weechat_upgrade_read (upgrade_file);

Скрипта (Python):

    # прототип
    def upgrade_read(upgrade_file: str) -> int: ...

    # пример
    weechat.upgrade_read(upgrade_file)

#### upgrade_close

Затвара фајл ажурирања.

Прототип:

    void weechat_upgrade_close (struct t_upgrade_file *upgrade_file);

Аргументи:

- upgrade_file: показивач на фајл ажурирања

C пример:

    weechat_upgrade_close (upgrade_file);

Скрипта (Python):

    # прототип
    def upgrade_close(upgrade_file: str) -> int: ...

    # пример
    weechat.upgrade_close(upgrade_file)