changeset 1173:960f34ec22a2

Add init_bindings() for default key bindings (Lego12239)
author Mikael Berthe <mikael@lilotux.net>
date Tue, 03 Apr 2007 20:30:34 +0200
parents 334ae9f498f1
children 5ea4906e88fc
files mcabber/src/commands.c mcabber/src/main.c mcabber/src/screen.c
diffstat 3 files changed, 114 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/commands.c	Tue Apr 03 20:30:28 2007 +0200
+++ b/mcabber/src/commands.c	Tue Apr 03 20:30:34 2007 +0200
@@ -42,6 +42,9 @@
 #define IMSTATUS_NOTAVAILABLE   "notavail"
 #define IMSTATUS_DONOTDISTURB   "dnd"
 
+// Return value container for the following functions
+static int retval_for_cmds;
+
 // Commands callbacks
 static void do_roster(char *arg);
 static void do_status(char *arg);
@@ -96,6 +99,10 @@
 
 //  cmd_init()
 // Commands table initialization
+// !!!
+// After changing commands names and it arguments names here, you must change
+// ones in init_bindings()!
+//
 void cmd_init(void)
 {
   cmd_add("add", "Add a jabber user", COMPL_JID, 0, &do_add);
@@ -413,9 +420,10 @@
   while (*p && (*p == ' '))
     p++;
   // Call command-specific function
+  retval_for_cmds = 0;
   (*curcmd->func)(p);
   g_free(xpline);
-  return 0;
+  return retval_for_cmds;
 }
 
 //  process_line(line)
@@ -2721,6 +2729,10 @@
   free_arg_lst(paramlst);
 }
 
+/* !!!
+  After changing the /iline arguments names here, you must change ones
+  in init_bindings().
+*/
 static void do_iline(char *arg)
 {
   if (!strcasecmp(arg, "fword")) {
@@ -2762,9 +2774,9 @@
   } else if (!strcasecmp(arg, "send_multiline")) {
     readline_send_multiline();
   } else if (!strcasecmp(arg, "iline_accept")) {
-    readline_accept_line();
+    retval_for_cmds = readline_accept_line();
   } else if (!strcasecmp(arg, "iline_accept_down_hist")) { // May be too long
-    readline_accept_line_down_hist();
+    retval_for_cmds = readline_accept_line_down_hist();
   } else if (!strcasecmp(arg, "compl_cancel")) {
     readline_cancel_completion();
   } else if (!strcasecmp(arg, "compl_do")) {
--- a/mcabber/src/main.c	Tue Apr 03 20:30:28 2007 +0200
+++ b/mcabber/src/main.c	Tue Apr 03 20:30:34 2007 +0200
@@ -290,6 +290,86 @@
 #endif /* HAVE_GPGME */
 }
 
+// Create default bindings
+// Return 0 if error and 1 if none
+int init_bindings(void)
+{
+  char *tmp;
+
+  if ( !(tmp = (char*)malloc(10)) ) {
+    scr_LogPrint(LPRINT_LOGNORM, "Not enough memory!");
+    fprintf(stderr, "Not enough memory!");
+    return 0;
+  }
+
+  // Ctrl-h
+  settings_set(SETTINGS_TYPE_BINDING, "8", "iline char_bdel");
+  settings_set(SETTINGS_TYPE_BINDING, "127", "iline char_bdel");
+  sprintf(tmp, "%d", KEY_BACKSPACE);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline char_bdel");
+  sprintf(tmp, "%d", KEY_DC);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline char_fdel");
+  sprintf(tmp, "%d", KEY_LEFT);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline bchar");
+  sprintf(tmp, "%d", KEY_RIGHT);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline fchar");
+  // Ctrl-g
+  settings_set(SETTINGS_TYPE_BINDING, "7", "iline compl_cancel");
+  sprintf(tmp, "%d", KEY_UP);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline hist_prev");
+  sprintf(tmp, "%d", KEY_DOWN);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline hist_next");
+  sprintf(tmp, "%d", KEY_PPAGE);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "roster up");
+  sprintf(tmp, "%d", KEY_NPAGE);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "roster down");
+  sprintf(tmp, "%d", KEY_HOME);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline iline_start");
+  // Ctrl-a
+  settings_set(SETTINGS_TYPE_BINDING, "1", "iline iline_start");
+  sprintf(tmp, "%d", KEY_END);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline iline_end");
+  // Ctrl-e
+  settings_set(SETTINGS_TYPE_BINDING, "5", "iline iline_end");
+  // Ctrl-o
+  settings_set(SETTINGS_TYPE_BINDING, "15", "iline iline_accept_down_hist");
+  // Ctrl-u
+  settings_set(SETTINGS_TYPE_BINDING, "21", "iline iline_bdel");
+  sprintf(tmp, "%d", KEY_EOL);
+  settings_set(SETTINGS_TYPE_BINDING, tmp, "iline iline_fdel");
+  // Ctrl-k
+  settings_set(SETTINGS_TYPE_BINDING, "11", "iline iline_fdel");
+  // Ctrl-p
+  settings_set(SETTINGS_TYPE_BINDING, "16", "buffer up");
+  // Ctrl-n
+  settings_set(SETTINGS_TYPE_BINDING, "14", "buffer down");
+  // Ctrl-t
+  settings_set(SETTINGS_TYPE_BINDING, "20", "iline char_swap");
+  // Ctrl-w
+  settings_set(SETTINGS_TYPE_BINDING, "23", "iline word_bdel");
+  // Ctrl-Left  (2 codes)
+  settings_set(SETTINGS_TYPE_BINDING, "515", "iline bword");
+  settings_set(SETTINGS_TYPE_BINDING, "516", "iline bword");
+  // Ctrl-Right (2 codes)
+  settings_set(SETTINGS_TYPE_BINDING, "517", "iline fword");
+  settings_set(SETTINGS_TYPE_BINDING, "518", "iline fword");
+  // Ctrl-l
+  settings_set(SETTINGS_TYPE_BINDING, "12", "screen_repaint");
+  // Esc
+  settings_set(SETTINGS_TYPE_BINDING, "27", "chat_disable");
+  // Ctrl-d
+  settings_set(SETTINGS_TYPE_BINDING, "4", "iline send_multiline");
+  // Meta-u
+  settings_set(SETTINGS_TYPE_BINDING, "M117", "iline word_upcase");
+  // Meta-l
+  settings_set(SETTINGS_TYPE_BINDING, "M108", "iline word_downcase");
+  // Meta-c
+  settings_set(SETTINGS_TYPE_BINDING, "M99", "iline word_capit");
+
+  free(tmp);
+  return 1;
+}
+
 int main(int argc, char **argv)
 {
   char *configFile = NULL;
@@ -330,6 +410,9 @@
   /* Initialize charset */
   scr_InitLocaleCharSet();
 
+  /* Creating default bindings */
+  if (!init_bindings()) exit(EXIT_FAILURE);
+
   /* Parsing config file... */
   ret = cfg_read_file(configFile);
   /* free() configFile if it has been allocated during options parsing */
--- a/mcabber/src/screen.c	Tue Apr 03 20:30:28 2007 +0200
+++ b/mcabber/src/screen.c	Tue Apr 03 20:30:34 2007 +0200
@@ -3029,7 +3029,21 @@
     case 0:
     case ERR:
         break;
-    case 8:     // Ctrl-h
+    case 9:     // Tab
+        readline_do_completion();
+        break;
+    case 13:    // Enter
+        if (readline_accept_line() == 255) return 255;
+        break;
+    case 3:     // Ctrl-C
+        scr_handle_CtrlC();
+        break;
+    case KEY_RESIZE:
+        scr_Resize();
+        break;
+/*  case 4:     // Ctrl-D
+        readline_send_multiline();
+        break;
     case 127:   // Backspace too
     case KEY_BACKSPACE:
         readline_backward_kill_char();
@@ -3046,15 +3060,6 @@
     case 7:     // Ctrl-g
         readline_cancel_completion();
         break;
-    case 9:     // Tab
-        readline_do_completion();
-        break;
-    case 13:    // Enter
-        if (readline_accept_line() == 255) return 255;
-        break;
-    case 15:    // Ctrl-o ("accept-line-and-down-history")
-        if (readline_accept_line_down_hist() == 255) return 255;
-        break;
     case KEY_UP:
         readline_hist_prev();
         break;
@@ -3072,9 +3077,6 @@
     case KEY_HOME:
         readline_iline_start();
         break;
-    case 3:     // Ctrl-C
-        scr_handle_CtrlC();
-        break;
     case KEY_END:
         readline_iline_end();
         break;
@@ -3108,12 +3110,10 @@
     case 12:    // Ctrl-l
         readline_refresh_screen();
         break;
-    case KEY_RESIZE:
-        scr_Resize();
-        break;
     case 27:    // ESC
         readline_disable_chat_mode();
         break;
+    */
     default:
         display_char = TRUE;
   } // switch