X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=0b7e07316ecd07c769a43b678ebf5d975d61a186;hb=18b7e044e9a2b6078f4a665a170f6629d5b9c9f1;hp=c01dac7fbb29b8894fe95ddc0a05b13e5e994505;hpb=d6923f34da2c51d707858e978626129c19c3b915;p=grml-etc-core.git
diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc
index c01dac7..0b7e073 100644
--- a/etc/zsh/zshrc
+++ b/etc/zsh/zshrc
@@ -180,14 +180,22 @@ else
isgrmlsmall() { return 1 }
fi
+GRML_OSTYPE=$(uname -s)
+
+islinux(){
+ [[ $GRML_OSTYPE == "Linux" ]]
+}
+
isdarwin(){
- [[ $OSTYPE == darwin* ]] && return 0
- return 1
+ [[ $GRML_OSTYPE == "Darwin" ]]
}
isfreebsd(){
- [[ $OSTYPE == freebsd* ]] && return 0
- return 1
+ [[ $GRML_OSTYPE == "FreeBSD" ]]
+}
+
+isopenbsd(){
+ [[ $GRML_OSTYPE == "OpenBSD" ]]
}
#f1# are we running within an utf environment?
@@ -339,19 +347,18 @@ NOMENU=${NOMENU:-0}
NOPRECMD=${NOPRECMD:-0}
COMMAND_NOT_FOUND=${COMMAND_NOT_FOUND:-0}
GRML_ZSH_CNF_HANDLER=${GRML_ZSH_CNF_HANDLER:-/usr/share/command-not-found/command-not-found}
-BATTERY=${BATTERY:-0}
+GRML_DISPLAY_BATTERY=${GRML_DISPLAY_BATTERY:-0}
GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0}
typeset -ga ls_options
typeset -ga grep_options
-if ls --help 2> /dev/null | grep -q GNU; then
+if ls --color=auto / >/dev/null 2>&1; then
ls_options=( --color=auto )
-elif [[ $OSTYPE == freebsd* ]]; then
+elif ls -G / >/dev/null 2>&1; then
ls_options=( -G )
fi
-if grep --help 2> /dev/null | grep -q GNU || \
- [[ $OSTYPE == freebsd* ]]; then
+if grep --color=auto -q "a" <<< "a"; then
grep_options=( --color=auto )
fi
@@ -406,6 +413,7 @@ check_com() {
salias() {
emulate -L zsh
local only=0 ; local multi=0
+ local key val
while [[ $1 == -* ]] ; do
case $1 in
(-o) only=1 ;;
@@ -495,11 +503,7 @@ xcat() {
xunfunction() {
emulate -L zsh
local -a funcs
- funcs=(salias xcat xsource xunfunction zrcautoload
- zrcautozle
- zrcbindkey
- zrcgotkeymap
- zrcgotwidget)
+ funcs=(salias xcat xsource xunfunction zrcautoload zrcautozle)
for func in $funcs ; do
[[ -n ${functions[$func]} ]] \
&& unfunction $func
@@ -524,10 +528,6 @@ for var in LANG LC_ALL LC_MESSAGES ; do
[[ -n ${(P)var} ]] && export $var
done
-xsource "/etc/sysconfig/keyboard"
-
-TZ=$(xcat /etc/timezone)
-
# set some variables
if check_com -c vim ; then
#v#
@@ -543,7 +543,12 @@ export PAGER=${PAGER:-less}
export MAIL=${MAIL:-/var/mail/$USER}
# if we don't set $SHELL then aterm, rxvt,.. will use /bin/sh or /bin/bash :-/
-export SHELL='/bin/zsh'
+if [[ -z "$SHELL" ]] ; then
+ SHELL="$(which zsh)"
+ if [[ -x "$SHELL" ]] ; then
+ export SHELL
+ fi
+fi
# color setup for ls:
check_com -c dircolors && eval $(dircolors -b)
@@ -596,7 +601,7 @@ typeset -U path cdpath fpath manpath
# Load a few modules
is4 && \
-for mod in complist deltochar mathfunc ; do
+for mod in parameter complist deltochar mathfunc ; do
zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :("
done
@@ -608,8 +613,9 @@ if is4 ; then
fi
# completion system
+COMPDUMPFILE=${COMPDUMPFILE:-${ZDOTDIR:-${HOME}}/.zcompdump}
if zrcautoload compinit ; then
- compinit || print 'Notice: no compinit available :('
+ compinit -d ${COMPDUMPFILE} || print 'Notice: no compinit available :('
else
print 'Notice: no compinit available :('
function compdef { }
@@ -776,7 +782,7 @@ grmlcomp() {
# use generic completion system for programs not yet defined; (_gnu_generic works
# with commands that provide a --help option with "standard" gnu-like output.)
- for compcom in cp deborphan df feh fetchipac head hnb ipacsum mv \
+ for compcom in cp deborphan df feh fetchipac gpasswd head hnb ipacsum mv \
pal stow tail uname ; do
[[ -z ${_comps[$compcom]} ]] && compdef _gnu_generic ${compcom}
done; unset compcom
@@ -785,11 +791,11 @@ grmlcomp() {
compdef _hosts upgrade
}
-# Keyboard setup: The following is the same code, we wrote for debian's setup.
-# It ensures the terminal is in the right mode, when zle is active, so the
-# values from $terminfo are valid. Therefore, this setup should work on all
-# systems, that have support for `terminfo'. It also requires the zsh in use to
-# have the `zsh/terminfo' module built.
+# Keyboard setup: The following is based on the same code, we wrote for
+# debian's setup. It ensures the terminal is in the right mode, when zle is
+# active, so the values from $terminfo are valid. Therefore, this setup should
+# work on all systems, that have support for `terminfo'. It also requires the
+# zsh in use to have the `zsh/terminfo' module built.
#
# If you are customising your `zle-line-init()' or `zle-line-finish()'
# functions, make sure you call the following utility functions in there:
@@ -819,21 +825,6 @@ beginning-or-end-of-somewhere() {
zle -N beginning-of-somewhere beginning-or-end-of-somewhere
zle -N end-of-somewhere beginning-or-end-of-somewhere
-## toggle the ,. abbreviation feature on/off
-# NOABBREVIATION: default abbreviation-state
-# 0 - enabled (default)
-# 1 - disabled
-NOABBREVIATION=${NOABBREVIATION:-0}
-
-grml_toggle_abbrev() {
- if (( ${NOABBREVIATION} > 0 )) ; then
- NOABBREVIATION=0
- else
- NOABBREVIATION=1
- fi
-}
-zle -N grml_toggle_abbrev
-
# add a command line to the shells history without executing it
commit-to-history() {
print -s ${(z)BUFFER}
@@ -995,11 +986,10 @@ zle -N accept-line
zle -N Accept-Line
zle -N Accept-Line-HandleContext
-# power completion - abbreviation expansion
# power completion / abbreviation expansion / buffer expansion
# see http://zshwiki.org/home/examples/zleiab for details
# less risky than the global aliases but powerful as well
-# just type the abbreviation key and afterwards ',.' to expand it
+# just type the abbreviation key and afterwards 'ctrl-x .' to expand it
declare -A abk
setopt extendedglob
setopt interactivecomments
@@ -1031,24 +1021,18 @@ zleiab() {
setopt extendedglob
local MATCH
- if (( NOABBREVIATION > 0 )) ; then
- LBUFFER="${LBUFFER},."
- return 0
- fi
-
LBUFFER=${LBUFFER%%(#m)[.\-+:|_a-zA-Z0-9]#}
LBUFFER+=${abk[$MATCH]:-$MATCH}
}
-zle -N zleiab && bindkey ",." zleiab ## KEYB!
+zle -N zleiab
help-show-abk()
{
- zle -M "$(print "Type ,. after these abbreviations to expand them:"; print -a -C 2 ${(kv)abk})"
+ zle -M "$(print "Available abbreviations for expansion:"; print -a -C 2 ${(kv)abk})"
}
-#k# Display list of abbreviations that expand when followed by ,.
-zle -N help-show-abk && bindkey '^xb' help-show-abk ## KEYB!
+zle -N help-show-abk
# press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
insert-datestamp() { LBUFFER+=${(%):-'%D{%Y-%m-%d}'}; }
@@ -1127,8 +1111,7 @@ inplaceMkDirs() {
fi
}
-#k# mkdir -p
from string under cursor or marked area
-zle -N inplaceMkDirs && bindkey '^xM' inplaceMkDirs ## KEYB!
+zle -N inplaceMkDirs
#v1# set number of lines to display per page
HELP_LINES_PER_PAGE=20
@@ -1199,10 +1182,10 @@ help_zle_parse_keybindings()
if [[ "$cline" == (#s)[[:space:]]#\#k\#[[:space:]]##(#b)(*)[[:space:]]#(#e) ]]; then
lastkeybind_desc="$match[*]"
num_lines_elapsed=0
- #zsh pattern: matches lines that set a keybinding using bindkey or compdef -k
+ #zsh pattern: matches lines that set a keybinding using bind2map, bindkey or compdef -k
# ignores lines that are commentend out
# grabs first in '' or "" enclosed string with length between 1 and 6 characters
- elif [[ "$cline" == [^#]#(bindkey|compdef -k)[[:space:]](*)(#b)(\"((?)(#c1,6))\"|\'((?)(#c1,6))\')(#B)(*) ]]; then
+ elif [[ "$cline" == [^#]#(bind2maps[[:space:]](*)-s|bindkey|compdef -k)[[:space:]](*)(#b)(\"((?)(#c1,6))\"|\'((?)(#c1,6))\')(#B)(*) ]]; then
#description prevously found ? description not more than 2 lines away ? keybinding not empty ?
if [[ -n $lastkeybind_desc && $num_lines_elapsed -lt 2 && -n $match[1] ]]; then
#substitute keybinding string with something readable
@@ -1249,8 +1232,7 @@ help-zle()
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
-zle -N help-zle && bindkey '^xz' help-zle # note: cycle pages with consecutive use of '^xz' ## KEYB!
+zle -N help-zle
## complete word from currently visible Screen or Tmux buffer.
if check_com -c screen || check_com -c tmux; then
@@ -1292,7 +1274,7 @@ function zrcautozle() {
}
function zrcgotwidget() {
- (( ${+widgets[$i]} ))
+ (( ${+widgets[$1]} ))
}
function zrcgotkeymap() {
@@ -1315,7 +1297,7 @@ zstyle ':completion:hist-complete:*' completer _history
typeset -ga grml_missing_features
function zrcbindkey() {
- if (( ARGC && ${+widgets[${argv[-1]}]} )); then
+ if (( ARGC )) && zrcgotwidget ${argv[-1]}; then
bindkey "$@"
fi
}
@@ -1330,7 +1312,12 @@ function bind2maps () {
done
shift
- sequence="${key[$1]}"
+ if [[ "$1" == "-s" ]]; then
+ shift
+ sequence="$1"
+ else
+ sequence="${key[$1]}"
+ fi
widget="$2"
[[ -z "$sequence" ]] && return 1
@@ -1342,9 +1329,11 @@ function bind2maps () {
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
function zle-smkx () {
+ emulate -L zsh
printf '%s' ${terminfo[smkx]}
}
function zle-rmkx () {
+ emulate -L zsh
printf '%s' ${terminfo[rmkx]}
}
function zle-line-init () {
@@ -1377,6 +1366,19 @@ key=(
BackTab "${terminfo[kcbt]}"
)
+# Guidelines for adding key bindings:
+#
+# - Do not add hardcoded escape sequences, to enable non standard key
+# combinations such as Ctrl-Meta-Left-Cursor. They are not easily portable.
+#
+# - Adding Ctrl characters, such as '^b' is okay; note that '^b' and '^B' are
+# the same key.
+#
+# - All keys from the $key[] mapping are obviously okay.
+#
+# - Most terminals send "ESC x" when Meta-x is pressed. Thus, sequences like
+# '\ex' are allowed in here as well.
+
bind2maps emacs -- Home beginning-of-somewhere
bind2maps viins vicmd -- Home vi-beginning-of-line
bind2maps emacs -- End end-of-somewhere
@@ -1392,92 +1394,107 @@ bind2maps viins vicmd -- Left vi-backward-char
bind2maps emacs -- Right forward-char
bind2maps viins vicmd -- Right vi-forward-char
bind2maps viins vicmd -- Right vi-forward-char
-
-if zrcgotkeymap menuselect; then
- bind2maps menuselect -- BackTab reverse-menu-complete
-
- #k# menu selection: pick item but stay in the menu
- zrcbindkey -M menuselect '\e^M' accept-and-menu-complete
- # also use + and INSERT since it's easier to press repeatedly
- zrcbindkey -M menuselect "+" accept-and-menu-complete
- zrcbindkey -M menuselect "^[[2~" accept-and-menu-complete
-
- # accept a completion and try to complete again by using menu
- # completion; very useful with completing directories
- # by using 'undo' one's got a simple file browser
- zrcbindkey -M menuselect '^o' accept-and-infer-next-history
-fi
-
+#k# Perform abbreviation expansion
+bind2maps emacs viins -- -s '^x.' zleiab
+#k# Display list of abbreviations that would expand
+bind2maps emacs viins -- -s '^xb' help-show-abk
+#k# mkdir -p from string under cursor or marked area
+bind2maps emacs viins -- -s '^xM' inplaceMkDirs
+#k# display help for keybindings and ZLE
+bind2maps emacs viins -- -s '^xz' help-zle
#k# Insert files and test globbing
-zrcbindkey "^xf" insert-files # C-x-f
-
+bind2maps emacs viins -- -s "^xf" insert-files
#k# Edit the current line in \kbd{\$EDITOR}
-zrcbindkey '\ee' edit-command-line
-
-## use Ctrl-left-arrow and Ctrl-right-arrow for jumping to word-beginnings on the CL
-zrcbindkey "\e[5C" forward-word
-zrcbindkey "\e[5D" backward-word
-zrcbindkey "\e[1;5C" forward-word
-zrcbindkey "\e[1;5D" backward-word
-## the same for alt-left-arrow and alt-right-arrow
-zrcbindkey '^[[1;3C' forward-word
-zrcbindkey '^[[1;3D' backward-word
-
+bind2maps emacs viins -- -s '\ee' edit-command-line
#k# search history backward for entry beginning with typed text
-zrcbindkey '^xp' history-beginning-search-backward-end
+bind2maps emacs viins -- -s '^xp' history-beginning-search-backward-end
#k# search history forward for entry beginning with typed text
-zrcbindkey '^xP' history-beginning-search-forward-end
+bind2maps emacs viins -- -s '^xP' history-beginning-search-forward-end
#k# search history backward for entry beginning with typed text
-zrcbindkey "\e[5~" history-beginning-search-backward-end # PageUp
+bind2maps emacs viins -- PageUp history-beginning-search-backward-end
#k# search history forward for entry beginning with typed text
-zrcbindkey "\e[6~" history-beginning-search-forward-end # PageDown
+bind2maps emacs viins -- PageDown history-beginning-search-forward-end
+bind2maps emacs viins -- -s "^x^h" commit-to-history
+#k# Kill left-side word or everything up to next slash
+bind2maps emacs viins -- -s '\ev' slash-backward-kill-word
+#k# Kill left-side word or everything up to next slash
+bind2maps emacs viins -- -s '\e^h' slash-backward-kill-word
+#k# Kill left-side word or everything up to next slash
+bind2maps emacs viins -- -s '\e^?' slash-backward-kill-word
+# Do history expansion on space:
+bind2maps emacs viins -- -s ' ' magic-space
+#k# Trigger menu-complete
+bind2maps emacs viins -- -s '\ei' menu-complete # menu completion via esc-i
+#k# Insert a timestamp on the command line (yyyy-mm-dd)
+bind2maps emacs viins -- -s '^ed' insert-datestamp
+#k# Insert last typed word
+bind2maps emacs viins -- -s "\em" insert-last-typed-word
+#k# A smart shortcut for \kbd{fg}
+bind2maps emacs viins -- -s '^z' grml-zsh-fg
+#k# prepend the current command with "sudo"
+bind2maps emacs viins -- -s "^os" sudo-command-line
+#k# jump to after first word (for adding options)
+bind2maps emacs viins -- -s '^x1' jump_after_first_word
+#k# complete word from history with menu
+bind2maps emacs viins -- -s "^x^x" hist-complete
# insert unicode character
# usage example: 'ctrl-x i' 00A7 'ctrl-x i' will give you an ยง
# See for example http://unicode.org/charts/ for unicode characters code
#k# Insert Unicode character
-zrcbindkey '^xi' insert-unicode-char
+bind2maps emacs viins -- -s '^xi' insert-unicode-char
-#m# k Shift-tab Perform backwards menu completion
-if [[ -n "$terminfo[kcbt]" ]]; then
- zrcbindkey "$terminfo[kcbt]" reverse-menu-complete
-elif [[ -n "$terminfo[cbt]" ]]; then # required for GNU screen
- zrcbindkey "$terminfo[cbt]" reverse-menu-complete
+# use the new *-pattern-* widgets for incremental history search
+if zrcgotwidget history-incremental-pattern-search-backward; then
+ for seq wid in '^r' history-incremental-pattern-search-backward \
+ '^s' history-incremental-pattern-search-forward
+ do
+ bind2maps emacs viins vicmd -- -s $seq $wid
+ done
fi
-#k# Toggle abbreviation expansion on/off
-zrcbindkey '^xA' grml_toggle_abbrev
-zrcbindkey "^x^h" commit-to-history
+if zrcgotkeymap menuselect; then
+ #m# k Shift-tab Perform backwards menu completion
+ bind2maps menuselect -- BackTab reverse-menu-complete
-#k# Kill left-side word or everything up to next slash
-zrcbindkey '\ev' slash-backward-kill-word
-#k# Kill left-side word or everything up to next slash
-zrcbindkey '\e^h' slash-backward-kill-word
-#k# Kill left-side word or everything up to next slash
-zrcbindkey '\e^?' slash-backward-kill-word
+ #k# menu selection: pick item but stay in the menu
+ bind2maps menuselect -- -s '\e^M' accept-and-menu-complete
+ # also use + and INSERT since it's easier to press repeatedly
+ bind2maps menuselect -- -s '+' accept-and-menu-complete
+ bind2maps menuselect -- Insert accept-and-menu-complete
-# use the new *-pattern-* widgets for incremental history search
-if zrcgotwidget history-incremental-pattern-search-backward; then
- zrcbindkey '^r' history-incremental-pattern-search-backward
- zrcbindkey '^s' history-incremental-pattern-search-forward
+ # accept a completion and try to complete again by using menu
+ # completion; very useful with completing directories
+ # by using 'undo' one's got a simple file browser
+ bind2maps menuselect -- -s '^o' accept-and-infer-next-history
fi
-# Do history expansion on space:
-zrcbindkey ' ' magic-space
-#k# Trigger menu-complete
-zrcbindkey '\ei' menu-complete # menu completion via esc-i
-#k# Insert a timestamp on the command line (yyyy-mm-dd)
-zrcbindkey '^ed' insert-datestamp
-#k# Insert last typed word
-zrcbindkey "\em" insert-last-typed-word
-#k# A smart shortcut for \kbd{fg}
-zrcbindkey '^z' grml-zsh-fg
-#k# prepend the current command with "sudo"
-zrcbindkey "^os" sudo-command-line
-#k# jump to after first word (for adding options)
-zrcbindkey '^x1' jump_after_first_word
-#k# complete word from history with menu
-zrcbindkey "^x^x" hist-complete
+# Finally, here are still a few hardcoded escape sequences; Special sequences
+# like Ctrl- etc do suck a fair bit, because they are not
+# standardised and most of the time are not available in a terminals terminfo
+# entry.
+#
+# While we do not encourage adding bindings like these, we will keep these for
+# backward compatibility.
+
+## use Ctrl-left-arrow and Ctrl-right-arrow for jumping to word-beginnings on
+## the command line.
+# URxvt sequences:
+bind2maps emacs viins vicmd -- -s '\eOc' forward-word
+bind2maps emacs viins vicmd -- -s '\eOd' backward-word
+# These are for xterm:
+bind2maps emacs viins vicmd -- -s '\e[1;5C' forward-word
+bind2maps emacs viins vicmd -- -s '\e[1;5D' backward-word
+## the same for alt-left-arrow and alt-right-arrow
+# URxvt again:
+bind2maps emacs viins vicmd -- -s '\e\e[C' forward-word
+bind2maps emacs viins vicmd -- -s '\e\e[D' backward-word
+# Xterm again:
+bind2maps emacs viins vicmd -- -s '^[[1;3C' forward-word
+bind2maps emacs viins vicmd -- -s '^[[1;3D' backward-word
+# Also try ESC Left/Right:
+bind2maps emacs viins vicmd -- -s '\e'${key[Right]} forward-word
+bind2maps emacs viins vicmd -- -s '\e'${key[Left]} backward-word
# autoloading
@@ -1531,6 +1548,7 @@ if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
fi
chpwd() {
+ if (( $DIRSTACKSIZE <= 0 )) || [[ -z $DIRSTACKFILE ]]; then return; fi
local -ax my_stack
my_stack=( ${PWD} ${dirstack} )
if is42 ; then
@@ -1586,7 +1604,16 @@ fi # is433
# set colors for use in prompts (modern zshs allow for the use of %F{red}foo%f
# in prompts to get a red "foo" embedded, but it's good to keep these for
# backwards compatibility).
-if zrcautoload colors && colors 2>/dev/null ; then
+if is437; then
+ BLUE="%F{blue}"
+ RED="%F{red}"
+ GREEN="%F{green}"
+ CYAN="%F{cyan}"
+ MAGENTA="%F{magenta}"
+ YELLOW="%F{yellow}"
+ WHITE="%F{white}"
+ NO_COLOR="%f"
+elif zrcautoload colors && colors 2>/dev/null ; then
BLUE="%{${fg[blue]}%}"
RED="%{${fg_bold[red]}%}"
GREEN="%{${fg[green]}%}"
@@ -1622,28 +1649,49 @@ PS4='+%N:%i:%_> '
# - debian_chroot
# - vcs_info setup and version specific fixes
-# display battery status on right side of prompt via running 'BATTERY=1 zsh'
-if [[ $BATTERY -gt 0 ]] ; then
- if ! check_com -c acpi ; then
- BATTERY=0
+# display battery status on right side of prompt using 'GRML_DISPLAY_BATTERY=1' in .zshrc.pre
+if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then
+ if ! islinux ; then
+ # not yet supported
+ GRML_DISPLAY_BATTERY=0
fi
fi
battery() {
-if [[ $BATTERY -gt 0 ]] ; then
- PERCENT="${${"$(acpi 2>/dev/null)"}/(#b)[[:space:]]#Battery <->: [^0-9]##, (<->)%*/${match[1]}}"
- if [[ -z "$PERCENT" ]] ; then
- PERCENT='acpi not present'
- else
- if [[ "$PERCENT" -lt 20 ]] ; then
- PERCENT="warning: ${PERCENT}%%"
- else
- PERCENT="${PERCENT}%%"
- fi
+if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then
+ if islinux ; then
+ batterylinux
fi
fi
}
+batterylinux(){
+GRML_BATTERY_LEVEL=''
+local batteries bat capacity
+batteries=( /sys/class/power_supply/BAT*(N) )
+if (( $#batteries > 0 )) ; then
+ for bat in $batteries ; do
+ capacity=$(< $bat/capacity)
+ case $(< $bat/status) in
+ Charging)
+ GRML_BATTERY_LEVEL+=" ^"
+ ;;
+ Discharging)
+ if (( capacity < 20 )) ; then
+ GRML_BATTERY_LEVEL+=" !v"
+ else
+ GRML_BATTERY_LEVEL+=" v"
+ fi
+ ;;
+ *) # Full, Unknown
+ GRML_BATTERY_LEVEL+=" ="
+ ;;
+ esac
+ GRML_BATTERY_LEVEL+="${capacity}%%"
+ done
+fi
+}
+
# set variable debian_chroot if running in a chroot with /etc/debian_chroot
if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then
debian_chroot=$(\n'
+ return 1
+ fi
+ (( ${+grml_prompt_token_default[$1]} ))
+}
+
function GRML_theme_add_token_usage () {
cat <<__EOF__
Usage: grml_theme_add_token [-f|-i] [ ]
@@ -1897,6 +1993,11 @@ function GRML_theme_add_token_usage () {
return value is expected in the \$REPLY parameter. The use of these
options is mutually exclusive.
+ There is a utility function \`grml_theme_has_token', which you can use
+ to test if a token exists before trying to add it. This can be a guard
+ for situations in which a \`grml_theme_add_token' call may happen more
+ than once.
+
Example:
To add a new token \`day' that expands to the current weekday in the
@@ -1960,7 +2061,7 @@ grml_theme_add_token: and need to by specified _both_!\n\n'
shift 2
fi
- if (( ${+grml_prompt_token_default[$name]} )); then
+ if grml_theme_has_token $name; then
printf '
grml_theme_add_token: Token `%s'\'' exists! Giving up!\n\n' $name
GRML_theme_add_token_usage
@@ -2005,7 +2106,7 @@ function grml_prompt_addto () {
for it in "${items[@]}"; do
zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" pre apre \
|| apre=${grml_prompt_pre_default[$it]}
- zstyle -s ":prompt:grml:${grmltheme}:${lr}:$it" post apost \
+ zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" post apost \
|| apost=${grml_prompt_post_default[$it]}
zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" token new \
|| new=${grml_prompt_token_default[$it]}
@@ -2115,7 +2216,7 @@ 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
+ if [[ $GRML_DISPLAY_BATTERY -gt 0 ]]; then
zstyle ':prompt:grml:right:setup' items sad-smiley battery
add-zsh-hook precmd battery
fi
@@ -2129,7 +2230,7 @@ if is437; then
unset i
zstyle ':prompt:grml(|-large|-chroot):right:setup' use-rprompt false
elif (( EUID == 0 )); then
- zstyle ':prompt:grml(|-large|-chroot):*:items:user' pre '%F{red}'
+ zstyle ':prompt:grml(|-large|-chroot):*:items:user' pre '%B%F{red}'
fi
# Finally enable one of the prompts.
@@ -2253,8 +2354,8 @@ fi
# do we have GNU ls with color-support?
if [[ "$TERM" != dumb ]]; then
- #a1# List files with colors (\kbd{ls -b -CF \ldots})
- alias ls='ls -b -CF '${ls_options:+"${ls_options[*]}"}
+ #a1# List files with colors (\kbd{ls -F \ldots})
+ alias ls='ls -F '${ls_options:+"${ls_options[*]}"}
#a1# List all files, with colors (\kbd{ls -la \ldots})
alias la='ls -la '${ls_options:+"${ls_options[*]}"}
#a1# List files with long colored list, without dotfiles (\kbd{ls -l \ldots})
@@ -2264,7 +2365,7 @@ if [[ "$TERM" != dumb ]]; then
#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'
+ alias ls='ls -F'
alias la='ls -la'
alias ll='ls -l'
alias lh='ls -hAl'
@@ -2358,7 +2459,8 @@ the zsh yet. :)
"NOPRECMD=1 zsh" => disable the precmd + preexec commands (set GNU screen title)
"NOTITLE=1 zsh" => disable setting the title of xterms without disabling
preexec() and precmd() completely
- "BATTERY=1 zsh" => activate battery status (via acpi) on right side of prompt
+ "GRML_DISPLAY_BATTERY=1 zsh"
+ => activate battery status on right side of prompt (WIP)
"COMMAND_NOT_FOUND=1 zsh"
=> Enable a handler if an external command was not found
The command called in the handler can be altered by setting
@@ -2492,6 +2594,7 @@ compdef _functions freload
#f1# List symlinks in detail (more detailed version of 'readlink -f' and 'whence -s')
sll() {
[[ -z "$1" ]] && printf 'Usage: %s \n' "$0" && return 1
+ local file
for file in "$@" ; do
while [[ -h "$file" ]] ; do
ls -l $file
@@ -2504,26 +2607,31 @@ sll() {
# PAGER='less -Mr' - If so, the use of $PAGER here needs fixing
# with respect to wordsplitting. (ie. ${=PAGER})
if check_com -c $PAGER ; then
- #f3# View Debian's changelog of a given package
+ #f3# View Debian's changelog of given package(s)
dchange() {
emulate -L zsh
- if [[ -r /usr/share/doc/$1/changelog.Debian.gz ]] ; then
- $PAGER /usr/share/doc/$1/changelog.Debian.gz
- elif [[ -r /usr/share/doc/$1/changelog.gz ]] ; then
- $PAGER /usr/share/doc/$1/changelog.gz
- else
- if check_com -c aptitude ; then
- echo "No changelog for package $1 found, using aptitude to retrieve it."
- if isgrml ; then
- aptitude -t unstable changelog $1
+ [[ -z "$1" ]] && printf 'Usage: %s \n' "$0" && return 1
+
+ local package
+ for package in "$@" ; do
+ if [[ -r /usr/share/doc/${package}/changelog.Debian.gz ]] ; then
+ $PAGER /usr/share/doc/${package}/changelog.Debian.gz
+ elif [[ -r /usr/share/doc/${package}/changelog.gz ]] ; then
+ $PAGER /usr/share/doc/${package}/changelog.gz
+ elif [[ -r /usr/share/doc/${package}/changelog ]] ; then
+ $PAGER /usr/share/doc/${package}/changelog
+ else
+ if check_com -c aptitude ; then
+ echo "No changelog for package $package found, using aptitude to retrieve it."
+ aptitude changelog "$package"
+ elif check_com -c apt-get ; then
+ echo "No changelog for package $package found, using apt-get to retrieve it."
+ apt-get changelog "$package"
else
- aptitude changelog $1
+ echo "No changelog for package $package found, sorry."
fi
- else
- echo "No changelog for package $1 found, sorry."
- return 1
fi
- fi
+ done
}
_dchange() { _files -W /usr/share/doc -/ }
compdef _dchange dchange
@@ -2709,11 +2817,6 @@ if check_com vim; then
}
fi
-# make a backup of a file
-bk() {
- cp -a "$1" "${1}_$(date --iso-8601=seconds)"
-}
-
ssl_hashes=( sha512 sha256 sha1 md5 )
for sh in ${ssl_hashes}; do
@@ -2901,8 +3004,13 @@ modified() {
check_com new || alias new=modified
# use colors when GNU grep with color-support
-#a2# Execute \kbd{grep -{}-color=auto}
-(( $#grep_options > 0 )) && alias grep='grep '${grep_options:+"${grep_options[*]}"}
+if (( $#grep_options > 0 )); then
+ o=${grep_options:+"${grep_options[*]}"}
+ #a2# Execute \kbd{grep -{}-color=auto}
+ alias grep='grep '$o
+ alias egrep='egrep '$o
+ unset o
+fi
# Translate DE<=>EN
# 'translate' looks up fot a word in a file with language-to-language