X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=keymap.c;h=7be686949cefcc70bec4b80b8ed8f482de984667;hp=3944aab770b2537942b9ed8be34cd0099f1d73e6;hb=916e4872caf252a5850e64f79427b9dd7808435d;hpb=0f44dc85fc1280372ffab911d701e703d803fb4b diff --git a/keymap.c b/keymap.c index 3944aab..7be6869 100644 --- a/keymap.c +++ b/keymap.c @@ -7,26 +7,17 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include + +#include +#include #include "mutt.h" -#include "mutt_menu.h" -#include "mutt_curses.h" #include "keymap.h" -#include "mapping.h" -#include "mutt_crypt.h" - -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" +#include -#include -#include -#include - -#include "functions.h" +#define MUTT_FUNCTIONS_VALUES +#include "functions.def" struct mapping_t Menus[] = { {"alias", MENU_ALIAS}, @@ -45,19 +36,15 @@ struct mapping_t Menus[] = { {"key_select_smime", MENU_KEY_SELECT_SMIME}, #endif - #ifdef MIXMASTER {"mix", MENU_MIX}, #endif - {"query", MENU_QUERY}, {"generic", MENU_GENERIC}, {NULL, 0} }; -#define mutt_check_menu(s) mutt_getvaluebyname(s, Menus) - static struct mapping_t KeyNames[] = { {"", KEY_PPAGE}, {"", KEY_NPAGE}, @@ -79,6 +66,9 @@ static struct mapping_t KeyNames[] = { {"", ' '}, #ifdef KEY_BTAB {"", KEY_BTAB}, +#endif +#ifdef KEY_NEXT + {"", KEY_NEXT}, #endif {NULL, 0} }; @@ -88,20 +78,19 @@ int LastKey; struct keymap_t *Keymaps[MENU_MAX]; -static struct keymap_t *allocKeys (int len, keycode_t * keys) +static struct keymap_t *allocKeys(int len, keycode_t *keys) { - struct keymap_t *p; + struct keymap_t *p; - p = safe_calloc (1, sizeof (struct keymap_t)); - p->len = len; - p->keys = safe_malloc (len * sizeof (keycode_t)); - memcpy (p->keys, keys, len * sizeof (keycode_t)); - return (p); + p = p_new(struct keymap_t, 1); + p->len = len; + p->keys = p_dup(keys, len); + return p; } -static int parse_fkey (char *s) +static int parse_fkey (const char *s) { - char *t; + const char *t; int n = 0; if (s[0] != '<' || ascii_tolower (s[1]) != 'f') @@ -132,14 +121,14 @@ static int parse_keycode (const char *s) return -1; } -static int parsekeys (char *str, keycode_t * d, int max) +static int parsekeys (const char *str, keycode_t * d, int max) { int n, len = max; char buff[SHORT_STRING]; char c; char *s, *t; - strfcpy (buff, str, sizeof (buff)); + m_strcpy(buff, sizeof(buff), str); s = buff; while (*s && len) { @@ -179,7 +168,7 @@ static int parsekeys (char *str, keycode_t * d, int max) /* insert a key sequence into the specified map. the map is sorted by ASCII * value (lowest to highest) */ -void km_bind (char *s, int menu, int op, char *macro, char *descr) +void km_bind (const char *s, int menu, int op, char *macro, char *descr) { struct keymap_t *map, *tmp, *last = NULL, *next; keycode_t buf[MAX_SEQ]; @@ -189,8 +178,8 @@ void km_bind (char *s, int menu, int op, char *macro, char *descr) map = allocKeys (len, buf); map->op = op; - map->macro = safe_strdup (macro); - map->descr = safe_strdup (descr); + map->macro = m_strdup(macro); + map->descr = m_strdup(descr); tmp = Keymaps[menu]; @@ -200,10 +189,10 @@ void km_bind (char *s, int menu, int op, char *macro, char *descr) do { len = tmp->eq; next = tmp->next; - FREE (&tmp->macro); - FREE (&tmp->keys); - FREE (&tmp->descr); - FREE (&tmp); + p_delete(&tmp->macro); + p_delete(&tmp->keys); + p_delete(&tmp->descr); + p_delete(&tmp); tmp = next; } while (tmp && len >= pos); @@ -236,25 +225,25 @@ void km_bind (char *s, int menu, int op, char *macro, char *descr) Keymaps[menu] = map; } -void km_bindkey (char *s, int menu, int op) +void km_bindkey (const char *s, int menu, int op) { km_bind (s, menu, op, NULL, NULL); } -static int get_op (struct binding_t *bindings, const char *start, size_t len) +static int get_op (struct binding_t *bindings, const char *start, ssize_t len) { int i; for (i = 0; bindings[i].name; i++) { if (!ascii_strncasecmp (start, bindings[i].name, len) && - safe_strlen (bindings[i].name) == len) + m_strlen(bindings[i].name) == len) return bindings[i].op; } return OP_NULL; } -static char *get_func (struct binding_t *bindings, int op) +static const char *get_func (struct binding_t *bindings, int op) { int i; @@ -267,10 +256,10 @@ static char *get_func (struct binding_t *bindings, int op) return NULL; } -static void push_string (char *s) +static void push_string(const char *s) { - char *pp, *p = s + safe_strlen (s) - 1; - size_t l; + const char *pp, *p = s + m_strlen(s) - 1; + ssize_t l; int i, op = OP_NULL; while (p >= s) { @@ -316,7 +305,7 @@ static void push_string (char *s) } } } - mutt_ungetch (*p--, 0); + mutt_ungetch ((unsigned char) *p--, 0); } } @@ -354,7 +343,7 @@ int km_dokey (int menu) if (!map) return (retry_generic (menu, NULL, 0, 0)); - FOREVER { + for (;;) { /* ncurses doesn't return on resized screen when timeout is set to zero */ if (menu != MENU_EDITOR) timeout ((Timeout > 0 ? Timeout : 60) * 1000); @@ -370,7 +359,7 @@ int km_dokey (int menu) /* do we have an op already? */ if (tmp.op) { - char *func = NULL; + const char *func = NULL; struct binding_t *bindings; /* is this a valid op for this menu? */ @@ -398,7 +387,7 @@ int km_dokey (int menu) /* careful not to feed the <..> as one token. otherwise * push_string() will push the bogus op right back! */ mutt_ungetch ('>', 0); - push_string (func); + push_string(func); mutt_ungetch ('<', 0); break; } @@ -449,10 +438,10 @@ static void create_bindings (struct binding_t *map, int menu) km_bindkey (map[i].seq, menu, map[i].op); } -char *km_keyname (int c) +const char *km_keyname(int c) { static char buf[10]; - char *p; + const char *p; if ((p = mutt_getnamebyvalue (c, KeyNames))) return p; @@ -471,7 +460,7 @@ char *km_keyname (int c) } else if (c >= KEY_F0 && c < KEY_F (256)) /* this maximum is just a guess */ sprintf (buf, "", c - KEY_F0); - else if (IsPrint (c)) + else if (isprint((unsigned char)c)) snprintf (buf, sizeof (buf), "%c", (unsigned char) c); else snprintf (buf, sizeof (buf), "\\x%hx", (unsigned short) c); @@ -486,9 +475,9 @@ int km_expand_key (char *s, size_t len, struct keymap_t *map) if (!map) return (0); - FOREVER { - strfcpy (s, km_keyname (map->keys[p]), len); - len -= (l = safe_strlen (s)); + for (;;) { + m_strcpy(s, len, km_keyname(map->keys[p])); + len -= (l = m_strlen(s)); if (++p >= map->len || !len) return (1); @@ -511,7 +500,7 @@ struct keymap_t *km_find_func (int menu, int func) void km_init (void) { - memset (Keymaps, 0, sizeof (struct keymap_t *) * MENU_MAX); + p_clear(Keymaps, MENU_MAX); create_bindings (OpAttach, MENU_ATTACH); create_bindings (OpBrowser, MENU_FOLDER); @@ -523,11 +512,8 @@ void km_init (void) create_bindings (OpAlias, MENU_ALIAS); - if ((WithCrypto & APPLICATION_PGP)) - create_bindings (OpPgp, MENU_PGP); - - if ((WithCrypto & APPLICATION_SMIME)) - create_bindings (OpSmime, MENU_SMIME); + create_bindings (OpPgp, MENU_PGP); + create_bindings (OpSmime, MENU_SMIME); #ifdef CRYPT_BACKEND_GPGME create_bindings (OpPgp, MENU_KEY_SELECT_PGP); @@ -649,14 +635,14 @@ void km_error_key (int menu) return; } -int mutt_parse_push (BUFFER * buf, BUFFER * s, unsigned long data, +int mutt_parse_push (BUFFER * buf, BUFFER * s, unsigned long data __attribute__ ((unused)), BUFFER * err) { int r = 0; mutt_extract_token (buf, s, M_TOKEN_CONDENSE); if (MoreArgs (s)) { - strfcpy (err->data, _("push: too many arguments"), err->dsize); + m_strcpy(err->data, err->dsize, _("push: too many arguments")); r = -1; } else @@ -672,7 +658,7 @@ static char *parse_keymap (int *menu, BUFFER * s, int maxmenus, int *nummenus, int i = 0; char *p, *q; - memset (&buf, 0, sizeof (buf)); + p_clear(&buf, 1); /* menu name */ mutt_extract_token (&buf, s, 0); @@ -683,7 +669,7 @@ static char *parse_keymap (int *menu, BUFFER * s, int maxmenus, int *nummenus, if (q) *q = '\0'; - if ((menu[i] = mutt_check_menu (p)) == -1) { + if ((menu[i] = mutt_getvaluebyname(p, Menus)) == -1) { snprintf (err->data, err->dsize, _("%s: no such menu"), p); goto error; } @@ -698,16 +684,16 @@ static char *parse_keymap (int *menu, BUFFER * s, int maxmenus, int *nummenus, mutt_extract_token (&buf, s, 0); if (!*buf.data) { - strfcpy (err->data, _("null key sequence"), err->dsize); + m_strcpy(err->data, err->dsize, _("null key sequence")); } else if (MoreArgs (s)) return (buf.data); } else { - strfcpy (err->data, _("too few arguments"), err->dsize); + m_strcpy(err->data, err->dsize, _("too few arguments")); } error: - FREE (&buf.data); + p_delete(&buf.data); return (NULL); } @@ -717,7 +703,7 @@ try_bind (char *key, int menu, char *func, struct binding_t *bindings) int i; for (i = 0; bindings[i].name; i++) - if (safe_strcmp (func, bindings[i].name) == 0) { + if (m_strcmp(func, bindings[i].name) == 0) { km_bindkey (key, menu, bindings[i].op); return (0); } @@ -749,7 +735,7 @@ struct binding_t *km_get_table (int menu) return OpQuery; case MENU_PGP: - return (WithCrypto & APPLICATION_PGP) ? OpPgp : NULL; + return OpPgp; #ifdef CRYPT_BACKEND_GPGME case MENU_KEY_SELECT_PGP: @@ -768,7 +754,7 @@ struct binding_t *km_get_table (int menu) } /* bind menu-name '' function-name */ -int mutt_parse_bind (BUFFER * buf, BUFFER * s, unsigned long data, +int mutt_parse_bind (BUFFER * buf, BUFFER * s, unsigned long data __attribute__ ((unused)), BUFFER * err) { struct binding_t *bindings = NULL; @@ -783,7 +769,7 @@ int mutt_parse_bind (BUFFER * buf, BUFFER * s, unsigned long data, /* function to execute */ mutt_extract_token (buf, s, 0); if (MoreArgs (s)) { - strfcpy (err->data, _("bind: too many arguments"), err->dsize); + m_strcpy(err->data, err->dsize, _("bind: too many arguments")); r = -1; } else if (ascii_strcasecmp ("noop", buf->data) == 0) { @@ -807,12 +793,12 @@ int mutt_parse_bind (BUFFER * buf, BUFFER * s, unsigned long data, } } } - FREE (&key); + p_delete(&key); return (r); } /* macro */ -int mutt_parse_macro (BUFFER * buf, BUFFER * s, unsigned long data, +int mutt_parse_macro (BUFFER * buf, BUFFER * s, unsigned long data __attribute__ ((unused)), BUFFER * err) { int menu[sizeof (Menus) / sizeof (struct mapping_t) - 1], r = @@ -828,15 +814,15 @@ int mutt_parse_macro (BUFFER * buf, BUFFER * s, unsigned long data, mutt_extract_token (buf, s, M_TOKEN_CONDENSE); /* make sure the macro sequence is not an empty string */ if (!*buf->data) { - strfcpy (err->data, _("macro: empty key sequence"), err->dsize); + m_strcpy(err->data, err->dsize, _("macro: empty key sequence")); } else { if (MoreArgs (s)) { - seq = safe_strdup (buf->data); + seq = m_strdup(buf->data); mutt_extract_token (buf, s, M_TOKEN_CONDENSE); if (MoreArgs (s)) { - strfcpy (err->data, _("macro: too many arguments"), err->dsize); + m_strcpy(err->data, err->dsize, _("macro: too many arguments")); } else { for (i = 0; i < nummenus; ++i) { @@ -845,7 +831,7 @@ int mutt_parse_macro (BUFFER * buf, BUFFER * s, unsigned long data, } } - FREE (&seq); + p_delete(&seq); } else { for (i = 0; i < nummenus; ++i) { @@ -854,12 +840,12 @@ int mutt_parse_macro (BUFFER * buf, BUFFER * s, unsigned long data, } } } - FREE (&key); + p_delete(&key); return (r); } /* exec function-name */ -int mutt_parse_exec (BUFFER * buf, BUFFER * s, unsigned long data, +int mutt_parse_exec (BUFFER * buf, BUFFER * s, unsigned long data __attribute__ ((unused)), BUFFER * err) { int ops[128]; @@ -868,7 +854,7 @@ int mutt_parse_exec (BUFFER * buf, BUFFER * s, unsigned long data, char *function; if (!MoreArgs (s)) { - strfcpy (err->data, _("exec: no arguments"), err->dsize); + m_strcpy(err->data, err->dsize, _("exec: no arguments")); return (-1); } @@ -880,9 +866,9 @@ int mutt_parse_exec (BUFFER * buf, BUFFER * s, unsigned long data, && CurrentMenu != MENU_PAGER) bindings = OpGeneric; - ops[nops] = get_op (bindings, function, safe_strlen (function)); + ops[nops] = get_op (bindings, function, m_strlen(function)); if (ops[nops] == OP_NULL && CurrentMenu != MENU_PAGER) - ops[nops] = get_op (OpGeneric, function, safe_strlen (function)); + ops[nops] = get_op (OpGeneric, function, m_strlen(function)); if (ops[nops] == OP_NULL) { mutt_flushinp (); @@ -891,7 +877,7 @@ int mutt_parse_exec (BUFFER * buf, BUFFER * s, unsigned long data, } nops++; } - while (MoreArgs (s) && nops < sizeof (ops) / sizeof (ops[0])); + while (MoreArgs (s) && nops < ssizeof (ops) / ssizeof (ops[0])); while (nops) mutt_ungetch (0, ops[--nops]);