components/ksh93/ksh.kshrc
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Wed, 29 Aug 2012 11:05:56 -0700
changeset 957 255465c5756f
parent 789 5f074ca23733
permissions -rw-r--r--
Close of build 04.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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