X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fminimal-shellrc;h=23aa9a2dc881b7d48be375ecbe1320f56f1d3b41;hb=4db20203215091835dbf4aab193a620800f1f25c;hp=f01580bd591dbef56fb3f870cafe5b674d524a9e;hpb=e9eb7498c7ce5f3271d53f0fe2c6a949e2f86eff;p=grml-etc-core.git diff --git a/etc/minimal-shellrc b/etc/minimal-shellrc index f01580b..23aa9a2 100644 --- a/etc/minimal-shellrc +++ b/etc/minimal-shellrc @@ -1,7 +1,6 @@ # 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. +# Configuration for the `minimal-shell' function of grml's zsh setup. +# That function spawns a `mksh' shell with this file as its configuration. # skip this setup for non-interactive shells [[ -o interactive && -t 0 ]] || return @@ -20,54 +19,54 @@ else export PAGER='more' fi -FPATH=/usr/share/ksh/functions -HISTSIZE=500 -HISTEDIT="$EDITOR" - # some options. -set -o emacs -o trackall -o globstar +set -o bgnice \ + -o braceexpand \ + -o emacs \ + -o markdirs \ + -o monitor \ + -o nohup \ + -o trackall # 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 ls='command ls --color=auto' # we're on grml, so we do have GNU ls. +alias ll='command ls -l --color=auto' +alias la='command ls -la --color=auto' 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 - +## Keybindings +bind '^L=clear-screen' 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/,$//' | \ + # Reading some special keys from terminfo database. If `infocmp' + # cannot be found, we rely on mksh to do the right thing. + infocmp -x1L | sed '/^\t[^k]/d;/^[^\t]/d;s/\t//;s/,$//' | \ while read -r line ; do key="${line%=*}" - seq="${line#*=}" + [[ "${key}" != k* ]] && continue + seq="$(print -r -- "${line#*=}" | sed -e 's,\\\([1-7][0-7]*\),\\0\1,g')" + seq="$(print "${seq}")" 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' ) ;; + key_left) bind "${seq}"='backward-char' ;; + key_right) bind "${seq}"='forward-char' ;; + key_up) bind "${seq}"='up-history' ;; + key_down) bind "${seq}"='down-history' ;; + key_ppage) bind "${seq}"='search-history-up' ;; + key_npage) bind "${seq}"='search-history-down' ;; + key_home) bind "${seq}"='beginning-of-line' ;; + key_end) bind "${seq}"='end-of-line' ;; + key_backspace) bind "${seq}"='delete-char-backward' ;; + key_dc) bind "${seq}"='delete-char-forward' ;; 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 +function _lrv { + local rv="$?" + if [[ "${rv}" != 0 ]]; then + print -- "[${rv}]-" + fi + return 0 +} # put the current directory and history number in the prompt. # use a wrapper for 'cd' to get '~' instead of /home/foo/. function _cd { @@ -77,4 +76,16 @@ function _cd { } alias cd=_cd _cd . -PS1='(!)-$_pwd\$ ' +PS1='$(_lrv)(!)-$_pwd' +if (( USER_ID )); then + PS1="$PS1"'\$ ' +else + PS1="$PS1"'# ' +fi + +HISTSIZE=500 +HISTEDIT="$EDITOR" +# This is the default in mksh, but we make sure in case people tempered +# with it in their environment. +unset HISTFILE +true