1# 2# CDDL HEADER START 3# 4# The contents of this file are subject to the terms of the 5# Common Development and Distribution License (the "License"). 6# You may not use this file except in compliance with the License. 7# 8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9# or http://www.opensolaris.org/os/licensing. 10# See the License for the specific language governing permissions 11# and limitations under the License. 12# 13# When distributing Covered Code, include this CDDL HEADER in each 14# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15# If applicable, add the following below this CDDL HEADER, with the 16# fields enclosed by brackets "[]" replaced with your own identifying 17# information: Portions Copyright [yyyy] [name of copyright owner] 18# 19# CDDL HEADER END 20# 21 22# 23# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24# Use is subject to license terms. 25# 26 27# 28# This file is sourced by interactive ksh93 shells before ${HOME}/.kshrc 29# 30 31# Enable "gmacs"+"multiline" editor mode if the user did not set an 32# input mode yet (for example via ${EDITOR}, ${VISUAL} or any 33# "set -o" flag) 34if [[ "$(set +o)" != ~(Er)--(gmacs|emacs|vi)( .*|) ]] ; then 35 set -o gmacs 36 # enable multiline input mode 37 set -o multiline 38 # enable globstar mode (match subdirs with **/) 39 set -o globstar 40fi 41 42# Set a default prompt (<username>@<hostname>:<path><"($|#) ">) if 43# then variable does not exist in the environment. 44# 45# Algorithm: 46# 1. Define "ellipsis", either Unicode #2026 for unicode locales 47# and "..." otherwise 48# ([[ "${LC_ALL}/${LANG}" = ~(Elr)(.*UTF-8/.*|/.*UTF-8) ]] 49# ensures that the pattern matches the leftmost sequence 50# containing *.UTF-8, allowing to match either LC_ALL or 51# LANG when LC_ALL is not set) 52# 2. If PWD is within HOME replace value of HOME with '~' 53# If the PWD is longer than 30 charatcers shorten it to 30 chars 54# print '#' for user "root" and '$' for normal users 55# Notes: 56# - printf "%*s\r%s" COLUMNS "") # is used at the beginning to 57# work around a bug in the "multiline" handling code which 58# causes the shell to override its own prompt when the edit 59# line overflows (this happens if the terminal cursor 60# position is not 0 when PS1 is printed). 61# - PS1 will initially be empty until either... 62# a) ... someone sets the variable 63# or 64# b) ... the prompt is displayed for the first time (default is 65# '$ ' for normal users and '# ' for user "root") 66# - The statement below will not work if someone sources /etc/ksh.kshrc 67# unless PS1 gets "unset" first. 68# - Make sure to use absolute paths (e.g. /usr/bin/hostname) to make 69# sure PS1 works in cases where PATH does not contain /usr/bin/ 70if [[ "$(set)" != ~(E)PS1= && -z "${PS1-}" ]] ; then 71 PS1='$(set +o xtrace +o errexit 72 [[ -v COLUMNS ]] && printf "%*s\r%s" COLUMNS "" 73 printf "%s@%s:" "${LOGNAME-}" "$(/usr/bin/hostname)" 74 ellip="${ 75 [[ "${LC_ALL-}/${LANG-}" == ~(Elr)(.*UTF-8/.*|/.*UTF-8) ]] && 76 printf "\u[2026]\n" || print "..." ; }" 77 p="${PWD/~(El)${HOME}/\~}" 78 (( ${#p} > 30 )) && 79 print -r -n -- "${ellip}${p:${#p}-30:30}" || 80 print -r -n -- "${p}" 81 [[ "${LOGNAME-}" == "root" ]] && print -n "# " || print -n "\$ " 82 )' 83fi 84