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) 34 if [[ "$(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 40 fi 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/ 70 if [[ "$(set)" != ~(E)PS1= && "${PS1}" == '' ]] ; then 71 PS1='$(set +o xtrace +o errexit 72 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 )' 83 fi