summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2015-12-24 07:53:37 +0100
committerSébastien Helleu <flashcode@flashtux.org>2015-12-24 07:53:37 +0100
commitc4e3d66ba5bb6f91a0b5a36bab1123e25623b5e9 (patch)
tree2cac4fac4512c8c0eccc47d78ad07fd2fea768b9
parent2e5489b389c339799c5950f275cbc784927495da (diff)
downloadweechat-c4e3d66ba5bb6f91a0b5a36bab1123e25623b5e9.zip
core: add a parent name in options (closes #629)
Inherited values are now displayed in /set output when the value is null, if a parent option name is defined in option. New option: weechat.color.chat_value_null
-rw-r--r--ChangeLog.asciidoc2
-rw-r--r--doc/de/autogen/plugin_api/hdata.asciidoc1
-rw-r--r--doc/de/autogen/user/weechat_options.asciidoc5
-rw-r--r--doc/en/autogen/plugin_api/hdata.asciidoc1
-rw-r--r--doc/en/autogen/user/weechat_options.asciidoc5
-rw-r--r--doc/en/weechat_dev.en.asciidoc1
-rw-r--r--doc/en/weechat_plugin_api.en.asciidoc6
-rw-r--r--doc/fr/autogen/plugin_api/hdata.asciidoc1
-rw-r--r--doc/fr/autogen/user/weechat_options.asciidoc5
-rw-r--r--doc/fr/weechat_dev.fr.asciidoc1
-rw-r--r--doc/fr/weechat_plugin_api.fr.asciidoc6
-rw-r--r--doc/it/autogen/plugin_api/hdata.asciidoc1
-rw-r--r--doc/it/autogen/user/weechat_options.asciidoc5
-rw-r--r--doc/it/weechat_plugin_api.it.asciidoc8
-rw-r--r--doc/ja/autogen/plugin_api/hdata.asciidoc1
-rw-r--r--doc/ja/autogen/user/weechat_options.asciidoc5
-rw-r--r--doc/ja/weechat_dev.ja.asciidoc1
-rw-r--r--doc/ja/weechat_plugin_api.ja.asciidoc8
-rw-r--r--doc/pl/autogen/plugin_api/hdata.asciidoc1
-rw-r--r--doc/pl/autogen/user/weechat_options.asciidoc5
-rw-r--r--po/cs.po16
-rw-r--r--po/de.po16
-rw-r--r--po/es.po16
-rw-r--r--po/fr.po16
-rw-r--r--po/hu.po16
-rw-r--r--po/it.po16
-rw-r--r--po/ja.po16
-rw-r--r--po/pl.po16
-rw-r--r--po/pt_BR.po16
-rw-r--r--po/ru.po16
-rw-r--r--po/tr.po16
-rw-r--r--po/weechat.pot9
-rw-r--r--src/core/wee-command.c240
-rw-r--r--src/core/wee-config-file.c632
-rw-r--r--src/core/wee-config-file.h6
-rw-r--r--src/core/wee-config.c7
-rw-r--r--src/core/wee-config.h1
-rw-r--r--src/gui/curses/gui-curses-color.c1
-rw-r--r--src/gui/gui-color.h4
-rw-r--r--src/plugins/irc/irc-server.c31
40 files changed, 655 insertions, 521 deletions
diff --git a/ChangeLog.asciidoc b/ChangeLog.asciidoc
index 477f57b5e..cc4dbb2ed 100644
--- a/ChangeLog.asciidoc
+++ b/ChangeLog.asciidoc
@@ -21,6 +21,8 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
[[1.4_features]]
=== New features
+* core: add a parent name in options, display inherited values if null in
+ /set output, add option weechat.color.chat_value_null (issue #629)
* core: add tag "term_warning" in warnings about wrong $TERM on startup
* core: add option weechat.look.paste_auto_add_newline (issue #543)
* core: display a more explicit error when a filter fails to be added
diff --git a/doc/de/autogen/plugin_api/hdata.asciidoc b/doc/de/autogen/plugin_api/hdata.asciidoc
index dd9171e46..6ea804573 100644
--- a/doc/de/autogen/plugin_api/hdata.asciidoc
+++ b/doc/de/autogen/plugin_api/hdata.asciidoc
@@ -658,6 +658,7 @@
*** 'config_file' (pointer, hdata: "config_file")
*** 'section' (pointer, hdata: "config_section")
*** 'name' (string)
+*** 'parent_name' (string)
*** 'type' (integer)
*** 'description' (string)
*** 'string_values' (string, array_size: "*")
diff --git a/doc/de/autogen/user/weechat_options.asciidoc b/doc/de/autogen/user/weechat_options.asciidoc
index 9a03776aa..42e4b19f4 100644
--- a/doc/de/autogen/user/weechat_options.asciidoc
+++ b/doc/de/autogen/user/weechat_options.asciidoc
@@ -197,6 +197,11 @@
** Typ: Farbe
** Werte: ein Farbname für WeeChat (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), eine Terminal-Farbnummer oder ein Alias; Attribute können vor eine Farbe gesetzt werden (gilt ausschließlich für die Textfarbe und nicht für den Hintergrund): "*" für fett, "!" für invertiert, "/" für kursiv, "_" für unterstrichen (Standardwert: `cyan`)
+* [[option_weechat.color.chat_value_null]] *weechat.color.chat_value_null*
+** Beschreibung: `text color for null values (undefined)`
+** Typ: Farbe
+** Werte: ein Farbname für WeeChat (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), eine Terminal-Farbnummer oder ein Alias; Attribute können vor eine Farbe gesetzt werden (gilt ausschließlich für die Textfarbe und nicht für den Hintergrund): "*" für fett, "!" für invertiert, "/" für kursiv, "_" für unterstrichen (Standardwert: `blue`)
+
* [[option_weechat.color.emphasized]] *weechat.color.emphasized*
** Beschreibung: `Textfarbe um Text hervorzuheben (zum Beispiel bei der Textsuche); wird ausschließlich dann genutzt, falls die Einstellung weechat.look.emphasized_attributes keinen Eintrag besitzt (Standardwert)`
** Typ: Farbe
diff --git a/doc/en/autogen/plugin_api/hdata.asciidoc b/doc/en/autogen/plugin_api/hdata.asciidoc
index 6b8f25048..904f694ee 100644
--- a/doc/en/autogen/plugin_api/hdata.asciidoc
+++ b/doc/en/autogen/plugin_api/hdata.asciidoc
@@ -658,6 +658,7 @@
*** 'config_file' (pointer, hdata: "config_file")
*** 'section' (pointer, hdata: "config_section")
*** 'name' (string)
+*** 'parent_name' (string)
*** 'type' (integer)
*** 'description' (string)
*** 'string_values' (string, array_size: "*")
diff --git a/doc/en/autogen/user/weechat_options.asciidoc b/doc/en/autogen/user/weechat_options.asciidoc
index 2791b8229..e478791cc 100644
--- a/doc/en/autogen/user/weechat_options.asciidoc
+++ b/doc/en/autogen/user/weechat_options.asciidoc
@@ -197,6 +197,11 @@
** type: color
** values: a WeeChat color name (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), a terminal color number or an alias; attributes are allowed before color (for text color only, not background): "*" for bold, "!" for reverse, "/" for italic, "_" for underline (default value: `cyan`)
+* [[option_weechat.color.chat_value_null]] *weechat.color.chat_value_null*
+** description: `text color for null values (undefined)`
+** type: color
+** values: a WeeChat color name (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), a terminal color number or an alias; attributes are allowed before color (for text color only, not background): "*" for bold, "!" for reverse, "/" for italic, "_" for underline (default value: `blue`)
+
* [[option_weechat.color.emphasized]] *weechat.color.emphasized*
** description: `text color for emphasized text (for example when searching text); this option is used only if option weechat.look.emphasized_attributes is an empty string (default value)`
** type: color
diff --git a/doc/en/weechat_dev.en.asciidoc b/doc/en/weechat_dev.en.asciidoc
index d13d8cc1e..1484afeaa 100644
--- a/doc/en/weechat_dev.en.asciidoc
+++ b/doc/en/weechat_dev.en.asciidoc
@@ -873,6 +873,7 @@ Color codes using options (see 't_gui_color_enum', in file
| 41 | weechat.color.chat_nick_suffix _(WeeChat ≥ 0.4.1)_
| 42 | weechat.color.emphasized _(WeeChat ≥ 0.4.2)_
| 43 | weechat.color.chat_day_change _(WeeChat ≥ 0.4.2)_
+| 44 | weechat.color.chat_value_null _(WeeChat ≥ 1.4)_
|===
WeeChat colors are:
diff --git a/doc/en/weechat_plugin_api.en.asciidoc b/doc/en/weechat_plugin_api.en.asciidoc
index 4d945e3e0..7366e4cab 100644
--- a/doc/en/weechat_plugin_api.en.asciidoc
+++ b/doc/en/weechat_plugin_api.en.asciidoc
@@ -4632,7 +4632,10 @@ Arguments:
* 'config_file': configuration file pointer
* 'section': section pointer
-* 'name': name of option
+* 'name': name of option; with WeeChat ≥ 1.4, the name can include a parent
+ option name (the value of parent option will be displayed in `/set` command
+ output if this option is "null"), the syntax is then:
+ "name << file.section.option"
* 'type': type of option:
** 'boolean': boolean value (on/off)
** 'integer': integer value (with optional strings for values)
@@ -5300,6 +5303,7 @@ Arguments:
** 'config_file': configuration file pointer ('struct t_config_file *')
** 'section': section pointer ('struct t_config_section *')
** 'name': option name ('char *')
+** 'parent_name': name of parent option ('char *') _(WeeChat ≥ 1.4)_
** 'type': option type ('int *')
** 'description': option description ('char *')
** 'string_values': string values ('char *')
diff --git a/doc/fr/autogen/plugin_api/hdata.asciidoc b/doc/fr/autogen/plugin_api/hdata.asciidoc
index 77204cfaf..fcabef755 100644
--- a/doc/fr/autogen/plugin_api/hdata.asciidoc
+++ b/doc/fr/autogen/plugin_api/hdata.asciidoc
@@ -658,6 +658,7 @@
*** 'config_file' (pointer, hdata: "config_file")
*** 'section' (pointer, hdata: "config_section")
*** 'name' (string)
+*** 'parent_name' (string)
*** 'type' (integer)
*** 'description' (string)
*** 'string_values' (string, array_size: "*")
diff --git a/doc/fr/autogen/user/weechat_options.asciidoc b/doc/fr/autogen/user/weechat_options.asciidoc
index 728c7085f..869ebe91d 100644
--- a/doc/fr/autogen/user/weechat_options.asciidoc
+++ b/doc/fr/autogen/user/weechat_options.asciidoc
@@ -197,6 +197,11 @@
** type: couleur
** valeurs: un nom de couleur WeeChat (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), un numéro de couleur du terminal ou un alias ; des attributs sont autorisés avant la couleur (seulement pour la couleur du texte, pas le fond) : "*" pour le gras, "!" pour la vidéo inverse, "/" pour l'italique, "_" pour le souligné (valeur par défaut: `cyan`)
+* [[option_weechat.color.chat_value_null]] *weechat.color.chat_value_null*
+** description: `couleur du texte pour les valeurs "null" (non définies)`
+** type: couleur
+** valeurs: un nom de couleur WeeChat (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), un numéro de couleur du terminal ou un alias ; des attributs sont autorisés avant la couleur (seulement pour la couleur du texte, pas le fond) : "*" pour le gras, "!" pour la vidéo inverse, "/" pour l'italique, "_" pour le souligné (valeur par défaut: `blue`)
+
* [[option_weechat.color.emphasized]] *weechat.color.emphasized*
** description: `couleur du texte pour le texte mis en valeur (par exemple lors de la recherche de texte) ; cette option est utilisée seulement si l'option weechat.look.emphasized_attributes est une chaîne vide (valeur par défaut)`
** type: couleur
diff --git a/doc/fr/weechat_dev.fr.asciidoc b/doc/fr/weechat_dev.fr.asciidoc
index 0ec591865..991e25380 100644
--- a/doc/fr/weechat_dev.fr.asciidoc
+++ b/doc/fr/weechat_dev.fr.asciidoc
@@ -888,6 +888,7 @@ fichier 'src/gui/gui-color.h') :
| 41 | weechat.color.chat_nick_suffix _(WeeChat ≥ 0.4.1)_
| 42 | weechat.color.emphasized _(WeeChat ≥ 0.4.2)_
| 43 | weechat.color.chat_day_change _(WeeChat ≥ 0.4.2)_
+| 44 | weechat.color.chat_value_null _(WeeChat ≥ 1.4)_
|===
Les couleurs WeeChat sont :
diff --git a/doc/fr/weechat_plugin_api.fr.asciidoc b/doc/fr/weechat_plugin_api.fr.asciidoc
index 8ad462c5d..eb2f3a1e2 100644
--- a/doc/fr/weechat_plugin_api.fr.asciidoc
+++ b/doc/fr/weechat_plugin_api.fr.asciidoc
@@ -4708,7 +4708,10 @@ Paramètres :
* 'config_file' : pointeur vers le fichier de configuration
* 'section' : pointeur vers la section
-* 'name' : nom de l'option
+* 'name' : nom de l'option ; avec WeeChat ≥ 1.4, le nom peut inclure le nom
+ d'une option parente (la valeur de l'option parente sera affichée dans la
+ sortie de `/set` si cette option est "null"), la syntaxe est alors :
+ "name << file.section.option"
* 'type' : type de l'option :
** 'boolean' : valeur booléenne (on/off)
** 'integer' : valeur entière (avec en option une chaîne pour chaque valeur)
@@ -5386,6 +5389,7 @@ Paramètres :
('struct t_config_file *')
** 'section' : pointeur vers la section ('struct t_config_section *')
** 'name' : nom de l'option ('char *')
+** 'parent_name' : nom de l'option parente ('char *') _(WeeChat ≥ 1.4)_
** 'type' : type de l'option ('int *')
** 'description' : description de l'option ('char *')
** 'string_values' : valeurs sous forme de chaîne ('char *')
diff --git a/doc/it/autogen/plugin_api/hdata.asciidoc b/doc/it/autogen/plugin_api/hdata.asciidoc
index e3b8459aa..c49a21e7d 100644
--- a/doc/it/autogen/plugin_api/hdata.asciidoc
+++ b/doc/it/autogen/plugin_api/hdata.asciidoc
@@ -658,6 +658,7 @@
*** 'config_file' (pointer, hdata: "config_file")
*** 'section' (pointer, hdata: "config_section")
*** 'name' (string)
+*** 'parent_name' (string)
*** 'type' (integer)
*** 'description' (string)
*** 'string_values' (string, array_size: "*")
diff --git a/doc/it/autogen/user/weechat_options.asciidoc b/doc/it/autogen/user/weechat_options.asciidoc
index b844fdcf4..9c7238464 100644
--- a/doc/it/autogen/user/weechat_options.asciidoc
+++ b/doc/it/autogen/user/weechat_options.asciidoc
@@ -197,6 +197,11 @@
** tipo: colore
** valori: a WeeChat color name (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), a terminal color number or an alias; attributes are allowed before color (for text color only, not background): "*" for bold, "!" for reverse, "/" for italic, "_" for underline (valore predefinito: `cyan`)
+* [[option_weechat.color.chat_value_null]] *weechat.color.chat_value_null*
+** descrizione: `text color for null values (undefined)`
+** tipo: colore
+** valori: a WeeChat color name (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), a terminal color number or an alias; attributes are allowed before color (for text color only, not background): "*" for bold, "!" for reverse, "/" for italic, "_" for underline (valore predefinito: `blue`)
+
* [[option_weechat.color.emphasized]] *weechat.color.emphasized*
** descrizione: `text color for emphasized text (for example when searching text); this option is used only if option weechat.look.emphasized_attributes is an empty string (default value)`
** tipo: colore
diff --git a/doc/it/weechat_plugin_api.it.asciidoc b/doc/it/weechat_plugin_api.it.asciidoc
index b44bd9c48..6806063dc 100644
--- a/doc/it/weechat_plugin_api.it.asciidoc
+++ b/doc/it/weechat_plugin_api.it.asciidoc
@@ -4758,7 +4758,11 @@ Argomenti:
* 'config_file': puntatore al file di configurazione
* 'section': puntatore alla sezione
-* 'name': nome dell'opzione
+// TRANSLATION MISSING
+* 'name': nome dell'opzione; with WeeChat ≥ 1.4, the name can include a parent
+ option name (the value of parent option will be displayed in `/set` command
+ output if this option is "null"), the syntax is then:
+ "name << file.section.option"
* 'type': tipo dell'opzione:
** 'boolean': valore booleano (on/off)
** 'integer': valore intero (con stringhe opzionali per i valori)
@@ -5435,6 +5439,8 @@ Argomenti:
** 'config_file': puntatore al file di configurazione ('struct t_config_file *')
** 'section': puntatore alla sezione ('struct t_config_section *')
** 'name': nome dell'opzione ('char *')
+// TRANSLATION MISSING
+** 'parent_name': name of parent option ('char *') _(WeeChat ≥ 1.4)_
** 'type': tipo dell'opzione ('int *')
** 'description': descrizione dell'opzione ('char *')
** 'string_values': valori stringa ('char *')
diff --git a/doc/ja/autogen/plugin_api/hdata.asciidoc b/doc/ja/autogen/plugin_api/hdata.asciidoc
index b4f27fa69..9873e30e9 100644
--- a/doc/ja/autogen/plugin_api/hdata.asciidoc
+++ b/doc/ja/autogen/plugin_api/hdata.asciidoc
@@ -658,6 +658,7 @@
*** 'config_file' (pointer, hdata: "config_file")
*** 'section' (pointer, hdata: "config_section")
*** 'name' (string)
+*** 'parent_name' (string)
*** 'type' (integer)
*** 'description' (string)
*** 'string_values' (string, array_size: "*")
diff --git a/doc/ja/autogen/user/weechat_options.asciidoc b/doc/ja/autogen/user/weechat_options.asciidoc
index 1fc5ab655..fb013faa8 100644
--- a/doc/ja/autogen/user/weechat_options.asciidoc
+++ b/doc/ja/autogen/user/weechat_options.asciidoc
@@ -197,6 +197,11 @@
** タイプ: 色
** 値: WeeChat の色名 (default、black、(dark)gray、white、(light)red、(light)green、brown、yellow、(light)blue、(light)magenta、(light)cyan) 、ターミナル色番号またはその別名; 色の前に属性を置くことができます (テキスト前景色のみ、背景色は出来ません): 太字は "*"、反転は "!"、イタリックは "/"、下線は "_" (デフォルト値: `cyan`)
+* [[option_weechat.color.chat_value_null]] *weechat.color.chat_value_null*
+** 説明: `text color for null values (undefined)`
+** タイプ: 色
+** 値: WeeChat の色名 (default、black、(dark)gray、white、(light)red、(light)green、brown、yellow、(light)blue、(light)magenta、(light)cyan) 、ターミナル色番号またはその別名; 色の前に属性を置くことができます (テキスト前景色のみ、背景色は出来ません): 太字は "*"、反転は "!"、イタリックは "/"、下線は "_" (デフォルト値: `blue`)
+
* [[option_weechat.color.emphasized]] *weechat.color.emphasized*
** 説明: `強調テキストの色 (テキスト検索する際など); このオプションは weechat.look.emphasized_attributes オプションが空文字列 (デフォルト値) の場合のみ使われます`
** タイプ: 色
diff --git a/doc/ja/weechat_dev.ja.asciidoc b/doc/ja/weechat_dev.ja.asciidoc
index eb0b506ce..a2a3eb957 100644
--- a/doc/ja/weechat_dev.ja.asciidoc
+++ b/doc/ja/weechat_dev.ja.asciidoc
@@ -873,6 +873,7 @@ WeeChat は文字列中に独自の色コードを使うことで、属性
| 41 | weechat.color.chat_nick_suffix _(WeeChat ≥ 0.4.1)_
| 42 | weechat.color.emphasized _(WeeChat ≥ 0.4.2)_
| 43 | weechat.color.chat_day_change _(WeeChat ≥ 0.4.2)_
+| 44 | weechat.color.chat_value_null _(WeeChat ≥ 1.4)_
|===
WeeChat 色は:
diff --git a/doc/ja/weechat_plugin_api.ja.asciidoc b/doc/ja/weechat_plugin_api.ja.asciidoc
index f65211015..ab030f169 100644
--- a/doc/ja/weechat_plugin_api.ja.asciidoc
+++ b/doc/ja/weechat_plugin_api.ja.asciidoc
@@ -4633,7 +4633,11 @@ struct t_config_option *weechat_config_new_option (
* 'config_file': 設定ファイルへのポインタ
* 'section': セクションへのポインタ
-* 'name': オプションの名前
+// TRANSLATION MISSING
+* 'name': オプションの名前; with WeeChat ≥ 1.4, the name can include a parent
+ option name (the value of parent option will be displayed in `/set` command
+ output if this option is "null"), the syntax is then:
+ "name << file.section.option"
* 'type': オプションの型:
** 'boolean': ブール値 (on/off)
** 'integer': 整数値 (任意で文字列を受けるようにすることも可)
@@ -5301,6 +5305,8 @@ void *weechat_config_option_get_pointer (struct t_config_option *option,
** 'config_file': 設定ファイルへのポインタ ('struct t_config_file *')
** 'section': セクションへのポインタ ('struct t_config_section *')
** 'name': オプション名 ('char *')
+// TRANSLATION MISSING
+** 'parent_name': name of parent option ('char *') _(WeeChat ≥ 1.4)_
** 'type': オプションの型 ('int *')
** 'description': オプションの説明 ('char *')
** 'string_values': 文字列値 ('char *')
diff --git a/doc/pl/autogen/plugin_api/hdata.asciidoc b/doc/pl/autogen/plugin_api/hdata.asciidoc
index b33a4f083..c90a4311c 100644
--- a/doc/pl/autogen/plugin_api/hdata.asciidoc
+++ b/doc/pl/autogen/plugin_api/hdata.asciidoc
@@ -658,6 +658,7 @@
*** 'config_file' (pointer, hdata: "config_file")
*** 'section' (pointer, hdata: "config_section")
*** 'name' (string)
+*** 'parent_name' (string)
*** 'type' (integer)
*** 'description' (string)
*** 'string_values' (string, array_size: "*")
diff --git a/doc/pl/autogen/user/weechat_options.asciidoc b/doc/pl/autogen/user/weechat_options.asciidoc
index 62e26b089..cd76e1c96 100644
--- a/doc/pl/autogen/user/weechat_options.asciidoc
+++ b/doc/pl/autogen/user/weechat_options.asciidoc
@@ -197,6 +197,11 @@
** typ: kolor
** wartości: nazwa koloru WeeChat (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), numer koloru terminala albo alias; atrybuty dozwolone przed kolorem (tylko dla kolorów testu, nie tła): "*" pogrubienie, "!" odwrócenie, "/" pochylenie, "_" podkreślenie (domyślna wartość: `cyan`)
+* [[option_weechat.color.chat_value_null]] *weechat.color.chat_value_null*
+** opis: `text color for null values (undefined)`
+** typ: kolor
+** wartości: nazwa koloru WeeChat (default, black, (dark)gray, white, (light)red, (light)green, brown, yellow, (light)blue, (light)magenta, (light)cyan), numer koloru terminala albo alias; atrybuty dozwolone przed kolorem (tylko dla kolorów testu, nie tła): "*" pogrubienie, "!" odwrócenie, "/" pochylenie, "_" podkreślenie (domyślna wartość: `blue`)
+
* [[option_weechat.color.emphasized]] *weechat.color.emphasized*
** opis: `kolor dla wyróżnionego tekstu (na przykład podczas wyszukiwania); opcja używana tylko jeśli opcja weechat.look.emphasized_attributes jest pustym ciągiem (wartość domyślna)`
** typ: kolor
diff --git a/po/cs.po b/po/cs.po
index 18c375543..931f35591 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 17:29+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-20 17:33+0100\n"
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -841,11 +841,12 @@ msgstr "Chráněná data \"%s\" nastavena"
msgid "%sSecured data \"%s\" not found"
msgstr "%s%s: skript \"%s\" nenalezen"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "výchozí: "
-msgid "(unknown)"
-msgstr "(neznámý)"
+msgid "default: "
+msgstr "výchozí: "
#, fuzzy, c-format
msgid ""
@@ -3597,6 +3598,10 @@ msgstr "barva textu děličů času"
msgid "text color for values"
msgstr "barva textu pro hodnoty"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "barva textu pro hodnoty"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -11258,3 +11263,6 @@ msgstr "%s%s: vypršel časový limit \"%s\" pro %s"
#, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s: nemohu se připojit\" neočekávaná chyba (%d)"
+
+#~ msgid "(unknown)"
+#~ msgstr "(neznámý)"
diff --git a/po/de.po b/po/de.po
index 3dc5e33d7..f474907e4 100644
--- a/po/de.po
+++ b/po/de.po
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-20 09:49+0100\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <>\n"
@@ -869,11 +869,12 @@ msgstr "schutzwürdige Information \"%s\" gelöscht"
msgid "%sSecured data \"%s\" not found"
msgstr "%sschutzwürdige Information \"%s\" nicht gefunden"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "Standardwert: "
-msgid "(unknown)"
-msgstr "(unbekannt)"
+msgid "default: "
+msgstr "Standardwert: "
#, c-format
msgid ""
@@ -4265,6 +4266,10 @@ msgstr "Farbe in der das Trennzeichen für die Uhrzeit dargestellt werden soll"
msgid "text color for values"
msgstr "Farbe für Werte"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "Farbe für Werte"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -12798,3 +12803,6 @@ msgstr "%s%s: Zeitüberschreitung für \"%s\" mit %s"
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr ""
"%s%s: Verbindung konnte nicht hergestellt werden: unerwarteter Fehler (%d)"
+
+#~ msgid "(unknown)"
+#~ msgstr "(unbekannt)"
diff --git a/po/es.po b/po/es.po
index fbe464f91..735f48e26 100644
--- a/po/es.po
+++ b/po/es.po
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-02 19:26+0100\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -840,11 +840,12 @@ msgstr "Barra eliminada"
msgid "%sSecured data \"%s\" not found"
msgstr "%s: script \"%s\" no encontrado"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "predeterminado: "
-msgid "(unknown)"
-msgstr "(desconocido)"
+msgid "default: "
+msgstr "predeterminado: "
#, fuzzy, c-format
msgid ""
@@ -3779,6 +3780,10 @@ msgstr "color para los delimitadores de la hora"
msgid "text color for values"
msgstr "color para los valores"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "color para los valores"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -11527,3 +11532,6 @@ msgstr "%s%s: tiempo de espera máximo para \"%s\" con %s"
#, fuzzy, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s: no es posible conectarse al transmisor"
+
+#~ msgid "(unknown)"
+#~ msgstr "(desconocido)"
diff --git a/po/fr.po b/po/fr.po
index c3b4f7231..bc68f1e44 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
-"PO-Revision-Date: 2015-12-20 08:17+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
+"PO-Revision-Date: 2015-12-24 07:52+0100\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n"
@@ -857,12 +857,12 @@ msgstr "Donnée sécurise \"%s\" supprimée"
msgid "%sSecured data \"%s\" not found"
msgstr "%sDonnée sécurisée \"%s\" non trouvée"
+msgid "default if null: "
+msgstr "défaut si nul : "
+
msgid "default: "
msgstr "défaut : "
-msgid "(unknown)"
-msgstr "(inconnu)"
-
#, c-format
msgid ""
"%sOption \"%s\" not found (tip: you can use wildcard \"*\" in option to see "
@@ -4158,6 +4158,9 @@ msgstr "couleur du texte pour les délimiteurs de l'heure"
msgid "text color for values"
msgstr "couleur du texte pour les valeurs"
+msgid "text color for null values (undefined)"
+msgstr "couleur du texte pour les valeurs \"null\" (non définies)"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -12536,3 +12539,6 @@ msgstr "%s%s : délai d'attente dépassé pour \"%s\" avec %s"
#, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s : impossible de se connecter : erreur inattendue (%d)"
+
+#~ msgid "(unknown)"
+#~ msgstr "(inconnu)"
diff --git a/po/hu.po b/po/hu.po
index e351bb435..3b900275e 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-02 19:26+0100\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -871,11 +871,12 @@ msgid "%sSecured data \"%s\" not found"
msgstr "%s a \"%s\" szerver nem található\n"
#, fuzzy
-msgid "default: "
+msgid "default if null: "
msgstr " . alapérték: %d\n"
-msgid "(unknown)"
-msgstr "(ismeretlen)"
+#, fuzzy
+msgid "default: "
+msgstr " . alapérték: %d\n"
#, c-format
msgid ""
@@ -3182,6 +3183,10 @@ msgstr "információs pult határolóinak színe"
msgid "text color for values"
msgstr "üzenetek színe"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "üzenetek színe"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -10580,3 +10585,6 @@ msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n"
#, fuzzy, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s DCC: nem sikerült kapcsolódni a küldőhöz\n"
+
+#~ msgid "(unknown)"
+#~ msgstr "(ismeretlen)"
diff --git a/po/it.po b/po/it.po
index 680846bf9..0b31eaab1 100644
--- a/po/it.po
+++ b/po/it.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-02 19:26+0100\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -827,11 +827,12 @@ msgstr "Dati sicuri \"%s\" eliminati"
msgid "%sSecured data \"%s\" not found"
msgstr "%sDati sicuri \"%s\" non trovati"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "predefinito: "
-msgid "(unknown)"
-msgstr "(sconosciuto)"
+msgid "default: "
+msgstr "predefinito: "
#, fuzzy, c-format
msgid ""
@@ -3890,6 +3891,10 @@ msgstr "colore del testo per i delimitator dell'orario"
msgid "text color for values"
msgstr "colore del testo per i valori"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "colore del testo per i valori"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -11710,3 +11715,6 @@ msgstr "%s%s: timeout per \"%s\" con %s"
#, fuzzy, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s: impossibile connettersi al mittente"
+
+#~ msgid "(unknown)"
+#~ msgstr "(sconosciuto)"
diff --git a/po/ja.po b/po/ja.po
index 5b1b68aa3..c94c6d77e 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-02 19:26+0100\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/weechat/tree/translation_ja>\n"
@@ -846,11 +846,12 @@ msgstr "保護データ \"%s\" を削除しました"
msgid "%sSecured data \"%s\" not found"
msgstr "%s保護データ \"%s\" が見つかりません"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "デフォルト: "
-msgid "(unknown)"
-msgstr "(未定義)"
+msgid "default: "
+msgstr "デフォルト: "
#, c-format
msgid ""
@@ -3998,6 +3999,10 @@ msgstr "時間区切りのテキスト色"
msgid "text color for values"
msgstr "値のテキスト色"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "値のテキスト色"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -12038,3 +12043,6 @@ msgstr "%s%s: \"%s\" のタイムアウト %s"
#, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s: 接続できません: 未定義のエラー (%d)"
+
+#~ msgid "(unknown)"
+#~ msgstr "(未定義)"
diff --git a/po/pl.po b/po/pl.po
index 44551684a..f5e9da6c4 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-02 19:26+0100\n"
"Last-Translator: Krzysztof Korościk <soltys@szluug.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -856,11 +856,12 @@ msgstr "Usunięto zabezpieczone dane \"%s\""
msgid "%sSecured data \"%s\" not found"
msgstr "%sNie znaleziono zabezpieczonych danych \"%s\""
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "domyślnie: "
-msgid "(unknown)"
-msgstr "(nieznane)"
+msgid "default: "
+msgstr "domyślnie: "
#, c-format
msgid ""
@@ -4094,6 +4095,10 @@ msgstr "kolor separatora czasu"
msgid "text color for values"
msgstr "kolor wyświetlania wartości"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "kolor wyświetlania wartości"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -12237,3 +12242,6 @@ msgstr "%s%s: przekroczono czas na \"%s\" z %s"
#, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s: nie można połączyć: niespodziewany błąd (%d)"
+
+#~ msgid "(unknown)"
+#~ msgstr "(nieznane)"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 4e4d5b331..63bd8fa4b 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-09-30 20:56+0200\n"
"Last-Translator: Eduardo Elias <camponez@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -861,11 +861,12 @@ msgstr "Dados seguros \"%s\" deletados"
msgid "%sSecured data \"%s\" not found"
msgstr "%sDados seguros \"%s\" não encontrados"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "padrão: "
-msgid "(unknown)"
-msgstr "(desconhecido)"
+msgid "default: "
+msgstr "padrão: "
#, fuzzy, c-format
msgid ""
@@ -3776,6 +3777,10 @@ msgstr "cor do texto para delimitadores de tempo"
msgid "text color for values"
msgstr "cor de texto para valores"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "cor de texto para valores"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -11011,3 +11016,6 @@ msgstr "%s%s: tempo esgotado para \"%s\" com %s"
#, fuzzy, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s%s: não foi possível conectar ao remetente"
+
+#~ msgid "(unknown)"
+#~ msgstr "(desconhecido)"
diff --git a/po/ru.po b/po/ru.po
index 6cd858d91..97a6acd67 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-12-02 19:26+0100\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -886,11 +886,12 @@ msgid "%sSecured data \"%s\" not found"
msgstr "%s сервер \"%s\" не найден\n"
#, fuzzy
-msgid "default: "
+msgid "default if null: "
msgstr " . значение по умолчанию: %d\n"
-msgid "(unknown)"
-msgstr "(неизвестен)"
+#, fuzzy
+msgid "default: "
+msgstr " . значение по умолчанию: %d\n"
#, fuzzy, c-format
msgid ""
@@ -3215,6 +3216,10 @@ msgstr "цвет разделителей информационной пане
msgid "text color for values"
msgstr "цвет чата"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "цвет чата"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -10607,3 +10612,6 @@ msgstr "%s нет аргумента для параметра \"%s\"\n"
#, fuzzy, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr "%s DCC: не могу соединиться с отправителем\n"
+
+#~ msgid "(unknown)"
+#~ msgstr "(неизвестен)"
diff --git a/po/tr.po b/po/tr.po
index a23721ffc..1706daef3 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2015-03-10 21:33+0100\n"
"Last-Translator: Hasan Kiran <sunder67@hotmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -788,11 +788,12 @@ msgstr "Filtre \"%s\" silindi"
msgid "%sSecured data \"%s\" not found"
msgstr "%s: \"%s\" betiği bulunamadı"
-msgid "default: "
+#, fuzzy
+msgid "default if null: "
msgstr "öntanımlı: "
-msgid "(unknown)"
-msgstr "(bilinmiyor)"
+msgid "default: "
+msgstr "öntanımlı: "
#, c-format
msgid ""
@@ -2877,6 +2878,10 @@ msgstr ""
msgid "text color for values"
msgstr "değerler için metin rengi"
+#, fuzzy
+msgid "text color for null values (undefined)"
+msgstr "değerler için metin rengi"
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
@@ -9608,3 +9613,6 @@ msgstr ""
#, c-format
msgid "%s%s: unable to connect: unexpected error (%d)"
msgstr ""
+
+#~ msgid "(unknown)"
+#~ msgstr "(bilinmiyor)"
diff --git a/po/weechat.pot b/po/weechat.pot
index c3747e3b8..9c6102635 100644
--- a/po/weechat.pot
+++ b/po/weechat.pot
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2015-12-20 08:08+0100\n"
+"POT-Creation-Date: 2015-12-24 07:51+0100\n"
"PO-Revision-Date: 2014-08-16 10:27+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -786,10 +786,10 @@ msgstr ""
msgid "%sSecured data \"%s\" not found"
msgstr ""
-msgid "default: "
+msgid "default if null: "
msgstr ""
-msgid "(unknown)"
+msgid "default: "
msgstr ""
#, c-format
@@ -2873,6 +2873,9 @@ msgstr ""
msgid "text color for values"
msgstr ""
+msgid "text color for null values (undefined)"
+msgstr ""
+
msgid ""
"text color for emphasized text (for example when searching text); this "
"option is used only if option weechat.look.emphasized_attributes is an empty "
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index ee4904c0e..b471bb085 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -5328,183 +5328,85 @@ void
command_set_display_option (struct t_config_option *option,
const char *message)
{
- const char *color_name;
- const char *display_undefined = _("(undefined)");
- const char *display_default;
- char str_default[128];
- int is_file_plugins_conf;
+ struct t_config_option *ptr_parent_option;
+ char *value, *inherited_value, *default_value;
+ int is_file_plugins_conf, is_value_inherited, is_default_value_inherited;
+
+ ptr_parent_option = NULL;
+
+ value = NULL;
+ inherited_value = NULL;
+ default_value = NULL;
- display_default = NULL;
is_file_plugins_conf = (option->config_file && option->config_file->name
&& (strcmp (option->config_file->name, "plugins") == 0));
+ is_value_inherited = 0;
+ is_default_value_inherited = 0;
- if (option->value)
+ /* check if option has a parent option */
+ if (option->parent_name)
{
- if (!is_file_plugins_conf && !option->default_value)
- {
- display_default = display_undefined;
- }
- switch (option->type)
- {
- case CONFIG_OPTION_TYPE_BOOLEAN:
- if (!is_file_plugins_conf && option->default_value
- && (CONFIG_BOOLEAN(option) != CONFIG_BOOLEAN_DEFAULT(option)))
- {
- snprintf (str_default, sizeof (str_default), "%s",
- (CONFIG_BOOLEAN_DEFAULT(option)) ? "on" : "off");
- display_default = str_default;
- }
- gui_chat_printf_date_tags (NULL, 0,
- "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
- "%s%s.%s.%s%s = %s%s%s%s%s%s%s%s%s%s",
- (message) ? message : " ",
- (option->config_file) ? option->config_file->name : "",
- (option->section) ? option->section->name : "",
- option->name,
- GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
- GUI_COLOR(GUI_COLOR_CHAT_VALUE),
- (CONFIG_BOOLEAN(option) == CONFIG_BOOLEAN_TRUE) ? "on" : "off",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? " (" : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT) : "",
- (display_default) ? _("default: ") : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
- (display_default) ? display_default : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? ")" : "");
- break;
- case CONFIG_OPTION_TYPE_INTEGER:
- if (!is_file_plugins_conf && option->default_value
- && (CONFIG_INTEGER(option) != CONFIG_INTEGER_DEFAULT(option)))
- {
- if (option->string_values)
- {
- display_default = option->string_values[CONFIG_INTEGER_DEFAULT(option)];
- }
- else
- {
- snprintf (str_default, sizeof (str_default),
- "%d", CONFIG_INTEGER_DEFAULT(option));
- display_default = str_default;
- }
- }
- if (option->string_values)
- {
- gui_chat_printf_date_tags (NULL, 0,
- "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
- "%s%s.%s.%s%s = %s%s%s%s%s%s%s%s%s%s",
- (message) ? message : " ",
- (option->config_file) ? option->config_file->name : "",
- (option->section) ? option->section->name : "",
- option->name,
- GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
- GUI_COLOR(GUI_COLOR_CHAT_VALUE),
- option->string_values[CONFIG_INTEGER(option)],
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? " (" : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT) : "",
- (display_default) ? _("default: ") : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
- (display_default) ? display_default : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? ")" : "");
- }
- else
- {
- gui_chat_printf_date_tags (NULL, 0,
- "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
- "%s%s.%s.%s%s = %s%d%s%s%s%s%s%s%s%s",
- (message) ? message : " ",
- (option->config_file) ? option->config_file->name : "",
- (option->section) ? option->section->name : "",
- option->name,
- GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
- GUI_COLOR(GUI_COLOR_CHAT_VALUE),
- CONFIG_INTEGER(option),
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? " (" : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT) : "",
- (display_default) ? _("default: ") : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
- (display_default) ? display_default : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? ")" : "");
- }
- break;
- case CONFIG_OPTION_TYPE_STRING:
- if (!is_file_plugins_conf && option->default_value
- && (strcmp (CONFIG_STRING(option), CONFIG_STRING_DEFAULT(option)) != 0))
- {
- display_default = CONFIG_STRING_DEFAULT(option);
- }
- gui_chat_printf_date_tags (NULL, 0,
- "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
- "%s%s.%s.%s%s = \"%s%s%s\"%s%s%s%s%s%s%s%s%s%s%s",
- (message) ? message : " ",
- (option->config_file) ? option->config_file->name : "",
- (option->section) ? option->section->name : "",
- option->name,
- GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
- GUI_COLOR(GUI_COLOR_CHAT_VALUE),
- CONFIG_STRING(option),
- GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? " (" : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT) : "",
- (display_default) ? _("default: ") : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) && display_default != display_undefined ? "\"" : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
- (display_default) ? display_default : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) && display_default != display_undefined ? "\"" : "",
- (display_default) ? ")" : "");
- break;
- case CONFIG_OPTION_TYPE_COLOR:
- if (!is_file_plugins_conf && option->default_value
- && (CONFIG_COLOR(option) != CONFIG_COLOR_DEFAULT(option)))
- {
- display_default = gui_color_get_name (CONFIG_COLOR_DEFAULT(option));
- if (display_default == NULL)
- {
- display_default = _("(unknown)");
- }
- }
- color_name = gui_color_get_name (CONFIG_COLOR(option));
- gui_chat_printf_date_tags (NULL, 0,
- "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
- "%s%s.%s.%s%s = %s%s%s%s%s%s%s%s%s%s",
- (message) ? message : " ",
- (option->config_file) ? option->config_file->name : "",
- (option->section) ? option->section->name : "",
- option->name,
- GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
- GUI_COLOR(GUI_COLOR_CHAT_VALUE),
- (color_name) ? color_name : _("(unknown)"),
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? " (" : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT) : "",
- (display_default) ? _("default: ") : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
- (display_default) ? display_default : "",
- (display_default) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
- (display_default) ? ")" : "");
- break;
- case CONFIG_NUM_OPTION_TYPES:
- /* make C compiler happy */
- break;
- }
+ config_file_search_with_string (option->parent_name, NULL, NULL,
+ &ptr_parent_option, NULL);
+ if (ptr_parent_option && (ptr_parent_option->type != option->type))
+ ptr_parent_option = NULL;
}
- else
+
+ /* check if the value is inherited from parent option */
+ if (!option->value && ptr_parent_option && ptr_parent_option->value)
+ is_value_inherited = 1;
+
+ value = config_file_option_value_to_string (option, 0, 1, 1);
+
+ if (is_value_inherited)
{
- gui_chat_printf_date_tags (NULL, 0,
- "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
- "%s%s.%s.%s",
- (message) ? message : " ",
- (option->config_file) ? option->config_file->name : "",
- (option->section) ? option->section->name : "",
- option->name);
+ inherited_value = config_file_option_value_to_string (
+ ptr_parent_option, 0, 1, 1);
}
+
+ if (option->value)
+ {
+ if (ptr_parent_option)
+ {
+ is_default_value_inherited = 1;
+ default_value = config_file_option_value_to_string (
+ ptr_parent_option, 0, 1, 1);
+ }
+ else if (!is_file_plugins_conf
+ && config_file_option_has_changed (option))
+ {
+ default_value = config_file_option_value_to_string (
+ option, 1, 1, 1);
+ }
+ }
+
+ gui_chat_printf_date_tags (
+ NULL, 0,
+ "no_trigger," GUI_CHAT_TAG_NO_HIGHLIGHT,
+ "%s%s.%s.%s%s = %s%s%s%s%s%s%s%s%s%s%s",
+ (message) ? message : " ",
+ (option->config_file) ? option->config_file->name : "",
+ (option->section) ? option->section->name : "",
+ option->name,
+ GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
+ (value) ? value : "?",
+ (inherited_value) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
+ (inherited_value) ? " -> " : "",
+ (inherited_value) ? inherited_value : "",
+ (default_value) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
+ (default_value) ? " (" : "",
+ (default_value) ? GUI_COLOR(GUI_COLOR_CHAT) : "",
+ (default_value) ? ((is_default_value_inherited) ? _("default if null: ") : _("default: ")) : "",
+ (default_value) ? default_value : "",
+ (default_value) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
+ (default_value) ? ")" : "");
+
+ if (value)
+ free (value);
+ if (inherited_value)
+ free (inherited_value);
+ if (default_value)
+ free (default_value);
}
/*
diff --git a/src/core/wee-config-file.c b/src/core/wee-config-file.c
index 473efb640..051a18dfd 100644
--- a/src/core/wee-config-file.c
+++ b/src/core/wee-config-file.c
@@ -565,6 +565,7 @@ config_file_option_malloc ()
new_option->config_file = NULL;
new_option->section = NULL;
new_option->name = NULL;
+ new_option->parent_name = NULL;
new_option->type = 0;
new_option->description = NULL;
new_option->string_values = NULL;
@@ -615,14 +616,31 @@ config_file_new_option (struct t_config_file *config_file,
struct t_config_option *new_option;
int var_type, int_value, argc, i, index_value;
long number;
- char *error;
+ char *error, *pos, *option_name, *parent_name;
+
+ new_option = NULL;
+ option_name = NULL;
+ parent_name = NULL;
if (!name)
- return NULL;
+ goto error;
+
+ pos = strstr (name, " << ");
+ if (pos)
+ {
+ option_name = string_strndup (name, pos - name);
+ parent_name = strdup (pos + 4);
+ }
+ else
+ {
+ option_name = strdup (name);
+ }
if (config_file && section
- && config_file_search_option (config_file, section, name))
- return NULL;
+ && config_file_search_option (config_file, section, option_name))
+ {
+ goto error;
+ }
var_type = -1;
for (i = 0; i < CONFIG_NUM_OPTION_TYPES; i++)
@@ -638,7 +656,7 @@ config_file_new_option (struct t_config_file *config_file,
gui_chat_printf (NULL, "%sError: unknown option type \"%s\"",
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
type);
- return NULL;
+ goto error;
}
if (!null_value_allowed)
@@ -648,7 +666,7 @@ config_file_new_option (struct t_config_file *config_file,
else if (!default_value && value)
default_value = value;
if (!default_value || !value)
- return NULL;
+ goto error;
}
new_option = config_file_option_malloc ();
@@ -656,9 +674,10 @@ config_file_new_option (struct t_config_file *config_file,
{
new_option->config_file = config_file;
new_option->section = section;
- new_option->name = strdup (name);
+ new_option->name = strdup (option_name);
if (!new_option->name)
goto error;
+ new_option->parent_name = (parent_name) ? strdup (parent_name) : NULL;
new_option->type = var_type;
if (description)
{
@@ -838,15 +857,22 @@ config_file_new_option (struct t_config_file *config_file,
}
}
- return new_option;
+ goto end;
error:
if (new_option)
{
config_file_option_free_data (new_option);
free (new_option);
+ new_option = NULL;
}
- return NULL;
+
+end:
+ if (option_name)
+ free (option_name);
+ if (parent_name)
+ free (parent_name);
+ return new_option;
}
/*
@@ -1648,12 +1674,17 @@ void
config_file_option_rename (struct t_config_option *option,
const char *new_name)
{
- char *str_new_name;
+ char *str_new_name, *full_old_name, *full_new_name;
+ struct t_config_file *ptr_config;
+ struct t_config_section *ptr_section;
+ struct t_config_option *ptr_option;
if (!option || !new_name || !new_name[0]
|| config_file_search_option (option->config_file, option->section, new_name))
return;
+ full_old_name = config_file_option_full_name (option);
+
str_new_name = strdup (new_name);
if (str_new_name)
{
@@ -1679,6 +1710,155 @@ config_file_option_rename (struct t_config_option *option,
if (option->section)
config_file_option_insert_in_section (option);
}
+
+ full_new_name = config_file_option_full_name (option);
+
+ /* rename "parent_name" in any option using the old option name */
+ if (full_old_name && full_new_name)
+ {
+ for (ptr_config = config_files; ptr_config;
+ ptr_config = ptr_config->next_config)
+ {
+ for (ptr_section = ptr_config->sections; ptr_section;
+ ptr_section = ptr_section->next_section)
+ {
+ for (ptr_option = ptr_section->options; ptr_option;
+ ptr_option = ptr_option->next_option)
+ {
+ if (ptr_option->parent_name
+ && (strcmp (ptr_option->parent_name, full_old_name) == 0))
+ {
+ free (ptr_option->parent_name);
+ ptr_option->parent_name = strdup (full_new_name);
+ }
+ }
+ }
+ }
+ }
+
+ if (full_old_name)
+ free (full_old_name);
+ if (full_new_name)
+ free (full_new_name);
+}
+
+/*
+ * Builds a string with the value or default value of option,
+ * depending on the type of option.
+ *
+ * According to default_value:
+ * 0: value of option is returned
+ * 1: default value of option is returned
+ *
+ * Note: result must be freed after use.
+ */
+
+char *
+config_file_option_value_to_string (struct t_config_option *option,
+ int default_value,
+ int use_colors,
+ int use_delimiters)
+{
+ char *value;
+ const char *ptr_value;
+ int enabled, length;
+
+ if ((default_value && !option->default_value)
+ || (!default_value && !option->value))
+ {
+ length = 7 + ((use_colors) ? 64 : 0) + 1;
+ value = malloc (length);
+ if (!value)
+ return NULL;
+ snprintf (value, length,
+ "%s%s",
+ (use_colors) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE_NULL) : "",
+ "null");
+ return value;
+ }
+
+ switch (option->type)
+ {
+ case CONFIG_OPTION_TYPE_BOOLEAN:
+ enabled = (default_value) ?
+ CONFIG_BOOLEAN_DEFAULT(option) : CONFIG_BOOLEAN(option);
+ length = 7 + ((use_colors) ? 64 : 0) + 1;
+ value = malloc (length);
+ if (!value)
+ return NULL;
+ snprintf (value, length,
+ "%s%s",
+ (use_colors) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
+ (enabled) ? "on" : "off");
+ return value;
+ break;
+ case CONFIG_OPTION_TYPE_INTEGER:
+ if (option->string_values)
+ {
+ ptr_value = (default_value) ?
+ option->string_values[CONFIG_INTEGER_DEFAULT(option)] :
+ option->string_values[CONFIG_INTEGER(option)];
+ length = strlen (ptr_value) + ((use_colors) ? 64 : 0) + 1;
+ value = malloc (length);
+ if (!value)
+ return NULL;
+ snprintf (value, length,
+ "%s%s",
+ (use_colors) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
+ ptr_value);
+ return value;
+ }
+ else
+ {
+ length = 31 + ((use_colors) ? 64 : 0) + 1;
+ value = malloc (length);
+ if (!value)
+ return NULL;
+ snprintf (value, length,
+ "%s%d",
+ (use_colors) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
+ (default_value) ? CONFIG_INTEGER_DEFAULT(option) : CONFIG_INTEGER(option));
+ return value;
+ }
+ break;
+ case CONFIG_OPTION_TYPE_STRING:
+ ptr_value = (default_value) ? CONFIG_STRING_DEFAULT(option) : CONFIG_STRING(option);
+ length = strlen (ptr_value) + ((use_colors) ? 64 : 0) + 1;
+ value = malloc (length);
+ if (!value)
+ return NULL;
+ snprintf (value, length,
+ "%s%s%s%s%s%s",
+ (use_colors && use_delimiters) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
+ (use_delimiters) ? "\"" : "",
+ (use_colors) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
+ ptr_value,
+ (use_colors && use_delimiters) ? GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS) : "",
+ (use_delimiters) ? "\"" : "");
+ return value;
+ break;
+ case CONFIG_OPTION_TYPE_COLOR:
+ ptr_value = gui_color_get_name (
+ (default_value) ? CONFIG_COLOR_DEFAULT(option) : CONFIG_COLOR(option));
+ if (!ptr_value)
+ return NULL;
+ length = strlen (ptr_value) + ((use_colors) ? 64 : 0) + 1;
+ value = malloc (length);
+ if (!value)
+ return NULL;
+ snprintf (value, length,
+ "%s%s",
+ (use_colors) ? GUI_COLOR(GUI_COLOR_CHAT_VALUE) : "",
+ ptr_value);
+ return value;
+ break;
+ case CONFIG_NUM_OPTION_TYPES:
+ /* make C compiler happy */
+ break;
+ }
+
+ /* make C static analyzer happy (never executed) */
+ return NULL;
}
/*
@@ -1698,6 +1878,8 @@ config_file_option_get_pointer (struct t_config_option *option,
return option->section;
else if (string_strcasecmp (property, "name") == 0)
return option->name;
+ else if (string_strcasecmp (property, "parent_name") == 0)
+ return option->parent_name;
else if (string_strcasecmp (property, "type") == 0)
return &option->type;
else if (string_strcasecmp (property, "description") == 0)
@@ -2667,6 +2849,8 @@ config_file_option_free_data (struct t_config_option *option)
{
if (option->name)
free (option->name);
+ if (option->parent_name)
+ free (option->parent_name);
if (option->description)
free (option->description);
if (option->string_values)
@@ -2934,6 +3118,7 @@ config_file_hdata_config_option_cb (void *data, const char *hdata_name)
HDATA_VAR(struct t_config_option, config_file, POINTER, 0, NULL, "config_file");
HDATA_VAR(struct t_config_option, section, POINTER, 0, NULL, "config_section");
HDATA_VAR(struct t_config_option, name, STRING, 0, NULL, NULL);
+ HDATA_VAR(struct t_config_option, parent_name, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, type, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, description, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, string_values, STRING, 0, "*", NULL);
@@ -2956,6 +3141,150 @@ config_file_hdata_config_option_cb (void *data, const char *hdata_name)
}
/*
+ * Adds a configuration option in an infolist.
+ *
+ * Returns:
+ * 1: OK
+ * 0: error
+ */
+
+int
+config_file_add_option_to_infolist(struct t_infolist *infolist,
+ struct t_config_file *config_file,
+ struct t_config_section *section,
+ struct t_config_option *option,
+ const char *option_name)
+{
+ char *option_full_name, *value, *string_values;
+ struct t_config_option *ptr_parent_option;
+ struct t_infolist_item *ptr_item;
+ int rc;
+
+ rc = 1;
+
+ option_full_name = config_file_option_full_name (option);
+ if (!option_full_name)
+ goto error;
+
+ if (option_name && option_name[0]
+ && (!string_match (option_full_name, option_name, 0)))
+ {
+ goto end;
+ }
+
+ ptr_item = infolist_new_item (infolist);
+ if (!ptr_item)
+ goto error;
+
+ if (!infolist_new_var_string (ptr_item, "full_name", option_full_name))
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "config_name", config_file->name))
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "section_name", section->name))
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "option_name", option->name))
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "parent_name", option->parent_name))
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "description", option->description))
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "description_nls",
+ (option->description
+ && option->description[0]) ?
+ _(option->description) : ""))
+ {
+ goto error;
+ }
+ string_values = string_build_with_split_string (
+ (const char **)option->string_values, "|");
+ if (!infolist_new_var_string (ptr_item, "string_values", string_values))
+ {
+ if (string_values)
+ free (string_values);
+ goto error;
+ }
+ if (string_values)
+ free (string_values);
+ if (!infolist_new_var_integer (ptr_item, "min", option->min))
+ goto error;
+ if (!infolist_new_var_integer (ptr_item, "max", option->max))
+ goto error;
+ if (!infolist_new_var_integer (ptr_item, "null_value_allowed",
+ option->null_value_allowed))
+ {
+ goto error;
+ }
+ if (!infolist_new_var_integer (ptr_item, "value_is_null",
+ (option->value) ? 0 : 1))
+ {
+ goto error;
+ }
+ if (!infolist_new_var_integer (ptr_item,
+ "default_value_is_null",
+ (option->default_value) ?
+ 0 : 1))
+ {
+ goto error;
+ }
+ if (!infolist_new_var_string (ptr_item, "type",
+ config_option_type_string[option->type]))
+ {
+ goto error;
+ }
+ if (option->value)
+ {
+ value = config_file_option_value_to_string (option, 0, 0, 0);
+ if (!value)
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "value", value))
+ {
+ free (value);
+ goto error;
+ }
+ free (value);
+ }
+ if (option->default_value)
+ {
+ value = config_file_option_value_to_string (option, 1, 0, 0);
+ if (!value)
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "default_value", value))
+ {
+ free (value);
+ goto error;
+ }
+ free (value);
+ }
+ if (option->parent_name)
+ {
+ config_file_search_with_string (option->parent_name,
+ NULL, NULL, &ptr_parent_option, NULL);
+ if (ptr_parent_option && ptr_parent_option->value)
+ {
+ value = config_file_option_value_to_string (ptr_parent_option,
+ 0, 0, 0);
+ if (!value)
+ goto error;
+ if (!infolist_new_var_string (ptr_item, "parent_value", value))
+ {
+ free (value);
+ goto error;
+ }
+ free (value);
+ }
+ }
+
+ goto end;
+
+error:
+ rc = 0;
+
+end:
+ free (option_full_name);
+ return rc;
+}
+
+/*
* Adds configuration options in an infolist.
*
* Returns:
@@ -2970,9 +3299,6 @@ config_file_add_to_infolist (struct t_infolist *infolist,
struct t_config_file *ptr_config;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
- struct t_infolist_item *ptr_item;
- int length;
- char *option_full_name, value[128], *string_values;
if (!infolist)
return 0;
@@ -2986,280 +3312,13 @@ config_file_add_to_infolist (struct t_infolist *infolist,
for (ptr_option = ptr_section->options; ptr_option;
ptr_option = ptr_option->next_option)
{
- length = strlen (ptr_config->name) + 1 +
- strlen (ptr_section->name) + 1 +
- strlen (ptr_option->name) + 1;
- option_full_name = malloc (length);
- if (option_full_name)
+ if (!config_file_add_option_to_infolist (infolist,
+ ptr_config,
+ ptr_section,
+ ptr_option,
+ option_name))
{
- snprintf (option_full_name, length, "%s.%s.%s",
- ptr_config->name,
- ptr_section->name,
- ptr_option->name);
- if (!option_name || !option_name[0]
- || string_match (option_full_name, option_name, 0))
- {
- ptr_item = infolist_new_item (infolist);
- if (!ptr_item)
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_string (ptr_item,
- "full_name",
- option_full_name))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_string (ptr_item,
- "config_name",
- ptr_config->name))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_string (ptr_item,
- "section_name",
- ptr_section->name))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_string (ptr_item,
- "option_name",
- ptr_option->name))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_string (ptr_item,
- "description",
- ptr_option->description))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_string (ptr_item,
- "description_nls",
- (ptr_option->description
- && ptr_option->description[0]) ?
- _(ptr_option->description) : ""))
- {
- free (option_full_name);
- return 0;
- }
- string_values = string_build_with_split_string ((const char **)ptr_option->string_values,
- "|");
- if (!infolist_new_var_string (ptr_item,
- "string_values",
- string_values))
- {
- if (string_values)
- free (string_values);
- free (option_full_name);
- return 0;
- }
- if (string_values)
- free (string_values);
- if (!infolist_new_var_integer (ptr_item,
- "min",
- ptr_option->min))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_integer (ptr_item,
- "max",
- ptr_option->max))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_integer (ptr_item,
- "null_value_allowed",
- ptr_option->null_value_allowed))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_integer (ptr_item,
- "value_is_null",
- (ptr_option->value) ?
- 0 : 1))
- {
- free (option_full_name);
- return 0;
- }
- if (!infolist_new_var_integer (ptr_item,
- "default_value_is_null",
- (ptr_option->default_value) ?
- 0 : 1))
- {
- free (option_full_name);
- return 0;
- }
- switch (ptr_option->type)
- {
- case CONFIG_OPTION_TYPE_BOOLEAN:
- if (!infolist_new_var_string (ptr_item,
- "type",
- "boolean"))
- {
- free (option_full_name);
- return 0;
- }
- if (ptr_option->value)
- {
- if (CONFIG_BOOLEAN(ptr_option) == CONFIG_BOOLEAN_TRUE)
- snprintf (value, sizeof (value), "on");
- else
- snprintf (value, sizeof (value), "off");
- if (!infolist_new_var_string (ptr_item,
- "value",
- value))
- {
- free (option_full_name);
- return 0;
- }
- }
- if (ptr_option->default_value)
- {
- if (CONFIG_BOOLEAN_DEFAULT(ptr_option) == CONFIG_BOOLEAN_TRUE)
- snprintf (value, sizeof (value), "on");
- else
- snprintf (value, sizeof (value), "off");
- if (!infolist_new_var_string (ptr_item,
- "default_value",
- value))
- {
- free (option_full_name);
- return 0;
- }
- }
- break;
- case CONFIG_OPTION_TYPE_INTEGER:
- if (!infolist_new_var_string (ptr_item,
- "type",
- "integer"))
- {
- free (option_full_name);
- return 0;
- }
- if (ptr_option->string_values)
- {
- if (ptr_option->value)
- {
- if (!infolist_new_var_string (ptr_item,
- "value",
- ptr_option->string_values[CONFIG_INTEGER(ptr_option)]))
- {
- free (option_full_name);
- return 0;
- }
- }
- if (ptr_option->default_value)
- {
- if (!infolist_new_var_string (ptr_item,
- "default_value",
- ptr_option->string_values[CONFIG_INTEGER_DEFAULT(ptr_option)]))
- {
- free (option_full_name);
- return 0;
- }
- }
- }
- else
- {
- if (ptr_option->value)
- {
- snprintf (value, sizeof (value), "%d",
- CONFIG_INTEGER(ptr_option));
- if (!infolist_new_var_string (ptr_item,
- "value",
- value))
- {
- free (option_full_name);
- return 0;
- }
- }
- if (ptr_option->default_value)
- {
- snprintf (value, sizeof (value), "%d",
- CONFIG_INTEGER_DEFAULT(ptr_option));
- if (!infolist_new_var_string (ptr_item,
- "default_value",
- value))
- {
- free (option_full_name);
- return 0;
- }
- }
- }
- break;
- case CONFIG_OPTION_TYPE_STRING:
- if (!infolist_new_var_string (ptr_item,
- "type",
- "string"))
- {
- free (option_full_name);
- return 0;
- }
- if (ptr_option->value)
- {
- if (!infolist_new_var_string (ptr_item,
- "value",
- CONFIG_STRING(ptr_option)))
- {
- free (option_full_name);
- return 0;
- }
- }
- if (ptr_option->default_value)
- {
- if (!infolist_new_var_string (ptr_item,
- "default_value",
- CONFIG_STRING_DEFAULT(ptr_option)))
- {
- free (option_full_name);
- return 0;
- }
- }
- break;
- case CONFIG_OPTION_TYPE_COLOR:
- if (!infolist_new_var_string (ptr_item,
- "type",
- "color"))
- {
- free (option_full_name);
- return 0;
- }
- if (ptr_option->value)
- {
- if (!infolist_new_var_string (ptr_item,
- "value",
- gui_color_get_name (CONFIG_COLOR(ptr_option))))
- {
- free (option_full_name);
- return 0;
- }
- }
- if (ptr_option->default_value)
- {
- if (!infolist_new_var_string (ptr_item,
- "default_value",
- gui_color_get_name (CONFIG_COLOR_DEFAULT(ptr_option))))
- {
- free (option_full_name);
- return 0;
- }
- }
- break;
- case CONFIG_NUM_OPTION_TYPES:
- break;
- }
- }
- free (option_full_name);
+ return 0;
}
}
}
@@ -3327,6 +3386,7 @@ config_file_print_log ()
log_printf (" config_file. . . . . : 0x%lx", ptr_option->config_file);
log_printf (" section. . . . . . . : 0x%lx", ptr_option->section);
log_printf (" name . . . . . . . . : '%s'", ptr_option->name);
+ log_printf (" parent_name. . . . . : '%s'", ptr_option->parent_name);
log_printf (" type . . . . . . . . : %d", ptr_option->type);
log_printf (" description. . . . . : '%s'", ptr_option->description);
log_printf (" string_values. . . . : 0x%lx", ptr_option->string_values);
diff --git a/src/core/wee-config-file.h b/src/core/wee-config-file.h
index 29d454418..5587cae4c 100644
--- a/src/core/wee-config-file.h
+++ b/src/core/wee-config-file.h
@@ -115,6 +115,8 @@ struct t_config_option
struct t_config_file *config_file; /* configuration file */
struct t_config_section *section; /* section */
char *name; /* name */
+ char *parent_name; /* parent name (to inherit the */
+ /* value from another option) */
enum t_config_option_type type; /* type */
char *description; /* description */
char **string_values; /* allowed string values */
@@ -222,6 +224,10 @@ extern int config_file_option_set_null (struct t_config_option *option,
extern int config_file_option_unset (struct t_config_option *option);
extern void config_file_option_rename (struct t_config_option *option,
const char *new_name);
+extern char *config_file_option_value_to_string (struct t_config_option *option,
+ int default_value,
+ int add_delimiters,
+ int use_colors);
extern void *config_file_option_get_pointer (struct t_config_option *option,
const char *property);
extern int config_file_option_is_null (struct t_config_option *option);
diff --git a/src/core/wee-config.c b/src/core/wee-config.c
index 247c2ea5a..5c7f6a299 100644
--- a/src/core/wee-config.c
+++ b/src/core/wee-config.c
@@ -224,6 +224,7 @@ struct t_config_option *config_color_chat_text_found_bg;
struct t_config_option *config_color_chat_time;
struct t_config_option *config_color_chat_time_delimiters;
struct t_config_option *config_color_chat_value;
+struct t_config_option *config_color_chat_value_null;
struct t_config_option *config_color_emphasized;
struct t_config_option *config_color_emphasized_bg;
struct t_config_option *config_color_input_actions;
@@ -3220,6 +3221,12 @@ config_weechat_init_options ()
N_("text color for values"),
NULL, GUI_COLOR_CHAT_VALUE, 0, "cyan", NULL, 0,
NULL, NULL, &config_change_color, NULL, NULL, NULL);
+ config_color_chat_value_null = config_file_new_option (
+ weechat_config_file, ptr_section,
+ "chat_value_null", "color",
+ N_("text color for null values (undefined)"),
+ NULL, GUI_COLOR_CHAT_VALUE_NULL, 0, "blue", NULL, 0,
+ NULL, NULL, &config_change_color, NULL, NULL, NULL);
/* emphasis (chat/bars) */
config_color_emphasized = config_file_new_option (
weechat_config_file, ptr_section,
diff --git a/src/core/wee-config.h b/src/core/wee-config.h
index 443a6f82d..f0eae0368 100644
--- a/src/core/wee-config.h
+++ b/src/core/wee-config.h
@@ -268,6 +268,7 @@ extern struct t_config_option *config_color_chat_text_found_bg;
extern struct t_config_option *config_color_chat_time;
extern struct t_config_option *config_color_chat_time_delimiters;
extern struct t_config_option *config_color_chat_value;
+extern struct t_config_option *config_color_chat_value_null;
extern struct t_config_option *config_color_emphasized;
extern struct t_config_option *config_color_emphasized_bg;
extern struct t_config_option *config_color_input_actions;
diff --git a/src/gui/curses/gui-curses-color.c b/src/gui/curses/gui-curses-color.c
index 2bdfc52da..b5f8930a5 100644
--- a/src/gui/curses/gui-curses-color.c
+++ b/src/gui/curses/gui-curses-color.c
@@ -1462,6 +1462,7 @@ gui_color_init_weechat ()
gui_color_build (GUI_COLOR_CHAT_NICK_SUFFIX, CONFIG_COLOR(config_color_chat_nick_suffix), CONFIG_COLOR(config_color_chat_bg));
gui_color_build (GUI_COLOR_EMPHASIS, CONFIG_COLOR(config_color_emphasized), CONFIG_COLOR(config_color_emphasized_bg));
gui_color_build (GUI_COLOR_CHAT_DAY_CHANGE, CONFIG_COLOR(config_color_chat_day_change), CONFIG_COLOR(config_color_chat_bg));
+ gui_color_build (GUI_COLOR_CHAT_VALUE_NULL, CONFIG_COLOR(config_color_chat_value_null), CONFIG_COLOR(config_color_chat_bg));
/*
* define old nick colors for compatibility on /upgrade with previous
diff --git a/src/gui/gui-color.h b/src/gui/gui-color.h
index b67d2876d..cfa6006ca 100644
--- a/src/gui/gui-color.h
+++ b/src/gui/gui-color.h
@@ -26,10 +26,13 @@ struct t_config_option;
/*
* Color from configuration options.
+ *
* When changing some colors below:
* - always add to the end
* - never remove a color (mark it as obsolete if needed)
* - do not re-use an obsolete color
+ * - add build of color in file src/gui/curses/gui-curses-color.c,
+ * function gui_color_init_weechat ()
* - update the Developer's guide
*/
@@ -84,6 +87,7 @@ enum t_gui_color_enum
GUI_COLOR_CHAT_NICK_SUFFIX,
GUI_COLOR_EMPHASIS,
GUI_COLOR_CHAT_DAY_CHANGE,
+ GUI_COLOR_CHAT_VALUE_NULL,
/* number of colors */
GUI_COLOR_NUM_COLORS,
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index c7ffc1e24..3a5d9d9fc 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -1074,25 +1074,28 @@ irc_server_alloc (const char *name)
for (i = 0; i < IRC_SERVER_NUM_OPTIONS; i++)
{
length = strlen (new_server->name) + 1 +
- strlen (irc_server_options[i][0]) + 1;
+ strlen (irc_server_options[i][0]) +
+ 512 + /* inherited option name (irc.server_default.xxx) */
+ 1;
option_name = malloc (length);
if (option_name)
{
- snprintf (option_name, length, "%s.%s",
+ snprintf (option_name, length, "%s.%s << irc.server_default.%s",
new_server->name,
+ irc_server_options[i][0],
irc_server_options[i][0]);
- new_server->options[i] =
- irc_config_server_new_option (irc_config_file,
- irc_config_section_server,
- i,
- option_name,
- NULL,
- NULL,
- 1,
- &irc_config_server_check_value_cb,
- irc_server_options[i][0],
- &irc_config_server_change_cb,
- irc_server_options[i][0]);
+ new_server->options[i] = irc_config_server_new_option (
+ irc_config_file,
+ irc_config_section_server,
+ i,
+ option_name,
+ NULL,
+ NULL,
+ 1,
+ &irc_config_server_check_value_cb,
+ irc_server_options[i][0],
+ &irc_config_server_change_cb,
+ irc_server_options[i][0]);
irc_config_server_change_cb (irc_server_options[i][0],
new_server->options[i]);
free (option_name);