mirror of
https://github.com/irssi/irssi.git
synced 2024-10-27 05:20:20 -04:00
special-vars: added flag PARSE_FLAG_ESCAPE_THEME to escape { and } chars
with % char. Used this with statusbar items - now for example "{error xxx}" topic won't print it with error color. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1564 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
0a3a175a7d
commit
8b733e0568
@ -435,11 +435,31 @@ char *parse_special(char **cmd, SERVER_REC *server, void *item,
|
||||
return value;
|
||||
}
|
||||
|
||||
static void gstring_append_escaped(GString *str, const char *text)
|
||||
static void gstring_append_escaped(GString *str, const char *text, int flags)
|
||||
{
|
||||
char esc[4], *escpos;
|
||||
|
||||
escpos = esc;
|
||||
if (flags & PARSE_FLAG_ESCAPE_VARS)
|
||||
*escpos++ = '%';
|
||||
if (flags & PARSE_FLAG_ESCAPE_THEME) {
|
||||
*escpos++ = '{';
|
||||
*escpos++ = '}';
|
||||
}
|
||||
|
||||
if (escpos == esc) {
|
||||
g_string_append(str, text);
|
||||
return;
|
||||
}
|
||||
|
||||
*escpos = '\0';
|
||||
while (*text != '\0') {
|
||||
if (*text == '%')
|
||||
g_string_append_c(str, '%');
|
||||
for (escpos = esc; *escpos != '\0'; escpos++) {
|
||||
if (*text == *escpos) {
|
||||
g_string_append_c(str, '%');
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_string_append_c(str, *text);
|
||||
text++;
|
||||
}
|
||||
@ -482,10 +502,7 @@ char *parse_special_string(const char *cmd, SERVER_REC *server, void *item,
|
||||
arglist, &need_free, arg_used,
|
||||
flags);
|
||||
if (ret != NULL) {
|
||||
if ((flags & PARSE_FLAG_ESCAPE_VARS) == 0)
|
||||
g_string_append(str, ret);
|
||||
else
|
||||
gstring_append_escaped(str, ret);
|
||||
gstring_append_escaped(str, ret, flags);
|
||||
if (need_free) g_free(ret);
|
||||
}
|
||||
code = 0;
|
||||
|
@ -6,6 +6,7 @@
|
||||
#define PARSE_FLAG_GETNAME 0x01 /* return argument name instead of it's value */
|
||||
#define PARSE_FLAG_ISSET_ANY 0x02 /* arg_used field specifies that at least one of the $variables was non-empty */
|
||||
#define PARSE_FLAG_ESCAPE_VARS 0x04 /* if any arguments/variables contain % chars, escape them with another % */
|
||||
#define PARSE_FLAG_ESCAPE_THEME 0x08 /* if any arguments/variables contain { or } chars, escape them with % */
|
||||
|
||||
typedef char* (*SPECIAL_HISTORY_FUNC)
|
||||
(const char *text, void *item, int *free_ret);
|
||||
|
@ -95,7 +95,8 @@ static void item_default(SBAR_ITEM_REC *item, int get_size_only,
|
||||
|
||||
/* expand $variables */
|
||||
tmpstr = parse_special_string(str, server, wiitem, data, NULL,
|
||||
PARSE_FLAG_ESCAPE_VARS);
|
||||
PARSE_FLAG_ESCAPE_VARS |
|
||||
PARSE_FLAG_ESCAPE_THEME);
|
||||
|
||||
/* expand templates */
|
||||
str = tmpstr;
|
||||
|
Loading…
Reference in New Issue
Block a user