+# vim:ft=sh:fdm=marker
+#
+# configuration used for an absolute minimal ksh shell.
+# Reason: reference no files in /usr/, so that FS can be umounted.
+
+# skip this setup for non-interactive shells
+[[ -o interactive && -t 0 ]] || return
+
+export PATH="/bin:/sbin/:/usr/bin/:/usr/sbin:/usr/local/bin:/usr/local/sbin:${HOME}/bin:/opt/bin"
+export EDITOR='ed'
+
+if [[ -x $(which vim) ]] ; then
+ export VISUAL='vim'
+else
+ export VISUAL='vi'
+fi
+if [[ -x $(which less) ]] ; then
+ export PAGER='less'
+else
+ export PAGER='more'
+fi
+
+FPATH=/usr/share/ksh/functions
+HISTSIZE=500
+HISTEDIT="$EDITOR"
+
+# some options.
+set -o emacs -o trackall -o globstar
+
+# aliases for various command shortcuts
+alias ls='ls --color=auto' # we're on grml, so we do have GNU ls.
+alias ll='ls -lFb'
+alias la='ls -LaFb'
+alias pu='ps -fu $USER'
+
+# Use keyboard trap to map keys to other keys
+# note that escape sequences vary for different terminals so these
+# may not work for you
+trap '.sh.edchar=${keymap[${.sh.edchar}]:-${.sh.edchar}}' KEYBD
+
+if [[ -x $(which infocmp) ]] && [[ -x $(which sed) ]] ; then
+ # reading some special keys from terminfo database.
+ # should work everywhere. hopefully.
+ typeset -A keymap
+ infocmp -L | sed '1,2d;s/\t//;s/, /\n/g;s/,$//' | \
+ while read -r line ; do
+ key="${line%=*}"
+ seq="${line#*=}"
+ case "$key" in
+ key_left) keymap+=( [$(print "$seq")]=$'\cb' ) ;;
+ key_right) keymap+=( [$(print "$seq")]=$'\cf' ) ;;
+ key_up) keymap+=( [$(print "$seq")]=$'\cp' ) ;;
+ key_down) keymap+=( [$(print "$seq")]=$'\cn' ) ;;
+ key_home) keymap+=( [$(print "$seq")]=$'\ca' ) ;;
+ key_end) keymap+=( [$(print "$seq")]=$'\ce' ) ;;
+ key_backspace) keymap+=( [$(print "$seq")]=$'\ch' ) ;;
+ key_dc) keymap+=( [$(print "$seq")]=$'\cd' ) ;;
+ esac
+ done
+else
+ # fallback, does not work in all terminals.
+ keymap=(
+ [$'\eOD']=$'\eb' # Ctrl-Left -> move word left
+ [$'\eOC']=$'\ef' # Ctrl-Right -> move word right
+ [$'\e[3~']=$'\cd' # Delete -> delete to right
+ [$'\e[1~']=$'\ca' # Home -> move to beginning of line
+ [$'\e[4~']=$'\ce' # End -> move to end of line
+ )
+fi
+
+# put the current directory and history number in the prompt.
+# use a wrapper for 'cd' to get '~' instead of /home/foo/.
+function _cd {
+ "cd" "$@"
+ [[ $PWD = $HOME* && $HOME != / ]] && _pwd=\~"${PWD#$HOME}" && return
+ _pwd="$PWD"
+}
+alias cd=_cd
+_cd .
+PS1='(!)-$_pwd\$ '