OSDN Git Service

Update mksh to R43 (formal release, from tarball)
[android-x86/external-mksh.git] / src / dot.mkshrc
index 518f031..5ea4b91 100644 (file)
@@ -1,7 +1,8 @@
 # $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
@@ -41,20 +44,20 @@ alias l='ls -F'
 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/~}
        :
@@ -75,10 +78,8 @@ function cd_csh {
 }
 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 ;;
@@ -117,18 +118,15 @@ function dirs {
                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>].'
@@ -156,18 +154,15 @@ function popd {
        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>].'
@@ -201,7 +196,6 @@ function pushd {
                set -A DIRSTACK -- placeholder "${DIRSTACK[@]}"
                cd_csh "$1" || return 1
        fi
-       (( isnoglob )) || set +o noglob
        dirs $fa
 }
 
@@ -229,7 +223,7 @@ function Lb64decode {
        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
@@ -252,7 +246,10 @@ function Lb64decode {
                        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
@@ -278,14 +275,14 @@ function Lb64encode {
                (( 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
@@ -332,6 +329,9 @@ function Lnzaathash {
 function Lnzathash {
        Lnzathash_v=0
        Lnzathash_add "$@"
+       Lnzathash_end
+}
+function Lnzathash_end {
        if (( Lnzathash_v )); then
                Lnzaathash_end
        else
@@ -351,7 +351,7 @@ function Lstripcom {
 
 # give MidnightBSD's laffer1 a bit of csh feeling
 function setenv {
-       eval export $1'="$2"'
+       eval export "\"$1\""'="$2"'
 }
 
 : place customisations below this line