]> granicus.if.org Git - neomutt/commitdiff
Convert Keymaps to use STAILQ (initial commit)
authorVladimir Zakharov <zakharov.vv@gmail.com>
Fri, 15 Jun 2018 16:23:53 +0000 (19:23 +0300)
committerRichard Russon <rich@flatcap.org>
Mon, 21 Oct 2019 19:03:34 +0000 (20:03 +0100)
Fixes #1179

keymap.c
keymap.h

index a6b64515a3fb5f00f9ca8dfdc5a5ef8fcfc3266c..967a467e564bfca5d6573fd14c7b3bb93b1e6108 100644 (file)
--- a/keymap.c
+++ b/keymap.c
@@ -147,6 +147,7 @@ static struct Mapping KeyNames[] = {
 int LastKey; /**< contains the last key the user pressed */
 
 struct Keymap *Keymaps[MENU_MAX];
+struct KeymapList *NewKeymaps[MENU_MAX];
 
 /**
  * alloc_keys - Allocate space for a sequence of keys
@@ -158,7 +159,7 @@ static struct Keymap *alloc_keys(size_t len, keycode_t *keys)
 {
   struct Keymap *p = mutt_mem_calloc(1, sizeof(struct Keymap));
   p->len = len;
-  p->keys = mutt_mem_malloc(len * sizeof(keycode_t));
+  p->keys = mutt_mem_calloc(len, sizeof(keycode_t));
   memcpy(p->keys, keys, len * sizeof(keycode_t));
   return p;
 }
@@ -926,6 +927,7 @@ void init_extended_keys(void)
 void km_init(void)
 {
   memset(Keymaps, 0, sizeof(struct Keymap *) * MENU_MAX);
+  memset(NewKeymaps, 0, sizeof(struct KeymapList *) * MENU_MAX);
 
   create_bindings(OpAttach, MENU_ATTACH);
   create_bindings(OpBrowser, MENU_FOLDER);
index 0ef9ed64d97f9908c12f7b93a680c1520508f5ac..1be509cf6bc84101605d21da78f3bf6127aaf5ba 100644 (file)
--- a/keymap.h
+++ b/keymap.h
@@ -45,15 +45,18 @@ void init_extended_keys(void);
  */
 struct Keymap
 {
-  char *macro;         /**< macro expansion (op == OP_MACRO) */
-  char *desc;          /**< description of a macro for the help menu */
-  struct Keymap *next; /**< next key in map */
-  short op;            /**< operation to perform */
-  short eq;            /**< number of leading keys equal to next entry */
-  short len;           /**< length of key sequence (unit: sizeof (keycode_t)) */
-  keycode_t *keys;     /**< key sequence */
+  char *macro;                  /**< macro expansion (op == OP_MACRO) */
+  char *desc;                   /**< description of a macro for the help menu */
+  struct Keymap *next;          /**< next key in map */
+  short op;                     /**< operation to perform */
+  short eq;                     /**< number of leading keys equal to next entry */
+  short len;                    /**< length of key sequence (unit: sizeof (keycode_t)) */
+  keycode_t *keys;              /**< key sequence */
+  STAILQ_ENTRY(Keymap) entries; /**< next key in map */
 };
 
+STAILQ_HEAD(KeymapList, Keymap);
+
 /**
  * struct KeyEvent - An event such as a keypress
  */