X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=4d9b9ad6fb162bd8423401bae6c51ff4425eb441;hb=38a1b613f10a162812ce91075bdf3ec102126dc1;hp=84d37a997bbc5fbb3e3ecbd534d2a84761ad1572;hpb=9dbdd757856760d471d3ebc6aca10ef681dd319c;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 84d37a9..4d9b9ad 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -113,97 +113,97 @@ fi # check for version/system # check for versions (compatibility reasons) -is4(){ +function is4 () { [[ $ZSH_VERSION == <4->* ]] && return 0 return 1 } -is41(){ +function is41 () { [[ $ZSH_VERSION == 4.<1->* || $ZSH_VERSION == <5->* ]] && return 0 return 1 } -is42(){ +function is42 () { [[ $ZSH_VERSION == 4.<2->* || $ZSH_VERSION == <5->* ]] && return 0 return 1 } -is425(){ +function is425 () { [[ $ZSH_VERSION == 4.2.<5->* || $ZSH_VERSION == 4.<3->* || $ZSH_VERSION == <5->* ]] && return 0 return 1 } -is43(){ +function is43 () { [[ $ZSH_VERSION == 4.<3->* || $ZSH_VERSION == <5->* ]] && return 0 return 1 } -is433(){ +function is433 () { [[ $ZSH_VERSION == 4.3.<3->* || $ZSH_VERSION == 4.<4->* \ || $ZSH_VERSION == <5->* ]] && return 0 return 1 } -is437(){ +function is437 () { [[ $ZSH_VERSION == 4.3.<7->* || $ZSH_VERSION == 4.<4->* \ || $ZSH_VERSION == <5->* ]] && return 0 return 1 } -is439(){ +function is439 () { [[ $ZSH_VERSION == 4.3.<9->* || $ZSH_VERSION == 4.<4->* \ || $ZSH_VERSION == <5->* ]] && return 0 return 1 } #f1# Checks whether or not you're running grml -isgrml(){ +function isgrml () { [[ -f /etc/grml_version ]] && return 0 return 1 } #f1# Checks whether or not you're running a grml cd -isgrmlcd(){ +function isgrmlcd () { [[ -f /etc/grml_cd ]] && return 0 return 1 } if isgrml ; then #f1# Checks whether or not you're running grml-small - isgrmlsmall() { + function isgrmlsmall () { if [[ ${${${(f)"$( autologin # Thanks go to Bart Schaefer! -isgrml && checkhome() { +isgrml && function checkhome () { if [[ -z "$ALREADY_DID_CD_HOME" ]] ; then export ALREADY_DID_CD_HOME=$HOME cd @@ -247,13 +247,13 @@ if ! [[ ${ZSH_VERSION} == 3.1.<7->* \ printf '-!- Ye been warned!\n' printf '-!-\n' - function zstyle() { : } + function zstyle () { : } fi # autoload wrapper - use this one instead of autoload directly # We need to define this function as early as this, because autoloading # 'is-at-least()' needs it. -function zrcautoload() { +function zrcautoload () { emulate -L zsh setopt extended_glob local fdir ffile @@ -281,7 +281,7 @@ function zrcautoload() { # with just a few adjustments in coding style to make the function look more # compact. This definition can be removed as soon as we raise the minimum # version requirement to 4.3.7 or newer. -function add-zsh-hook() { +function add-zsh-hook () { # Add to HOOK the given FUNCTION. # HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, # zshexit, zsh_directory_name (the _functions subscript is not required). @@ -354,7 +354,7 @@ function add-zsh-hook() { # Load is-at-least() for more precise version checks Note that this test will # *always* fail, if the is-at-least function could not be marked for # autoloading. -zrcautoload is-at-least || is-at-least() { return 1 } +zrcautoload is-at-least || function is-at-least () { return 1 } # set some important options (as early as possible) @@ -447,7 +447,7 @@ fi # Usage: check_com [-c|-g] word # -c only checks for external commands # -g does the usual tests and also checks for global aliases -check_com() { +function check_com () { emulate -L zsh local -i comonly gatoo comonly=0 @@ -487,7 +487,7 @@ check_com() { # creates an alias and precedes the command with # sudo if $EUID is not zero. -salias() { +function salias () { emulate -L zsh local only=0 ; local multi=0 local key val @@ -525,7 +525,7 @@ salias() { } # Check if we can read given files and source those we can. -xsource() { +function xsource () { if (( ${#argv} < 1 )) ; then printf 'usage: xsource FILE(s)...\n' >&2 return 1 @@ -539,7 +539,7 @@ xsource() { } # Check if we can read a given file and 'cat(1)' it. -xcat() { +function xcat () { emulate -L zsh if (( ${#argv} != 1 )) ; then printf 'usage: xcat FILE\n' >&2 @@ -552,7 +552,7 @@ xcat() { # Remove these functions again, they are of use only in these # setup files. This should be called at the end of .zshrc. -xunfunction() { +function xunfunction () { emulate -L zsh local -a funcs local func @@ -566,7 +566,7 @@ xunfunction() { # this allows us to stay in sync with grml's zshrc and put own # modifications in ~/.zshrc.local -zrclocal() { +function zrclocal () { xsource "/etc/zsh/zshrc.local" xsource "${ZDOTDIR:-${HOME}}/.zshrc.local" return 0 @@ -615,13 +615,11 @@ isdarwin && xsource /sw/bin/init.sh # load our function and completion directories for fdir in /usr/share/grml/zsh/completion /usr/share/grml/zsh/functions; do fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} ) - if [[ ${fdir} == '/usr/share/grml/zsh/functions' ]] ; then - for func in ${fdir}/**/[^_]*[^~](N.) ; do - zrcautoload ${func:t} - done - fi done -unset fdir func +typeset -aU ffiles +ffiles=(/usr/share/grml/zsh/functions/**/[^_]*[^~](N.:t)) +(( ${#ffiles} > 0 )) && autoload -U "${ffiles[@]}" +unset -v fdir ffiles # support colors in less export LESS_TERMCAP_mb=$'\E[01;31m' @@ -643,7 +641,7 @@ REPORTTIME=5 watch=(notme root) # automatically remove duplicates from these arrays -typeset -U path cdpath fpath manpath +typeset -U path PATH cdpath CDPATH fpath FPATH manpath MANPATH # Load a few modules is4 && \ @@ -672,7 +670,7 @@ fi # called later (via is4 && grmlcomp) # note: use 'zstyle' for getting current settings # press ^xh (control-x h) for getting tags in context; ^x? (control-x ?) to run complete_debug with trace output -grmlcomp() { +function grmlcomp () { # TODO: This could use some additional information # Make sure the completion system is initialised @@ -775,7 +773,7 @@ grmlcomp() { zstyle ':completion:*' special-dirs .. # run rehash on completion so new installed program are found automatically: - _force_rehash() { + function _force_rehash () { (( CURRENT == 1 )) && rehash return 1 } @@ -866,7 +864,7 @@ bindkey -e ## beginning-of-line OR beginning-of-buffer OR beginning of history ## by: Bart Schaefer , Bernhard Tittelbach -beginning-or-end-of-somewhere() { +function beginning-or-end-of-somewhere () { local hno=$HISTNO if [[ ( "${LBUFFER[-1]}" == $'\n' && "${WIDGET}" == beginning-of* ) || \ ( "${RBUFFER[1]}" == $'\n' && "${WIDGET}" == end-of* ) ]]; then @@ -882,14 +880,14 @@ zle -N beginning-of-somewhere beginning-or-end-of-somewhere zle -N end-of-somewhere beginning-or-end-of-somewhere # add a command line to the shells history without executing it -commit-to-history() { +function commit-to-history () { print -s ${(z)BUFFER} zle send-break } zle -N commit-to-history # only slash should be considered as a word separator: -slash-backward-kill-word() { +function slash-backward-kill-word () { local WORDCHARS="${WORDCHARS:s@/@}" # zle backward-word zle backward-kill-word @@ -915,7 +913,7 @@ zle -N slash-backward-kill-word # find the first word on the command line in the $command[] hash. zstyle ':acceptline:*' rehash true -function Accept-Line() { +function Accept-Line () { setopt localoptions noksharrays local -a subs local -xi aldone @@ -935,7 +933,7 @@ function Accept-Line() { done } -function Accept-Line-getdefault() { +function Accept-Line-getdefault () { emulate -L zsh local default_action @@ -950,7 +948,7 @@ function Accept-Line-getdefault() { esac } -function Accept-Line-HandleContext() { +function Accept-Line-HandleContext () { zle Accept-Line default_action=$(Accept-Line-getdefault) @@ -958,7 +956,7 @@ function Accept-Line-HandleContext() { && zle ${default_action} } -function accept-line() { +function accept-line () { setopt localoptions noksharrays local -a cmdline local -x alcontext @@ -1072,7 +1070,7 @@ abk=( 'co' './configure && make && sudo make install' ) -zleiab() { +function zleiab () { emulate -L zsh setopt extendedglob local MATCH @@ -1083,22 +1081,21 @@ zleiab() { zle -N zleiab -help-show-abk() -{ +function help-show-abk () { zle -M "$(print "Available abbreviations for expansion:"; print -a -C 2 ${(kv)abk})" } 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}'}; } +function insert-datestamp () { LBUFFER+=${(%):-'%D{%Y-%m-%d}'}; } zle -N insert-datestamp # press esc-m for inserting last typed word again (thanks to caphuso!) -insert-last-typed-word() { zle insert-last-word -- 0 -1 }; +function insert-last-typed-word () { zle insert-last-word -- 0 -1 }; zle -N insert-last-typed-word; -function grml-zsh-fg() { +function grml-zsh-fg () { if (( ${#jobstates} )); then zle .push-input [[ -o hist_ignore_space ]] && BUFFER=' ' || BUFFER='' @@ -1111,7 +1108,7 @@ function grml-zsh-fg() { zle -N grml-zsh-fg # run command line as user root via sudo: -sudo-command-line() { +function sudo-command-line () { [[ -z $BUFFER ]] && zle up-history if [[ $BUFFER != sudo\ * ]]; then BUFFER="sudo $BUFFER" @@ -1122,7 +1119,7 @@ zle -N sudo-command-line ### jump behind the first word on the cmdline. ### useful to add options. -function jump_after_first_word() { +function jump_after_first_word () { local words words=(${(z)BUFFER}) @@ -1135,7 +1132,7 @@ function jump_after_first_word() { zle -N jump_after_first_word #f5# Create directory under cursor or the selected area -inplaceMkDirs() { +function 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 @@ -1174,8 +1171,7 @@ HELP_LINES_PER_PAGE=20 #v1# set location of help-zle cache file HELP_ZLE_CACHE_FILE=~/.cache/zsh_help_zle_lines.zsh # helper function for help-zle, actually generates the help text -help_zle_parse_keybindings() -{ +function help_zle_parse_keybindings () { emulate -L zsh setopt extendedglob unsetopt ksharrays #indexing starts at 1 @@ -1276,8 +1272,7 @@ typeset -g help_zle_sln typeset -g -a help_zle_lines # Provides (partially autogenerated) help on keybindings and the zsh line editor -help-zle() -{ +function help-zle () { emulate -L zsh unsetopt ksharrays #indexing starts at 1 #help lines already generated ? no ? then do it @@ -1293,7 +1288,7 @@ zle -N help-zle ## complete word from currently visible Screen or Tmux buffer. if check_com -c screen || check_com -c tmux; then - _complete_screen_display() { + function _complete_screen_display () { [[ "$TERM" != "screen" ]] && return 1 local TMPFILE=$(mktemp) @@ -1324,17 +1319,17 @@ fi # Load a few more functions and tie them to widgets, so they can be bound: -function zrcautozle() { +function zrcautozle () { emulate -L zsh local fnc=$1 zrcautoload $fnc && zle -N $fnc } -function zrcgotwidget() { +function zrcgotwidget () { (( ${+widgets[$1]} )) } -function zrcgotkeymap() { +function zrcgotkeymap () { [[ -n ${(M)keymaps:#$1} ]] } @@ -1353,7 +1348,7 @@ zstyle ':completion:hist-complete:*' completer _history # An array to note missing features to ease diagnosis in case of problems. typeset -ga grml_missing_features -function zrcbindkey() { +function zrcbindkey () { if (( ARGC )) && zrcgotwidget ${argv[-1]}; then bindkey "$@" fi @@ -1569,14 +1564,14 @@ alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magi #m# k ESC-h Call \kbd{run-help} for the 1st word on the command line alias run-help >&/dev/null && unalias run-help -for rh in run-help{,-git,-svk,-svn}; do +for rh in run-help{,-git,-ip,-openssl,-p4,-sudo,-svk,-svn}; do zrcautoload $rh done; unset rh # command not found handling (( ${COMMAND_NOT_FOUND} == 1 )) && -function command_not_found_handler() { +function command_not_found_handler () { emulate -L zsh if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then ${GRML_ZSH_CNF_HANDLER} $1 @@ -1598,7 +1593,7 @@ DIRSTACKFILE=${DIRSTACKFILE:-${ZDOTDIR:-${HOME}}/.zdirs} if zstyle -T ':grml:chpwd:dirstack' enable; then typeset -gaU GRML_PERSISTENT_DIRSTACK - function grml_dirstack_filter() { + function grml_dirstack_filter () { local -a exclude local filter entry if zstyle -s ':grml:chpwd:dirstack' filter filter; then @@ -1612,7 +1607,7 @@ if zstyle -T ':grml:chpwd:dirstack' enable; then return 1 } - chpwd() { + function chpwd () { (( ZSH_SUBSHELL )) && return (( $DIRSTACKSIZE <= 0 )) && return [[ -z $DIRSTACKFILE ]] && return @@ -1658,7 +1653,7 @@ if is433 ; then # chpwd_profiles # # For details see the `grmlzshrc.5' manual page. -function chpwd_profiles() { +function chpwd_profiles () { local profile context local -i reexecute @@ -1738,7 +1733,7 @@ PS4='+%N:%i:%_> ' # display battery status on right side of prompt using 'GRML_DISPLAY_BATTERY=1' in .zshrc.pre -battery() { +function battery () { if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then if islinux ; then batterylinux @@ -1755,13 +1750,19 @@ if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then fi } -batterylinux(){ +function 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) + if [[ -e $bat/capacity ]]; then + capacity=$(< $bat/capacity) + else + typeset -F energy_full=$(< $bat/energy_full) + typeset -F energy_now=$(< $bat/energy_now) + typeset -i capacity=$(( 100 * $energy_now / $energy_full)) + fi case $(< $bat/status) in Charging) GRML_BATTERY_LEVEL+=" ^" @@ -1782,7 +1783,7 @@ if (( $#batteries > 0 )) ; then fi } -batteryopenbsd(){ +function batteryopenbsd () { GRML_BATTERY_LEVEL='' local bat batfull batwarn batnow num for num in 0 1 ; do @@ -1811,7 +1812,7 @@ for num in 0 1 ; do done } -batteryfreebsd(){ +function batteryfreebsd () { GRML_BATTERY_LEVEL='' local num local -A table @@ -1838,7 +1839,7 @@ for num in 0 1 ; do done } -batterydarwin(){ +function batterydarwin () { GRML_BATTERY_LEVEL='' local -a table table=( ${$(pmset -g ps)[(w)7,8]%%(\%|);} ) @@ -1904,7 +1905,7 @@ grml_vcs_coloured_formats=( typeset GRML_VCS_COLOUR_MODE=xxx -grml_vcs_info_toggle_colour () { +function grml_vcs_info_toggle_colour () { emulate -L zsh if [[ $GRML_VCS_COLOUR_MODE == plain ]]; then grml_vcs_info_set_formats coloured @@ -1914,7 +1915,7 @@ grml_vcs_info_toggle_colour () { return 0 } -grml_vcs_info_set_formats () { +function grml_vcs_info_set_formats () { emulate -L zsh #setopt localoptions xtrace local mode=$1 AF F BF @@ -2254,7 +2255,7 @@ grml_theme_add_token: Token `%s'\'' exists! Giving up!\n\n' $name fi } -function grml_typeset_and_wrap () { +function grml_wrap_reply () { emulate -L zsh local target="$1" local new="$2" @@ -2262,14 +2263,16 @@ function grml_typeset_and_wrap () { local right="$4" if (( ${+parameters[$new]} )); then - typeset -g "${target}=${(P)target}${left}${(P)new}${right}" + REPLY="${left}${(P)new}${right}" + else + REPLY='' fi } function grml_prompt_addto () { emulate -L zsh local target="$1" - local lr it apre apost new v + local lr it apre apost new v REPLY local -a items shift @@ -2283,21 +2286,21 @@ function grml_prompt_addto () { || apost=${grml_prompt_post_default[$it]} zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" token new \ || new=${grml_prompt_token_default[$it]} - typeset -g "${target}=${(P)target}${apre}" 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 '' '' + grml_wrap_reply $target $new '' '' ;; change-root) - grml_typeset_and_wrap $target $new '(' ')' + grml_wrap_reply $target $new '(' ')' ;; grml-chroot) if [[ -n ${(P)new} ]]; then - typeset -g "${target}=${(P)target}(CHROOT)" + REPLY="$CHROOT" + else + REPLY='' fi ;; vcs) @@ -2307,14 +2310,33 @@ function grml_prompt_addto () { vcscalled=1 fi if (( ${+parameters[$v]} )) && [[ -n "${(P)v}" ]]; then - typeset -g "${target}=${(P)target}${(P)v}" + REPLY="${(P)v}" + else + REPLY='' fi ;; - *) typeset -g "${target}=${(P)target}${new}" ;; + *) REPLY="$new" ;; esac fi - typeset -g "${target}=${(P)target}${apost}" + # Strip volatile characters per item. This is off by default. See the + # global stripping code a few lines below for details. + if [[ -o prompt_subst ]] && zstyle -t ":prompt:${grmltheme}:${lr}:items:$it" \ + strip-sensitive-characters + then + REPLY="${REPLY//[$\`]/}" + fi + typeset -g "${target}=${(P)target}${apre}${REPLY}${apost}" done + + # Per default, strip volatile characters (in the prompt_subst case) + # globally. If the option is off, the style has no effect. For more + # control, this can be turned off and stripping can be configured on a + # per-item basis (see above). + if [[ -o prompt_subst ]] && zstyle -T ":prompt:${grmltheme}:${lr}:setup" \ + strip-sensitive-characters + then + typeset -g "${target}=${${(P)target}//[$\`]/}" + fi } function prompt_grml_precmd () { @@ -2358,11 +2380,9 @@ function prompt_grml_precmd_worker () { fi } -grml_prompt_fallback() { +function grml_prompt_fallback () { setopt prompt_subst - precmd() { - (( ${+functions[vcs_info]} )) && vcs_info - } + local p0 p1 p0="${RED}%(?..%? )${WHITE}${debian_chroot:+($debian_chroot)}" p1="${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< "'${vcs_info_msg_0_}'"%# " @@ -2371,7 +2391,6 @@ grml_prompt_fallback() { else PROMPT="${RED}${p0}${BLUE}${p1}" fi - unset p0 p1 } if zrcautoload promptinit && promptinit 2>/dev/null ; then @@ -2384,6 +2403,7 @@ if zrcautoload promptinit && promptinit 2>/dev/null ; then else print 'Notice: no promptinit available :(' grml_prompt_fallback + function precmd () { (( ${+functions[vcs_info]} )) && vcs_info; } fi if is437; then @@ -2416,6 +2436,7 @@ if is437; then fi else grml_prompt_fallback + function precmd () { (( ${+functions[vcs_info]} )) && vcs_info; } fi # Terminal-title wizardry @@ -2543,7 +2564,10 @@ else alias l='command ls -l' fi -alias mdstat='cat /proc/mdstat' +if [[ -r /proc/mdstat ]]; then + alias mdstat='cat /proc/mdstat' +fi + alias ...='cd ../../' # generate alias named "$KERNELVERSION-reboot" so you can use boot with kexec: @@ -2557,7 +2581,7 @@ alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'" # make sure it is not assigned yet [[ -n ${aliases[utf2iso]} ]] && unalias utf2iso -utf2iso() { +function utf2iso () { if isutfenv ; then local ENV for ENV in $(env | command grep -i '.utf') ; do @@ -2568,7 +2592,7 @@ utf2iso() { # make sure it is not assigned yet [[ -n ${aliases[iso2utf]} ]] && unalias iso2utf -iso2utf() { +function iso2utf () { if ! isutfenv ; then local ENV for ENV in $(env | command grep -i '\.iso') ; do @@ -2579,12 +2603,12 @@ iso2utf() { # especially for roadwarriors using GNU screen and ssh: if ! check_com asc &>/dev/null ; then - asc() { autossh -t "$@" 'screen -RdU' } + function asc () { autossh -t "$@" 'screen -RdU' } compdef asc=ssh fi #f1# Hints for the use of zsh on grml -zsh-help() { +function zsh-help () { print "$bg[white]$fg[black] zsh-help - hints for use of zsh on grml =======================================$reset_color" @@ -2653,38 +2677,54 @@ Enjoy your grml system with the zsh!$reset_color" # debian stuff if [[ -r /etc/debian_version ]] ; then - #a3# Execute \kbd{apt-cache search} - alias acs='apt-cache search' - #a3# Execute \kbd{apt-cache show} - alias acsh='apt-cache show' - #a3# Execute \kbd{apt-cache policy} - alias acp='apt-cache policy' - #a3# Execute \kbd{apt-get dist-upgrade} - salias adg="apt-get dist-upgrade" - #a3# Execute \kbd{apt-get install} - salias agi="apt-get install" - #a3# Execute \kbd{aptitude install} - salias ati="aptitude install" - #a3# Execute \kbd{apt-get upgrade} - salias ag="apt-get upgrade" - #a3# Execute \kbd{apt-get update} - salias au="apt-get update" - #a3# Execute \kbd{aptitude update ; aptitude safe-upgrade} - salias -a up="aptitude update ; aptitude safe-upgrade" - #a3# Execute \kbd{dpkg-buildpackage} - alias dbp='dpkg-buildpackage' - #a3# Execute \kbd{grep-excuses} - alias ge='grep-excuses' + if [[ -z "$GRML_NO_APT_ALIASES" ]]; then + #a3# Execute \kbd{apt-cache search} + alias acs='apt-cache search' + #a3# Execute \kbd{apt-cache show} + alias acsh='apt-cache show' + #a3# Execute \kbd{apt-cache policy} + alias acp='apt-cache policy' + if check_com -c apt ; then + #a3# Execute \kbd{apt dist-upgrade} + salias adg="apt dist-upgrade" + #a3# Execute \kbd{apt upgrade} + salias ag="apt upgrade" + #a3# Execute \kbd{apt install} + salias agi="apt install" + #a3# Execute \kbd{apt-get update} + salias au="apt update" + else + salias adg="apt-get dist-upgrade" + salias ag="apt-get upgrade" + salias agi="apt-get install" + salias au="apt-get update" + fi + #a3# Execute \kbd{aptitude install} + salias ati="aptitude install" + #a3# Execute \kbd{aptitude update ; aptitude safe-upgrade} + salias -a up="aptitude update ; aptitude safe-upgrade" + #a3# Execute \kbd{dpkg-buildpackage} + alias dbp='dpkg-buildpackage' + #a3# Execute \kbd{grep-excuses} + alias ge='grep-excuses' + fi # get a root shell as normal user in live-cd mode: if isgrmlcd && [[ $UID -ne 0 ]] ; then alias su="sudo su" fi - #a1# Take a look at the syslog: \kbd{\$PAGER /var/log/syslog} - salias llog="$PAGER /var/log/syslog" # take a look at the syslog - #a1# Take a look at the syslog: \kbd{tail -f /var/log/syslog} - salias tlog="tail -f /var/log/syslog" # follow the syslog +fi + +# use /var/log/syslog iff present, fallback to journalctl otherwise +if [ -e /var/log/syslog ] ; then + #a1# Take a look at the syslog: \kbd{\$PAGER /var/log/syslog || journalctl} + salias llog="$PAGER /var/log/syslog" # take a look at the syslog + #a1# Take a look at the syslog: \kbd{tail -f /var/log/syslog || journalctl} + salias tlog="tail -f /var/log/syslog" # follow the syslog +elif check_com -c journalctl ; then + salias llog="journalctl" + salias tlog="journalctl -f" fi # sort installed Debian-packages by size @@ -2696,7 +2736,7 @@ fi # if cdrecord is a symlink (to wodim) or isn't present at all warn: if [[ -L /usr/bin/cdrecord ]] || ! check_com -c cdrecord; then if check_com -c wodim; then - cdrecord() { + function cdrecord () { <<__EOF0__ cdrecord is not provided under its original name by Debian anymore. See #377109 in the BTS of Debian for more details. @@ -2714,10 +2754,10 @@ if isgrmlcd; then fi # grmlstuff -grmlstuff() { +function grmlstuff () { # people should use 'grml-x'! if check_com -c 915resolution; then - 855resolution() { + function 855resolution () { echo "Please use 915resolution as resolution modifying tool for Intel \ graphic chipset." return -1 @@ -2728,7 +2768,7 @@ graphic chipset." alias grml-version='cat /etc/grml_version' if check_com -c grml-debootstrap ; then - debian2hd() { + function debian2hd () { echo "Installing debian to harddisk is possible by using grml-debootstrap." return 1 } @@ -2750,7 +2790,7 @@ is4 && xsource "/etc/zsh/keephack" # This lists all the files in the current directory newer than the reference file. # You can also specify the reference file inline; note quotes: # $ ls -l *(e:'nt ~/.zshenv':) -is4 && nt() { +is4 && function nt () { if [[ -n $1 ]] ; then local NTREF=${~1} fi @@ -2760,7 +2800,7 @@ is4 && nt() { # shell functions #f1# Reload an autoloadable function -freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done } +function freload () { while (( $# )); do; unfunction $1; autoload -U $1; shift; done } compdef _functions freload # @@ -2803,15 +2843,15 @@ compdef _functions freload # 2 symlink loop detected # #f1# List symlinks in detail (more detailed version of 'readlink -f', 'whence -s' and 'namei -l') -sll() { +function sll () { if [[ -z ${1} ]] ; then printf 'Usage: %s \n' "${0}" return 1 fi local file jumpd curdir - local -i RTN LINODE i - local -a SEENINODES + local -i 10 RTN LINODE i + local -a SEENINODES curdir="${PWD}" RTN=0 @@ -2824,8 +2864,8 @@ sll() { LINODE=$(zstat -L +inode "${file}") for i in ${SEENINODES} ; do if (( ${i} == ${LINODE} )) ; then - builtin cd "${curdir}" - print "link loop detected, aborting!" + builtin cd -q "${curdir}" + print 'link loop detected, aborting!' return 2 fi done @@ -2835,7 +2875,7 @@ sll() { file="${file:t}" if [[ -d ${jumpd} ]] ; then - builtin cd "${jumpd}" || RTN=1 + builtin cd -q "${jumpd}" || RTN=1 fi file=$(readlink "$file") @@ -2843,7 +2883,7 @@ sll() { file="${file:t}" if [[ -d ${jumpd} ]] ; then - builtin cd "${jumpd}" || RTN=1 + builtin cd -q "${jumpd}" || RTN=1 fi ls -l "${PWD}/${file}" || RTN=1 @@ -2852,7 +2892,7 @@ sll() { if (( ${#} >= 1 )) ; then print "" fi - builtin cd "${curdir}" + builtin cd -q "${curdir}" done return ${RTN} } @@ -2862,7 +2902,7 @@ sll() { # with respect to wordsplitting. (ie. ${=PAGER}) if check_com -c $PAGER ; then #f3# View Debian's changelog of given package(s) - dchange() { + function dchange () { emulate -L zsh [[ -z "$1" ]] && printf 'Usage: %s \n' "$0" && return 1 @@ -2887,11 +2927,11 @@ if check_com -c $PAGER ; then fi done } - _dchange() { _files -W /usr/share/doc -/ } + function _dchange () { _files -W /usr/share/doc -/ } compdef _dchange dchange #f3# View Debian's NEWS of a given package - dnews() { + function dnews () { emulate -L zsh if [[ -r /usr/share/doc/$1/NEWS.Debian.gz ]] ; then $PAGER /usr/share/doc/$1/NEWS.Debian.gz @@ -2904,11 +2944,11 @@ if check_com -c $PAGER ; then fi fi } - _dnews() { _files -W /usr/share/doc -/ } + function _dnews () { _files -W /usr/share/doc -/ } compdef _dnews dnews #f3# View Debian's copyright of a given package - dcopyright() { + function dcopyright () { emulate -L zsh if [[ -r /usr/share/doc/$1/copyright ]] ; then $PAGER /usr/share/doc/$1/copyright @@ -2917,11 +2957,11 @@ if check_com -c $PAGER ; then return 1 fi } - _dcopyright() { _files -W /usr/share/doc -/ } + function _dcopyright () { _files -W /usr/share/doc -/ } compdef _dcopyright dcopyright #f3# View upstream's changelog of a given package - uchange() { + function uchange () { emulate -L zsh if [[ -r /usr/share/doc/$1/changelog.gz ]] ; then $PAGER /usr/share/doc/$1/changelog.gz @@ -2930,23 +2970,23 @@ if check_com -c $PAGER ; then return 1 fi } - _uchange() { _files -W /usr/share/doc -/ } + function _uchange () { _files -W /usr/share/doc -/ } compdef _uchange uchange fi # zsh profiling -profile() { +function profile () { ZSH_PROFILE_RC=1 zsh "$@" } #f1# Edit an alias via zle -edalias() { +function edalias () { [[ -z "$1" ]] && { echo "Usage: edalias " ; return 1 } || vared aliases'[$1]' ; } compdef _aliases edalias #f1# Edit a function via zle -edfunc() { +function edfunc () { [[ -z "$1" ]] && { echo "Usage: edfunc " ; return 1 } || zed -f "$1" ; } compdef _functions edfunc @@ -2959,7 +2999,7 @@ compdef _functions edfunc #m# f6 Force-Reload() \kbd{service \em{process}}\quad\kbd{force-reload} #m# f6 Status() \kbd{service \em{process}}\quad\kbd{status} if [[ -d /etc/init.d || -d /etc/service ]] ; then - __start_stop() { + function __start_stop () { local action_="${1:l}" # e.g Start/Stop/Restart local service_="$2" local param_="$3" @@ -2987,21 +3027,21 @@ if [[ -d /etc/init.d || -d /etc/service ]] ; then fi } - _grmlinitd() { + function _grmlinitd () { local -a scripts scripts=( /etc/init.d/*(x:t) ) _describe "service startup script" scripts } for i in Start Restart Stop Force-Reload Reload Status ; do - eval "$i() { __start_stop $i \"\$1\" \"\$2\" ; }" + eval "function $i () { __start_stop $i \"\$1\" \"\$2\" ; }" compdef _grmlinitd $i done builtin unset -v i fi #f1# Provides useful information on globbing -H-Glob() { +function H-Glob () { echo -e " / directories . plain files @@ -3042,7 +3082,7 @@ H-Glob() { alias help-zshglob=H-Glob # grep for running process, like: 'any vim' -any() { +function any () { emulate -L zsh unsetopt KSH_ARRAYS if [[ -z "$1" ]] ; then @@ -3057,7 +3097,7 @@ any() { # After resuming from suspend, system is paging heavily, leading to very bad interactivity. # taken from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt [[ -r /proc/1/maps ]] && \ -deswap() { +function deswap () { print 'Reading /proc/[0-9]*/maps and sending output to /dev/null, this might take a while.' cat $(sed -ne 's:.* /:/:p' /proc/[0-9]*/maps | sort -u | grep -v '^/dev/') > /dev/null print 'Finished, running "swapoff -a; swapon -a" may also be useful.' @@ -3071,7 +3111,7 @@ deswap() { # This will cause vim to send every file given on the # commandline to be send to it's own tab (needs vim7). if check_com vim; then - vim() { + function vim () { VIM_PLEASE_SET_TITLE='yes' command vim ${VIM_OPTIONS} "$@" } fi @@ -3089,7 +3129,7 @@ for sh in ${ssl_hashes}; do }' done; unset sh -ssl-cert-fingerprints() { +function ssl-cert-fingerprints () { emulate -L zsh local i if [[ -z $1 ]] ; then @@ -3101,7 +3141,7 @@ ssl-cert-fingerprints() { done } -ssl-cert-info() { +function ssl-cert-info () { emulate -L zsh if [[ -z $1 ]] ; then printf 'usage: ssl-cert-info \n' @@ -3112,14 +3152,17 @@ ssl-cert-info() { } # make sure our environment is clean regarding colors -for var in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $var -builtin unset -v var +builtin unset -v BLUE RED GREEN CYAN YELLOW MAGENTA WHITE NO_COLOR # "persistent history" -# just write important commands you always need to ~/.important_commands +# just write important commands you always need to $GRML_IMPORTANT_COMMANDS +# defaults for backward compatibility to ~/.important_commands if [[ -r ~/.important_commands ]] ; then - fc -R ~/.important_commands + GRML_IMPORTANT_COMMANDS=~/.important_commands +else + GRML_IMPORTANT_COMMANDS=${GRML_IMPORTANT_COMMANDS:-${ZDOTDIR:-${HOME}}/.important_commands} fi +[[ -r ${GRML_IMPORTANT_COMMANDS} ]] && builtin fc -R ${GRML_IMPORTANT_COMMANDS} # load the lookup subsystem if it's available on the system zrcautoload lookupinit && lookupinit @@ -3133,7 +3176,7 @@ export COLORTERM="yes" # general #a2# Execute \kbd{du -sch} -alias da='du -sch' +[[ -n "$GRML_NO_SMALL_ALIASES" ]] || alias da='du -sch' # listing stuff #a2# Execute \kbd{ls -lSrah} @@ -3197,7 +3240,7 @@ fi # useful functions #f5# Backup \kbd{file_or_folder {\rm to} file_or_folder\_timestamp} -bk() { +function bk () { emulate -L zsh local current_date=$(date -u "+%Y-%m-%dT%H:%M:%SZ") local clean keep move verbose result all to_bk @@ -3272,13 +3315,13 @@ return 0;; } #f5# cd to directoy and list files -cl() { +function cl () { emulate -L zsh cd $1 && ls -a } # smart cd function, allows switching to /etc when running 'cd /etc/fstab' -cd() { +function cd () { if (( ${#argv} == 1 )) && [[ -f ${1} ]]; then [[ ! -e ${1:h} ]] && return 1 print "Correcting ${1} to ${1:h}" @@ -3289,7 +3332,7 @@ cd() { } #f5# Create Directoy and \kbd{cd} to it -mkcd() { +function mkcd () { if (( ARGC != 1 )); then printf 'usage: mkcd \n' return 1; @@ -3303,25 +3346,25 @@ mkcd() { } #f5# Create temporary directory and \kbd{cd} to it -cdt() { +function cdt () { builtin cd "$(mktemp -d)" builtin pwd } #f5# List files which have been accessed within the last {\it n} days, {\it n} defaults to 1 -accessed() { +function accessed () { emulate -L zsh print -l -- *(a-${1:-1}) } #f5# List files which have been changed within the last {\it n} days, {\it n} defaults to 1 -changed() { +function changed () { emulate -L zsh print -l -- *(c-${1:-1}) } #f5# List files which have been modified within the last {\it n} days, {\it n} defaults to 1 -modified() { +function modified () { emulate -L zsh print -l -- *(m-${1:-1}) } @@ -3347,7 +3390,7 @@ fi # $ awk -F ':' '{ print $2" : "$1" "$3 }' \ # /usr/local/lib/words/en-de.ISO-8859-1.vok > ~/.translate/de-en.ISO-8859-1.vok #f5# Translates a word -trans() { +function trans () { emulate -L zsh case "$1" in -[dD]*) @@ -3366,7 +3409,7 @@ trans() { # Usage: simple-extract # Using option -d deletes the original archive file. #f5# Smart archive extractor -simple-extract() { +function simple-extract () { emulate -L zsh setopt extended_glob noclobber local ARCHIVE DELETE_ORIGINAL DECOMP_CMD USES_STDIN USES_STDOUT GZTARGET WGET_CMD @@ -3503,24 +3546,22 @@ simple-extract() { return $RC } -__archive_or_uri() -{ +function __archive_or_uri () { _alternative \ 'files:Archives:_files -g "*.(#l)(tar.bz2|tbz2|tbz|tar.gz|tgz|tar.xz|txz|tar.lzma|tar|rar|lzh|7z|zip|jar|deb|bz2|gz|Z|xz|lzma)"' \ '_urls:Remote Archives:_urls' } -_simple_extract() -{ +function _simple_extract () { _arguments \ '-d[delete original archivefile after extraction]' \ '*:Archive Or Uri:__archive_or_uri' } compdef _simple_extract simple-extract -alias se=simple-extract +[[ -n "$GRML_NO_SMALL_ALIASES" ]] || alias se=simple-extract #f5# Change the xterm title from within GNU-screen -xtrename() { +function xtrename () { emulate -L zsh if [[ $1 != "-f" ]] ; then if [[ -z ${DISPLAY} ]] ; then @@ -3543,7 +3584,7 @@ xtrename() { # Create small urls via http://goo.gl using curl(1). # API reference: https://code.google.com/apis/urlshortener/ -function zurl() { +function zurl () { emulate -L zsh setopt extended_glob @@ -3587,7 +3628,7 @@ function zurl() { } #f2# Find history events by search pattern and list them by date. -whatwhen() { +function whatwhen () { emulate -L zsh local usage help ident format_l format_s first_char remain first last usage='USAGE: whatwhen [options] ' @@ -3639,7 +3680,7 @@ if check_com -c hg ; then # gnu like diff for mercurial # http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks #f5# GNU like diff for mercurial - hgdi() { + function hgdi () { emulate -L zsh local i for i in $(hg status -marn "$@") ; diff -ubwd <(hg cat "$i") "$i" @@ -3650,13 +3691,13 @@ if check_com -c hg ; then alias hbp='hg-buildpackage' # execute commands on the versioned patch-queue from the current repos - alias mq='hg -R $(readlink -f $(hg root)/.hg/patches)' + [[ -n "$GRML_NO_SMALL_ALIASES" ]] || alias mq='hg -R $(readlink -f $(hg root)/.hg/patches)' # diffstat for specific version of a mercurial repository # hgstat => display diffstat between last revision and tip # hgstat 1234 => display diffstat between revision 1234 and tip #f5# Diffstat for specific version of a mercurial repos - hgstat() { + function hgstat () { emulate -L zsh [[ -n "$1" ]] && hg diff -r $1 -r tip | diffstat || hg export tip | diffstat }