X-Git-Url: http://git.grml.org/?p=grml-etc-core.git;a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=cf4dd50ce3b9c7599256143bce93e917fc75ba42;hp=9ce49ca6cb6f7b9c42561d0456f5a166d8c10003;hb=4c996b32b6e6c664b1bf07fd1ff508da4db8e2e0;hpb=e8f18fbb19cc077695c7a3308654830702fb316a diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 9ce49ca..cf4dd50 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,7 +347,7 @@ 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:-${BATTERY:-0}} GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1} ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0} @@ -350,8 +358,7 @@ if ls --color=auto / >/dev/null 2>&1; 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" >/dev/null 2>&1; then grep_options=( --color=auto ) fi @@ -1386,7 +1393,6 @@ bind2maps emacs -- Left backward-char 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 #k# Perform abbreviation expansion bind2maps emacs viins -- -s '^x.' zleiab #k# Display list of abbreviations that would expand @@ -1432,7 +1438,7 @@ bind2maps emacs viins -- -s '^x1' jump_after_first_word bind2maps emacs viins -- -s "^x^x" hist-complete # insert unicode character -# usage example: 'ctrl-x i' 00A7 'ctrl-x i' will give you an § +# 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 bind2maps emacs viins -- -s '^xi' insert-unicode-char @@ -1642,28 +1648,132 @@ 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 - fi -fi +# display battery status on right side of prompt using 'GRML_DISPLAY_BATTERY=1' in .zshrc.pre 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' +if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then + if islinux ; then + batterylinux + elif isopenbsd ; then + batteryopenbsd + elif isfreebsd ; then + batteryfreebsd + elif isdarwin ; then + batterydarwin else - if [[ "$PERCENT" -lt 20 ]] ; then - PERCENT="warning: ${PERCENT}%%" - else - PERCENT="${PERCENT}%%" - fi + #not yet supported + GRML_DISPLAY_BATTERY=0 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 +} + +batteryopenbsd(){ +GRML_BATTERY_LEVEL='' +local bat batfull batwarn batnow num +for num in 0 1 ; do + bat=$(sysctl -n hw.sensors.acpibat${num} 2>/dev/null) + if [[ -n $bat ]]; then + batfull=${"$(sysctl -n hw.sensors.acpibat${num}.amphour0)"%% *} + batwarn=${"$(sysctl -n hw.sensors.acpibat${num}.amphour1)"%% *} + batnow=${"$(sysctl -n hw.sensors.acpibat${num}.amphour3)"%% *} + case "$(sysctl -n hw.sensors.acpibat${num}.raw0)" in + *" discharging"*) + if (( batnow < batwarn )) ; then + GRML_BATTERY_LEVEL+=" !v" + else + GRML_BATTERY_LEVEL+=" v" + fi + ;; + *" charging"*) + GRML_BATTERY_LEVEL+=" ^" + ;; + *) + GRML_BATTERY_LEVEL+=" =" + ;; + esac + GRML_BATTERY_LEVEL+="${$(( 100 * batnow / batfull ))%%.*}%%" + fi +done +} + +batteryfreebsd(){ +GRML_BATTERY_LEVEL='' +local num +local -A table +for num in 0 1 ; do + table=( ${=${${${${${(M)${(f)"$(acpiconf -i $num 2>&1)"}:#(State|Remaining capacity):*}%%( ##|%)}//:[ $'\t']##/@}// /-}//@/ }} ) + if [[ -n $table ]] && [[ $table[State] != "not-present" ]] ; then + case $table[State] in + *discharging*) + if (( $table[Remaining-capacity] < 20 )) ; then + GRML_BATTERY_LEVEL+=" !v" + else + GRML_BATTERY_LEVEL+=" v" + fi + ;; + *charging*) + GRML_BATTERY_LEVEL+=" ^" + ;; + *) + GRML_BATTERY_LEVEL+=" =" + ;; + esac + GRML_BATTERY_LEVEL+="$table[Remaining-capacity]%%" + fi +done +} + +batterydarwin(){ +GRML_BATTERY_LEVEL='' +local -a table +table=( ${$(pmset -g ps)[(w)7,8]%%(\%|);} ) +if [[ -n $table[2] ]] ; then + case $table[2] in + charging) + GRML_BATTERY_LEVEL+=" ^" + ;; + discharging) + if (( $table[1] < 20 )) ; then + GRML_BATTERY_LEVEL+=" !v" + else + GRML_BATTERY_LEVEL+=" v" + fi + ;; + *) + GRML_BATTERY_LEVEL+=" =" + ;; + esac + GRML_BATTERY_LEVEL+="$table[1]%%" +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=$( 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 @@ -2845,40 +2954,38 @@ export COLORTERM="yes" # general #a2# Execute \kbd{du -sch} alias da='du -sch' -#a2# Execute \kbd{jobs -l} -alias j='jobs -l' # listing stuff #a2# Execute \kbd{ls -lSrah} -alias dir="ls -lSrah" +alias dir="command ls -lSrah" #a2# Only show dot-directories -alias lad='ls -d .*(/)' +alias lad='command ls -d .*(/)' #a2# Only show dot-files -alias lsa='ls -a .*(.)' +alias lsa='command ls -a .*(.)' #a2# Only files with setgid/setuid/sticky flag -alias lss='ls -l *(s,S,t)' +alias lss='command ls -l *(s,S,t)' #a2# Only show symlinks -alias lsl='ls -l *(@)' +alias lsl='command ls -l *(@)' #a2# Display only executables -alias lsx='ls -l *(*)' +alias lsx='command ls -l *(*)' #a2# Display world-{readable,writable,executable} files -alias lsw='ls -ld *(R,W,X.^ND/)' +alias lsw='command ls -ld *(R,W,X.^ND/)' #a2# Display the ten biggest files -alias lsbig="ls -flh *(.OL[1,10])" +alias lsbig="command ls -flh *(.OL[1,10])" #a2# Only show directories -alias lsd='ls -d *(/)' +alias lsd='command ls -d *(/)' #a2# Only show empty directories -alias lse='ls -d *(/^F)' +alias lse='command ls -d *(/^F)' #a2# Display the ten newest files -alias lsnew="ls -rtlh *(D.om[1,10])" +alias lsnew="command ls -rtlh *(D.om[1,10])" #a2# Display the ten oldest files -alias lsold="ls -rtlh *(D.Om[1,10])" +alias lsold="command ls -rtlh *(D.Om[1,10])" #a2# Display the ten smallest files -alias lssmall="ls -Srl *(.oL[1,10])" +alias lssmall="command ls -Srl *(.oL[1,10])" #a2# Display the ten newest directories and ten newest .directories -alias lsnewdir="ls -rthdl *(/om[1,10]) .*(D/om[1,10])" +alias lsnewdir="command ls -rthdl *(/om[1,10]) .*(D/om[1,10])" #a2# Display the ten oldest directories and ten oldest .directories -alias lsolddir="ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])" +alias lsolddir="command ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])" # some useful aliases #a2# Remove current empty directory. Execute \kbd{cd ..; rmdir \$OLDCWD} @@ -2909,10 +3016,24 @@ fi # useful functions -#f5# Backup \kbd{file {\rm to} file\_timestamp} +#f5# Backup \kbd{file_or_folder {\rm to} file_or_folder\_timestamp} bk() { emulate -L zsh - cp -b $1 $1_`date --iso-8601=m` + local current_date=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + while (( $# > 0 )); do + if islinux; then + cp -a "$1" "$1_$current_date" + elif isfreebsd; then + if [[ -d "$1" ]] && [[ "$1" == */ ]]; then + echo "cowardly refusing to copy $1 's content; see cp(1)" >&2; return 1 + else + cp -a "$1" "$1_$current_date" + fi + else; + cp -pR "$1" "$1_$current_date" + fi + shift + done } #f5# cd to directoy and list files