From 4fa98abec391fd03e11ec404d819b2bd5584e854 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C5=99emysl=20Janouch?= <p.janouch@gmail.com>
Date: Fri, 30 Jun 2017 22:51:52 +0200
Subject: Figure out bash

---
 README.adoc | 35 +++++++++++++++++++++++++++++------
 1 file changed, 29 insertions(+), 6 deletions(-)

(limited to 'README.adoc')

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

