# $Id$
-# $MirOS: src/bin/mksh/dot.mkshrc,v 1.65 2011/08/27 18:06:40 tg Exp $
+# $MirOS: src/bin/mksh/dot.mkshrc,v 1.77 2013/02/17 15:58:26 tg Exp $
#-
-# Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011
+# Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012, 2013
# Thorsten Glaser <tg@mirbsd.org>
#
# Provided that these terms and disclaimer and all copyright notices
#-
# ${ENV:-~/.mkshrc}: mksh initialisation file for interactive shells
-: ${EDITOR:=/bin/ed} ${TERM:=vt100} ${HOSTNAME:=$(ulimit -c 0;hostname -s 2>&-)}
-[[ $HOSTNAME = @(localhost|*([ ])) ]] && HOSTNAME=$(ulimit -c 0;hostname 2>&-)
-: ${HOSTNAME:=nil}; if (( USER_ID )); then PS1='$'; else PS1='#'; fi
+PS1='#'; (( USER_ID )) && PS1='$'; [[ ${HOSTNAME:=$(ulimit -c 0; hostname -s \
+ 2>/dev/null)} = *([ ]|localhost) ]] && HOSTNAME=$(ulimit -c 0; hostname \
+ 2>/dev/null); : ${EDITOR:=/bin/ed} ${HOSTNAME:=nil} ${TERM:=vt100}
function precmd {
local e=$?
(( e )) && print -n "$e|"
+ # precmd is required to retain the errorlevel when ${ …;} is used
+ return $e
}
-PS1=$'\001\r''$(precmd)${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo \?
- )}@${HOSTNAME%%.*}:$(local d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || \
+PS1=$'\001\r''${ precmd;}${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo \?
+ )}@${HOSTNAME%%.*}:${ local e=$? d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || \
d=${d/#$p/~}; local m=${%d} n p=...; (( m > 0 )) || m=${#d}
(( m > (n = (COLUMNS/3 < 7 ? 7 : COLUMNS/3)) )) && d=${d:(-n)} || \
- p=; print -nr -- "$p$d") '"$PS1 "
+ p=; print -nr -- "$p$d"; return $e;} '"$PS1 "
: ${MKSH:=$(whence -p mksh)}; export EDITOR HOSTNAME MKSH TERM USER
alias ls=ls
unalias ls
alias la='l -a'
alias ll='l -l'
alias lo='l -alo'
-whence -p rot13 >&- || alias rot13='tr \
+whence -p rot13 >/dev/null || alias rot13='tr \
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'
-whence -p hd >&- || function hd {
+whence -p hd >/dev/null || function hd {
hexdump -e '"%08.8_ax " 8/1 "%02X " " - " 8/1 "%02X "' \
-e '" |" "%_p"' -e '"|\n"' "$@"
}
# Berkeley C shell compatible dirs, popd, and pushd functions
# Z shell compatible chpwd() hook, used to update DIRSTACK[0]
-DIRSTACKBASE=$(realpath ~/. 2>&- || print -nr -- "$HOME")
+DIRSTACKBASE=$(realpath ~/. 2>/dev/null || print -nr -- "${HOME:-/}")
set -A DIRSTACK
function chpwd {
- DIRSTACK[0]=$(realpath . 2>&- || print -r -- "$PWD")
+ DIRSTACK[0]=$(realpath . 2>/dev/null || print -r -- "$PWD")
[[ $DIRSTACKBASE = ?(*/) ]] || \
DIRSTACK[0]=${DIRSTACK[0]/#$DIRSTACKBASE/~}
:
}
function dirs {
local d dwidth
- local -i isnoglob=0 fl=0 fv=0 fn=0 cpos=0
+ local -i fl=0 fv=0 fn=0 cpos=0
- [[ $(set +o) == *@(-o noglob)@(| *) ]] && isnoglob=1
- set -o noglob
while getopts ":lvn" d; do
case $d {
(l) fl=1 ;;
done
print
fi
- (( isnoglob )) || set +o noglob
return 0
}
function popd {
local d fa
- local -i isnoglob=0 n=1
+ local -i n=1
- [[ $(set +o) == *@(-o noglob)@(| *) ]] && isnoglob=1
- set -o noglob
while getopts ":0123456789lvn" d; do
case $d {
- (l|v|n) fa="$fa -$d" ;;
+ (l|v|n) fa+=" -$d" ;;
(+*) n=2
break ;;
(*) print -u2 'Usage: popd [-lvn] [+<n>].'
unset DIRSTACK[n]
set -A DIRSTACK -- "${DIRSTACK[@]}"
cd_csh "${DIRSTACK[0]}" || return 1
- (( isnoglob )) || set +o noglob
dirs $fa
}
function pushd {
local d fa
- local -i isnoglob=0 n=1
+ local -i n=1
- [[ $(set +o) == *@(-o noglob)@(| *) ]] && isnoglob=1
- set -o noglob
while getopts ":0123456789lvn" d; do
case $d {
- (l|v|n) fa="$fa -$d" ;;
+ (l|v|n) fa+=" -$d" ;;
(+*) n=2
break ;;
(*) print -u2 'Usage: pushd [-lvn] [<dir>|+<n>].'
set -A DIRSTACK -- placeholder "${DIRSTACK[@]}"
cd_csh "$1" || return 1
fi
- (( isnoglob )) || set +o noglob
dirs $fa
}
set +U
local c s="$*" t=
[[ -n $s ]] || { s=$(cat;print x); s=${s%x}; }
- local -i i=0 n=${#s} p=0 v x
+ local -i i=0 j=0 n=${#s} p=0 v x
local -i16 o
while (( i < n )); do
p=0
;;
}
- t=$t\\x${o#16#}
+ t+=\\x${o#16#}
+ (( ++j & 4095 )) && continue
+ print -n $t
+ t=
done
print -n $t
(( u )) || set -U
(( v |= j << 8 ))
(( j = i < n ? s[i++] : 0 ))
(( v |= j ))
- t=$t${Lb64encode_code[v >> 18]}${Lb64encode_code[v >> 12 & 63]}
+ t+=${Lb64encode_code[v >> 18]}${Lb64encode_code[v >> 12 & 63]}
c=${Lb64encode_code[v >> 6 & 63]}
if (( i <= n )); then
- t=$t$c${Lb64encode_code[v & 63]}
+ t+=$c${Lb64encode_code[v & 63]}
elif (( i == n + 1 )); then
- t=$t$c=
+ t+=$c=
else
- t=$t==
+ t+===
fi
if (( ${#t} == 76 || i >= n )); then
print $t
function Lnzathash {
Lnzathash_v=0
Lnzathash_add "$@"
+ Lnzathash_end
+}
+function Lnzathash_end {
if (( Lnzathash_v )); then
Lnzaathash_end
else
# give MidnightBSD's laffer1 a bit of csh feeling
function setenv {
- eval export $1'="$2"'
+ eval export "\"$1\""'="$2"'
}
: place customisations below this line