return 1
}
+is437(){
+ [[ $ZSH_VERSION == 4.3.<7->* || $ZSH_VERSION == 4.<4->* \
+ || $ZSH_VERSION == <5->* ]] && return 0
+ return 1
+}
+
is439(){
[[ $ZSH_VERSION == 4.3.<9->* || $ZSH_VERSION == 4.<4->* \
|| $ZSH_VERSION == <5->* ]] && return 0
}
#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() {
zrcautoload $rh
done; unset rh
+# command not found handling
+
+(( ${COMMAND_NOT_FOUND} == 1 )) &&
+function command_not_found_handler() {
+ emulate -L zsh
+ if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then
+ ${GRML_ZSH_CNF_HANDLER} $1
+ fi
+ return 1
+}
+
# completion system
if zrcautoload compinit ; then
compinit || print 'Notice: no compinit available :('
_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
# - battery status
# - debian_chroot
# - vcs_info setup and version specific fixes
-# - command-not-found handling
-# (TODO: This has nothing to do with prompts: move!)
# display battery status on right side of prompt via running 'BATTERY=1 zsh'
if [[ $BATTERY -gt 0 ]] ; then
# set variable debian_chroot if running in a chroot with /etc/debian_chroot
if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then
- debian_chroot=$(cat /etc/debian_chroot)
+ debian_chroot=$(</etc/debian_chroot)
fi
# gather version control information for inclusion in a prompt
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r"
fi
-# command not found handling
-
-(( ${COMMAND_NOT_FOUND} == 1 )) &&
-function command_not_found_handler() {
- emulate -L zsh
- if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then
- ${GRML_ZSH_CNF_HANDLER} $1
- fi
- return 1
-}
-
# Now for the fun part: The grml prompt themes in `promptsys' mode of operation
# This actually defines three prompts:
- 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-chroot':
+
+ - 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
grml_prompt_token_default
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_typeset_and_wrap () {
fi
}
+grml_prompt_fallback() {
+ setopt prompt_subst
+ precmd() {
+ (( ${+functions[vcs_info]} )) && vcs_info
+ }
+
+ p0="${RED}%(?..%? )${WHITE}${debian_chroot:+($debian_chroot)}"
+ p1="${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< "'${vcs_info_msg_0_}'"%# "
+ if (( EUID == 0 )); then
+ PROMPT="${BLUE}${p0}${RED}${p1}"
+ else
+ PROMPT="${RED}${p0}${BLUE}${p1}"
+ fi
+ unset p0 p1
+}
+
if zrcautoload promptinit && promptinit 2>/dev/null ; then
# Since we define the required functions in here and not in files in
# $fpath, we need to stick the theme's name into `$prompt_themes'
prompt_themes+=( grml grml-chroot grml-large )
# Also, keep the array sorted...
prompt_themes=( "${(@on)prompt_themes}" )
+else
+ print 'Notice: no promptinit available :('
+ grml_prompt_fallback
+fi
+if is437; then
+ # The prompt themes use modern features of zsh, that require at least
+ # version 4.3.7 of the shell. Use the fallback otherwise.
if [[ $BATTERY -gt 0 ]]; then
zstyle ':prompt:grml:right:setup' items sad-smiley battery
add-zsh-hook precmd battery
prompt grml
fi
else
- print 'Notice: no promptinit available :('
-
- # Support a fallback, in case promptsys isn't available.
- setopt prompt_subst
-
- precmd() { (( ${+functions[vcs_info]} )) && vcs_info; }
-
- p0="${RED}%(?..%? )${WHITE}${debian_chroot:+($debian_chroot)}"
- p1="${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< "'${vcs_info_msg_0_}'"%# "
- if (( EUID == 0 )); then
- PROMPT="${BLUE}${p0}${RED}${p1}"
- else
- PROMPT="${RED}${p0}${BLUE}${p1}"
- fi
- unset p0 p1
+ grml_prompt_fallback
fi
-# make sure to use right prompt only when not running a command
-is41 && setopt transient_rprompt
-
+# Terminal-title wizardry
function ESC_print () {
info_print $'\ek' $'\e\\' "$@"
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 -gt 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
# 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
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
}
#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