summaryrefslogtreecommitdiff
path: root/Src/options.c
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2025-03-03 01:24:46 +0100
committerOliver Kiddle <opk@zsh.org>2025-03-03 01:30:32 +0100
commit435cb1b748ce1f2f5c38edc1d64f4ee2424f9b3a (patch)
tree65f0bb4ddc554199fc76c610ab7cb7e843aedb5d /Src/options.c
parent71f35afa1cd48d6c25a517797e543cb2aa23a47b (diff)
downloadzsh-435cb1b748ce1f2f5c38edc1d64f4ee2424f9b3a.tar.gz
zsh-435cb1b748ce1f2f5c38edc1d64f4ee2424f9b3a.zip
53399: don't load ZLE early to set keymap
When zsh is run with -o vi / -o emacs, instead of loading ZLE to force the change, only record the option state. Then when ZLE starts, the vi option determines the default keymap.
Diffstat (limited to 'Src/options.c')
-rw-r--r--Src/options.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/Src/options.c b/Src/options.c
index 696ab5c69..8b13f0c5d 100644
--- a/Src/options.c
+++ b/Src/options.c
@@ -895,8 +895,9 @@ dosetopt(int optno, int value, int force, char *new_opts)
*/
if (sticky && sticky->emulation)
return opts[optno] ? 0 : -1;
- zleentry(ZLE_CMD_SET_KEYMAP, optno);
- new_opts[(optno == EMACSMODE) ? VIMODE : EMACSMODE] = 0;
+ if (zle_load_state == 1)
+ zleentry(ZLE_CMD_SET_KEYMAP, optno);
+ new_opts[optno ^ EMACSMODE ^ VIMODE] = 0;
} else if (optno == SUNKEYBOARDHACK) {
/* for backward compatibility */
keyboardhackchar = (value ? '`' : '\0');