]> jfr.im git - irc/weechat/weechat.git/commitdiff
fifo: allow using escape characters
authorTrygve Aaberge <redacted>
Sat, 3 Jun 2023 13:20:05 +0000 (15:20 +0200)
committerSébastien Helleu <redacted>
Sat, 3 Jun 2023 19:31:38 +0000 (21:31 +0200)
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

index d7620d584e037c105d6cad7f74201b5db3bc18f3..904ecd5f546a7181b8357271286584ce079869a9 100644 (file)
@@ -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);
 }
 
 /*