From 49a86169a583de6d6b934962e67f91653485e155 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Wed, 16 Mar 2016 11:01:51 +1300 Subject: Refactor ed() wrapper, add rlwrap(1) --- bash/bashrc.d/ed.bash | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'bash') diff --git a/bash/bashrc.d/ed.bash b/bash/bashrc.d/ed.bash index 5a54c761..faee7205 100644 --- a/bash/bashrc.d/ed.bash +++ b/bash/bashrc.d/ed.bash @@ -1,15 +1,30 @@ # Add a colon prompt to ed when a command is expected rather than text; makes # it feel a lot more like using ex. Only do this when stdin is a terminal, -# however. Also try and use -v for more verbose error output. +# however. Also try and use -v for more verbose error output, and rlwrap(1) if +# it's available. ed() { + + # Options for ed(1), and a command string in which to wrap the call if + # appropriate + local -a opts wrap + if [[ -t 0 ]] ; then - if ed -sv - /dev/null 2>&1 ; then - command ed -vp: "$@" - else - command ed -p: "$@" + + # Assemble options for interactive use: colon prompt, and verbose if + # available (-p is POSIX, but -v is not) + opts=(-p :) + if ed -sv - &0 2>&0 ; then + opts[${#opts[@]}]=-v + fi + + # Use rlwrap(1) if it's available, but don't throw a fit if it isn't + if hash rlwrap 2>/dev/null ; then + wrap=(rlwrap) fi - else - command ed "$@" fi + + # Execute the ed(1) call, in a wrapper if appropriate and with the + # concluded options + command "${wrap[@]}" ed "${opts[@]}" "$@" } -- cgit v1.2.3