The main difference is the default value of the \`items' style. In
particular, this theme uses _two_ lines instead of one with the plain
\`grml' theme. The rest behaves exactly the same. Here are the defaults
- for \`grml-chroot':
+ for \`grml-large':
- left: rc jobs history shell-level change-root time date newline user
at host path vcs percent
# matter by using zsh's `zstyle' mechanism.
typeset -gA grml_prompt_pre_default \
grml_prompt_post_default \
- grml_prompt_token_default
+ grml_prompt_token_default \
+ grml_prompt_token_function
grml_prompt_pre_default=(
at ''
jobs '[%j running job(s)] '
newline $'\n'
path '%40<..<%~%<< '
- percent '% # '
+ percent '%# '
rc '%(?..%? )'
rc-always '%?'
sad-smiley '%(?..:()'
vcs '0'
)
+function GRML_theme_add_token_usage () {
+ cat <<__EOF__
+ Usage: grml_theme_add_token <name> [-f|-i] <token/function> [<pre> <post>]
+
+ <name> is the name for the newly added token. If the \`-f' or \`-i' options
+ are used, <token/function> is the name of the function (see below for
+ details). Otherwise it is the literal token string to be used. <pre> and
+ <post> are optional.
+
+ Options:
+
+ -f <function> Use a function named \`<function>' each time the token
+ is to be expanded.
+
+ -i <function> Use a function named \`<function>' to initialise the
+ value of the token _once_ at runtime.
+
+ The functions are called with one argument: the token's new name. The
+ return value is expected in the \$REPLY parameter. The use of these
+ options is mutually exclusive.
+
+ Example:
+
+ To add a new token \`day' that expands to the current weekday in the
+ current locale in green foreground colour, use this:
+
+ grml_theme_add_token day '%D{%A}' '%F{green}' '%f'
+
+ Another example would be support for \$VIRTUAL_ENV:
+
+ function virtual_env_prompt () {
+ REPLY=\${VIRTUAL_ENV+\${VIRTUAL_ENV:t} }
+ }
+ grml_theme_add_token virtual-env -f virtual_env_prompt
+
+ After that, you will be able to use a changed \`items' style to
+ assemble your prompt.
+__EOF__
+}
+
+function grml_theme_add_token () {
+ emulate -L zsh
+ local name token pre post
+ local -i init funcall
+
+ if (( ARGC == 0 )); then
+ GRML_theme_add_token_usage
+ return 0
+ fi
+
+ init=0
+ funcall=0
+ pre=''
+ post=''
+ name=$1
+ shift
+ if [[ $1 == '-f' ]]; then
+ funcall=1
+ shift
+ elif [[ $1 == '-i' ]]; then
+ init=1
+ shift
+ fi
+
+ if (( ARGC == 0 )); then
+ printf '
+grml_theme_add_token: No token-string/function-name provided!\n\n'
+ GRML_theme_add_token_usage
+ return 1
+ fi
+ token=$1
+ shift
+ if (( ARGC != 0 && ARGC != 2 )); then
+ printf '
+grml_theme_add_token: <pre> and <post> need to by specified _both_!\n\n'
+ GRML_theme_add_token_usage
+ return 1
+ fi
+ if (( ARGC )); then
+ pre=$1
+ post=$2
+ shift 2
+ fi
+
+ if (( ${+grml_prompt_token_default[$name]} )); then
+ printf '
+grml_theme_add_token: Token `%s'\'' exists! Giving up!\n\n' $name
+ GRML_theme_add_token_usage
+ return 2
+ fi
+ if (( init )); then
+ $token $name
+ token=$REPLY
+ fi
+ grml_prompt_pre_default[$name]=$pre
+ grml_prompt_post_default[$name]=$post
+ if (( funcall )); then
+ grml_prompt_token_function[$name]=$token
+ grml_prompt_token_default[$name]=23
+ else
+ grml_prompt_token_default[$name]=$token
+ fi
+}
+
function grml_typeset_and_wrap () {
emulate -L zsh
local target="$1"
zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" token new \
|| new=${grml_prompt_token_default[$it]}
typeset -g "${target}=${(P)target}${apre}"
- case $it in
+ if (( ${+grml_prompt_token_function[$it]} )); then
+ ${grml_prompt_token_function[$it]} $it
+ typeset -g "${target}=${(P)target}${REPLY}"
+ else
+ case $it in
battery)
grml_typeset_and_wrap $target $new '' ''
;;
fi
;;
*) typeset -g "${target}=${(P)target}${new}" ;;
- esac
+ esac
+ fi
typeset -g "${target}=${(P)target}${apost}"
done
}
}
zrcautoload add-zsh-hook || add-zsh-hook () { :; }
-if [[ $NOPRECMD -gt 0 ]]; then
+if [[ $NOPRECMD -eq 0 ]]; then
add-zsh-hook precmd grml_reset_screen_title
add-zsh-hook precmd grml_vcs_to_screen_title
add-zsh-hook preexec grml_maintain_name
# do we have GNU ls with color-support?
if [[ "$TERM" != dumb ]]; then
- #a1# execute \kbd{@a@}:\quad ls with colors
+ #a1# List files with colors (\kbd{ls -b -CF \ldots})
alias ls='ls -b -CF '${ls_options:+"${ls_options[*]}"}
- #a1# execute \kbd{@a@}:\quad list all files, with colors
+ #a1# List all files, with colors (\kbd{ls -la \ldots})
alias la='ls -la '${ls_options:+"${ls_options[*]}"}
- #a1# long colored list, without dotfiles (@a@)
+ #a1# List files with long colored list, without dotfiles (\kbd{ls -l \ldots})
alias ll='ls -l '${ls_options:+"${ls_options[*]}"}
- #a1# long colored list, human readable sizes (@a@)
+ #a1# List files with long colored list, human readable sizes (\kbd{ls -hAl \ldots})
alias lh='ls -hAl '${ls_options:+"${ls_options[*]}"}
- #a1# List files, append qualifier to filenames \\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...)
+ #a1# List files with long colored list, append qualifier to filenames (\kbd{ls -lF \ldots})\\&\quad(\kbd{/} for directories, \kbd{@} for symlinks ...)
alias l='ls -lF '${ls_options:+"${ls_options[*]}"}
else
alias ls='ls -b -CF'
#a1# Output version of running grml
alias grml-version='cat /etc/grml_version'
- if check_com -c rebuildfstab ; then
- #a1# Rebuild /etc/fstab
- alias grml-rebuildfstab='rebuildfstab -v -r -config'
- fi
-
if check_com -c grml-debootstrap ; then
debian2hd() {
echo "Installing debian to harddisk is possible by using grml-debootstrap."
HELP_LINES_PER_PAGE=20
#v1# set location of help-zle cache file
HELP_ZLE_CACHE_FILE=~/.cache/zsh_help_zle_lines.zsh
-#f1# helper function for help-zle, actually generates the help text
+# helper function for help-zle, actually generates the help text
help_zle_parse_keybindings()
{
emulate -L zsh
typeset -g help_zle_sln
typeset -g -a help_zle_lines
-#f1# Provides (partially autogenerated) help on keybindings and the zsh line editor
+# Provides (partially autogenerated) help on keybindings and the zsh line editor
help-zle()
{
emulate -L zsh
help_zle_sln=$((help_zle_sln + HELP_LINES_PER_PAGE))
zle -M "${(F)help_zle_lines[sln,help_zle_sln-1]}"
}
-#k# display help for keybindings and ZLE (cycle pages with consecutive use)
-zle -N help-zle && bindkey '^xz' help-zle
+#k# display help for keybindings and ZLE
+zle -N help-zle && bindkey '^xz' help-zle # note: cycle pages with consecutive use of '^xz'
# grep for running process, like: 'any vim'
any() {
#a2# ssh with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset
alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
+#a2# scp with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset
alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
# work around non utf8 capable software in utf environment via $LANG and luit