From 4fa98abec391fd03e11ec404d819b2bd5584e854 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Fri, 30 Jun 2017 22:51:52 +0200 Subject: Figure out bash --- README.adoc | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/README.adoc b/README.adoc index b1c78f0..1b9cdd2 100644 --- a/README.adoc +++ b/README.adoc @@ -41,20 +41,43 @@ zsh --- To start using this navigator, put the following in your .zshrc: .... -navigate () { +sdn-navigate () { # ... possibly zle-line-init - eval `navigator` + eval `sdn` [ -z "$cd" ] || cd "$cd" [ -z "$insert" ] || LBUFFER="$LBUFFER$insert " zle reset-prompt # ... possibly zle-line-finish } -zle -N navigate -bindkey '\eo' navigate +zle -N sdn-navigate +bindkey '\eo' sdn-navigate .... -As far as I'm aware, bash cannot be used for this, as there is no command to -reset the prompt from within a `bind -x` handler. +bash +---- +Here we can't reset the prompt from within a `bind -x` handler but there is +an acceptable workaround: +.... +sdn-navigate () { + SDN_L=$READLINE_LINE SDN_P=$READLINE_POINT + READLINE_LINE= + + eval `sdn` + [[ -z "$cd" ]] || cd "$cd" + [[ -z "$insert" ]] || { + SDN_L="${SDN_L:0:$SDN_P}$insert ${SDN_L:$SDN_P}" + ((SDN_P=SDN_P+${#insert}+1)) + } +} +sdn-restore () { + READLINE_LINE=$SDN_L READLINE_POINT=$SDN_P + unset SDN_L SDN_P +} + +bind -x '"\200": sdn-navigate' +bind -x '"\201": sdn-restore' +bind '"\eo":"\200\C-m\201"' +.... Colors ------ -- cgit v1.2.3-70-g09d2