| 1 | $FreeWRT$
|
|---|
| 2 |
|
|---|
| 3 | • bring mksh to the level of 2007/09/26
|
|---|
| 4 | • FreeWRT patches:
|
|---|
| 5 | – no hostname(1)
|
|---|
| 6 | – ls has no -o
|
|---|
| 7 | – yofuh doesn’t like $? in $PS1
|
|---|
| 8 |
|
|---|
| 9 | --- mksh.orig/dot.mkshrc 2007-09-03 09:25:28.000000000 +0000
|
|---|
| 10 | +++ mksh/dot.mkshrc 2007-09-26 17:52:20.000000000 +0000
|
|---|
| 11 | @@ -1,8 +1,41 @@
|
|---|
| 12 | -: ${EDITOR:=/bin/ed} ${TERM:=vt100} ${HOSTNAME:=$(ulimit -c 0;hostname -s 2>&-)}
|
|---|
| 13 | +# $MirOS: src/bin/mksh/dot.mkshrc,v 1.22 2007/09/25 22:36:36 tg Stab $
|
|---|
| 14 | +#-
|
|---|
| 15 | +# Copyright (c) 2007
|
|---|
| 16 | +# Thorsten Glaser <tg@mirbsd.de>
|
|---|
| 17 | +#
|
|---|
| 18 | +# Provided that these terms and disclaimer and all copyright notices
|
|---|
| 19 | +# are retained or reproduced in an accompanying document, permission
|
|---|
| 20 | +# is granted to deal in this work without restriction, including un-
|
|---|
| 21 | +# limited rights to use, publicly perform, distribute, sell, modify,
|
|---|
| 22 | +# merge, give away, or sublicence.
|
|---|
| 23 | +#
|
|---|
| 24 | +# Advertising materials mentioning features or use of this work must
|
|---|
| 25 | +# display the following acknowledgement:
|
|---|
| 26 | +# This product includes material provided by Thorsten Glaser.
|
|---|
| 27 | +#
|
|---|
| 28 | +# This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
|
|---|
| 29 | +# the utmost extent permitted by applicable law, neither express nor
|
|---|
| 30 | +# implied; without malicious intent or gross negligence. In no event
|
|---|
| 31 | +# may a licensor, author or contributor be held liable for indirect,
|
|---|
| 32 | +# direct, other damage, loss, or other issues arising in any way out
|
|---|
| 33 | +# of dealing in the work, even if advised of the possibility of such
|
|---|
| 34 | +# damage or existence of a defect, except proven that it results out
|
|---|
| 35 | +# of said person's immediate fault when using the work as intended.
|
|---|
| 36 | +#-
|
|---|
| 37 | +# sample mksh initialisation file for interactive shells
|
|---|
| 38 | +
|
|---|
| 39 | +: ${EDITOR:=/bin/ed} ${TERM:=vt100} ${HOSTNAME:=$(</proc/sys/kernel/hostname)}
|
|---|
| 40 | [[ $HOSTNAME = @(localhost|*([ ])) ]] && HOSTNAME=$(ulimit -c 0;hostname 2>&-)
|
|---|
| 41 | : ${HOSTNAME:=nil}; PS1='#'; [[ "$(ulimit -c 0; id -u 2>&-)" -eq 0 ]] || PS1='$'
|
|---|
| 42 | -PS1='$(((e = $?)) && print $e\|)${USER:=$(ulimit -c 0; id -un 2>&- || \
|
|---|
| 43 | - print nobody)}@${HOSTNAME%%.*}:$(typeset pfx=~ wd=${PWD:-?}
|
|---|
| 44 | +function precmd {
|
|---|
| 45 | + typeset -i10 e=$?
|
|---|
| 46 | +
|
|---|
| 47 | +# enable this back if you want the errorlevel in your prompt
|
|---|
| 48 | +# this is default in upstream mksh
|
|---|
| 49 | +# (( e )) && print -n -- "$e|"
|
|---|
| 50 | +}
|
|---|
| 51 | +PS1='$(precmd)${USER:=$(ulimit -c 0;id -un 2>&- || print \?)}@${HOSTNAME%%.*}:$(
|
|---|
| 52 | + typeset pfx=~ wd=${PWD:-?}
|
|---|
| 53 | typeset -i n=${COLUMNS:-80}/3; let n="n < 7 ? 7 : n"
|
|---|
| 54 | [[ ${wd#$pfx} = $wd || $pfx = ?(/) ]] || wd=\~${wd#$pfx}
|
|---|
| 55 | pfx=; while (( (${#pfx} + ${#wd}) > n )); do
|
|---|
| 56 | @@ -18,7 +51,7 @@ export EDITOR HOSTNAME LESSHISTFILE=- MK
|
|---|
| 57 | alias l='/bin/ls -F'
|
|---|
| 58 | alias la='l -a'
|
|---|
| 59 | alias ll='l -l'
|
|---|
| 60 | -alias lo='la -lo'
|
|---|
| 61 | +alias lo='la -l'
|
|---|
| 62 | alias which='whence -p'
|
|---|
| 63 | whence -p rot13 >&- || alias rot13='tr [A-Za-z] [N-ZA-Mn-za-m]'
|
|---|
| 64 | whence -p hd >&- || function hd {
|
|---|
| 65 | @@ -26,6 +59,162 @@ whence -p hd >&- || function hd {
|
|---|
| 66 | -e '" |" "%_p"' -e '"|\n"' "$@"
|
|---|
| 67 | }
|
|---|
| 68 |
|
|---|
| 69 | +# Berkeley C shell compatible dirs, popd, and pushd functions
|
|---|
| 70 | +# Z shell compatible chpwd() hook, used to update DIRSTACK[0]
|
|---|
| 71 | +DIRSTACKBASE=$(readlink -nf ~/. 2>&- || print -nr -- "$HOME")
|
|---|
| 72 | +typeset -r DIRSTACKBASE
|
|---|
| 73 | +set -A DIRSTACK
|
|---|
| 74 | +function chpwd {
|
|---|
| 75 | + DIRSTACK[0]=$(readlink -nf . 2>&- || print -nr -- "$PWD")
|
|---|
| 76 | + [[ ${DIRSTACK[0]#$DIRSTACKBASE} = ${DIRSTACK[0]} ]] || \
|
|---|
| 77 | + DIRSTACK[0]=\~${DIRSTACK[0]#$DIRSTACKBASE}
|
|---|
| 78 | + :
|
|---|
| 79 | +}
|
|---|
| 80 | +chpwd .
|
|---|
| 81 | +function cd {
|
|---|
| 82 | + builtin cd "$@"
|
|---|
| 83 | + chpwd "$@"
|
|---|
| 84 | +}
|
|---|
| 85 | +function cd_csh {
|
|---|
| 86 | + typeset d t=$1
|
|---|
| 87 | +
|
|---|
| 88 | + [[ $t = ~* ]] && t=$DIRSTACKBASE${t#~}
|
|---|
| 89 | + if ! d=$(builtin cd "$t" 2>&1); then
|
|---|
| 90 | + print -u2 "${1}: ${d##*$t - }."
|
|---|
| 91 | + return 1
|
|---|
| 92 | + fi
|
|---|
| 93 | + cd "$t"
|
|---|
| 94 | +}
|
|---|
| 95 | +function dirs {
|
|---|
| 96 | + typeset d
|
|---|
| 97 | + typeset -i isnoglob=0 fl=0 fv=0 fn=0 cpos=0
|
|---|
| 98 | +
|
|---|
| 99 | + [[ $(set +o) == *-o\ noglob* ]] && isnoglob=1
|
|---|
| 100 | + set -o noglob
|
|---|
| 101 | + while getopts ":lvn" d; do
|
|---|
| 102 | + case $d {
|
|---|
| 103 | + (l) fl=1 ;;
|
|---|
| 104 | + (v) fv=1 ;;
|
|---|
| 105 | + (n) fn=1 ;;
|
|---|
| 106 | + (*) print -u2 'Usage: dirs [-lvn].'
|
|---|
| 107 | + return 1 ;;
|
|---|
| 108 | + }
|
|---|
| 109 | + done
|
|---|
| 110 | + shift $((OPTIND - 1))
|
|---|
| 111 | + if (( $# > 0 )); then
|
|---|
| 112 | + print -u2 'Usage: dirs [-lvn].'
|
|---|
| 113 | + return 1
|
|---|
| 114 | + fi
|
|---|
| 115 | + if (( fv )); then
|
|---|
| 116 | + fv=0
|
|---|
| 117 | + while (( fv < ${#DIRSTACK[*]} )); do
|
|---|
| 118 | + d=${DIRSTACK[fv]}
|
|---|
| 119 | + [[ $fl$d = 1~* ]] && d=$DIRSTACKBASE${d#~}
|
|---|
| 120 | + print -r -- "$fv $d"
|
|---|
| 121 | + let fv++
|
|---|
| 122 | + done
|
|---|
| 123 | + else
|
|---|
| 124 | + fv=0
|
|---|
| 125 | + while (( fv < ${#DIRSTACK[*]} )); do
|
|---|
| 126 | + d=${DIRSTACK[fv]}
|
|---|
| 127 | + [[ $fl$d = 1~* ]] && d=$DIRSTACKBASE${d#~}
|
|---|
| 128 | + if (( fn && (cpos+=${#d}+1) >= 79 && ${#d} < 80 )); then
|
|---|
| 129 | + print
|
|---|
| 130 | + (( cpos = ${#d} + 1 ))
|
|---|
| 131 | + fi
|
|---|
| 132 | + print -nr -- "$d "
|
|---|
| 133 | + let fv++
|
|---|
| 134 | + done
|
|---|
| 135 | + print
|
|---|
| 136 | + fi
|
|---|
| 137 | + (( isnoglob )) || set +o noglob
|
|---|
| 138 | + return 0
|
|---|
| 139 | +}
|
|---|
| 140 | +function popd {
|
|---|
| 141 | + typeset d fa
|
|---|
| 142 | + typeset -i isnoglob=0 n=1
|
|---|
| 143 | +
|
|---|
| 144 | + [[ $(set +o) == *-o\ noglob* ]] && isnoglob=1
|
|---|
| 145 | + set -o noglob
|
|---|
| 146 | + while getopts ":0123456789lvn" d; do
|
|---|
| 147 | + case $d {
|
|---|
| 148 | + (l|v|n) fa="$fa -$d" ;;
|
|---|
| 149 | + (+*) n=2
|
|---|
| 150 | + break ;;
|
|---|
| 151 | + (*) print -u2 'Usage: popd [-lvn] [+<n>].'
|
|---|
| 152 | + return 1 ;;
|
|---|
| 153 | + }
|
|---|
| 154 | + done
|
|---|
| 155 | + shift $((OPTIND - n))
|
|---|
| 156 | + n=0
|
|---|
| 157 | + if (( $# > 1 )); then
|
|---|
| 158 | + print -u2 popd: Too many arguments.
|
|---|
| 159 | + return 1
|
|---|
| 160 | + elif [[ $1 = ++([0-9]) && $1 != +0 ]]; then
|
|---|
| 161 | + if (( (n = ${1#+}) >= ${#DIRSTACK[*]} )); then
|
|---|
| 162 | + print -u2 popd: Directory stack not that deep.
|
|---|
| 163 | + return 1
|
|---|
| 164 | + fi
|
|---|
| 165 | + elif [[ -n $1 ]]; then
|
|---|
| 166 | + print -u2 popd: Bad directory.
|
|---|
| 167 | + return 1
|
|---|
| 168 | + fi
|
|---|
| 169 | + if (( ${#DIRSTACK[*]} < 2 )); then
|
|---|
| 170 | + print -u2 popd: Directory stack empty.
|
|---|
| 171 | + return 1
|
|---|
| 172 | + fi
|
|---|
| 173 | + unset DIRSTACK[n]
|
|---|
| 174 | + set -A DIRSTACK -- "${DIRSTACK[@]}"
|
|---|
| 175 | + cd_csh "${DIRSTACK[0]}" || return 1
|
|---|
| 176 | + (( isnoglob )) || set +o noglob
|
|---|
| 177 | + dirs $fa
|
|---|
| 178 | +}
|
|---|
| 179 | +function pushd {
|
|---|
| 180 | + typeset d fa
|
|---|
| 181 | + typeset -i isnoglob=0 n=1
|
|---|
| 182 | +
|
|---|
| 183 | + [[ $(set +o) == *-o\ noglob* ]] && isnoglob=1
|
|---|
| 184 | + set -o noglob
|
|---|
| 185 | + while getopts ":0123456789lvn" d; do
|
|---|
| 186 | + case $d {
|
|---|
| 187 | + (l|v|n) fa="$fa -$d" ;;
|
|---|
| 188 | + (+*) n=2
|
|---|
| 189 | + break ;;
|
|---|
| 190 | + (*) print -u2 'Usage: pushd [-lvn] [<dir>|+<n>].'
|
|---|
| 191 | + return 1 ;;
|
|---|
| 192 | + }
|
|---|
| 193 | + done
|
|---|
| 194 | + shift $((OPTIND - n))
|
|---|
| 195 | + if (( $# == 0 )); then
|
|---|
| 196 | + if (( ${#DIRSTACK[*]} < 2 )); then
|
|---|
| 197 | + print -u2 pushd: No other directory.
|
|---|
| 198 | + return 1
|
|---|
| 199 | + fi
|
|---|
| 200 | + d=${DIRSTACK[1]}
|
|---|
| 201 | + DIRSTACK[1]=${DIRSTACK[0]}
|
|---|
| 202 | + cd_csh "$d" || return 1
|
|---|
| 203 | + elif (( $# > 1 )); then
|
|---|
| 204 | + print -u2 pushd: Too many arguments.
|
|---|
| 205 | + return 1
|
|---|
| 206 | + elif [[ $1 = ++([0-9]) && $1 != +0 ]]; then
|
|---|
| 207 | + if (( (n = ${1#+}) >= ${#DIRSTACK[*]} )); then
|
|---|
| 208 | + print -u2 pushd: Directory stack not that deep.
|
|---|
| 209 | + return 1
|
|---|
| 210 | + fi
|
|---|
| 211 | + while (( n-- )); do
|
|---|
| 212 | + d=${DIRSTACK[0]}
|
|---|
| 213 | + unset DIRSTACK[0]
|
|---|
| 214 | + set -A DIRSTACK -- "${DIRSTACK[@]}" "$d"
|
|---|
| 215 | + done
|
|---|
| 216 | + cd_csh "${DIRSTACK[0]}" || return 1
|
|---|
| 217 | + else
|
|---|
| 218 | + set -A DIRSTACK -- placeholder "${DIRSTACK[@]}"
|
|---|
| 219 | + cd_csh "$1" || return 1
|
|---|
| 220 | + fi
|
|---|
| 221 | + (( isnoglob )) || set +o noglob
|
|---|
| 222 | + dirs $fa
|
|---|
| 223 | +}
|
|---|
| 224 | +
|
|---|
| 225 | # strip comments (and leading/trailing whitespace if IFS is set) from
|
|---|
| 226 | # any file(s) given as argument, or stdin if none, and spew to stdout
|
|---|
| 227 | function Lstripcom {
|
|---|
| 228 | @@ -35,6 +224,4 @@ function Lstripcom {
|
|---|
| 229 | done; }
|
|---|
| 230 | }
|
|---|
| 231 |
|
|---|
| 232 | -# place customisations between this line and the “: RCSID” line below
|
|---|
| 233 | -
|
|---|
| 234 | -: $MirOS: src/bin/mksh/dot.mkshrc,v 1.19 2007/09/03 09:25:05 tg Rel $
|
|---|
| 235 | +: place customsations above this line!
|
|---|