Превод:

Ово упутство описује 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 се иницијализују у следећем редоследу:

Чин Додатак Приоритет

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

javascript

4060

15

lua

4050

16

perl

4040

17

php

4030

18

python

4020

19

ruby

4010

20

tcl

4000

21

script

3000

22

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 у случају проблема (након употребе мора да се ослободи позивом 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);

Аргументи:

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 може да се промени ако се стринг реалоцира (у случају да нема довољно простора за надовезивање стринга).

Прототип:

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 скриптовања.

3.7. Алати

Неке корисне функције.

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.

Форматира датум и време као функција strftime из C библиотеке, користећи struct timeval као улаз уз подршку за додатне спецификаторе.

Прототип:

int weechat_util_strftimeval (char *string, int max, const char *format, struct timeval *tv);

Аргументи:

  • string: бафер у који се смешта форматирани стринг

  • max: величина стринга

  • format: формат, исто као за strftime функцију, са следећим додатним спецификаторима:

    • %.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.%f", &tv);
/* резултат: 2023-12-26T18:10:04.460509 */
Ова функција није доступна у API скриптовања.

util_parse_time

WeeChat ≥ 4.2.0.

Парсира датум/време са подршком за милисекунде.

Прототип:

int util_parse_time (const char *datetime, struct timeval *tv);

Аргументи:

  • date: датум/време

  • tv: парсиран датум/време („timeval” структура)

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

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

C пример:

struct timeval tv;
weechat_util_parse_time ("2023-12-25T10:29:09.456789Z", &tv);  /* == 1 */
/* резултат: tv.tv_sec == 1703500149, tv.tv_usec = 456789 */
Ова функција није доступна у API скриптовања.

util_version_number

WeeChat ≥ 0.3.9.

Конвертује стринг са верзијом програма WeeChat у број.

Прототип:

int 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, "")

Претражује ставку у листи.

Прототип:

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 скриптовања.

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).

Приоритет подразумеваних конфигурационих фајлова:

Чин Фајл Приоритет

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

javascript.conf

4060

18

lua.conf

4050

19

perl.conf

4040

20

php.conf

4030

21

python.conf

4020

22

ruby.conf

4010

23

tcl.conf

4000

24

script.conf

3000

25

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)