api: add argument "options" in function string_eval_expression, add option "-c" for command /eval (to evaluate a condition)

v2.8-utf8proc
Sebastien Helleu 2013-08-04 08:56:56 +02:00
parent b94a1ce59b
commit dc878c5b69
37 changed files with 758 additions and 488 deletions

View File

@ -1,7 +1,7 @@
WeeChat ChangeLog
=================
Sébastien Helleu <flashcode@flashtux.org>
v0.4.2-dev, 2013-08-02
v0.4.2-dev, 2013-08-04
This document lists all changes for each version.
@ -52,6 +52,8 @@ Version 0.4.2 (under dev!)
"layout_window"
* core: fix line alignment when option weechat.look.buffer_time_format is set
to empty string
* api: add argument "options" in function string_eval_expression, add option
"-c" for command /eval (to evaluate a condition)
* api: use pointer for infolist "hook" to return only one hook
* api: add new function strlen_screen
* plugins: remove the demo plugin

View File

@ -207,55 +207,56 @@ infolists: zeigt Information über die Infolists an
[command]*`eval`* wertet einen Ausdruck aus und gibt das Resultat im Buffer aus::
........................................
/eval [-n] <expression>
[-n] <expression1> <operator> <expression2>
[-n] -c <expression1> <operator> <expression2>
-n: zeigt das Ergebnis an, ohne das dieses in den Buffer geschrieben wird (debug Modus)
expression: Ausdruck welcher verarbeitet werden soll. Variablen im Format ${variable} werden ersetzt (siehe unten)
operator: ein logischer oder vergleichender Operand:
- logische Operanden:
&& boolean "und"
|| boolean "oder"
- vergleichende Operanden:
== gleich
!= ungleich
<= kleiner oder gleich
< kleiner
>= größer oder gleich
> größer
=~ stimmt mit regulärem Ausdruck überein
!~ stimmt NICHT mit regulärem Ausdruck überein
-n: display result without sending it to buffer (debug mode)
-c: evaluate as condition: use operators and parentheses, return a boolean value ("0" or "1")
expression: expression to evaluate, variables with format ${variable} are replaced (see below)
operator: a logical or comparison operator:
- logical operators:
&& boolean "and"
|| boolean "or"
- comparison operators:
== equal
!= not equal
<= less or equal
< less
>= greater or equal
> greater
=~ is matching regex
!~ is NOT matching regex
Ein Ausdruck gilt als "wahr", sofern das Ergebnis nicht NULL, nicht leer und von "0" abweichend ist.
Der Vergleich findet zwischen zwei Integer Werten statt, sofern die beiden Ausdrücke gültige Integer-Werte sind.
Um einen Vergleich zwischen zwei Zeichenketten zu erzwingen, müssen die Ausdrücke in Anführungszeichen gesetzt werden, zum Beispiel:
An expression is considered as "true" if it is not NULL, not empty, and different from "0".
The comparison is made using integers if the two expressions are valid integers.
To force a string comparison, add double quotes around each expression, for example:
50 > 100 ==> 0
"50" > "100" ==> 1
Einige Variablen werden im Ausdruck, mittels der Formatierung ${Variable}, ersetzt. Mögliche Variablen sind, nach Reihenfolge ihrer Priorität:
1. der Name einer Option (file.section.option)
2. der Name der lokalen Variablen für Buffer
3. ein hdata Name/Variable (der Wert wird automatisch als Zeichenkette konvertiert), Standardmäßig wird für "window" und "buffer" das aktuelle Fenster/Buffer verwendet.
Das Format für hdata:
hdata.var1.var2...: startet mit hdata (der Pointer muss bekannt sein) und fragt eine Variable nach der anderen ab (weitere hdata können folgen)
hdata(list).var1.var2...: startet hdata mittels einer Liste, zum Beispiel:
${buffer[gui_buffers].full_name}: der vollständige Name des ersten Buffers, in der verknüpften Liste aller Buffer
${plugin[weechat_plugins].name}: Name der ersten Erweiterung, in der verknüpften Liste aller Erweiterungen
Die vorhandenen Namen für hdata und Variablen sind in der "Anleitung für API Erweiterung", Bereich "weechat_hdata_get". beschrieben
Some variables are replaced in expression, using the format ${variable}, variable can be, by order of priority :
1. the name of an option (file.section.option)
2. the name of a local variable in buffer
3. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer.
Format for hdata can be one of following:
hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed)
hdata[list].var1.var2...: start with a hdata using a list, for example:
${buffer[gui_buffers].full_name}: full name of first buffer in linked list of buffers
${plugin[weechat_plugins].name}: name of first plugin in linked list of plugins
For name of hdata and variables, please look at "Plugin API reference", function "weechat_hdata_get".
Beispiele:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n ${window.buffer.number} > 2 ==> 0
/eval -n ${window.win_width} > 100 ==> 1
/eval -n (8 > 12) || (5 > 2) ==> 1
/eval -n (8 > 12) && (5 > 2) ==> 0
/eval -n abcd =~ ^ABC ==> 1
/eval -n abcd =~ (?-i)^ABC ==> 0
/eval -n abcd =~ (?-i)^abc ==> 1
/eval -n abcd !~ abc ==> 0
Examples:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n -c ${window.buffer.number} > 2 ==> 0
/eval -n -c ${window.win_width} > 100 ==> 1
/eval -n -c (8 > 12) || (5 > 2) ==> 1
/eval -n -c (8 > 12) && (5 > 2) ==> 0
/eval -n -c abcd =~ ^ABC ==> 1
/eval -n -c abcd =~ (?-i)^ABC ==> 0
/eval -n -c abcd =~ (?-i)^abc ==> 1
/eval -n -c abcd !~ abc ==> 0
........................................
[[command_weechat_filter]]

View File

@ -207,9 +207,10 @@ infolists: display infos about infolists
[command]*`eval`* evaluate expression and send result to buffer::
........................................
/eval [-n] <expression>
[-n] <expression1> <operator> <expression2>
[-n] -c <expression1> <operator> <expression2>
-n: display result without sending it to buffer (debug mode)
-c: evaluate as condition: use operators and parentheses, return a boolean value ("0" or "1")
expression: expression to evaluate, variables with format ${variable} are replaced (see below)
operator: a logical or comparison operator:
- logical operators:
@ -243,19 +244,19 @@ Format for hdata can be one of following:
For name of hdata and variables, please look at "Plugin API reference", function "weechat_hdata_get".
Examples:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n ${window.buffer.number} > 2 ==> 0
/eval -n ${window.win_width} > 100 ==> 1
/eval -n (8 > 12) || (5 > 2) ==> 1
/eval -n (8 > 12) && (5 > 2) ==> 0
/eval -n abcd =~ ^ABC ==> 1
/eval -n abcd =~ (?-i)^ABC ==> 0
/eval -n abcd =~ (?-i)^abc ==> 1
/eval -n abcd !~ abc ==> 0
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n -c ${window.buffer.number} > 2 ==> 0
/eval -n -c ${window.win_width} > 100 ==> 1
/eval -n -c (8 > 12) || (5 > 2) ==> 1
/eval -n -c (8 > 12) && (5 > 2) ==> 0
/eval -n -c abcd =~ ^ABC ==> 1
/eval -n -c abcd =~ (?-i)^ABC ==> 0
/eval -n -c abcd =~ (?-i)^abc ==> 1
/eval -n -c abcd !~ abc ==> 0
........................................
[[command_weechat_filter]]

View File

@ -1699,7 +1699,7 @@ str3 = weechat.string_input_for_buffer("//test") # "/test"
weechat_string_eval_expression
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_New in version 0.4.0._
_New in version 0.4.0, updated in 0.4.2._
Evaluate an expression and return result as a string.
Special variables with format `${variable}` are expanded (see command `/eval` in
@ -1711,7 +1711,8 @@ Prototype:
----------------------------------------
char *weechat_string_eval_expression (const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars);
struct t_hashtable *extra_vars,
struct t_hashtable *options);
----------------------------------------
Arguments:
@ -1721,6 +1722,14 @@ Arguments:
pointer); pointers "window" and "buffer" are automatically added if they are
not in hashtable (with pointer to current window/buffer) (can be NULL)
* 'extra_vars': extra variables that will be expanded (can be NULL)
* 'options': a hashtable with some options (keys and values must be string)
(can be NULL):
** 'type': default behaviour is just to replace values in expression, other
types can be selected:
*** 'condition': the expression is evaluated as a condition: operators and
parentheses are used, result is a boolean ("0" or "1")
** 'prefix': prefix before variables to replace (default: "${")
** 'suffix': suffix after variables to replace (default: "}")
Return value:
@ -1731,9 +1740,16 @@ C examples:
[source,C]
----------------------------------------
char *str1 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL); /* "core.weechat" */
char *str2 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL); /* "1" */
char *str3 = weechat_string_eval_expression ("abc =~ def", NULL, NULL); /* "0" */
struct t_hashtable *options = weechat_hashtable_new (8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
if (options)
weechat_hashtable_set (options, "type", "condition");
char *str1 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL, NULL); /* "core.weechat" */
char *str2 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL, options); /* "1" */
char *str3 = weechat_string_eval_expression ("abc =~ def", NULL, NULL, options); /* "0" */
----------------------------------------
Script (Python):
@ -1741,12 +1757,12 @@ Script (Python):
[source,python]
----------------------------------------
# prototype
str = weechat.string_eval_expression(expr, pointers, extra_vars)
str = weechat.string_eval_expression(expr, pointers, extra_vars, options)
# examples
str1 = weechat.string_eval_expression("${buffer.full_name}", {}, {}) # "core.weechat"
str2 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}) # "1"
str3 = weechat.string_eval_expression("abc =~ def", {}, {}) # "0"
str1 = weechat.string_eval_expression("${buffer.full_name}", {}, {}, {}) # "core.weechat"
str2 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}, {"type": "condition"}) # "1"
str3 = weechat.string_eval_expression("abc =~ def", {}, {}, {"type": "condition"}) # "0"
----------------------------------------
[[utf-8]]

View File

@ -207,9 +207,10 @@ infolists: afficher des infos sur les infolists
[command]*`eval`* évaluer une expression et envoyer le résultat au tampon::
........................................
/eval [-n] <expression>
[-n] <expression1> <opérateur> <expression2>
[-n] -c <expression1> <opérateur> <expression2>
-n: afficher le résultat sans envoyer au tampon (mode debug)
-c: évaluer comme une condition : utiliser les opérateurs et les parenthèses, retourner une valeur booléenne ("0" ou "1")
expression: expression à évaluer, les variables avec le format ${variable} sont remplacées (voir ci-dessous)
opérateur: un opérateur logique ou de comparaison :
- opérateurs logiques :
@ -243,19 +244,19 @@ Le format du hdata peut être le suivant :
Pour le nom du hdata et des variables, voir la "Référence API extension", fonction "weechat_hdata_get".
Exemples:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n ${window.buffer.number} > 2 ==> 0
/eval -n ${window.win_width} > 100 ==> 1
/eval -n (8 > 12) || (5 > 2) ==> 1
/eval -n (8 > 12) && (5 > 2) ==> 0
/eval -n abcd =~ ^ABC ==> 1
/eval -n abcd =~ (?-i)^ABC ==> 0
/eval -n abcd =~ (?-i)^abc ==> 1
/eval -n abcd !~ abc ==> 0
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n -c ${window.buffer.number} > 2 ==> 0
/eval -n -c ${window.win_width} > 100 ==> 1
/eval -n -c (8 > 12) || (5 > 2) ==> 1
/eval -n -c (8 > 12) && (5 > 2) ==> 0
/eval -n -c abcd =~ ^ABC ==> 1
/eval -n -c abcd =~ (?-i)^ABC ==> 0
/eval -n -c abcd =~ (?-i)^abc ==> 1
/eval -n -c abcd !~ abc ==> 0
........................................
[[command_weechat_filter]]

View File

@ -1723,7 +1723,7 @@ str3 = weechat.string_input_for_buffer("//test") # "/test"
weechat_string_eval_expression
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_Nouveau dans la version 0.4.0._
_Nouveau dans la version 0.4.0, mis à jour dans la 0.4.2._
Evalue l'expression et retourne le résultat sous forme de chaîne.
Les variables spéciales avec le format `${variable}` sont étendues (voir la
@ -1735,7 +1735,8 @@ Prototype :
----------------------------------------
char *weechat_string_eval_expression (const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars);
struct t_hashtable *extra_vars,
struct t_hashtable *options);
----------------------------------------
Paramètres :
@ -1746,6 +1747,14 @@ Paramètres :
sont automatiquement ajoutés s'ils ne sont pas dans la hashtable (avec le
pointer vers fenêtre/tampon courants) (peut être NULL)
* 'extra_vars' : variables additionnelles qui seront étendues (peut être NULL)
* 'options' : hashtable avec des options (les clés et valeurs doivent être des
des chaînes) (peut être NULL) :
** 'type' : le comportement par défaut est de juste remplacer les valeurs dans
l'expression, d'autres types peuvent être choisis :
*** 'condition' : l'expression est évaluée comme une condition : les opérateurs
et parenthèses sont utilisés, le résultat est un booléen ("0" ou "1")
** 'prefix' : préfixe avant les variables à remplacer (par défaut: "${")
** 'suffix' : suffixe après les variables à remplacer (par défaut: "}")
Valeur de retour :
@ -1757,9 +1766,16 @@ Exemples en C :
[source,C]
----------------------------------------
char *str1 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL); /* "core.weechat" */
char *str2 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL); /* "1" */
char *str3 = weechat_string_eval_expression ("abc =~ def", NULL, NULL); /* "0" */
struct t_hashtable *options = weechat_hashtable_new (8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
if (options)
weechat_hashtable_set (options, "type", "condition");
char *str1 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL, NULL); /* "core.weechat" */
char *str2 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL, options); /* "1" */
char *str3 = weechat_string_eval_expression ("abc =~ def", NULL, NULL, options); /* "0" */
----------------------------------------
Script (Python) :
@ -1767,12 +1783,12 @@ Script (Python) :
[source,python]
----------------------------------------
# prototype
str = weechat.string_eval_expression(expr, pointers, extra_vars)
str = weechat.string_eval_expression(expr, pointers, extra_vars, options)
# exemples
str1 = weechat.string_eval_expression("${buffer.full_name}", {}, {}) # "core.weechat"
str2 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}) # "1"
str3 = weechat.string_eval_expression("abc =~ def", {}, {}) # "0"
str1 = weechat.string_eval_expression("${buffer.full_name}", {}, {}, {}) # "core.weechat"
str2 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}, {"type": "condition"}) # "1"
str3 = weechat.string_eval_expression("abc =~ def", {}, {}, {"type": "condition"}) # "0"
----------------------------------------
[[utf-8]]

View File

@ -206,56 +206,57 @@ infolists: mostra informazioni sulle liste info
[[command_weechat_eval]]
[command]*`eval`* analizza l'espressione e invia il risultato al buffer::
........................................
/eval [-n] <espressione>
[-n] <espressione1> <operatore> <espressione2>
/eval [-n] <expression>
[-n] -c <expression1> <operator> <expression2>
-n: mostra il risultato senza inviarlo al buffer (modalità debug)
espressione: espressione da analizzare, le variabili con il formato ${variable} vengono sostituite (vedere sotto)
operatore: operatore logico o di confronto:
- operatori logici:
&& "and" booleano
|| "or" booleano
- operatori di confronto:
== uguale
!= non uguale
<= minore o uguale
< minore
>= maggiore o uguale
> maggiore
=~ corrisponde alla regex
!~ NON corrisponde alla regex
-n: display result without sending it to buffer (debug mode)
-c: evaluate as condition: use operators and parentheses, return a boolean value ("0" or "1")
expression: expression to evaluate, variables with format ${variable} are replaced (see below)
operator: a logical or comparison operator:
- logical operators:
&& boolean "and"
|| boolean "or"
- comparison operators:
== equal
!= not equal
<= less or equal
< less
>= greater or equal
> greater
=~ is matching regex
!~ is NOT matching regex
Un'espressione è considerata come "true" se non è NULL, non vuota, e diversa da "0".
Il confronto viene fatto usando gli interi se le due espressioni sono interi validi.
Per forzare il confronto stringa, aggiungere un doppio apice all'espressione, ad esempio:
An expression is considered as "true" if it is not NULL, not empty, and different from "0".
The comparison is made using integers if the two expressions are valid integers.
To force a string comparison, add double quotes around each expression, for example:
50 > 100 ==> 0
"50" > "100" ==> 1
Alcune variabili vengono sostituite nell'espressione, usando il formato ${variable}, la variabile può essere, in ordine di priorità :
1. il nome di un'opzione (file.sezione.opzione)
2. il nome di una variabile locale nel buffer
3. un nome/variabile hdata (il valore viene automaticamente convertito in stringa, per default "window" e "buffer" puntano alla finestra/buffer correnti.
Il formato per hdata può essere uno dei seguenti:
hdata.var1.var2...: inizia con un hdata (il puntatore deve essere noto), e richiedere le variabili a seguire (possono seguire altri hdata)
hdata[list].var1.var2...: inizia con un hdata usando una lista, ad esempio:
${buffer[gui_buffers].full_name}: nome completo del primo buffer nell'elenco collegato dei buffer
${plugin[weechat_plugins].name}: nome del primo plugin nell'elenco collegato dei plugin
Per il nome degli hdata e delle variabili, per favore consultare "Referenze API per Plugin", funzione "weechat_hdata_get".
Some variables are replaced in expression, using the format ${variable}, variable can be, by order of priority :
1. the name of an option (file.section.option)
2. the name of a local variable in buffer
3. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer.
Format for hdata can be one of following:
hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed)
hdata[list].var1.var2...: start with a hdata using a list, for example:
${buffer[gui_buffers].full_name}: full name of first buffer in linked list of buffers
${plugin[weechat_plugins].name}: name of first plugin in linked list of plugins
For name of hdata and variables, please look at "Plugin API reference", function "weechat_hdata_get".
Esempi:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n ${window.buffer.number} > 2 ==> 0
/eval -n ${window.win_width} > 100 ==> 1
/eval -n (8 > 12) || (5 > 2) ==> 1
/eval -n (8 > 12) && (5 > 2) ==> 0
/eval -n abcd =~ ^ABC ==> 1
/eval -n abcd =~ (?-i)^ABC ==> 0
/eval -n abcd =~ (?-i)^abc ==> 1
/eval -n abcd !~ abc ==> 0
Examples:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n -c ${window.buffer.number} > 2 ==> 0
/eval -n -c ${window.win_width} > 100 ==> 1
/eval -n -c (8 > 12) || (5 > 2) ==> 1
/eval -n -c (8 > 12) && (5 > 2) ==> 0
/eval -n -c abcd =~ ^ABC ==> 1
/eval -n -c abcd =~ (?-i)^ABC ==> 0
/eval -n -c abcd =~ (?-i)^abc ==> 1
/eval -n -c abcd !~ abc ==> 0
........................................
[[command_weechat_filter]]

View File

@ -1683,7 +1683,8 @@ str3 = weechat.string_input_for_buffer("//test") # "/test"
weechat_string_eval_expression
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_Novità nella versione 0.4.0._
// TRANSLATION MISSING
_Novità nella versione 0.4.0, updated in 0.4.2._
// TRANSLATION MISSING
Evaluate an expression and return result as a string.
@ -1696,7 +1697,8 @@ Prototipo:
----------------------------------------
char *weechat_string_eval_expression (const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars);
struct t_hashtable *extra_vars,
struct t_hashtable *options);
----------------------------------------
Argomenti:
@ -1707,6 +1709,14 @@ Argomenti:
pointer); pointers "window" and "buffer" are automatically added if they are
not in hashtable (with pointer to current window/buffer) (can be NULL)
* 'extra_vars': extra variables that will be expanded (can be NULL)
* 'options': a hashtable with some options (keys and values must be string)
(can be NULL):
** 'type': default behaviour is just to replace values in expression, other
types can be selected:
*** 'condition': the expression is evaluated as a condition: operators and
parentheses are used, result is a boolean ("0" or "1")
** 'prefix': prefix before variables to replace (default: "${")
** 'suffix': suffix after variables to replace (default: "}")
Valore restituito:
@ -1718,9 +1728,16 @@ Esempi in C:
[source,C]
----------------------------------------
char *str1 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL); /* "core.weechat" */
char *str2 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL); /* "1" */
char *str3 = weechat_string_eval_expression ("abc =~ def", NULL, NULL); /* "0" */
struct t_hashtable *options = weechat_hashtable_new (8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
if (options)
weechat_hashtable_set (options, "type", "condition");
char *str1 = weechat_string_eval_expression ("${buffer.full_name}", NULL, NULL, NULL); /* "core.weechat" */
char *str2 = weechat_string_eval_expression ("${window.win_width} > 100", NULL, NULL, options); /* "1" */
char *str3 = weechat_string_eval_expression ("abc =~ def", NULL, NULL, options); /* "0" */
----------------------------------------
Script (Python):
@ -1728,12 +1745,12 @@ Script (Python):
[source,python]
----------------------------------------
# prototipo
str = weechat.string_eval_expression(expr, pointers, extra_vars)
str = weechat.string_eval_expression(expr, pointers, extra_vars, options)
# esempi
str1 = weechat.string_eval_expression("${buffer.full_name}", {}, {}) # "core.weechat"
str2 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}) # "1"
str3 = weechat.string_eval_expression("abc =~ def", {}, {}) # "0"
str1 = weechat.string_eval_expression("${buffer.full_name}", {}, {}, {}) # "core.weechat"
str2 = weechat.string_eval_expression("${window.win_width} > 100", {}, {}, {"type": "condition"}) # "1"
str3 = weechat.string_eval_expression("abc =~ def", {}, {}, {"type": "condition"}) # "0"
----------------------------------------
[[utf-8]]

View File

@ -207,55 +207,56 @@ infolists: infolist に関する情報を表示
[command]*`eval`* 式を評価して結果をバッファに送信::
........................................
/eval [-n] <expression>
[-n] <expression1> <operator> <expression2>
[-n] -c <expression1> <operator> <expression2>
-n: 結果をバッファに送信せずに表示 (デバッグモード)
expression: 評価する式、フォーマット、${variable} 型のフォーマットの変数は置換されます (以下を参照)
operator: 論理演算子や比較演算子:
- 論理演算子:
&& ブール演算の "and"
|| ブール演算の "or"
- 比較演算子:
== 等しい
!= 等しくない
<= 以下
< より少ない
>= 以上
> より大きい
=~ 正規表現にマッチ
!~ 正規表現にマッチしない
-n: display result without sending it to buffer (debug mode)
-c: evaluate as condition: use operators and parentheses, return a boolean value ("0" or "1")
expression: expression to evaluate, variables with format ${variable} are replaced (see below)
operator: a logical or comparison operator:
- logical operators:
&& boolean "and"
|| boolean "or"
- comparison operators:
== equal
!= not equal
<= less or equal
< less
>= greater or equal
> greater
=~ is matching regex
!~ is NOT matching regex
式が NULL でない場合、空でない場合、"0" でない場合、式は "真" と評価されます。
両方の式が有効な整数である場合、比較は整数を使って行われます。
文字列比較を強制するには、それぞれの式をダブルクォートで囲みます、例えば:
An expression is considered as "true" if it is not NULL, not empty, and different from "0".
The comparison is made using integers if the two expressions are valid integers.
To force a string comparison, add double quotes around each expression, for example:
50 > 100 ==> 0
"50" > "100" ==> 1
式中の ${variable} 型のフォーマットの変数は置換さます。変数は以下の優先順位に従います。
1. オプションの名前 (file.section.option)
2. バッファのローカル変数の名前
3. hdata の名前/変数 (値は自動的に文字列に変換されます)、デフォルトでは "window" と "buffer" は現在のウィンドウ/バッファを指します。
hdata のフォーマットは以下の 1 つです:
hdata.var1.var2...: hdata (ポインタは既知) で始まり、1 個ずつ変数を続ける (他の hdata を続けることも可能)
hdata(list).var1.var2...: リストを使って hdata を始める、例:
${buffer[gui_buffers].full_name}: バッファリストにリンクされた最初のバッファのフルネーム
${plugin[weechat_plugins].name}: プラグインリストにリンクされた最初のプラグインの名前
hdata と変数の名前については、"プラグイン API リファレンス" の "weechat_hdata_get" 関数を参照してください。
Some variables are replaced in expression, using the format ${variable}, variable can be, by order of priority :
1. the name of an option (file.section.option)
2. the name of a local variable in buffer
3. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer.
Format for hdata can be one of following:
hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed)
hdata[list].var1.var2...: start with a hdata using a list, for example:
${buffer[gui_buffers].full_name}: full name of first buffer in linked list of buffers
${plugin[weechat_plugins].name}: name of first plugin in linked list of plugins
For name of hdata and variables, please look at "Plugin API reference", function "weechat_hdata_get".
:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n ${window.buffer.number} > 2 ==> 0
/eval -n ${window.win_width} > 100 ==> 1
/eval -n (8 > 12) || (5 > 2) ==> 1
/eval -n (8 > 12) && (5 > 2) ==> 0
/eval -n abcd =~ ^ABC ==> 1
/eval -n abcd =~ (?-i)^ABC ==> 0
/eval -n abcd =~ (?-i)^abc ==> 1
/eval -n abcd !~ abc ==> 0
Examples:
/eval -n ${weechat.look.scroll_amount} ==> 3
/eval -n ${window} ==> 0x2549aa0
/eval -n ${window.buffer} ==> 0x2549320
/eval -n ${window.buffer.full_name} ==> core.weechat
/eval -n ${window.buffer.number} ==> 1
/eval -n -c ${window.buffer.number} > 2 ==> 0
/eval -n -c ${window.win_width} > 100 ==> 1
/eval -n -c (8 > 12) || (5 > 2) ==> 1
/eval -n -c (8 > 12) && (5 > 2) ==> 0
/eval -n -c abcd =~ ^ABC ==> 1
/eval -n -c abcd =~ (?-i)^ABC ==> 0
/eval -n -c abcd =~ (?-i)^abc ==> 1
/eval -n -c abcd !~ abc ==> 0
........................................
[[command_weechat_filter]]

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:41+0200\n"
"Last-Translator: Jiri Golembiovsky <golemj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1271,11 +1271,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr ""
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1319,19 +1321,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-08-01 19:57+0200\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <weechatter@arcor.de>\n"
@ -1317,11 +1317,15 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr "wertet einen Ausdruck aus und gibt das Resultat im Buffer aus"
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
#, fuzzy
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
#, fuzzy
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1365,19 +1369,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
" -n: zeigt das Ergebnis an, ohne das dieses in den Buffer geschrieben "
"wird (debug Modus)\n"

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:41+0200\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1308,11 +1308,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr "evaluar la expresión y enviar el resultado al buffer"
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1356,19 +1358,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"PO-Revision-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 17:59+0200\n"
"PO-Revision-Date: 2013-08-03 15:06+0200\n"
"Last-Translator: Sebastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n"
@ -1301,11 +1301,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr "évaluer une expression et envoyer le résultat au tampon"
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgstr "[-n] <expression> || [-n] <expression1> <opérateur> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr "[-n] <expression> || [-n] -c <expression1> <opérateur> <expression2>"
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1349,21 +1351,23 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
" -n: afficher le résultat sans envoyer au tampon (mode debug)\n"
" -c: évaluer comme une condition : utiliser les opérateurs et les "
"parenthèses, retourner une valeur booléenne (\"0\" ou \"1\")\n"
"expression: expression à évaluer, les variables avec le format ${variable} "
"sont remplacées (voir ci-dessous)\n"
" opérateur: un opérateur logique ou de comparaison :\n"
@ -1410,19 +1414,19 @@ msgstr ""
"fonction \"weechat_hdata_get\".\n"
"\n"
"Exemples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgid ""
"filter messages in buffers, to hide/show them according to tags or regex"

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:41+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1201,11 +1201,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr ""
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1249,19 +1251,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:41+0200\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1291,11 +1291,15 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr "analizza l'espressione e invia il risultato al buffer"
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
#, fuzzy
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr "[-n] <espressione> || [-n] <espressione1> <operatore> <espressione2>"
#, fuzzy
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1339,19 +1343,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
" -n: mostra il risultato senza inviarlo al buffer (modalità debug)\n"
"espressione: espressione da analizzare, le variabili con il formato "

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-08-02 08:50+0200\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/WeeChat>\n"
@ -1276,11 +1276,15 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr "式を評価して結果をバッファに送信"
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
#, fuzzy
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
#, fuzzy
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1324,19 +1328,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
" -n: 結果をバッファに送信せずに表示 (デバッグモード)\n"
"expression: 評価する式、フォーマット、${variable} 型のフォーマットの変数は置"

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-08-02 08:50+0200\n"
"Last-Translator: Krzysztof Korościk <soltys@szluug.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1306,11 +1306,15 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr "przetwarza wyrażenie i wysyła wynik do buforu"
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
#, fuzzy
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr "[-n] <wyrażenie> || [-n] <wyrażenie1> <operator> <wyrażenie2>"
#, fuzzy
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1354,19 +1358,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
" -n: wyświetla wynik bez wysyłania go do buforu (tryb debugowania)\n"
"wyrażenie: wyrażenie do przetworzenia, zmienne o formacie ${zmienna} są "

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:42+0200\n"
"Last-Translator: Sergio Durigan Junior <sergiosdj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1339,11 +1339,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr ""
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1387,19 +1389,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:42+0200\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1222,11 +1222,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr ""
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1270,19 +1272,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.2-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-07-31 18:42+0200\n"
"Last-Translator: Hasan Kiran <sunder67@hotmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1067,11 +1067,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr ""
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1115,19 +1117,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.1-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2013-08-02 23:16+0200\n"
"POT-Creation-Date: 2013-08-03 15:05+0200\n"
"PO-Revision-Date: 2013-02-14 18:20+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -1073,11 +1073,13 @@ msgstr ""
msgid "evaluate expression and send result to buffer"
msgstr ""
msgid "[-n] <expression> || [-n] <expression1> <operator> <expression2>"
msgid "[-n] <expression> || [-n] -c <expression1> <operator> <expression2>"
msgstr ""
msgid ""
" -n: display result without sending it to buffer (debug mode)\n"
" -c: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -1121,19 +1123,19 @@ msgid ""
"function \"weechat_hdata_get\".\n"
"\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"
msgstr ""
msgid ""

View File

@ -1471,8 +1471,9 @@ COMMAND_CALLBACK(debug)
COMMAND_CALLBACK(eval)
{
int print_only, i;
char *result, *ptr_args, **commands;
int i, print_only, condition;
char *result, *ptr_args, *expr, **commands;
struct t_hashtable *options;
/* make C compiler happy */
(void) buffer;
@ -1480,42 +1481,74 @@ COMMAND_CALLBACK(eval)
(void) argv;
print_only = 0;
condition = 0;
if (argc < 2)
return WEECHAT_RC_OK;
ptr_args = argv_eol[1];
if (string_strcasecmp (argv[1], "-n") == 0)
for (i = 1; i < argc; i++)
{
print_only = 1;
ptr_args = argv_eol[2];
if (string_strcasecmp (argv[i], "-n") == 0)
{
print_only = 1;
ptr_args = argv_eol[i + 1];
}
else if (string_strcasecmp (argv[i], "-c") == 0)
{
condition = 1;
ptr_args = argv_eol[i + 1];
}
else
{
ptr_args = argv_eol[i];
break;
}
}
if (ptr_args)
{
result = eval_expression (ptr_args, NULL, NULL);
options = NULL;
if (condition)
{
options = hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_POINTER,
NULL,
NULL);
if (options)
hashtable_set (options, "type", "condition");
}
if (print_only)
{
gui_chat_printf_date_tags (NULL, 0, "no_log", ">> %s", ptr_args);
if (result)
expr = string_remove_quotes (ptr_args, "\"");
if (expr)
{
gui_chat_printf_date_tags (NULL, 0, "no_log", "== %s[%s%s%s]",
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
GUI_COLOR(GUI_COLOR_CHAT),
result,
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS));
}
else
{
gui_chat_printf_date_tags (NULL, 0, "no_log", "== %s<%s%s%s>",
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
GUI_COLOR(GUI_COLOR_CHAT),
_("error"),
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS));
result = eval_expression (expr, NULL, NULL, options);
gui_chat_printf_date_tags (NULL, 0, "no_log", ">> %s", ptr_args);
if (result)
{
gui_chat_printf_date_tags (NULL, 0, "no_log", "== %s[%s%s%s]",
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
GUI_COLOR(GUI_COLOR_CHAT),
result,
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS));
}
else
{
gui_chat_printf_date_tags (NULL, 0, "no_log", "== %s<%s%s%s>",
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
GUI_COLOR(GUI_COLOR_CHAT),
_("error"),
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS));
}
free (expr);
}
}
else
{
result = eval_expression (ptr_args, NULL, NULL, options);
if (result)
{
commands = string_split_command (result, ';');
@ -1537,6 +1570,8 @@ COMMAND_CALLBACK(eval)
}
if (result)
free (result);
if (options)
hashtable_free (options);
}
return WEECHAT_RC_OK;
@ -6314,9 +6349,11 @@ command_init ()
hook_command (NULL, "eval",
N_("evaluate expression and send result to buffer"),
N_("[-n] <expression>"
" || [-n] <expression1> <operator> <expression2>"),
" || [-n] -c <expression1> <operator> <expression2>"),
N_(" -n: display result without sending it to buffer "
"(debug mode)\n"
" -c: evaluate as condition: use operators and "
"parentheses, return a boolean value (\"0\" or \"1\")\n"
"expression: expression to evaluate, variables with format "
"${variable} are replaced (see below)\n"
" operator: a logical or comparison operator:\n"
@ -6360,20 +6397,20 @@ command_init ()
"For name of hdata and variables, please look at \"Plugin "
"API reference\", function \"weechat_hdata_get\".\n\n"
"Examples:\n"
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n ${window.buffer.number} > 2 ==> 0\n"
" /eval -n ${window.win_width} > 100 ==> 1\n"
" /eval -n (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n abcd =~ ^ABC ==> 1\n"
" /eval -n abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n abcd =~ (?-i)^abc ==> 1\n"
" /eval -n abcd !~ abc ==> 0"),
"-n",
" /eval -n ${weechat.look.scroll_amount} ==> 3\n"
" /eval -n ${window} ==> 0x2549aa0\n"
" /eval -n ${window.buffer} ==> 0x2549320\n"
" /eval -n ${window.buffer.full_name} ==> core.weechat\n"
" /eval -n ${window.buffer.number} ==> 1\n"
" /eval -n -c ${window.buffer.number} > 2 ==> 0\n"
" /eval -n -c ${window.win_width} > 100 ==> 1\n"
" /eval -n -c (8 > 12) || (5 > 2) ==> 1\n"
" /eval -n -c (8 > 12) && (5 > 2) ==> 0\n"
" /eval -n -c abcd =~ ^ABC ==> 1\n"
" /eval -n -c abcd =~ (?-i)^ABC ==> 0\n"
" /eval -n -c abcd =~ (?-i)^abc ==> 1\n"
" /eval -n -c abcd !~ abc ==> 0"),
"-n|-c -n|-c",
&command_eval, NULL);
hook_command (NULL, "filter",
N_("filter messages in buffers, to hide/show them according "
@ -7089,7 +7126,7 @@ command_exec_list (const char *command_list)
if (!command_list || !command_list[0])
return;
command_list2 = eval_expression (command_list, NULL, NULL);
command_list2 = eval_expression (command_list, NULL, NULL, NULL);
if (command_list2 && command_list2[0])
{
commands = string_split_command (command_list2, ';');

View File

@ -343,11 +343,14 @@ end:
/*
* Replaces variables in a string.
*
* Note: result must be freed after use.
*/
char *
eval_replace_vars (const char *expr, struct t_hashtable *pointers,
struct t_hashtable *extra_vars)
struct t_hashtable *extra_vars,
const char *prefix, const char *suffix)
{
int errors;
void *ptr[2];
@ -355,7 +358,7 @@ eval_replace_vars (const char *expr, struct t_hashtable *pointers,
ptr[0] = pointers;
ptr[1] = extra_vars;
return string_replace_with_callback (expr, "${", "}",
return string_replace_with_callback (expr, prefix, suffix,
&eval_replace_vars_cb,
ptr,
&errors);
@ -463,19 +466,21 @@ end:
}
/*
* Evaluates an expression (this function must not be called directly).
* Evaluates a condition (this function must not be called directly).
*
* Argument keep_parentheses is almost always 0, it is 1 only if the expression
* is a regex (to keep flags inside the parentheses).
*
* For return value, see function eval_expression().
* Note: result must be freed after use.
*
* Note: result must be freed after use (if not NULL).
*/
char *
eval_expression_internal (const char *expr, struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
int keep_parentheses)
eval_expression_condition (const char *expr, struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
int keep_parentheses,
const char *prefix, const char *suffix)
{
int logic, comp, length, level, rc;
const char *pos_end;
@ -535,7 +540,9 @@ eval_expression_internal (const char *expr, struct t_hashtable *pointers,
sub_expr = string_strndup (expr2 + 1, pos - expr2 - 1);
if (!sub_expr)
goto end;
tmp_value = eval_expression_internal (sub_expr, pointers, extra_vars, 0);
tmp_value = eval_expression_condition (sub_expr, pointers,
extra_vars,
0, prefix, suffix);
free (sub_expr);
if (!pos[1])
{
@ -577,7 +584,9 @@ eval_expression_internal (const char *expr, struct t_hashtable *pointers,
sub_expr = string_strndup (expr2, pos_end + 1 - expr2);
if (!sub_expr)
goto end;
tmp_value = eval_expression_internal (sub_expr, pointers, extra_vars, 0);
tmp_value = eval_expression_condition (sub_expr, pointers,
extra_vars,
0, prefix, suffix);
free (sub_expr);
rc = eval_is_true (tmp_value);
if (tmp_value)
@ -597,7 +606,8 @@ eval_expression_internal (const char *expr, struct t_hashtable *pointers,
{
pos++;
}
tmp_value = eval_expression_internal (pos, pointers, extra_vars, 0);
tmp_value = eval_expression_condition (pos, pointers, extra_vars,
0, prefix, suffix);
rc = eval_is_true (tmp_value);
if (tmp_value)
free (tmp_value);
@ -626,16 +636,19 @@ eval_expression_internal (const char *expr, struct t_hashtable *pointers,
sub_expr = string_strndup (expr2, pos_end + 1 - expr2);
if (!sub_expr)
goto end;
tmp_value = eval_expression_internal (sub_expr, pointers, extra_vars, 0);
tmp_value = eval_expression_condition (sub_expr, pointers,
extra_vars,
0, prefix, suffix);
free (sub_expr);
pos += strlen (comparisons[comp]);
while (pos[0] == ' ')
{
pos++;
}
tmp_value2 = eval_expression_internal (pos, pointers, extra_vars,
((comp == EVAL_COMPARE_REGEX_MATCHING)
|| (comp == EVAL_COMPARE_REGEX_NOT_MATCHING)) ? 1 : 0);
tmp_value2 = eval_expression_condition (pos, pointers, extra_vars,
((comp == EVAL_COMPARE_REGEX_MATCHING)
|| (comp == EVAL_COMPARE_REGEX_NOT_MATCHING)) ? 1 : 0,
prefix, suffix);
value = eval_compare (tmp_value, comp, tmp_value2);
if (tmp_value)
free (tmp_value);
@ -649,7 +662,7 @@ eval_expression_internal (const char *expr, struct t_hashtable *pointers,
* at this point, there is no more logical operator neither comparison,
* so we just replace variables in string and return the result
*/
value = eval_replace_vars (expr2, pointers, extra_vars);
value = eval_replace_vars (expr2, pointers, extra_vars, prefix, suffix);
end:
if (expr2)
@ -663,37 +676,50 @@ end:
*
* The hashtable "pointers" must have string for keys, pointer for values.
* The hashtable "extra_vars" must have string for keys and values.
* The hashtable "options" must have string for keys and values.
*
* The expression can contain:
* Supported options:
* - prefix: change the default prefix before variables to replace ("${")
* - suffix: change the default suffix after variables to replace ('}")
* - type:
* - condition: evaluate as a condition (use operators/parentheses,
* return a boolean)
*
* If the expression is a condition, it can contain:
* - conditions: == != < <= > >=
* - logical operators: && ||
* - parentheses for priority
*
* Examples (the [ ] are NOT part of result):
* Examples of simple expression without condition (the [ ] are NOT part of
* result):
* >> ${window.buffer.number}
* == [2]
* >> buffer:${window.buffer.full_name}
* == [buffer:irc.freenode.#weechat]
* >> ${window.buffer.full_name} == irc.freenode.#weechat
* == [1]
* >> ${window.buffer.full_name} == irc.freenode.#test
* == [0]
* >> ${window.win_width}
* == [112]
* >> ${window.win_height}
* == [40]
*
* Examples of conditions:
* >> ${window.buffer.full_name} == irc.freenode.#weechat
* == [1]
* >> ${window.buffer.full_name} == irc.freenode.#test
* == [0]
* >> ${window.win_width} >= 30 && ${window.win_height} >= 20
* == [1]
*
* Note: result must be freed after use.
* Note: result must be freed after use (if not NULL).
*/
char *
eval_expression (const char *expr, struct t_hashtable *pointers,
struct t_hashtable *extra_vars)
struct t_hashtable *extra_vars, struct t_hashtable *options)
{
int pointers_created, extra_vars_created;
int condition, pointers_created, extra_vars_created, rc;
char *value;
const char *prefix, *suffix, *default_prefix = "${", *default_suffix = "}";
const char *ptr_value;
struct t_gui_window *window;
if (!expr)
@ -702,6 +728,10 @@ eval_expression (const char *expr, struct t_hashtable *pointers,
pointers_created = 0;
extra_vars_created = 0;
condition = 0;
prefix = default_prefix;
suffix = default_suffix;
/* create hashtable pointers if it's NULL */
if (!pointers)
{
@ -744,7 +774,41 @@ eval_expression (const char *expr, struct t_hashtable *pointers,
extra_vars_created = 1;
}
value = eval_expression_internal (expr, pointers, extra_vars, 0);
/* read options */
if (options)
{
/* check the type of evaluation */
ptr_value = hashtable_get (options, "type");
if (ptr_value && (strcmp (ptr_value, "condition") == 0))
condition = 1;
/* check for custom prefix */
ptr_value = hashtable_get (options, "prefix");
if (ptr_value && ptr_value[0])
prefix = ptr_value;
/* check for custom suffix */
ptr_value = hashtable_get (options, "suffix");
if (ptr_value && ptr_value[0])
suffix = ptr_value;
}
/* evaluate expression */
if (condition)
{
/* evaluate as condition (return a boolean: "0" or "1") */
value = eval_expression_condition (expr, pointers, extra_vars,
0, prefix, suffix);
rc = eval_is_true (value);
if (value)
free (value);
value = strdup ((rc) ? EVAL_STR_TRUE : EVAL_STR_FALSE);
}
else
{
/* only replace variables in expression */
value = eval_replace_vars (expr, pointers, extra_vars, prefix, suffix);
}
if (pointers_created)
hashtable_free (pointers);

View File

@ -50,6 +50,7 @@ enum t_eval_comparison
extern int eval_is_true (const char *value);
extern char *eval_expression (const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars);
struct t_hashtable *extra_vars,
struct t_hashtable *options);
#endif /* __WEECHAT_EVAL_H */

View File

@ -40,6 +40,7 @@ struct t_hashtable *weechat_hdata = NULL;
/* hashtables used in hdata_search() for evaluating expression */
struct t_hashtable *hdata_search_pointers = NULL;
struct t_hashtable *hdata_search_extra_vars = NULL;
struct t_hashtable *hdata_search_options = NULL;
char *hdata_type_string[8] =
{ "other", "char", "integer", "long", "string", "pointer", "time",
@ -508,6 +509,17 @@ hdata_search (struct t_hdata *hdata, void *pointer, const char *search, int move
NULL);
}
if (!hdata_search_options)
{
hdata_search_options = hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
if (hdata_search_options)
hashtable_set (hdata_search_options, "type", "condition");
}
while (pointer)
{
/* set pointer in hashtable (used for evaluating expression) */
@ -515,7 +527,8 @@ hdata_search (struct t_hdata *hdata, void *pointer, const char *search, int move
/* evaluate expression */
result = eval_expression (search, hdata_search_pointers,
hdata_search_extra_vars);
hdata_search_extra_vars,
hdata_search_options);
rc = eval_is_true (result);
if (result)
free (result);
@ -1138,4 +1151,9 @@ hdata_end ()
hashtable_free (hdata_search_extra_vars);
hdata_search_extra_vars = NULL;
}
if (hdata_search_options)
{
hashtable_free (hdata_search_options);
hdata_search_options = NULL;
}
}

View File

@ -1656,7 +1656,7 @@ string_iconv (int from_utf8, const char *from_code, const char *to_code,
/*
* Converts a string to WeeChat internal storage charset (UTF-8).
*
* Note: result has to be freed after use.
* Note: result must be freed after use.
*/
char *
@ -1696,7 +1696,7 @@ string_iconv_to_internal (const char *charset, const char *string)
/*
* Converts internal string to terminal charset, for display.
*
* Note: result has to be freed after use.
* Note: result must be freed after use.
*/
char *
@ -1762,7 +1762,7 @@ string_iconv_fprintf (FILE *file, const char *data, ...)
/*
* Formats a string with size and unit name (bytes, KB, MB, GB).
*
* Note: result has to be freed after use.
* Note: result must be freed after use.
*/
char *
@ -2099,6 +2099,8 @@ string_input_for_buffer (const char *string)
* must be newly allocated because it will be freed in this function).
*
* Argument "errors" is set with number of keys not found by callback.
*
* Note: result must be freed after use.
*/
char *

View File

@ -381,7 +381,7 @@ gui_bar_check_conditions_for_window (struct t_gui_bar *bar,
int rc;
char str_modifier[256], str_window[128], *str_displayed, *result;
const char *conditions;
struct t_hashtable *pointers, *extra_vars;
struct t_hashtable *pointers, *extra_vars, *options;
/* check bar condition(s) */
conditions = CONFIG_STRING(bar->options[GUI_BAR_OPTION_CONDITIONS]);
@ -426,7 +426,16 @@ gui_bar_check_conditions_for_window (struct t_gui_bar *bar,
hashtable_set (extra_vars, "nicklist",
(window->buffer && window->buffer->nicklist) ? "1" : "0");
}
result = eval_expression (conditions, pointers, extra_vars);
options = hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_POINTER,
NULL,
NULL);
if (options)
hashtable_set (options, "type", "condition");
result = eval_expression (conditions, pointers, extra_vars, options);
rc = eval_is_true (result);
if (result)
free (result);
@ -434,6 +443,8 @@ gui_bar_check_conditions_for_window (struct t_gui_bar *bar,
hashtable_free (pointers);
if (extra_vars)
hashtable_free (extra_vars);
if (options)
hashtable_free (options);
if (!rc)
return 0;
}

View File

@ -439,15 +439,15 @@ weechat_guile_api_string_input_for_buffer (SCM string)
SCM
weechat_guile_api_string_eval_expression (SCM expr, SCM pointers,
SCM extra_vars)
SCM extra_vars, SCM options)
{
char *result;
SCM return_value;
struct t_hashtable *c_pointers, *c_extra_vars;
struct t_hashtable *c_pointers, *c_extra_vars, *c_options;
API_FUNC(1, "string_eval_expression", API_RETURN_EMPTY);
if (!scm_is_string (expr) || !scm_list_p (pointers)
|| !scm_list_p (extra_vars))
|| !scm_list_p (extra_vars) || !scm_list_p (options))
API_WRONG_ARGS(API_RETURN_EMPTY);
c_pointers = weechat_guile_alist_to_hashtable (pointers,
@ -458,14 +458,21 @@ weechat_guile_api_string_eval_expression (SCM expr, SCM pointers,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
c_options = weechat_guile_alist_to_hashtable (options,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
result = weechat_string_eval_expression (API_SCM_TO_STRING(expr),
c_pointers, c_extra_vars);
c_pointers, c_extra_vars,
c_options);
if (c_pointers)
weechat_hashtable_free (c_pointers);
if (c_extra_vars)
weechat_hashtable_free (c_extra_vars);
if (c_options)
weechat_hashtable_free (c_options);
API_RETURN_STRING_FREE(result);
}
@ -4608,7 +4615,7 @@ weechat_guile_api_module_init (void *data)
API_DEF_FUNC(string_remove_color, 2);
API_DEF_FUNC(string_is_command_char, 1);
API_DEF_FUNC(string_input_for_buffer, 1);
API_DEF_FUNC(string_eval_expression, 3);
API_DEF_FUNC(string_eval_expression, 4);
API_DEF_FUNC(mkdir_home, 2);
API_DEF_FUNC(mkdir, 2);
API_DEF_FUNC(mkdir_parents, 2);

View File

@ -159,10 +159,10 @@ IRC_PROTOCOL_CALLBACK(authenticate)
IRC_SERVER_OPTION_SASL_MECHANISM);
sasl_username = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_USERNAME),
NULL, NULL);
NULL, NULL, NULL);
sasl_password = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_PASSWORD),
NULL, NULL);
NULL, NULL, NULL);
answer = NULL;
switch (sasl_mechanism)
{
@ -2122,7 +2122,7 @@ IRC_PROTOCOL_CALLBACK(001)
/* execute command when connected */
server_command = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_COMMAND),
NULL, NULL);
NULL, NULL, NULL);
if (server_command && server_command[0])
{
/* split command on ';' which can be escaped with '\;' */

View File

@ -324,10 +324,10 @@ irc_server_sasl_enabled (struct t_irc_server *server)
IRC_SERVER_OPTION_SASL_MECHANISM);
sasl_username = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_USERNAME),
NULL, NULL);
NULL, NULL, NULL);
sasl_password = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_PASSWORD),
NULL, NULL);
NULL, NULL, NULL);
/*
* SASL is enabled if using mechanism "external"
@ -3055,7 +3055,7 @@ irc_server_login (struct t_irc_server *server)
password = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_PASSWORD),
NULL, NULL);
NULL, NULL, NULL);
username = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_USERNAME);
realname = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_REALNAME);
capabilities = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_CAPABILITIES);
@ -4154,7 +4154,7 @@ irc_server_autojoin_channels (struct t_irc_server *server)
/* auto-join when connecting to server for first time */
autojoin = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_AUTOJOIN),
NULL, NULL);
NULL, NULL, NULL);
if (!server->disable_autojoin && autojoin && autojoin[0])
irc_command_join_server (server, autojoin, 0, 0);
if (autojoin)

View File

@ -420,29 +420,36 @@ static int
weechat_lua_api_string_eval_expression (lua_State *L)
{
const char *expr;
struct t_hashtable *pointers, *extra_vars;
struct t_hashtable *pointers, *extra_vars, *options;
char *result;
API_FUNC(1, "string_eval_expression", API_RETURN_EMPTY);
if (lua_gettop (L) < 3)
if (lua_gettop (L) < 4)
API_WRONG_ARGS(API_RETURN_EMPTY);
expr = lua_tostring (L, -3);
pointers = weechat_lua_tohashtable (L, -2,
expr = lua_tostring (L, -4);
pointers = weechat_lua_tohashtable (L, -3,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_POINTER);
extra_vars = weechat_lua_tohashtable (L, -1,
extra_vars = weechat_lua_tohashtable (L, -2,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
options = weechat_lua_tohashtable (L, -1,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
result = weechat_string_eval_expression (expr, pointers, extra_vars);
result = weechat_string_eval_expression (expr, pointers, extra_vars,
options);
if (pointers)
weechat_hashtable_free (pointers);
if (extra_vars)
weechat_hashtable_free (extra_vars);
if (options)
weechat_hashtable_free (options);
API_RETURN_STRING_FREE(result);
}

View File

@ -400,11 +400,11 @@ XS (XS_weechat_api_string_input_for_buffer)
XS (XS_weechat_api_string_eval_expression)
{
char *expr, *result;
struct t_hashtable *pointers, *extra_vars;
struct t_hashtable *pointers, *extra_vars, *options;
dXSARGS;
API_FUNC(1, "string_eval_expression", API_RETURN_EMPTY);
if (items < 3)
if (items < 4)
API_WRONG_ARGS(API_RETURN_EMPTY);
expr = SvPV_nolen (ST (0));
@ -416,13 +416,20 @@ XS (XS_weechat_api_string_eval_expression)
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
options = weechat_perl_hash_to_hashtable (ST (3),
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
result = weechat_string_eval_expression (expr, pointers, extra_vars);
result = weechat_string_eval_expression (expr, pointers, extra_vars,
options);
if (pointers)
weechat_hashtable_free (pointers);
if (extra_vars)
weechat_hashtable_free (extra_vars);
if (options)
weechat_hashtable_free (options);
API_RETURN_STRING_FREE(result);
}

View File

@ -397,14 +397,15 @@ static PyObject *
weechat_python_api_string_eval_expression (PyObject *self, PyObject *args)
{
char *expr, *result;
struct t_hashtable *pointers, *extra_vars;
PyObject *dict, *dict2, *return_value;
struct t_hashtable *pointers, *extra_vars, *options;
PyObject *dict, *dict2, *dict3, *return_value;
API_FUNC(1, "string_eval_expression", API_RETURN_EMPTY);
expr = NULL;
pointers = NULL;
extra_vars = NULL;
if (!PyArg_ParseTuple (args, "sOO", &expr, &dict, &dict2))
options = NULL;
if (!PyArg_ParseTuple (args, "sOOO", &expr, &dict, &dict2, &dict3))
API_WRONG_ARGS(API_RETURN_EMPTY);
pointers = weechat_python_dict_to_hashtable (dict,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
@ -414,13 +415,20 @@ weechat_python_api_string_eval_expression (PyObject *self, PyObject *args)
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
options = weechat_python_dict_to_hashtable (dict3,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
result = weechat_string_eval_expression (expr, pointers, extra_vars);
result = weechat_string_eval_expression (expr, pointers, extra_vars,
options);
if (pointers)
weechat_hashtable_free (pointers);
if (extra_vars)
weechat_hashtable_free (extra_vars);
if (options)
weechat_hashtable_free (options);
API_RETURN_STRING_FREE(result);
}

View File

@ -463,19 +463,22 @@ weechat_ruby_api_string_input_for_buffer (VALUE class, VALUE string)
static VALUE
weechat_ruby_api_string_eval_expression (VALUE class, VALUE expr,
VALUE pointers, VALUE extra_vars)
VALUE pointers, VALUE extra_vars,
VALUE options)
{
char *c_expr, *result;
struct t_hashtable *c_pointers, *c_extra_vars;
struct t_hashtable *c_pointers, *c_extra_vars, *c_options;
VALUE return_value;
API_FUNC(1, "string_eval_expression", API_RETURN_EMPTY);
if (NIL_P (expr) || NIL_P (pointers) || NIL_P (extra_vars))
if (NIL_P (expr) || NIL_P (pointers) || NIL_P (extra_vars)
|| NIL_P (options))
API_WRONG_ARGS(API_RETURN_EMPTY);
Check_Type (expr, T_STRING);
Check_Type (pointers, T_HASH);
Check_Type (extra_vars, T_HASH);
Check_Type (options, T_HASH);
c_expr = StringValuePtr (expr);
c_pointers = weechat_ruby_hash_to_hashtable (pointers,
@ -486,13 +489,20 @@ weechat_ruby_api_string_eval_expression (VALUE class, VALUE expr,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
c_options = weechat_ruby_hash_to_hashtable (options,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
result = weechat_string_eval_expression (c_expr, c_pointers, c_extra_vars);
result = weechat_string_eval_expression (c_expr, c_pointers, c_extra_vars,
c_options);
if (c_pointers)
weechat_hashtable_free (c_pointers);
if (c_extra_vars)
weechat_hashtable_free (c_extra_vars);
if (c_options)
weechat_hashtable_free (c_options);
API_RETURN_STRING_FREE(result);
}
@ -5945,7 +5955,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
API_DEF_FUNC(string_remove_color, 2);
API_DEF_FUNC(string_is_command_char, 1);
API_DEF_FUNC(string_input_for_buffer, 1);
API_DEF_FUNC(string_eval_expression, 3);
API_DEF_FUNC(string_eval_expression, 4);
API_DEF_FUNC(mkdir_home, 2);
API_DEF_FUNC(mkdir, 2);
API_DEF_FUNC(mkdir_parents, 2);

View File

@ -735,7 +735,7 @@ script_repo_script_is_held (struct t_script_repo *script)
/*
* Computes MD5 checksum for the content of a file.
*
* Note: result has to be freed after use.
* Note: result must be freed after use.
*/
char *

View File

@ -571,11 +571,11 @@ weechat_tcl_api_string_eval_expression (ClientData clientData,
{
Tcl_Obj *objp;
char *expr, *result;
struct t_hashtable *pointers, *extra_vars;
struct t_hashtable *pointers, *extra_vars, *options;
int i;
API_FUNC(1, "string_eval_expression", API_RETURN_EMPTY);
if (objc < 4)
if (objc < 5)
API_WRONG_ARGS(API_RETURN_EMPTY);
expr = Tcl_GetStringFromObj (objv[1], &i);
@ -587,13 +587,20 @@ weechat_tcl_api_string_eval_expression (ClientData clientData,
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
options = weechat_tcl_dict_to_hashtable (interp, objv[4],
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING);
result = weechat_string_eval_expression (expr, pointers, extra_vars);
result = weechat_string_eval_expression (expr, pointers, extra_vars,
options);
if (pointers)
weechat_hashtable_free (pointers);
if (extra_vars)
weechat_hashtable_free (extra_vars);
if (options)
weechat_hashtable_free (options);
API_RETURN_STRING_FREE(result);
}

View File

@ -52,7 +52,7 @@ struct timeval;
* please change the date with current one; for a second change at same
* date, increment the 01, otherwise please keep 01.
*/
#define WEECHAT_PLUGIN_API_VERSION "20130727-01"
#define WEECHAT_PLUGIN_API_VERSION "20130804-01"
/* macros for defining plugin infos */
#define WEECHAT_PLUGIN_NAME(__name) \
@ -256,7 +256,8 @@ struct t_weechat_plugin
const char *(*string_input_for_buffer) (const char *string);
char *(*string_eval_expression )(const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars);
struct t_hashtable *extra_vars,
struct t_hashtable *options);
/* UTF-8 strings */
int (*utf8_has_8bits) (const char *string);
@ -1020,9 +1021,9 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
#define weechat_string_input_for_buffer(__string) \
weechat_plugin->string_input_for_buffer(__string)
#define weechat_string_eval_expression(__expr, __pointers, \
__extra_vars) \
__extra_vars, __options) \
weechat_plugin->string_eval_expression(__expr, __pointers, \
__extra_vars) \
__extra_vars, __options)
/* UTF-8 strings */
#define weechat_utf8_has_8bits(__string) \