changeset 1187:16abe7ec3056

Fix a conflict between verbatim multiline mode and the key binding system
author Mikael Berthe <mikael@lilotux.net>
date Fri, 20 Apr 2007 17:14:38 +0200
parents 0158bd8ca9d6
children ef40688d87bd
files mcabber/src/commands.c mcabber/src/commands.h mcabber/src/screen.c mcabber/src/settings.c
diffstat 4 files changed, 14 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/commands.c	Fri Apr 20 16:35:39 2007 +0200
+++ b/mcabber/src/commands.c	Fri Apr 20 17:14:38 2007 +0200
@@ -355,17 +355,19 @@
   }
 }
 
-//  process_command(line)
+//  process_command(line, iscmd)
 // Process a command line.
+// If iscmd is TRUE, process the command even if verbatim mmode is set;
+// it is intended to be used for key bindings.
 // Return 255 if this is the /quit command, and 0 for the other commands.
-int process_command(char *line)
+int process_command(char *line, guint iscmd)
 {
   char *p;
   char *xpline;
   cmd *curcmd;
 
   // We do alias expansion here
-  if (scr_get_multimode() != 2)
+  if (iscmd || scr_get_multimode() != 2)
     xpline = expandalias(line);
   else
     xpline = line; // No expansion in verbatim multi-line mode
@@ -381,7 +383,7 @@
     *p = 0;
 
   // Command "quit"?
-  if ((scr_get_multimode() != 2)
+  if ((iscmd || scr_get_multimode() != 2)
       && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) {
     if (!xpline[5] || xpline[5] == ' ') {
       g_free(xpline);
@@ -390,7 +392,7 @@
   }
 
   // If verbatim multi-line mode, we check if another /msay command is typed
-  if ((scr_get_multimode() == 2)
+  if (!iscmd && scr_get_multimode() == 2
       && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) {
     // It isn't an /msay command
     scr_append_multiline(xpline);
@@ -455,8 +457,8 @@
     return 0;
   }
 
-  /* It is (probably) a command -- except for verbatim multi-line mode */
-  return process_command(line);
+  /* It is _probably_ a command -- except for verbatim multi-line mode */
+  return process_command(line, FALSE);
 }
 
 // Helper routine for buffer item_{lock,unlock}
--- a/mcabber/src/commands.h	Fri Apr 20 16:35:39 2007 +0200
+++ b/mcabber/src/commands.h	Fri Apr 20 17:14:38 2007 +0200
@@ -14,7 +14,7 @@
 void cmd_init(void);
 cmd *cmd_get(const char *command);
 int  process_line(char *line);
-int  process_command(char *line);
+int  process_command(char *line, guint iscmd);
 char *expandalias(char *line);
 
 extern char *mcabber_version(void);
--- a/mcabber/src/screen.c	Fri Apr 20 16:35:39 2007 +0200
+++ b/mcabber/src/screen.c	Fri Apr 20 17:14:38 2007 +0200
@@ -2632,7 +2632,7 @@
 {
   // Validate current multi-line
   if (scr_get_multimode())
-    process_command(mkcmdstr("msay send"));
+    process_command(mkcmdstr("msay send"), TRUE);
 }
 
 //  which_row()
@@ -2891,7 +2891,7 @@
 {
   if (!Curses) return;
   // Leave multi-line mode
-  process_command(mkcmdstr("msay abort"));
+  process_command(mkcmdstr("msay abort"), TRUE);
   // Same as Ctrl-g, now
   scr_cancel_current_completion();
   scr_end_current_completion();
@@ -3084,7 +3084,7 @@
     boundcmd_locale = from_utf8(boundcmd);
     cmdline = g_strdup_printf(mkcmdstr("%s"), boundcmd_locale);
     scr_CheckAutoAway(TRUE);
-    if (process_command(cmdline))
+    if (process_command(cmdline, TRUE))
       return 255; // Quit
     g_free(boundcmd_locale);
     g_free(cmdline);
--- a/mcabber/src/settings.c	Fri Apr 20 16:35:39 2007 +0200
+++ b/mcabber/src/settings.c	Fri Apr 20 17:14:38 2007 +0200
@@ -147,7 +147,7 @@
       // Set the leading COMMAND_CHAR to build a command line
       // and process the command
       *(--line) = COMMAND_CHAR;
-      process_command(line);
+      process_command(line, TRUE);
     } else {
       scr_LogPrint(LPRINT_LOGNORM,
                    "Error in configuration file (l. %d): no assignment", ln);