From 9dfca77c36d15df321e7f13b0afc72af77a03cd5 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 3 Oct 2020 14:48:57 +0900 Subject: [PATCH] [zsh] Keep current $BUFFER on ALT-C Ideally, we could only use `print -sr` to update the command history. However, the "cd" command by ALT-C is added to the history only after we finalize the current command by pressing an additional enter key. i.e. The cd command from ALT-C is not visible when you hit Up arrow. But it appears once you hit enter key. So when the current buffer is empty, we use `zle accept-line` so that the command history is immediately updated. Close #2200 --- shell/key-bindings.zsh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/shell/key-bindings.zsh b/shell/key-bindings.zsh index 2433d98..6330614 100644 --- a/shell/key-bindings.zsh +++ b/shell/key-bindings.zsh @@ -87,10 +87,15 @@ fzf-cd-widget() { zle redisplay return 0 fi - BUFFER="cd ${(q)dir}" - unset dir # ensure this doesn't end up appearing in prompt expansion - zle accept-line + if [ -z "$BUFFER" ]; then + BUFFER="cd ${(q)dir}" + zle accept-line + else + print -sr "cd ${(q)dir}" + cd "$dir" + fi local ret=$? + unset dir # ensure this doesn't end up appearing in prompt expansion zle fzf-redraw-prompt return $ret }