author | Drew Fisher <drew.fisher@oracle.com> |
Tue, 12 Nov 2013 13:24:56 -0700 | |
branch | s11-update |
changeset 2817 | 093306a32a73 |
parent 789 | 5f074ca23733 |
permissions | -rw-r--r-- |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
1 |
# |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
2 |
# Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
3 |
# Use is subject to license terms. |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
4 |
# |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
5 |
|
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
6 |
# |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
7 |
# This file is sourced by interactive ksh93 shells before ${HOME}/.kshrc |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
8 |
# |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
9 |
|
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
10 |
# Enable "gmacs"+"multiline" editor mode if the user did not set an |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
11 |
# input mode yet (for example via ${EDITOR}, ${VISUAL} or any |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
12 |
# "set -o" flag) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
13 |
if [[ "$(set +o)" != ~(Er)--(gmacs|emacs|vi)( .*|) ]] ; then |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
14 |
set -o gmacs |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
15 |
# enable multiline input mode |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
16 |
set -o multiline |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
17 |
# enable globstar mode (match subdirs with **/) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
18 |
set -o globstar |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
19 |
fi |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
20 |
|
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
21 |
# Set a default prompt (<username>@<hostname>:<path><"($|#) ">) if |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
22 |
# then variable does not exist in the environment. |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
23 |
# |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
24 |
# Algorithm: |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
25 |
# 1. Define "ellipsis", either Unicode #2026 for unicode locales |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
26 |
# and "..." otherwise |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
27 |
# ([[ "${LC_ALL}/${LANG}" = ~(Elr)(.*UTF-8/.*|/.*UTF-8) ]] |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
28 |
# ensures that the pattern matches the leftmost sequence |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
29 |
# containing *.UTF-8, allowing to match either LC_ALL or |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
30 |
# LANG when LC_ALL is not set) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
31 |
# 2. If PWD is within HOME replace value of HOME with '~' |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
32 |
# If the PWD is longer than 30 charatcers shorten it to 30 chars |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
33 |
# print '#' for user "root" and '$' for normal users |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
34 |
# Notes: |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
35 |
# - printf "%*s\r%s" COLUMNS "") # is used at the beginning to |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
36 |
# work around a bug in the "multiline" handling code which |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
37 |
# causes the shell to override its own prompt when the edit |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
38 |
# line overflows (this happens if the terminal cursor |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
39 |
# position is not 0 when PS1 is printed). |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
40 |
# - PS1 will initially be empty until either... |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
41 |
# a) ... someone sets the variable |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
42 |
# or |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
43 |
# b) ... the prompt is displayed for the first time (default is |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
44 |
# '$ ' for normal users and '# ' for user "root") |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
45 |
# - The statement below will not work if someone sources /etc/ksh.kshrc |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
46 |
# unless PS1 gets "unset" first. |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
47 |
# - Make sure to use absolute paths (e.g. /usr/bin/hostname) to make |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
48 |
# sure PS1 works in cases where PATH does not contain /usr/bin/ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
49 |
if [[ "$(set)" != ~(E)PS1= && "${PS1}" == '' ]] ; then |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
50 |
PS1='$(set +o xtrace +o errexit |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
51 |
printf "%*s\r%s" COLUMNS "" |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
52 |
printf "%s@%s:" "${LOGNAME}" "$(/usr/bin/hostname)" |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
53 |
ellip="${ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
54 |
[[ "${LC_ALL}/${LANG}" == ~(Elr)(.*UTF-8/.*|/.*UTF-8) ]] && |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
55 |
printf "\u[2026]\n" || print "..." ; }" |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
56 |
p="${PWD/~(El)${HOME}/\~}" |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
57 |
(( ${#p} > 30 )) && |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
58 |
print -r -n -- "${ellip}${p:${#p}-30:30}" || |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
59 |
print -r -n -- "${p}" |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
60 |
[[ "${LOGNAME}" == "root" ]] && print -n "# " || print -n "\$ " |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
61 |
)' |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
62 |
fi |