From 43dee8ce548856f4d65caad66c1b7dba4d8b603e Mon Sep 17 00:00:00 2001 From: Trygve Aaberge Date: Sat, 3 Jun 2023 15:20:05 +0200 Subject: [PATCH] fifo: allow using escape characters This allows you to use escape characters if you start the fifo command with \ instead of *, in the same way as the escape_commands option in the relay protocol. This allows you to send commands consisting of multiple lines by using \n if the buffer has input_multiline set. --- src/plugins/fifo/fifo.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) 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); } /*