aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-05-14 22:58:25 +1200
committerTom Ryder <tom@sanctum.geek.nz>2017-05-14 22:58:36 +1200
commit57daf35a76506de41dfaf94af78376717943957b (patch)
tree76f717cfc94450a43cdd6df9cde319f4693d4048
parent7d17ac1fa99a129b7e9205ea5ab4a782eae47bce (diff)
downloaddotfiles-57daf35a76506de41dfaf94af78376717943957b.tar.gz
dotfiles-57daf35a76506de41dfaf94af78376717943957b.zip
Move exm(1df) test into EDITOR selection
Merely checking for vim(1) is a poor test; we specifically need to know if the ex(1) implementation is Vim, so test it while making the EDITOR decision.
-rw-r--r--bin/exm.sh13
-rw-r--r--sh/profile.d/editor.sh17
2 files changed, 18 insertions, 12 deletions
diff --git a/bin/exm.sh b/bin/exm.sh
index 25e3006f..378b5baf 100644
--- a/bin/exm.sh
+++ b/bin/exm.sh
@@ -1,12 +1,9 @@
# Prevent Vim's ex(1) implementation from clearing the screen
if [ -t 0 ] ; then
- ver=$(ex --version 2>/dev/null | awk 'NR==1{print $1;exit}')
- case $ver in
- # Lie to Vim; tell it it's a dumb terminal, and that its required "cm"
- # feature is invoked with a carriage return.
- VIM)
- cmd=$(printf 'set t_cm=\r|')
- set -- -T dumb --cmd "${cmd%|}" "$@" ;;
- esac
+
+ # Lie to Vim; tell it it's a dumb terminal, and that its required "cm"
+ # feature is invoked with a carriage return.
+ cmd=$(printf 'set t_cm=\r|')
+ set -- -T dumb --cmd "${cmd%|}" "$@"
fi
exec ex "$@"
diff --git a/sh/profile.d/editor.sh b/sh/profile.d/editor.sh
index 307879fe..debb93b6 100644
--- a/sh/profile.d/editor.sh
+++ b/sh/profile.d/editor.sh
@@ -3,12 +3,21 @@
if command -v ed >/dev/null 2>&1 ; then
EDITOR=ed
-# Failing that, if we have both vim(1) and exm(1df) in our $PATH, use the
-# latter to work around Vim's ex mode screen-clearing
-elif { command -v vim && command -v exm ; } >/dev/null 2>&1 ; then
+# Failing that, if the system's implementation of ex(1) looks like Vim and we
+# have exm(1df) in our $PATH, use the latter to work around Vim's ex mode
+# screen-clearing
+elif (
+ command -v ex >/dev/null 2>&1 || exit 1
+ command -v exm >/dev/null 2>&1 || exit 1
+ ver=$(ex --version 2>/dev/null | awk 'NR==1{print $1;exit}')
+ case $ver in
+ (VIM) exit 0 ;;
+ (*) exit 1 ;;
+ esac
+) >/dev/null 2>&1 ; then
EDITOR=exm
-# Otherwise, just call ex(1) directly
+# Otherwise, we can just call ex(1) directly
else
EDITOR=ex
fi