aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ksh/kshrc.d/prompt.ksh24
1 files changed, 22 insertions, 2 deletions
diff --git a/ksh/kshrc.d/prompt.ksh b/ksh/kshrc.d/prompt.ksh
index 228fd4c5..84129efc 100644
--- a/ksh/kshrc.d/prompt.ksh
+++ b/ksh/kshrc.d/prompt.ksh
@@ -136,8 +136,28 @@ function prompt {
state=${state}'>'
# Tracked files are modified
- git diff-files --no-ext-diff --quiet ||
- state=${state}'!!'
+ if ! git diff-files --no-ext-diff --quiet ; then
+
+ # Different ksh flavours process a bang in PS1 after prompt
+ # parameter expansion in different ways
+ case $KSH_VERSION in
+
+ # ksh93 requires a double-bang to escape it
+ (*'93'*) state=${state}'!!' ;;
+
+ # OpenBSD's pdksh requires a double-bang too, but its
+ # upstream does not
+ (*'PD KSH'*)
+ case $OS in
+ ('OpenBSD') state=${state}'!!' ;;
+ (*) state=${state}'!' ;;
+ esac
+ ;;
+
+ # Everything else should need only one bang
+ (*) state=${state}'!' ;;
+ esac
+ fi
# Changes are staged
git diff-index --cached --no-ext-diff --quiet HEAD ||