diff --git a/src/plugins/fifo/fifo.c b/src/plugins/fifo/fifo.c index d7620d584..904ecd5f5 100644 --- a/src/plugins/fifo/fifo.c +++ b/src/plugins/fifo/fifo.c @@ -197,7 +197,8 @@ fifo_remove () void fifo_exec (const char *text) { - char *text2, *pos_msg; + char *text2, *pos_msg, *command_unescaped; + int escaped; struct t_gui_buffer *ptr_buffer; text2 = strdup (text); @@ -205,20 +206,26 @@ fifo_exec (const char *text) return; pos_msg = NULL; + command_unescaped = NULL; + escaped = 0; ptr_buffer = NULL; /* * look for plugin + buffer name at beginning of text * text may be: "plugin.buffer *text" or "*text" */ - if (text2[0] == '*') + if (text2[0] == '*' || text2[0] == '\\') { + escaped = text2[0] == '\\'; pos_msg = text2 + 1; ptr_buffer = weechat_current_buffer (); } else { pos_msg = strstr (text2, " *"); + if (!pos_msg) + pos_msg = strstr (text2, " \\"); + if (!pos_msg) { weechat_printf (NULL, @@ -227,6 +234,8 @@ fifo_exec (const char *text) free (text2); return; } + + escaped = pos_msg[1] == '\\'; pos_msg[0] = '\0'; pos_msg += 2; ptr_buffer = weechat_buffer_search ("==", text2); @@ -241,9 +250,18 @@ fifo_exec (const char *text) } } + if (escaped) + { + command_unescaped = weechat_string_convert_escaped_chars (pos_msg); + if (command_unescaped) + pos_msg = command_unescaped; + } + weechat_command (ptr_buffer, pos_msg); free (text2); + if (command_unescaped) + free(command_unescaped); } /*