diff --git a/include/extern.h b/include/extern.h index 6887b02d0..cf6a1ea19 100644 --- a/include/extern.h +++ b/include/extern.h @@ -399,6 +399,7 @@ extern int extcmds_match(const char *, int, int **); extern const char *key2extcmddesc(uchar); extern boolean bind_specialkey(uchar, const char *); extern void parseautocomplete(char *, boolean); +extern void all_options_autocomplete(strbuf_t *); extern void lock_mouse_buttons(boolean); extern void reset_commands(boolean); extern void update_rest_on_space(void); diff --git a/include/func_tab.h b/include/func_tab.h index 5078d5c8d..2924b3bf3 100644 --- a/include/func_tab.h +++ b/include/func_tab.h @@ -21,6 +21,7 @@ #define MOVEMENTCMD 0x0400 /* used to move hero/cursor */ #define MOUSECMD 0x0800 /* cmd allowed to be bound to mouse button */ #define CMD_INSANE 0x1000 /* suppress sanity check (for ^P and ^R) */ +#define AUTOCOMP_ADJ 0x2000 /* user changed command autocompletion */ /* flags for extcmds_match() */ #define ECM_NOFLAGS 0 diff --git a/src/cmd.c b/src/cmd.c index 48bdf2fff..5d344fbac 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -2952,6 +2952,8 @@ parseautocomplete(char *autocomplete, boolean condition) /* find and modify the extended command */ for (efp = extcmdlist; efp->ef_txt; efp++) { if (!strcmp(autocomplete, efp->ef_txt)) { + if (condition == ((efp->flags & AUTOCOMPLETE) ? FALSE : TRUE)) + efp->flags |= AUTOCOMP_ADJ; if (condition) efp->flags |= AUTOCOMPLETE; else @@ -2966,6 +2968,22 @@ parseautocomplete(char *autocomplete, boolean condition) wait_synch(); } +/* add changed autocompletions to the string buffer in config file format */ +void +all_options_autocomplete(strbuf_t *sbuf) +{ + struct ext_func_tab *efp; + char buf[BUFSZ]; + + for (efp = extcmdlist; efp->ef_txt; efp++) + if ((efp->flags & AUTOCOMP_ADJ) != 0) { + Sprintf(buf, "AUTOCOMPLETE=%s%s\n", + (efp->flags & AUTOCOMPLETE) ? "" : "!", + efp->ef_txt); + strbuf_append(sbuf, buf); + } +} + /* save&clear the mouse button actions, or restore the saved ones */ void lock_mouse_buttons(boolean savebtns) diff --git a/src/options.c b/src/options.c index a4257fa3e..74eea61af 100644 --- a/src/options.c +++ b/src/options.c @@ -9503,6 +9503,7 @@ all_options_strbuf(strbuf_t *sbuf) all_options_menucolors(sbuf); all_options_msgtypes(sbuf); all_options_apes(sbuf); + all_options_autocomplete(sbuf); #ifdef STATUS_HILITES all_options_statushilites(sbuf); #endif