翻訳者:
-
Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>, 2014-2019
このマニュアルは WeeChat チャットクライアントについての文書で、WeeChat の一部です。
この文書の最新版を見るには以下のページを確認して下さい: https://weechat.org/doc
1. はじめに
WeeChat (Wee Enhanced Environment for Chat) は無料のチャットクライアントで、高速、軽量、多くのオペレーティングシステムで動くように設計されています。
このマニュアルは WeeChat プラグイン API についての文書で、C 言語プラグインはこの API を使って WeeChat の中核部と通信しています。
2. WeeChat プラグイン
プラグインは C 言語のプログラムであり、インターフェースが定義する WeeChat 関数を呼び出すことができます。
この C 言語プログラムはコンパイルの際に WeeChat のソースを必要としません、WeeChat
は /plugin コマンドでこのプログラムを動的に読み込むことができます。
プラグインを動的にオペレーティングシステムに読み込ませるために、プラグインは必ずダイナミックライブラリにしてください。ファイルの拡張子は GNU/Linux では ".so"、Windows では ".dll" です。
プラグインでは必ず "weechat-plugin.h" ファイルをインクルードしてください (WeeChat ソースコードに含まれています)。このファイルでは WeeChat と通信する際に使う構造体や型が定義されています。
WeeChat 関数を プラグイン API に表示された書式で呼び出すには、以下のグローバルポインタを定義して weechat_plugin_init 関数の中でそれを初期化しなければいけません:
struct t_weechat_plugin *weechat_plugin;
2.1. マクロ
プラグインでは必ず以下のマクロを使ってください (いくつかの変数を定義するために必要です):
- WEECHAT_PLUGIN_NAME("name")
-
プラグイン名
- WEECHAT_PLUGIN_DESCRIPTION("description")
-
プラグインの短い説明
- WEECHAT_PLUGIN_VERSION("1.0")
-
プラグインのバージョン番号
- WEECHAT_PLUGIN_LICENSE("GPL3")
-
プラグインのライセンス
- WEECHAT_PLUGIN_PRIORITY(1000)
-
プラグインの優先度 (任意、下記参照)
2.2. 重要な関数
プラグインでは必ず以下の 2 つの関数を使ってください:
-
weechat_plugin_init
-
weechat_plugin_end
2.2.1. weechat_plugin_init
WeeChat はプラグインを読み込む際にこの関数を呼び出します。
プロトタイプ:
int weechat_plugin_init (struct t_weechat_plugin *plugin,
int argc, char *argv[]);
引数:
-
plugin: WeeChat プラグイン構造体へのポインタ。これはグローバルポインタ
weechat_pluginを初期化する際に使われます -
argc: プラグインに対する引数の数
-
argv: プラグインに対する引数 (see below)
戻り値:
-
WEECHAT_RC_OK 成功した場合 (プラグインをロードします)
-
WEECHAT_RC_ERROR エラーが起きた場合 (プラグインをロードしません)
Plugin arguments
When the plugin is loaded by WeeChat, it receives the list of arguments
in parameter argv and the number of arguments in argc.
The arguments can be:
-
command line arguments when running the WeeChat binary,
-
arguments given to the command
/plugin load xxx, when the plugin is manually loaded by the user.
When the arguments come from the command line, only these arguments are sent to the plugin:
- -a, --no-connect
-
WeeChat の起動時にサーバへの自動接続を行わない
- -s, --no-script
-
スクリプトの自動ロードを止める
- plugin:option
-
Option for a plugin: only the plugin-related options are sent, for example only the options starting with
irc:are sent to the plugin called "irc".
プラグインの優先度
複数のプラグインが自動ロードされた場合 (たとえば起動時)、WeeChat はまず全てのプラグインをロードし、各プラグインで定義された優先度に従って init 関数を呼び出します。優先度を大きな値にすれば init 関数を呼び出す順番が早くなります
デフォルトの優先度は 1000 です (この値を設定した場合、全てのデフォルトプラグインの後にプラグインをロードします)。
WeeChat のデフォルトプラグインは以下の順番で初期化されます:
-
charset (15000)
-
logger (14000)
-
exec (13000)
-
trigger (12000)
-
spell (11000)
-
alias (10000)
-
buflist (9000)
-
fifo (8000)
-
xfer (7000)
-
irc (6000)
-
relay (5000)
-
guile, javascript, lua, perl, php, python, ruby, tcl (4000)
-
script (3000)
-
fset (2000)
2.3. プラグインのコンパイル
コンパイルするために WeeChat のソースは不要で、weechat-plugin.h ファイルだけが必要です。
1 つのファイル "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/xxx/.weechat/plugins) にコピーしてください。
WeeChat の中で:
/plugin load toto
2.5. プラグインの例
コマンド /double を追加するプラグインの例: 引数を 2
倍して現在のバッファに表示するか、コマンドを 2 回実行する
(これは実用的なコマンドというよりも、ただの例です!):
#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. Registering
Functions to register a script: used only by scripting API, not the C API.
3.1.1. register
Register the script.
For more information, see the WeeChat scripting guide.
スクリプト (Python) での使用例:
# プロトタイプ
weechat.register(name, author, version, license, description, shutdown_function, charset)
|
Note
|
This function is not available in the C API. |
3.2. プラグイン
プラグインに関する情報を取得する関数。
3.2.1. plugin_get_name
プラグインの名前を取得。
プロトタイプ:
const char *weechat_plugin_get_name (struct t_weechat_plugin *plugin);
引数:
-
plugin: WeeChat プラグイン構造体へのポインタ (NULL でも可)
戻り値:
-
プラグインの名前、WeeChat コアの場合は "core" (プラグインへのポインタが NULL の場合)
C 言語での使用例:
const char *name = weechat_plugin_get_name (plugin);
スクリプト (Python) での使用例:
# プロトタイプ
name = weechat.plugin_get_name(plugin)
# 例
plugin = weechat.buffer_get_pointer(weechat.current_buffer(), "plugin")
name = weechat.plugin_get_name(plugin)
3.3. 文字列
以下の多くの文字列関数は標準的な C 言語の関数でも定義されていますが、この API 関数を使うことを推奨します。なぜなら、これらの関数は文字列を UTF-8 とロケールに準じて取り扱うようになっているからです。
3.3.1. charset_set
新しいプラグインの文字セットを設定する (デフォルトの文字セットは UTF-8 です、このためプラグインで UTF-8 を使う場合は、この関数を呼び出す必要はありません。
プロトタイプ:
void weechat_charset_set (const char *charset);
引数:
-
charset: 新たに利用する文字セット
C 言語での使用例:
weechat_charset_set ("iso-8859-1");
スクリプト (Python) での使用例:
# プロトタイプ
weechat.charset_set(charset)
# 例
weechat.charset_set("iso-8859-1")
3.3.2. 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) での使用例:
# プロトタイプ
str = weechat.iconv_to_internal(charset, string)
# 例
str = weechat.iconv_to_internal("iso-8859-1", "iso string: é à")
3.3.3. 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) での使用例:
# プロトタイプ
str = weechat.iconv_from_internal(charset, string)
# 例
str = weechat.iconv_from_internal("iso-8859-1", "utf-8 string: é à")
3.3.4. gettext
翻訳済み文字列を返す (設定言語に依存)。
プロトタイプ:
const char *weechat_gettext (const char *string);
引数:
-
string: 翻訳元の文字列
戻り値:
-
翻訳済み文字列または string (未翻訳の場合)
C 言語での使用例:
char *str = weechat_gettext ("hello");
スクリプト (Python) での使用例:
# プロトタイプ
str = weechat.gettext(string)
# 例
str = weechat.gettext("hello")
3.3.5. 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) での使用例:
# プロトタイプ
str = weechat.ngettext(string, plural, count)
# 例
num_files = 2
str = weechat.ngettext("file", "files", num_files)
3.3.6. strndup
複製した文字列を最大で length 文字分返す。
プロトタイプ:
char *weechat_strndup (const char *string, int length);
引数:
-
string: 複製元の文字列
-
length: 複製する文字列の最大文字数
戻り値:
-
複製した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_strndup ("abcdef", 3); /* result: "abc" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.7. string_tolower
UTF-8 文字列を小文字に変換。
プロトタイプ:
void weechat_string_tolower (char *string);
引数:
-
string: 変換元の文字列
C 言語での使用例:
char str[] = "AbCdé";
weechat_string_tolower (str); /* str is now: "abcdé" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.8. string_toupper
UTF-8 文字列を大文字に変換。
プロトタイプ:
void weechat_string_toupper (char *string);
引数:
-
string: 変換元の文字列
C 言語での使用例:
char str[] = "AbCdé";
weechat_string_toupper (str); /* str is now: "ABCDé" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.9. strcasecmp
WeeChat バージョン 1.0 で更新。
ロケールと大文字小文字を無視して文字列を比較。
プロトタイプ:
int weechat_strcasecmp (const char *string1, const char *string2);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strcasecmp ("aaa", "CCC"); /* == -2 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.10. strcasecmp_range
WeeChat バージョン 0.3.7 以上で利用可、バージョン 1.0 で更新。
大文字小文字を無視する文字範囲の幅を使い、ロケールと大文字小文字を無視して文字列を比較。
プロトタイプ:
int weechat_strcasecmp_range (const char *string1, const char *string2, int range);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
range: 大文字小文字を無視する文字範囲の幅、例:
-
26:
A-Zをa-zのように変換して比較 -
29:
A-Z [ \ ]をa-z { | }のように変換して比較 -
30:
A-Z [ \ ] ^をa-z { | } ~のように変換して比較
-
|
Note
|
29 と 30 は IRC など一部のプロトコルで使います。 |
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strcasecmp_range ("nick{away}", "NICK[away]", 29); /* == 0 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.11. strncasecmp
WeeChat バージョン 1.0 で更新。
ロケールと大文字小文字を無視して max 文字だけ文字列を比較。
プロトタイプ:
int weechat_strncasecmp (const char *string1, const char *string2, int max);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
max: 比較する文字数の最大値
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strncasecmp ("aabb", "aacc", 2); /* == 0 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.12. strncasecmp_range
WeeChat バージョン 0.3.7 以上で利用可、バージョン 1.0 で更新。
大文字小文字を無視する文字範囲の幅を使い、ロケールと大文字小文字を無視して max 文字だけ文字列を比較。
プロトタイプ:
int weechat_strncasecmp_range (const char *string1, const char *string2, int max, int range);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
max: 比較する文字数の最大値
-
range: 大文字小文字を無視する文字範囲の幅、例:
-
26:
A-Zをa-zのように変換して比較 -
29:
A-Z [ \ ]をa-z { | }のように変換して比較 -
30:
A-Z [ \ ] ^をa-z { | } ~のように変換して比較
-
|
Note
|
29 と 30 は IRC など一部のプロトコルで使います。 |
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strncasecmp_range ("nick{away}", "NICK[away]", 6, 29); /* == 0 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.13. strcmp_ignore_chars
WeeChat バージョン 1.0 で更新。
一部の文字列を無視して、ロケールに依存して (オプションで大文字小文字の区別をしない) 文字列を比較。
プロトタイプ:
int weechat_strcmp_ignore_chars (const char *string1, const char *string2,
const char *chars_ignored,
int case_sensitive);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
chars_ignored: 無視する文字
-
case_sensitive: 大文字小文字を区別して比較する場合は 1、区別しない場合は 0
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strcmp_ignore_chars ("a-b", "--a-e", "-", 1); /* == -3 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.14. strcasestr
WeeChat バージョン 1.3 で更新。
ロケールと大文字小文字を区別して文字列を検索。
プロトタイプ:
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"); /* result: pointer to "DeF" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.15. strlen_screen
WeeChat バージョン 0.4.2 以上で利用可。
UTF-8 文字列を画面上に表示するために必要な画面幅を返す。非表示文字を 1 文字として数えます (これが utf8_strlen_screen 関数との違いです)。
プロトタイプ:
int weechat_strlen_screen (const char *string);
引数:
-
string: 文字列
戻り値:
-
UTF-8 文字列を画面上に表示するために必要な画面幅
C 言語での使用例:
int length_on_screen = weechat_strlen_screen ("é"); /* == 1 */
スクリプト (Python) での使用例:
# プロトタイプ
length = weechat.strlen_screen(string)
# 例
length = weechat.strlen_screen("é") # 1
3.3.16. string_match
WeeChat バージョン 1.0 で更新。
文字列がマスクにマッチするか確認。
プロトタイプ:
int weechat_string_match (const char *string, const char *mask,
int case_sensitive);
引数:
-
string: 文字列
-
mask: ワイルドカード (
*) を含むマスク、各ワイルドカードは文字列中の 0 個またはそれ以上の文字にマッチします -
case_sensitive: 大文字小文字を区別する場合は 1、区別しない場合は 0
|
Note
|
WeeChat バージョン 1.0 以上の場合、ワイルドカードをマスクの内部で使うことが可能です (マスクの最初および最後だけではありません)。 |
戻り値:
-
マスクにマッチした場合は 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) での使用例:
# プロトタイプ
match = weechat.string_match(string, mask, case_sensitive)
# 例
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
3.3.17. string_match_list
WeeChat バージョン 2.5 以上で利用可。
文字列が否定マスク (書式: "!word") を含むマスクリストにマッチするか確認します。否定マスクは通常のマスクよりも優先度が高いです。
プロトタイプ:
int weechat_string_match_list (const char *string, const char **masks,
int case_sensitive);
引数:
-
string: 文字列
-
masks: マスクリスト、リストの最後には NULL をつけてください; 各マスクは関数 string_match で文字列と比較されます
-
case_sensitive: 大文字と小文字を区別する場合は 1、区別しない場合は 0
戻り値:
-
1 if string matches list of masks (at least one mask matches and no negative mask matches), otherwise 0
-
文字列がマスクリストとマッチした場合 (1 つ以上のマスクにマッチするか、否定マスクに 1 つもマッチしない場合) は 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) での使用例:
# プロトタイプ
match = weechat.string_match_list(string, masks, case_sensitive)
# 例
match1 = weechat.string_match("abc", "*,!abc*", 0) # == 0
match2 = weechat.string_match("abcdef", "*,!abc*", 0) # == 0
match3 = weechat.string_match("def", "*,!abc*", 0) # == 1
3.3.18. 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");
/* result: "/home/xxx/file.txt" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.19. string_eval_path_home
WeeChat バージョン 0.3.3 以上で利用可。
3 段階でパスを評価します:
-
先頭の
%hを WeeChat ホームディレクトリで置換し、 -
先頭の
~をユーザのホームディレクトリで置換し (string_expand_home を実行し)、 -
変数を評価します (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
戻り値:
-
評価済みのパス (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_string_eval_path_home ("%h/test", NULL, NULL, NULL);
/* result: "/home/xxx/.weechat/test" */
/* ... */
free (str);
スクリプト (Python) での使用例:
# プロトタイプ
path = weechat.string_eval_path_home(path, pointers, extra_vars, options)
# 例
path = weechat.string_eval_path_home("%h/test", {}, {}, {})
# path == "/home/xxx/.weechat/test"
3.3.20. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.21. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.22. string_convert_escaped_chars
WeeChat バージョン 1.0 以上で利用可。
エスケープ文字を値に変換:
-
\": 二重引用符 -
\\: バックスラッシュ -
\a: アラート (BEL) -
\b: バックスペース -
\e: エスケープ -
\f: 改ページ -
\n: 改行 -
\r: キャリッジリターン -
\t: 水平タブ -
\v: 垂直タブ -
\0ooo: 文字の 8 進数表現 (oooは 0 桁から 3 桁) -
\xhh: 文字の 16 進数表現 (hhは 1 桁から 2 桁) -
\uhhhh: ユニコード文字の 16 進数表現 (hhhhは 1 桁から 4 桁) -
\Uhhhhhhhh: ユニコード文字の 16 進数表現 (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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.23. 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");
/* result: "test.*mask" */
/* ... */
free (str_regex);
スクリプト (Python) での使用例:
# プロトタイプ
regex = weechat.string_mask_to_regex(mask)
# 例
regex = weechat.string_mask_to_regex("test*mask") # "test.*mask"
3.3.24. 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)string"。
利用可能なフラグ:
-
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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.25. 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、エラーが起きた場合は 0 以外、man regcompを参照)
C 言語での使用例:
regex_t my_regex;
if (weechat_string_regcomp (&my_regex, "(?i)test", REG_EXTENDED) != 0)
{
/* error */
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.26. string_has_highlight
ハイライトしたい単語のリストを元に、1 箇所以上マッチする部分があるか調べる。
プロトタイプ:
int weechat_string_has_highlight (const char *string,
const char highlight_words);
引数:
-
string: 文字列
-
highlight_words: ハイライトしたい単語のリスト、コンマ区切り
戻り値:
-
ハイライトしたい単語にマッチする部分が 1 箇所以上ある場合は 1、それ以外は 0
C 言語での使用例:
int hl = weechat_string_has_highlight ("my test string", "test,word2"); /* == 1 */
スクリプト (Python) での使用例:
# プロトタイプ
highlight = weechat.string_has_highlight(string, highlight_words)
# 例
highlight = weechat.string_has_highlight("my test string", "test,word2") # 1
3.3.27. string_has_highlight_regex
WeeChat バージョン 0.3.4 以上で利用可。
POSIX 拡張正規表現を使って、文字列中から正規表現にマッチする部分が 1
つ以上あるか確認。
文字列を正規表現にマッチさせるには、マッチする部分の前後に区切り文字
(アルファベット、-、_、| 以外) がなければいけません。
プロトタイプ:
int weechat_string_has_highlight_regex (const char *string, const char *regex);
引数:
-
string: 文字列
-
regex: POSIX 拡張正規表現
戻り値:
-
ハイライトしたい正規表現にマッチする部分が 1 箇所以上ある場合は 1、それ以外は 0
C 言語での使用例:
int hl = weechat_string_has_highlight_regex ("my test string", "test|word2"); /* == 1 */
スクリプト (Python) での使用例:
# プロトタイプ
highlight = weechat.string_has_highlight_regex(string, regex)
# 例
highlight = weechat.string_has_highlight_regex("my test string", "test|word2") # 1
3.3.28. 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"); /* result: "text" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.29. 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: WeeChat 関数 string_regcomp または regcomp (
man regcompを参照) でコンパイルした正規表現へのポインタ (regex_t 構造体) -
replace: 置換先テキスト、以下のリファレンスを使うことができます:
-
$0から$99: 正規表現中の 0 から 99 番目のマッチ部分 (0 はマッチする部分全体、1 から 99 は括弧で括られたグループ) -
$+: 最後にマッチした部分 (最大の番号を持つマッチ部分) -
$.*N:*で全ての文字を置換したN番目 (+または0から99を使うことができます) のマッチ部分 (*文字は空白 (32) から~(126) までの任意の文字を使うことができます)
-
-
reference_char: マッチ部分を参照するための文字 (通常は
$) -
callback: replace に含まれる各リファレンスに対して呼び出される任意指定可能なコールバック関数 (マッチ部分を文字で置換する場合を除く); このコールバックは必ず以下の値を返してください:
-
新しく割り当てられた文字列: 文字列を置換先テキストとして使います (文字列は使用後に開放されます)
-
NULL: コールバックに渡されたテキストを置換先テキストとして使います (文字列に変更を加えません)
-
-
callback_data: callback コールバックを呼び出す際にコールバックに渡すポインタ
戻り値:
-
置換されたテキストを含む文字、問題が起きた場合は 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);
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.30. string_split
WeeChat バージョン 2.5、2.6 で更新。
1 つ以上の区切り文字に従って文字列を分割。
プロトタイプ:
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: chars to strip from returned items (left/right); optional, can be NULL
-
flags: デフォルト動作を変更するビットフラグの組合せ値; 値が 0 の場合、デフォルト動作 (文字列の先頭と末尾にある区切り文字を削除しない、連続する区切り文字を 1 つにまとめない) になります。以下のフラグを組み合わせて値を指定してください:
-
WEECHAT_STRING_SPLIT_STRIP_LEFT: 文字列左端 (先頭) の区切り文字を削除する
-
WEECHAT_STRING_SPLIT_STRIP_RIGHT: 文字列右端 (末尾) の区切り文字を削除する
-
WEECHAT_STRING_SPLIT_COLLAPSE_SEPS: 連続する区切り文字を 1 つにまとめる
-
WEECHAT_STRING_SPLIT_KEEP_EOL: 分割後の各値は分割位置先頭から文字列の最後までとする
-
-
num_items_max: 分割回数の上限 (0 = 制限なし)
-
num_items: 分割回数を返す整数型変数へのポインタ
|
Note
|
WeeChat バージョン 2.4 以下で keep_eol とされていた引数は現在 flags 引数に変わられました。両引数の値の対応関係は以下の通りです: |
| 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.31. string_split_shell
WeeChat バージョン 1.0 以上で利用可。
コマンドを引数を分割する際にシェルがやるように文字列を分割。
この関数は Python クラス "shlex" の C 言語実装です (ファイル: Python リポジトリの Lib/shlex.py)、参照: https://docs.python.org/3/library/shlex.html 。
プロトタイプ:
char **weechat_string_split_shell (const char *string, int *num_items);
引数:
-
string: 分割する文字列
-
num_items: 分割回数を返す整数型変数へのポインタ
戻り値:
-
文字列の配列、分割に失敗した場合は 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.32. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.33. string_build_with_split_string
分割文字列から文字列を作る。
プロトタイプ:
char *weechat_string_build_with_split_string (char **split_string,
const char *separator);
引数:
-
split_string: 関数 string_split が返した分割文字列の配列
-
separator: 文字列を分割する区切り文字
戻り値:
-
分割文字列から作った文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char **argv;
int argc;
argv = weechat_string_split ("abc def ghi", " ", 0, 0, &argc);
char *str = weechat_string_build_with_split_string (argv, ";");
/* str == "abc;def;ghi" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.34. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.35. string_free_split_command
コマンド分割で使用したメモリを開放。
プロトタイプ:
void weechat_string_free_split_command (char **split_command);
引数:
-
split_command: 関数 string_split_command が返す分割コマンドの配列
C 言語での使用例:
char **argv = weechat_string_split_command ("/command1 arg;/command2", ';');
/* ... */
weechat_free_split_command (argv);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.36. string_format_size
ファイルサイズと設定言語に翻訳された単位を書式に当てはめて文字列を作る
プロトタイプ:
char *weechat_string_format_size (unsigned long long size);
引数:
-
size: サイズ (バイト単位)
戻り値:
-
書式に従う文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
/* examples with English locale */
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 以上で利用可:
# プロトタイプ
str = weechat.string_format_size(size)
# 例
str = weechat.string_format_size(15200) # == "15.2 KB"
3.3.37. string_color_code_size
WeeChat ≥ 3.0.
Return the size (in bytes) of the WeeChat color code at the beginning of the string.
プロトタイプ:
int weechat_string_color_code_size (const char *string);
引数:
-
string: 文字列
戻り値:
-
size (in bytes) of the WeeChat color code at the beginning of the string; if the string is NULL, empty or does not start with a color code, 0 is returned; if the string begins with multiple color codes, only the size of the first one is returned
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) での使用例:
# プロトタイプ
size = weechat.string_color_code_size(string)
# 例
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
3.3.38. string_remove_color
文字列から WeeChat 色コードを削除。
プロトタイプ:
char *weechat_string_remove_color (const char *string,
const char *replacement);
引数:
-
string: 文字列
-
replacement: NULL または空文字列でなければ、WeeChat 色コードを指定した文字列の 1 文字目で置換、そうでなければ WeeChat 色コードとそれに続く (色に関連する) 文字を文字列から削除
戻り値:
-
色コードを削除した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
/* remove color codes */
char *str = weechat_string_remove_color (my_string1, NULL);
/* ... */
free (str);
/* replace color codes by "?" */
char *str = weechat_string_remove_color (my_string2, "?");
/* ... */
free (str);
スクリプト (Python) での使用例:
# プロトタイプ
str = weechat.string_remove_color(string, replacement)
# 例
str = weechat.string_remove_color(my_string, "?")
3.3.39. string_base_encode
WeeChat バージョン 2.4 以上で利用可。
base 16、32、64 で文字列をエンコード。
プロトタイプ:
int weechat_string_base_encode (int base, const char *from, int length, char *to);
引数:
-
base: 16、32、64
-
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=" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.40. string_base_decode
WeeChat バージョン 2.4 以上で利用可。
base 16、32、64 でエンコードされた文字列をデコード。
プロトタイプ:
int weechat_string_base_decode (int base, const char *from, char *to);
引数:
-
base: 16、32、64
-
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" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.41. string_hex_dump
WeeChat バージョン 1.4 以上で利用可。
16 進数とアスキーバイトを使ってデータのダンプを表示。
プロトタイプ:
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 " */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.42. string_is_command_char
WeeChat バージョン 0.3.2 以上で利用可。
文字列の 1 文字目がコマンド文字か確認 (デフォルトのコマンド文字は /)。
プロトタイプ:
int weechat_string_is_command_char (const char *string);
引数:
-
string: 文字列
戻り値:
-
文字列の 1 文字目がコマンド文字の場合は 1、コマンド文字でない場合は 0
C 言語での使用例:
int command_char1 = weechat_string_is_command_char ("/test"); /* == 1 */
int command_char2 = weechat_string_is_command_char ("test"); /* == 0 */
スクリプト (Python) での使用例:
# プロトタイプ
is_cmdchar = weechat.string_is_command_char(string)
# 例
command_char1 = weechat.string_is_command_char("/test") # == 1
command_char2 = weechat.string_is_command_char("test") # == 0
3.3.43. 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) での使用例:
# プロトタイプ
str = weechat.string_input_for_buffer(string)
# 例
str1 = weechat.string_input_for_buffer("test") # "test"
str2 = weechat.string_input_for_buffer("/test") # ""
str3 = weechat.string_input_for_buffer("//test") # "/test"
3.3.44. string_eval_expression
WeeChat ≥ 0.4.0, updated in 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 and 2.9.
式を評価して文字列として返す。${variable}
という書式で書かれた特殊変数は展開されます (以下の表を参照)。
|
Note
|
WeeChat バージョン 1.0 以上の場合、入れ子変数を使えるようになりました、例:
${color:${variable}}。
|
プロトタイプ:
char *weechat_string_eval_expression (const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
struct t_hashtable *options);
引数:
-
pointers: ポインタを含むハッシュテーブル (キーは文字列、値はポインタ); (現在のウィンドウやバッファへのポインタを持つ) ハッシュテーブルが "window" と "buffer" ポインタを持たない場合はこれらは自動的に追加される (NULL でも可):
-
regex: WeeChat 関数 string_regcomp または regcomp (
man regcompを参照) でコンパイル済みの正規表現へのポインタ (regex_t 構造体); このオプションは (以下の) ハッシュテーブル構造体 options メンバの regex とよく似ていますが、より高速に動作します
-
-
extra_vars: 展開される追加変数 (NULL でも可)
-
options: いくつかのオプションを含むハッシュテーブル (キーと値は必ず文字列) (NULL でも可):
-
type: デフォルトの挙動では式中の変数をその値で置換するだけですが、この挙動を変更します。設定可能なタイプは以下です:
-
condition: 条件式として式を評価します: 演算子と括弧が使われます、結果はブール値 ("0" または "1") です
-
-
prefix: 置換する変数のプレフィックス (デフォルト:
${) -
suffix: 置換する変数のサフィックス (デフォルト:
}) -
extra: デフォルトの挙動では追加変数 (extra_vars) を単純に置換するだけですが、この挙動を変更します。設定可能な値は以下です:
-
eval: 置換前に追加変数 (extra_vars) を評価します (WeeChat バージョン 1.6 以上で利用可)
-
-
regex: expr のテキストを置換する正規表現 (この場合 expr は評価されません)
-
regex_replace: regex と一緒に使われる置換テキスト、expr に含まれるテキストを置換する (regex_replace は、expr 内で regex 引数にマッチする部分が見つからなくなるまで、毎回評価されます)
-
戻り値:
-
評価された式 (使用後には必ず "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) での使用例:
# プロトタイプ
str = weechat.string_eval_expression(expr, pointers, extra_vars, options)
# 例
# 条件式の評価
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=***"
条件
条件に使える論理演算子のリスト (上から優先順位の高い順):
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
|
論理積 |
|
|
|
論理和 |
|
|
条件に使える比較演算子のリスト (上から優先順位の高い順):
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
|
POSIX 拡張正規表現にマッチ (任意でフラグを指定することも可能です、関数 string_regcomp を確認してください) |
|
|
|
POSIX 拡張正規表現にマッチしない (任意でフラグを指定することも可能です、関数 string_regcomp を確認してください) |
|
|
|
Is matching mask where "*" is allowed, case sensitive (see function string_match) |
|
|
|
Is NOT wildcard mask where "*" is allowed, case sensitive (see function string_match) |
|
|
|
Is matching mask where "*" is allowed, case insensitive (see function string_match) |
|
|
|
Is NOT wildcard mask where "*" is allowed, case insensitive (see function string_match) |
|
|
|
Is included, case sensitive |
|
|
|
Is NOT included, case sensitive |
|
|
|
Is included, case insensitive |
|
|
|
Is NOT included, case insensitive |
|
|
|
等しい |
|
|
|
等しくない |
|
|
|
以下 |
|
|
|
より小さい |
|
|
|
以上 |
|
|
|
より大きい |
|
|
浮動小数点数として比較される数値表現の書式は以下です:
-
整数 (例: 5、-7)
-
浮動小数点数 (例: 5.2、-7.5、2.83e-2) (WeeChat バージョン 2.0 以上で利用可)
-
16 進数 (例: 0xA3、-0xA3) (WeeChat バージョン 2.0 以上で利用可)
数値表現を二重引用符で括ることで、文字列として比較されます。例:
-
50 > 100は 0 を返します (数値として比較) -
"50" > "100"は 1 を返します (文字列として比較)
変数
式中で展開される変数のリスト (優先度の高い順、展開順の早いものを上に遅いものを下に):
| 書式 | 説明 | 例 | 結果 |
|---|---|---|---|
|
extra_vars の変数 |
|
|
|
評価する文字列 |
|
|
|
エスケープ文字を含む文字列 |
|
|
|
隠す文字を含むテキスト ( |
|
|
|
|
|
|
|
|
|
|
|
Reversed string (color codes are reversed, so the string should not contain color codes). |
|
|
|
Reversed string for screen, color codes are not reversed. |
|
|
|
繰り返し文字列。 |
|
|
|
Length of string (number of UTF-8 chars), color codes are ignored. |
|
|
|
Length of string displayed on screen, color codes are ignored. |
|
|
|
正規表現のキャプチャグループ: |
|
|
|
WeeChat 色コード (色名部分はオプション属性をとることも可能です), 書式を確認するには関数 color をご確認ください |
|
|
|
Result of a modifier, see function hook_modifier_exec. |
|
|
|
WeeChat またはプラグインのインフォ、info_get を参照 |
|
|
|
String encoded in base 16, 32 or 64. |
|
|
|
String decoded from base 16, 32 or 64. |
|
|
|
現在の日付/時刻、カスタム書式を使うことも可能です ( |
|
|
|
環境変数 |
|
|
|
条件、条件が真の場合の値 (任意)、条件が偽の場合の値 (任意) からなる三項演算子。値を指定しなかった場合、条件の評価結果に応じて "1" または "0" が返されます |
|
|
|
Result of expression, where parentheses and the following operators are
supported: |
|
|
|
セキュアデータ |
|
|
|
オプションの値 |
|
|
|
バッファに対するローカル変数 |
|
|
|
hdata の値 ( |
|
|
3.3.45. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.46. string_dyn_copy
WeeChat バージョン 1.8 以上で利用可
動的文字列内に文字列をコピーします。
文字列が再確保された場合 (文字列をコピーするのに十分なサイズが確保されていなかった場合) にはポインタ *string が変わる可能性があります。
プロトタイプ:
int weechat_string_dyn_copy (char **string, const char *new_string);
引数:
-
string: 動的文字列へのポインタ
-
new_string: コピーする文字列
戻り値:
-
成功した場合は 1、失敗した場合は 0
C 言語での使用例:
char **string = weechat_string_dyn_alloc (256);
if (weechat_string_dyn_copy (string, "test"))
{
/* 成功 */
}
else
{
/* 失敗 */
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.47. string_dyn_concat
WeeChat バージョン 1.8 以上で利用可, updated in 3.0
動的文字列に文字列を連結します。
文字列が再確保された場合 (文字列を連結するのに十分なサイズが確保されていなかった場合) にはポインタ *string が変わる可能性があります。
プロトタイプ:
int weechat_string_dyn_concat (char **string, const char *add, int bytes);
引数:
-
string: 動的文字列へのポインタ
-
add: 連結する文字列
-
bytes: max number of bytes in add to concatenate, must be lower or equal to length of add (-1 = automatic: concatenate whole string add) (WeeChat ≥ 3.0)
戻り値:
-
成功した場合は 1、失敗した場合は 0
C 言語での使用例:
char **string = weechat_string_dyn_alloc (256);
if (weechat_string_dyn_copy (string, "test"))
{
if (weechat_string_dyn_concat (string, "abc", -1))
{
/* ... */
}
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.3.48. 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"))
{
/* 成功 */
}
else
{
/* 失敗 */
}
/* ... */
weechat_string_dyn_free (string, 1);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4. UTF-8
UTF-8 文字列関数。
3.4.1. utf8_has_8bits
文字列に 8 ビット文字が含まれているか確認。
プロトタイプ:
int weechat_utf8_has_8bits (const char *string);
引数:
-
string: 文字列
戻り値:
-
文字列に 8 ビット文字が含まれる場合は 1、7 ビット文字だけの場合は 0
C 言語での使用例:
if (weechat_utf8_has_8bits (string))
{
/* ... */
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.2. utf8_is_valid
WeeChat バージョン 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 文字へのポインタ
戻り値:
-
妥当な UTF-8 文字列の場合は 1、妥当でない場合は 0
C 言語での使用例:
char *error;
if (weechat_utf8_is_valid (string, -1, &error))
{
/* ... */
}
else
{
/* "error" points to first invalid char */
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.3. utf8_normalize
UTF-8 文字列を正規化: 非 UTF-8 文字を削除し、これらを文字で置換。
プロトタイプ:
void weechat_utf8_normalize (char *string, char replacement);
引数:
-
string: 文字列
-
replacement: 非 UTF-8 文字を置き換える文字
C 言語での使用例:
weechat_utf8_normalize (string, '?');
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.4. utf8_prev_char
WeeChat バージョン 1.3 で更新。
文字列中の 1 つ前の UTF-8 文字へのポインタを返す。
プロトタイプ:
const char *weechat_utf8_prev_char (const char *string_start,
const char *string);
引数:
-
string_start: 文字列の開始位置へのポインタ (関数はこのポインタよりも前の文字を返しません)
-
string: 文字列へのポインタ (必ず string_start 以上の値)
戻り値:
-
1 つ前の UTF-8 文字へのポインタ、見つからなければ (文字列の開始位置に到達した場合は) NULL (WeeChat バージョン 1.3 以上の場合: 返されるポインタは const char * であり、char * ではありません)
C 言語での使用例:
const char *prev_char = weechat_utf8_prev_char (string, ptr_in_string);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.5. utf8_next_char
WeeChat バージョン 1.3 で更新。
文字列中の 1 つ後の UTF-8 文字へのポインタを返す。
プロトタイプ:
const char *weechat_utf8_next_char (const char *string);
引数:
-
string: 文字列
戻り値:
-
1 つ後の UTF-8 文字へのポインタ、見つからなければ (文字列の最後に到達した場合は) NULL (WeeChat バージョン 1.3 以上の場合: 返されるポインタは const char * であり、char * ではありません)
C 言語での使用例:
const char *next_char = weechat_utf8_next_char (string);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.6. 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"); /* "ê" as integer */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.7. 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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.8. 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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.9. utf8_strnlen
文字列の bytes バイト目までに含まれる UTF-8 文字列の長さを返す (UTF-8 文字の個数)。
プロトタイプ:
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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.10. 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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.11. utf8_charcmp
WeeChat バージョン 1.0 で更新。
2 つの UTF-8 文字を比較。
プロトタイプ:
int weechat_utf8_charcmp (const char *string1, const char *string2);
引数:
-
string1: 1 番目の比較文字列
-
string2: 2 番目の比較文字列
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_utf8_charcmp ("aaa", "ccc"); /* == -2 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.12. utf8_charcasecmp
WeeChat バージョン 1.0 で更新。
大文字小文字の違いを無視して、2 つの UTF-8 文字を比較。
プロトタイプ:
int weechat_utf8_charcasecmp (const char *string1, const char *string2);
引数:
-
string1: 1 番目の比較文字列
-
string2: 2 番目の比較文字列
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_utf8_charcasecmp ("aaa", "CCC"); /* == -2 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.13. utf8_char_size_screen
UTF-8 文字を画面上に表示するために必要な画面幅を返す。
プロトタイプ:
int weechat_utf8_char_size_screen (const char *string);
引数:
-
string: 文字列
戻り値:
-
UTF-8 文字を画面上に表示するために必要な画面幅
C 言語での使用例:
int length_on_screen = weechat_utf8_char_size_screen ("é"); /* == 1 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.14. utf8_add_offset
WeeChat バージョン 1.3 で更新。
UTF-8 文字列で N 文字前に進む。
プロトタイプ:
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); /* points to "ne" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.15. 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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.16. 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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.4.17. utf8_strndup
最長 length 文字の複製された文字列を返す。
プロトタイプ:
char *weechat_utf8_strndup (const char *string, int length);
引数:
-
string: 文字列
-
length: 複製する文字数の最大値
戻り値:
-
複製された文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *string = weechat_utf8_strndup ("chêne", 3); /* returns "chê" */
/* ... */
free (string);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.5. Cryptography
Some cryptographic functions.
3.5.1. crypto_hash
WeeChat バージョン 2.8 以上で利用可。
Compute hash of data.
プロトタイプ:
int weechat_crypto_hash (const void *data, int data_size, const char *hash_algo,
void *hash, int *hash_size);
引数:
-
data: the data to hash
-
data_size: number of bytes to hash in data
-
hash_algo: the hash algorithm, see table below
-
hash: pointer to the hash variable, which is used to store the resulting hash (the buffer must be large enough, according to the algorithm, see table below)
-
hash_size: pointer to a variable used to store the length of the hash computed (in bytes) (can be NULL)
Supported hash algorithms:
| Value | Algorithm | Hash size | Notes |
|---|---|---|---|
|
CRC32 |
4 bytes (32 bits) |
Not a hash algorithm in the cryptographic sense. |
|
MD5 |
16 bytes (128 bits) |
Weak, not recommended for cryptography usage. |
|
SHA-1 |
20 bytes (160 bits) |
Weak, not recommended for cryptography usage. |
|
SHA-224 |
28 bytes (224 bits) |
|
|
SHA-256 |
32 bytes (256 bits) |
|
|
SHA-384 |
48 bytes (384 bits) |
|
|
SHA-512 |
64 bytes (512 bits) |
|
|
SHA3-224 |
28 bytes (224 bits) |
Algorithm available with libgcrypt ≥ 1.7.0. |
|
SHA3-256 |
32 bytes (256 bits) |
Algorithm available with libgcrypt ≥ 1.7.0. |
|
SHA3-384 |
48 bytes (384 bits) |
Algorithm available with libgcrypt ≥ 1.7.0. |
|
SHA3-512 |
64 bytes (512 bits) |
Algorithm available with libgcrypt ≥ 1.7.0. |
戻り値:
-
成功した場合は 1、失敗した場合は 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 and hash is a buffer with:
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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.5.2. crypto_hash_pbkdf2
WeeChat バージョン 2.8 以上で利用可。
Compute PKCS#5 Passphrase Based Key Derivation Function number 2 (PBKDF2) hash of data.
プロトタイプ:
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: the data to hash
-
data_size: number of bytes to hash in data
-
hash_algo: hash algorithm used by the key derivation function, see table in function crypto_hash
-
salt: the salt
-
salt_size: number of bytes in salt
-
iterations: number of iterations
-
hash: pointer to the hash variable, which is used to store the resulting hash (the buffer must be large enough, according to the algorithm, see table in function crypto_hash)
-
hash_size: pointer to a variable used to store the size of the hash computed (in bytes) (can be NULL)
戻り値:
-
成功した場合は 1、失敗した場合は 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 and hash is a buffer with:
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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.6. ディレクトリ
ディレクトリに関する関数。
3.6.1. mkdir_home
WeeChat ホームディレクトリの下にディレクトリを作成。
プロトタイプ:
int weechat_mkdir_home (char *directory, int mode);
引数:
-
directory: 作成するディレクトリの名前
-
mode: ディレクトリのモード
戻り値:
-
ディレクトリの作成に成功した場合は 1、エラーが起きた場合は 0
C 言語での使用例:
if (!weechat_mkdir_home ("temp", 0755))
{
/* error */
}
スクリプト (Python) での使用例:
# プロトタイプ
weechat.mkdir_home(directory, mode)
# 例
weechat.mkdir_home("temp", 0755)
3.6.2. mkdir
ディレクトリを作成。
プロトタイプ:
int weechat_mkdir (char *directory, int mode);
引数:
-
directory: 作成するディレクトリの名前
-
mode: ディレクトリのモード
戻り値:
-
ディレクトリの作成に成功した場合は 1、エラーが起きた場合は 0
C 言語での使用例:
if (!weechat_mkdir ("/tmp/mydir", 0755))
{
/* error */
}
スクリプト (Python) での使用例:
# プロトタイプ
weechat.mkdir(directory, mode)
# 例
weechat.mkdir("/tmp/mydir", 0755)
3.6.3. mkdir_parents
ディレクトリの作成と必要に応じて親ディレクトリの作成を行う。
プロトタイプ:
int weechat_mkdir_parents (char *directory, int mode);
引数:
-
directory: 作成するディレクトリの名前
-
mode: ディレクトリのモード
戻り値:
-
ディレクトリの作成に成功した場合は 1、エラーが起きた場合は 0
C 言語での使用例:
if (!weechat_mkdir_parents ("/tmp/my/dir", 0755))
{
/* error */
}
スクリプト (Python) での使用例:
# プロトタイプ
weechat.mkdir_parents(directory, mode)
# 例
weechat.mkdir_parents("/tmp/my/dir", 0755)
3.6.4. exec_on_files
WeeChat バージョン 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 が callback コールバックを呼び出す際にコールバックに渡すポインタ
C 言語での使用例:
void callback (void *data, const char *filename)
{
/* ... */
}
...
weechat_exec_on_files ("/tmp", 0, 0, &callback, NULL);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.6.5. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.7. ユーティリティ
便利な関数。
3.7.1. util_timeval_cmp
2 つの "timeval" 構造体を比較。
プロトタイプ:
int weechat_util_timeval_cmp (struct timeval *tv1, struct timeval *tv2);
引数:
-
tv1: 1 番目の "timeval" 構造体
-
tv2: 2 番目の "timeval" 構造体
戻り値:
-
tv1 < tv2 の場合は -1
-
tv1 == tv2 の場合は 0
-
tv1 > tv2 の場合は +1
C 言語での使用例:
if (weechat_util_timeval_cmp (&tv1, &tv2) > 0)
{
/* tv1 > tv2 */
}
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.7.2. util_timeval_diff
WeeChat バージョン 1.1 で更新。
2 つの "timeval" 構造体の差を返す (マイクロ秒単位)。
プロトタイプ:
long long weechat_util_timeval_diff (struct timeval *tv1, struct timeval *tv2);
引数:
-
tv1: 1 番目の "timeval" 構造体
-
tv2: 2 番目の "timeval" 構造体
戻り値:
-
マイクロ秒単位の差
|
Note
|
WeeChat バージョン 1.0 以前の場合、戻り値の単位はミリ秒でした。 |
C 言語での使用例:
long long diff = weechat_util_timeval_diff (&tv1, &tv2);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.7.3. util_timeval_add
WeeChat バージョン 1.1 で更新。
timeval 構造体に時間間隔を追加 (マイクロ秒単位)。
プロトタイプ:
void weechat_util_timeval_add (struct timeval *tv, long long interval);
引数:
-
tv: timeval 構造体
-
interval: 時間間隔 (マイクロ秒単位)
|
Note
|
WeeChat バージョン 1.0 以前の場合、時間間隔の単位はミリ秒でした。 |
C 言語での使用例:
weechat_util_timeval_add (&tv, 2000000); /* add 2 seconds */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.7.4. 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));
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.7.5. 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 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.8. ソート済みリスト
ソート済みリスト関数。
3.8.1. list_new
新しいリストを作成。
プロトタイプ:
struct t_weelist *weechat_list_new ();
戻り値:
-
新しいリストへのポインタ
C 言語での使用例:
struct t_weelist *list = weechat_list_new ();
スクリプト (Python) での使用例:
# プロトタイプ
list = weechat.list_new()
# 例
list = weechat.list_new()
3.8.2. 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) での使用例:
# プロトタイプ
item = weechat.list_add(list, data, where, user_data)
# 例
item = weechat.list_add(list, "my data", weechat.WEECHAT_LIST_POS_SORT, "")
3.8.3. list_search
リストから要素を検索。
プロトタイプ:
struct t_weelist_item *weechat_list_search (struct t_weelist *weelist,
const char *data);
引数:
-
weelist: リストへのポインタ
-
data: リストから検索するデータ
戻り値:
-
見つかった要素へのポインタ、見つからなかった場合は NULL
C 言語での使用例:
struct t_weelist_item *item = weechat_list_search (list, "my data");
スクリプト (Python) での使用例:
# プロトタイプ
item = weechat.list_search(list, data)
# 例
item = weechat.list_search(list, "my data")
3.8.4. 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) での使用例:
# プロトタイプ
pos_item = weechat.list_search_pos(list, data)
# 例
pos_item = weechat.list_search_pos(list, "my data")
3.8.5. 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) での使用例:
# プロトタイプ
item = weechat.list_casesearch(list, data)
# 例
item = weechat.list_casesearch(list, "my data")
3.8.6. 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) での使用例:
# プロトタイプ
pos_item = weechat.list_casesearch_pos(list, data)
# 例
pos_item = weechat.list_casesearch_pos(list, "my data")
3.8.7. list_get
リスト中の位置を指定して要素を返す。
プロトタイプ:
struct t_weelist_item *weechat_list_get (struct t_weelist *weelist,
int position);
引数:
-
weelist: リストへのポインタ
-
position: リスト中の位置 (1 番目の要素は 0)
戻り値:
-
見つかった要素へのポインタ、見つからなかった場合は NULL
C 言語での使用例:
struct t_weelist_item *item = weechat_list_get (list, 0); /* first item */
スクリプト (Python) での使用例:
# プロトタイプ
item = weechat.list_get(list, position)
# 例
item = weechat.list_get(list, 0)
3.8.8. list_set
ある要素に新しい値をセット。
プロトタイプ:
void weechat_list_set (struct t_weelist_item *item, const char *value);
引数:
-
item: 要素へのポインタ
-
value: 要素にセットする新しい値
C 言語での使用例:
weechat_list_set (item, "new data");
スクリプト (Python) での使用例:
# プロトタイプ
weechat.list_set(item, value)
# 例
weechat.list_set(item, "new data")
3.8.9. list_next
リストから 1 つ後の要素を返す。
プロトタイプ:
struct t_weelist_item *weechat_list_next (struct t_weelist_item *item);
引数:
-
item: 要素へのポインタ
戻り値:
-
1 つ後の要素へのポインタ、ポインタがリストの最後を指す場合は NULL
C 言語での使用例:
struct t_weelist_item *next_item = weechat_list_next (item);
スクリプト (Python) での使用例:
# プロトタイプ
item = weechat.list_next(item)
# 例
item = weechat.list_next(item)
3.8.10. list_prev
リストから 1 つ前の要素を返す。
プロトタイプ:
struct t_weelist_item *weechat_list_prev (struct t_weelist_item *item);
引数:
-
item: 要素へのポインタ
戻り値:
-
1 つ前の要素へのポインタ、ポインタがリストの最初を指す場合は NULL
C 言語での使用例:
struct t_weelist_item *prev_item = weechat_list_prev (item);
スクリプト (Python) での使用例:
# プロトタイプ
item = weechat.list_prev(item)
# 例
item = weechat.list_prev(item)
3.8.11. list_string
ある要素の文字列値を返す。
プロトタイプ:
const char *weechat_list_string (struct t_weelist_item *item);
引数:
-
item: 要素へのポインタ
戻り値:
-
要素の文字列値
C 言語での使用例:
weechat_printf (NULL, "value of item: %s", weechat_list_string (item));
スクリプト (Python) での使用例:
# プロトタイプ
value = weechat.list_string(item)
# 例
weechat.prnt("", "value of item: %s" % weechat.list_string(item))
3.8.12. list_user_data
WeeChat バージョン 2.6 以上で利用可
Return pointer to the user data of an item.
プロトタイプ:
void *weechat_list_user_data (struct t_weelist_item *item);
引数:
-
item: 要素へのポインタ
戻り値:
-
pointer to the user data of item
C 言語での使用例:
weechat_printf (NULL, "user data of item: 0x%lx", weechat_list_user_data (item));
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.8.13. list_size
リストのサイズ (要素の個数) を返す。
プロトタイプ:
char *weechat_list_size (struct t_weelist *weelist);
引数:
-
weelist: 要素へのポインタ
戻り値:
-
リストのサイズ (要素の個数)、リストが空の場合は 0
C 言語での使用例:
weechat_printf (NULL, "size of list: %d", weechat_list_size (list));
スクリプト (Python) での使用例:
# プロトタイプ
size = weechat.list_size(list)
# 例
weechat.prnt("", "size of list: %d" % weechat.list_size(list))
3.8.14. list_remove
ある要素をリストから削除。
プロトタイプ:
void weechat_list_remove (struct t_weelist *weelist,
struct t_weelist_item *item);
引数:
-
weelist: リストへのポインタ
-
item: 要素へのポインタ
C 言語での使用例:
weechat_list_remove (list, item);
スクリプト (Python) での使用例:
# プロトタイプ
weechat.list_remove(list, item)
# 例
weechat.list_remove(list, item)
3.9. 配列リスト
配列リスト関数。
配列リストとはサイズ可変でソート可能なポインタのリストです。
3.9.1. 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: 2 つの要素を比較する際に使われるコールバック (任意)、引数と戻り値は以下:
-
void *data: ポインタ
-
struct t_arraylist *arraylist: 配列リストポインタ
-
void *pointer1: 1 番目の要素へのポインタ
-
void *pointer2: 2 番目の要素へのポインタ
-
戻り値:
-
1 番目の要素が 2 番目の要素よりも小さければ負数
-
1 番目の要素が 2 番目の要素と同じならばゼロ
-
1 番目の要素が 2 番目の要素よりも大きければ正数
-
-
-
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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.9.2. arraylist_size
WeeChat バージョン 1.8 以上で利用可
配列リストのサイズ (要素ポインタの数) を返します。
プロトタイプ:
int weechat_list_size (struct t_arraylist *arraylist);
引数:
-
arraylist: 配列リストポインタ
戻り値:
-
配列リストのサイズ (要素の数)、0 は配列リストが空であることを意味します
C 言語での使用例:
weechat_printf (NULL, "size of array list: %d", weechat_arraylist_size (arraylist));
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.9.3. 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); /* first item */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.9.4. arraylist_search
WeeChat バージョン 1.8 以上で利用可
配列リストから要素を検索します。
プロトタイプ:
void *weechat_arraylist_search (struct t_arraylist *arraylist, void *pointer,
int *index, int *index_insert);
引数:
-
arraylist: 配列リストポインタ
-
pointer: 配列リストから検索する要素へのポインタ
-
index: 要素が見つかった場合はそのインデックス番号を示す整数へのポインタ、見つからなかった場合は -1 (任意)
-
index_insert: arraylist に要素を挿入するために使われるインデックス番号を示す整数へのポインタ (これは arraylist のソート状態を保存する目的で使います) (任意)
戻り値:
-
要素が見つかったにはその要素へのポインタ、見つからなかった場合は NULL
C 言語での使用例:
int index, index_insert;
void *item = weechat_arraylist_search (arraylist, pointer, &index, &index_insert);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.9.5. 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); /* 未ソートの配列リストに対しては要素を末尾に挿入します */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.9.6. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.9.7. 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);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.10. ハッシュテーブル
ハッシュテーブル関数。
3.10.1. hashtable_new
WeeChat バージョン 0.3.3 以上で利用可。
新しいハッシュテーブルを作成。
プロトタイプ:
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
-
-
type_values: ハッシュテーブル