}
#k# Toggle abbreviation expansion on/off
-zle -N grml_toggle_abbrev
bindkey '^xA' grml_toggle_abbrev
+zle -N grml_toggle_abbrev
# add a command line to the shells history without executing it
commit-to-history() {
_screen_display_wordlist[${_screen_display_wordlist[(i)$PREFIX]}]=""
compadd -a _screen_display_wordlist
}
- #k# complete word from currently visible GNU screen buffer
+ #m# k CTRL-x\,\,\,S Complete word from GNU screen buffer
bindkey -r "^xS"
compdef -k _complete_screen_display complete-word '^xS'
fi
- The attributes used with the items are customisable via strings
used before and after the actual item.
- The available items are: rc, rc-always, change-root, user, at, host, path,
- vcs, percent, sad-smiley, battery.
+ The available items are: at, battery, change-root, date, grml-chroot,
+ history, host, jobs, newline, path, percent, rc, rc-always, sad-smiley,
+ shell-level, time, user, vcs
The actual configuration is done via zsh's \`zstyle' mechanism. The
context, that is used while looking up styles is:
- items (list): The list of items used in the prompt. If \`vcs' is
present in the list, the theme's code invokes \`vcs_info'
- accordingly. Default: rc user change-root at host path vcs precent
+ accordingly. Default (left): rc change-root user at host path vcs
+ percent; Default (right): sad-smiley
Available styles in 'items:<item>' are: pre, post. These are strings that
are inserted before (pre) and after (post) the item in question. Thus, the
__EOF0__
}
+function prompt_grml-chroot_help () {
+ cat <<__EOF0__
+ prompt grml-chroot
+
+ This is a variation of the grml prompt, see: prompt -h grml
+
+ The main difference is the default value of the \`items' style. The rest
+ behaves exactly the same. Here are the defaults for \`grml-chroot':
+
+ - left: grml-chroot user at host path percent
+ - right: (empty list)
+__EOF0__
+}
+
+function prompt_grml-large_help () {
+ cat <<__EOF0__
+ prompt grml-large
+
+ This is a variation of the grml prompt, see: prompt -h grml
+
+ 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-large':
+
+ - left: rc jobs history shell-level change-root time date newline user
+ at host path vcs percent
+ - right: sad-smiley
+__EOF0__
+}
+
function grml_prompt_setup () {
emulate -L zsh
autoload -Uz vcs_info
# 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=(
- rc '%F{red}'
- rc-always ''
- change-root ''
- user '%B%F{blue}'
at ''
+ battery ' '
+ change-root ''
+ date '%F{blue}'
+ grml-chroot '%F{red}'
+ history '%F{green}'
host ''
- path '%b'
- vcs ''
+ jobs '%F{cyan}'
+ newline ''
+ path '%B'
percent ''
+ rc '%F{red}'
+ rc-always ''
sad-smiley ''
- battery ' '
- newline ''
- jobs '%F{cyan}'
- history '%F{green}'
- date '%F{blue}'
- time '%F{blue}'
shell-level '%F{red}'
- grml-chroot '%F{red}'
+ time '%F{blue}'
+ user '%B%F{blue}'
+ vcs ''
)
grml_prompt_post_default=(
- rc '%f'
- rc-always ''
- change-root ''
- user '%f%b'
at ''
+ battery ''
+ change-root ''
+ date '%f'
+ grml-chroot '%f '
+ history '%f'
host ''
- path '%B'
- vcs ''
+ jobs '%f'
+ newline ''
+ path '%b'
percent ''
+ rc '%f'
+ rc-always ''
sad-smiley ''
- battery ''
- newline ''
- jobs '%f'
- history '%f'
- date '%f'
- time '%f'
shell-level '%f'
- grml-chroot '%f '
+ time '%f'
+ user '%f%b'
+ vcs ''
)
grml_prompt_token_default=(
- rc '%(?..%? )'
- rc-always '%?'
- change-root 'debian_chroot'
- user '%n'
at '@'
+ battery 'PERCENT'
+ change-root 'debian_chroot'
+ date '%D{%Y-%m-%d}'
+ grml-chroot 'GRML_CHROOT'
+ history '{history#%!} '
host '%m '
+ jobs '[%j running job(s)] '
+ newline $'\n'
path '%40<..<%~%<< '
- vcs '0'
- percent '%% '
+ percent '%# '
+ rc '%(?..%? )'
+ rc-always '%?'
sad-smiley '%(?..:()'
- battery 'PERCENT'
- newline $'\n'
- jobs '[%j running job(s)] '
- history '{history#%!} '
- date '%D{%Y-%m-%d}'
- time '%D{%H:%M:%S} '
shell-level '%(3L.+ .)'
- grml-chroot 'GRML_CHROOT'
+ time '%D{%H:%M:%S} '
+ user '%n'
+ 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
}
fi
}
-zrcautoload add-zsh-hook || add-zsh-hook () { :; }
-if [[ $NOPRECMD -gt 0 ]]; then
- add-zsh-hook precmd grml_reset_screen_title
- add-zsh-hook precmd grml_vcs_to_screen_title
-fi
-
-# preexec() => a function running before every command
-is4 && [[ $NOPRECMD -eq 0 ]] && \
-preexec () {
- [[ $NOPRECMD -gt 0 ]] && return 0
-# set hostname if not running on host with name 'grml'
+function grml_maintain_name () {
+ # set hostname if not running on host with name 'grml'
if [[ -n "$HOSTNAME" ]] && [[ "$HOSTNAME" != $(hostname) ]] ; then
NAME="@$HOSTNAME"
fi
-# get the name of the program currently running and hostname of local machine
-# set screen window title if running in a screen
+}
+
+function grml_cmd_to_screen_title () {
+ # get the name of the program currently running and hostname of local
+ # machine set screen window title if running in a screen
if [[ "$TERM" == screen* ]] ; then
- # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # don't use hostname
- local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
+ local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME"
ESC_print ${CMD}
fi
-# adjust title of xterm
- [[ ${NOTITLE} -gt 0 ]] && return 0
+}
+
+function grml_control_xterm_title () {
case $TERM in
(xterm*|rxvt*)
set_title "${(%):-"%n@%m:"}" "$1"
esac
}
+zrcautoload add-zsh-hook || add-zsh-hook () { :; }
+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
+ add-zsh-hook preexec grml_cmd_to_screen_title
+ if [[ $NOTITLE -eq 0 ]]; then
+ add-zsh-hook preexec grml_control_xterm_title
+ fi
+fi
+
# 'hash' some often used directories
#d# start
hash -d deb=/var/cache/apt/archives
# 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."
# PAGER='less -Mr' - If so, the use of $PAGER here needs fixing
# with respect to wordsplitting. (ie. ${=PAGER})
if check_com -c $PAGER ; then
- #f1# View Debian's changelog of a given package
+ #f3# View Debian's changelog of a given package
dchange() {
emulate -L zsh
if [[ -r /usr/share/doc/$1/changelog.Debian.gz ]] ; then
_dchange() { _files -W /usr/share/doc -/ }
compdef _dchange dchange
- #f1# View Debian's NEWS of a given package
+ #f3# View Debian's NEWS of a given package
dnews() {
emulate -L zsh
if [[ -r /usr/share/doc/$1/NEWS.Debian.gz ]] ; then
_dnews() { _files -W /usr/share/doc -/ }
compdef _dnews dnews
- #f1# View Debian's copyright of a given package
+ #f3# View Debian's copyright of a given package
dcopyright() {
emulate -L zsh
if [[ -r /usr/share/doc/$1/copyright ]] ; then
_dcopyright() { _files -W /usr/share/doc -/ }
compdef _dcopyright dcopyright
- #f1# View upstream's changelog of a given package
+ #f3# View upstream's changelog of a given package
uchange() {
emulate -L zsh
if [[ -r /usr/share/doc/$1/changelog.gz ]] ; then
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() {
alias lsolddir="ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])"
# some useful aliases
-#a2# Remove current empty directory. Execute \kbd{cd ..; rmdir $OLDCWD}
+#a2# Remove current empty directory. Execute \kbd{cd ..; rmdir \$OLDCWD}
alias rmcdir='cd ..; rmdir $OLDPWD || cd $OLDPWD'
#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
}
#f5# Create directory under cursor or the selected area
-# Press ctrl-xM to create the directory under the cursor or the selected area.
-# To select an area press ctrl-@ or ctrl-space and use the cursor.
-# Use case: you type "mv abc ~/testa/testb/testc/" and remember that the
-# directory does not exist yet -> press ctrl-XM and problem solved
inplaceMkDirs() {
+ # Press ctrl-xM to create the directory under the cursor or the selected area.
+ # To select an area press ctrl-@ or ctrl-space and use the cursor.
+ # Use case: you type "mv abc ~/testa/testb/testc/" and remember that the
+ # directory does not exist yet -> press ctrl-XM and problem solved
local PATHTOMKDIR
if ((REGION_ACTIVE==1)); then
local F=$MARK T=$CURSOR
zle end-of-line
fi
}
+
#k# mkdir -p <dir> from string under cursor or marked area
zle -N inplaceMkDirs && bindkey '^xM' inplaceMkDirs