From: Michael Prokop Date: Fri, 25 May 2018 09:12:40 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/github/pr/55' X-Git-Tag: v0.15.0~4 X-Git-Url: http://git.grml.org/?p=grml-etc-core.git;a=commitdiff_plain;h=a5eb2feca052396d5b923979118f68f626ac9d69;hp=1fa194ecab5c43405e800d81f1f6ba5e1fa68049 Merge remote-tracking branch 'origin/github/pr/55' --- diff --git a/debian/changelog b/debian/changelog index eca1198..10dbf5c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,120 @@ +grml-etc-core (0.14.3) grml-testing; urgency=medium + + [ Frank Terbeck ] + * [f98b046] Bind insert-datestamp to "ESC d" (Alt-d on many terminals) + instead of "Ctrl-e d" + * [65ac134] Move insert-datestamp to "C-x d" from "M-d" + + -- Michael Prokop Thu, 07 Sep 2017 09:49:47 +0200 + +grml-etc-core (0.14.2) grml-testing; urgency=medium + + * [536ce6b] vimrc: disable mouse usage in all modes, being the default + in Vim >=8 + * [46d7290] tmux: drop deprecated status-utf8 option. Thanks to Timo + Boettcher for forwarding the bug report + * [ad9e192] screenrc: drop keybindings G (google) + H (heise.de) Thanks + to Ralf Moll for reporting + + -- Michael Prokop Tue, 16 May 2017 15:15:10 +0200 + +grml-etc-core (0.14.1) grml-testing; urgency=medium + + [ Frank Terbeck ] + * [5352f45] prompt_grml: Add documentation for strip-sensitive- + characters + + [ Michael Prokop ] + * [b9bdbb1] zshrc: avoid "no matches found: abk[V]" on grml-small + systems + * [a81b118] zshrc: avoid "no matches found: abk[V]" on grml-small + systems, fixup. Thanks to Frank Terbeck + + -- Michael Prokop Fri, 05 May 2017 10:52:44 +0200 + +grml-etc-core (0.14.0) grml-testing; urgency=medium + + [ Thilo Six ] + * [cedfc98] make location of file .important_commands configurable + keeping backward compatibility + * [fbdbd82] fix usage of 'typeset -U' + * [57c97bc] use function keyword through out the code + * [bec2df1] add missing run-help-* + * [b71bff0] also unset NO_COLOR + * [6b946fe] small fix for sll() + * [76bfaf8] reduce unneeded filesystem seeks + * [1e990f9] only try to autoload, when there actually is s.th. to + + [ Frank Terbeck ] + * [c5383b1] Test the correct parameter for non-emptiness + * [38a1b61] Handle volatile characters in prompts with promptsubst set + + [ Michael Prokop ] + * [ecfca56] zshrc: use apt for agi/adg/ag/au aliases, fall back to apt- + get. Thanks to Karl Voit for the suggestion + * [2210c9b] zshrc: fix space<->tab indention issue for commit + ecfca564173 + + -- Michael Prokop Sat, 25 Mar 2017 17:52:14 +0100 + +grml-etc-core (0.13.2) grml-testing; urgency=medium + + * [b2556e7] zshrc: fall back to journalctl with llog + tlog aliases + if /var/log/syslog doesn't exist + * [875b6d6] zshrc: support systems without capacity file in + batterylinux() [Closes: issue1333] Thanks to Axel Beckert + for the patch + + -- Michael Prokop Fri, 27 Jan 2017 16:17:15 +0100 + +grml-etc-core (0.13.1) grml-testing; urgency=medium + + * [274a68f] lsb-functions: avoid usage of SYSTEMD variable + + -- Michael Prokop Fri, 13 Jan 2017 16:06:06 +0100 + +grml-etc-core (0.13.0) grml-testing; urgency=medium + + [ Daniel Hahler ] + * [9dbdd75] zshrc: dirstack: skip for ZSH_SUBSHELL + + [ Frank Terbeck ] + * [a1d579b] zshrc: clean up fallback prompt code + * [dbcbf31] doc/grmlzshrc: fix typo in grmlzshrc manual + + [ Bernhard Tittelbach ] + * [1278480] zshrc: purge: c dependency files + * [0219e4b] zshrc: purge: latexfiles + + [ Nicolas Braud-Santoni ] + * [6646b26] zshrc: do not alias 'mdstat' when /proc/mdstat doesn't exist + * [a8df509] zshrc: Make ambiguous aliases optional + * [1ce2c6d] doc/grmlzshrc: Document GRML_NO_{APT,SMALL}_ALIASES + + [ Michael Prokop ] + * [aaa1e7f] Support systemd-style output via lsb-functions + * [2ee956e] lsb-functions: include support for grml_colors handling + * [07492e0] Bump Standards-Version to 3.9.8 + * [3ca2a63] Bump debian/compat version to 9 + + -- Michael Prokop Fri, 13 Jan 2017 14:03:57 +0100 + +grml-etc-core (0.12.6) grml-testing; urgency=medium + + [ Frank Terbeck ] + * [df5ece4] zshrc: Make the default of 'filter-on-load' match docs + * [d005e0b] zshrc: Add a setting to avoid the persistent dirstack + feature to be activated + * [95d0e2f] grmlzshrc.5: Clarify where to set the enable style + + [ Thilo Six ] + * [ebd9d16] zshrc: check_com() fixed and zshified + + [ Michael Prokop ] + * [80e5721] Bump Standards-Version to 3.9.7 + + -- Michael Prokop Sat, 30 Apr 2016 23:39:33 +0200 + grml-etc-core (0.12.5) grml-testing; urgency=medium [ Sebastian Boehm ] diff --git a/debian/compat b/debian/compat index 7ed6ff8..ec63514 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -5 +9 diff --git a/debian/control b/debian/control index 1257492..bf16950 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Priority: optional Maintainer: Michael Prokop Build-Depends: debhelper (>= 5), txt2tags -Standards-Version: 3.9.6 +Standards-Version: 3.9.8 Homepage: http://git.grml.org/?p=grml-etc-core.git Vcs-git: git://git.grml.org/grml-etc-core.git Vcs-Browser: http://git.grml.org/?p=grml-etc-core.git diff --git a/doc/grmlzshrc.t2t b/doc/grmlzshrc.t2t index 8accb74..844cb71 100644 --- a/doc/grmlzshrc.t2t +++ b/doc/grmlzshrc.t2t @@ -73,6 +73,15 @@ into the right hand side interactive prompt. Supported OSes are //GNU/Linux//, This variable contains the handler to be used by COMMAND_NOT_FOUND (see above) and defaults to "/usr/share/command-not-found/command-not-found". +: **GRML_NO_APT_ALIASES** +A non-empty value inhibits the definition of apt-specific short aliases, +such as ag, agi, ati etc. + +: **GRML_NO_SMALL_ALIASES** +A non-empty value inhibits the definition of 2-letter aliases such as da. +ls, ll, la and other common ls-related aliases are exempt from this, as are +the aliases inhibited by GRML_NO_APT_ALIASES. + : **GRMLSMALL_SPECIFIC** Set this to zero to remove items in zsh config, which do not work in grml-small. @@ -136,6 +145,14 @@ The **DIRSTACKFILE** is loaded each time zsh starts, therefore freshly started zshs inherit the dirstack of the zsh that most recently updated **DIRSTACKFILE**. +If you would like to //disable// the persistent dirstack feature altogether, +you can do that by setting the boolean //enable// style to //false// in the +right context (the default is //true//): +\ +``` +zstyle ':grml:chpwd:dirstack' enable false +``` + It is possible to apply a filter to the names of directories that will be committed to the persistent dirstack file. There are two ways to configure this filter: A general function based filter and a pattern based filter. Both are @@ -173,12 +190,15 @@ dirstack file, set the //filter-on-load// boolean style (the default is zstyle ':grml:chpwd:dirstack' filter-on-load true ``` -Setting the //filter-on-load// needs to be done in ".zshrc.pre" because the -style needs to be set when the main setup is executing! The other styles do not -have this limitation, but the initial filtering will obviously be done using -the filters that are configured **at** **that** **point**. The rule of thumb -is: If you want to filter on load, setup everything in ".zshrc.pre" otherwise -".zshrc.local" works just as well. +Setting the //filter-on-load// and //enable// styles needs to be done in +".zshrc.pre" because the styles need to be set when the main setup is +executing! The other styles do not have this limitation, but enabling the +system as well as the initial filtering will obviously be done using settings +and filters that are configured **at** **that** **point**. + +With respect to //filter-on-load//, the rule of thumb is: If you want to filter +on load, setup everything in ".zshrc.pre" otherwise ".zshrc.local" works just +as well. == DIRECTORY BASED PROFILES == @@ -379,7 +399,7 @@ By default, **grml** is used, unless //$GRMLPROMPT// is set to a value larger than zero, in which case **grml-large** is used. Lastly, if //$GRML_CHROOT// is non-empty, **grml-chroot** is used. -As usual, with promtinit themes, the user may switch to a different theme using +As usual, with promptinit themes, the user may switch to a different theme using the //prompt// utility: \ ``` @@ -428,8 +448,9 @@ to: **'zsh: '** via zsh's vcs_info. == PERSISTENT HISTORY == If you got commands you consider important enough to be included in every -shell's history, you can put them into ~/.important_commands and they will be -available via the usual history lookup widgets. +shell's history, you can put them into $GRML_IMPORTANT_COMMANDS (which defaults +for backward compatibility to ~/.important_commands) and they will be available +via the usual history lookup widgets. = REFERENCE = @@ -559,7 +580,7 @@ Use case: you type "mv abc ~/testa/testb/testc/" and remember that the directory does not exist yet -> press **CTRL-xM** and problem solved. : **CTRL-x-p** -Searches the last occurence of string before the cursor in the command history. +Searches the last occurrence of string before the cursor in the command history. : **CTRL-x-z** Display help on keybindings and zsh line editor. Press consecutively to page through content. @@ -571,7 +592,7 @@ Brings a job, which got suspended with CTRL-z back to foreground. === Customisation === To customise keybindings, you can just use zsh's bindkey utility. However, if -you plan to to use the `//zle-line-init//' or `//zle-line-finish//' hooks +you plan to use the `//zle-line-init//' or `//zle-line-finish//' hooks yourself, make sure you call the following functions in the respective hook: - **zle-line-init**: //zle-smkx// @@ -757,7 +778,7 @@ Runs a command in zsh with profiling enabled (See startup variable ZSH_PROFILE_RC above). : **salias()** -Creates an alias whith sudo prepended, if $EUID is not zero. Run "salias -h" +Creates an alias with sudo prepended, if $EUID is not zero. Run "salias -h" for details. See also xunfunction() below. : **simple-extract()** diff --git a/etc/grml/lsb-functions b/etc/grml/lsb-functions index d95be1d..17a42a3 100644 --- a/etc/grml/lsb-functions +++ b/etc/grml/lsb-functions @@ -151,7 +151,7 @@ log_end_msg() { # initialisation {{{ # internal variables -# Dont output to stdout? +# Don't output to stdout? RC_QUIET_STDOUT="no" # Default values for e-message indentation and dots @@ -159,7 +159,7 @@ RC_INDENTATION='' RC_DEFAULT_INDENT=2 #RC_DOT_PATTERN=' .' RC_DOT_PATTERN='' -# dont output to stdout? +# don't output to stdout? rc_quiet_stdout="no" # default values for e-message indentation and dots @@ -174,6 +174,11 @@ if [ -r /proc/cmdline ] ; then fi [ -n "$NOCOLORS" ] && RC_NOCOLOR='yes' RC_NOCOLOR="${RC_NOCOLOR:-no}" +if [ "$RC_NOCOLOR" = "no" ] ; then + if [ -r /etc/grml_colors ] ; then + . /etc/grml_colors + fi +fi # Can the terminal handle endcols? if [ "${RC_NOCOLOR}" = "yes" ]; then @@ -408,4 +413,24 @@ ewend() { } #}}} +# if we're using systemd then redefine functions +# for output in systemd style +if [ "$(cat /proc/1/comm 2>/dev/null)" = "systemd" ] ; then + einfo() { + printf "[ ${GREEN}OK${NORMAL} ] %s\n" "$*" + } + + ewarn() { + printf "[ ${YELLOW}WARN${NORMAL} ] %s\n" "$*" + } + + eerror() { + printf "[ ${RED}FAIL${NORMAL} ] %s\n" "$*" + } + + eend() { + : + } +fi + # vim: ft=sh tw=80 ts=4 foldmethod=marker diff --git a/etc/grml/screenrc b/etc/grml/screenrc index 73ba426..3cabb03 100644 --- a/etc/grml/screenrc +++ b/etc/grml/screenrc @@ -107,9 +107,6 @@ bind 'O' login off bind '}' history - bind G screen -t 'google' w3m www.google.com - bind H screen -t HeiseTicker w3m www.heise.de/newsticker/pda/data/paket4.html - # Paste - use 'P' instead of ']': # bind P # unbound by default bind P paste . diff --git a/etc/grml/screenrc_acpi b/etc/grml/screenrc_acpi index b75491e..3fe82ea 100644 --- a/etc/grml/screenrc_acpi +++ b/etc/grml/screenrc_acpi @@ -110,9 +110,6 @@ bind 'O' login off bind '}' history - bind G screen -t 'google' w3m www.google.com - bind H screen -t HeiseTicker w3m www.heise.de/newsticker/pda/data/paket4.html - # Paste - use 'P' instead of ']': # bind P # unbound by default bind P paste . diff --git a/etc/grml/screenrc_generic b/etc/grml/screenrc_generic index 93632b4..7b55cce 100644 --- a/etc/grml/screenrc_generic +++ b/etc/grml/screenrc_generic @@ -108,9 +108,6 @@ bind 'O' login off bind '}' history - bind G screen -t 'google' w3m www.google.com - bind H screen -t HeiseTicker w3m www.heise.de/newsticker/pda/data/paket4.html - # Paste - use 'P' instead of ']': # bind P # unbound by default bind P paste . diff --git a/etc/grml_colors b/etc/grml_colors index 77cb8ba..a78a9ab 100644 --- a/etc/grml_colors +++ b/etc/grml_colors @@ -5,22 +5,32 @@ # License: This file is licensed under the GPL v2. ################################################################################ +# don't use highlighed colors under systemd to match its style +if [ "$(cat /proc/1/comm 2>/dev/null)" = "systemd" ] ; then + HIGHLIGHT=0 +else + HIGHLIGHT=1 +fi + # ANSI COLORS CRE=" " NORMAL="" # RED: Failure or error message -RED="" +RED="[${HIGHLIGHT};31m" # GREEN: Success message -GREEN="" +GREEN="[${HIGHLIGHT};32m" # YELLOW: Descriptions -YELLOW="" +YELLOW="[${HIGHLIGHT};33m" # BLUE: System messages -BLUE="" +BLUE="[${HIGHLIGHT};34m" # MAGENTA: Found devices or drivers -MAGENTA="" +MAGENTA="[${HIGHLIGHT};35m" # CYAN: Questions -CYAN="" +CYAN="[${HIGHLIGHT};36m" # BOLD WHITE: Hint -WHITE="" +WHITE="[${HIGHLIGHT};37m" + +# don't expose unneeded local variables +unset HIGHLIGHT ## END OF FILE ################################################################# diff --git a/etc/tmux.conf b/etc/tmux.conf index 76ea358..f74f7b9 100644 --- a/etc/tmux.conf +++ b/etc/tmux.conf @@ -45,7 +45,6 @@ set -g visual-activity on set -g mode-keys vi ### set status line appearance -set -g status-utf8 on set -g status-fg white set -g status-bg black diff --git a/etc/vim/vimrc b/etc/vim/vimrc index c31a7ff..064b15c 100644 --- a/etc/vim/vimrc +++ b/etc/vim/vimrc @@ -86,7 +86,7 @@ " set autowrite " Automatically save before commands like :next and :make " When switching between different buffers you can't use undo without 'set hidden': set hidden " Hide buffers when they are abandoned -" set mouse=a " Enable mouse usage (all modes) in terminals + set mouse= " Disable mouse usage (being "a" AKA all modes in Vim >=8) in terminals set wildmenu " command-line completion operates in an enhanced mode set pastetoggle= " don't change text when copy/pasting @@ -212,7 +212,7 @@ if version >= 700 " highlight SpellRare term=reverse ctermbg=13 gui=undercurl guisp=Magenta " rare word " highlight SpellLocale term=underline ctermbg=11 gui=undercurl guisp=DarkCyan " word only exists in other region - " set maximum number of suggestions listed to top 10 items: + " set maximum number of suggestions listed top 10 items: set sps=best,10 " highlight matching parens: diff --git a/etc/zsh/keephack b/etc/zsh/keephack index 7d4788c..6d748ea 100644 --- a/etc/zsh/keephack +++ b/etc/zsh/keephack @@ -51,7 +51,7 @@ _insert_kept() { fi } -# now bind it to keys and enable completition +# now bind it to keys and enable completion zle -C insert-kept-result complete-word _generic zle -C expand-kept-result complete-word _generic zstyle ':completion:*-kept-result:*' completer _insert_kept diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index a09361c..96869cc 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) @@ -458,39 +458,38 @@ 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 + gatoo=0 if [[ $1 == '-c' ]] ; then - (( comonly = 1 )) - shift + comonly=1 + shift 1 elif [[ $1 == '-g' ]] ; then - (( gatoo = 1 )) - else - (( comonly = 0 )) - (( gatoo = 0 )) + gatoo=1 + shift 1 fi if (( ${#argv} != 1 )) ; then - printf 'usage: check_com [-c] \n' >&2 + printf 'usage: check_com [-c|-g] \n' >&2 return 1 fi if (( comonly > 0 )) ; then - [[ -n ${commands[$1]} ]] && return 0 + (( ${+commands[$1]} )) && return 0 return 1 fi - if [[ -n ${commands[$1]} ]] \ - || [[ -n ${functions[$1]} ]] \ - || [[ -n ${aliases[$1]} ]] \ - || [[ -n ${reswords[(r)$1]} ]] ; then - + if (( ${+commands[$1]} )) \ + || (( ${+functions[$1]} )) \ + || (( ${+aliases[$1]} )) \ + || (( ${+reswords[(r)$1]} )) ; then return 0 fi - if (( gatoo > 0 )) && [[ -n ${galiases[$1]} ]] ; then + if (( gatoo > 0 )) && (( ${+galiases[$1]} )) ; then return 0 fi @@ -499,7 +498,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 @@ -537,7 +536,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 @@ -551,7 +550,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 @@ -564,7 +563,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 @@ -578,7 +577,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 @@ -627,13 +626,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' @@ -655,7 +652,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 && \ @@ -684,7 +681,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 @@ -787,7 +784,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 } @@ -878,7 +875,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 @@ -894,14 +891,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 @@ -927,7 +924,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 @@ -947,7 +944,7 @@ function Accept-Line() { done } -function Accept-Line-getdefault() { +function Accept-Line-getdefault () { emulate -L zsh local default_action @@ -962,7 +959,7 @@ function Accept-Line-getdefault() { esac } -function Accept-Line-HandleContext() { +function Accept-Line-HandleContext () { zle Accept-Line default_action=$(Accept-Line-getdefault) @@ -970,7 +967,7 @@ function Accept-Line-HandleContext() { && zle ${default_action} } -function accept-line() { +function accept-line () { setopt localoptions noksharrays local -a cmdline local -x alcontext @@ -1084,7 +1081,7 @@ abk=( 'co' './configure && make && sudo make install' ) -zleiab() { +function zleiab () { emulate -L zsh setopt extendedglob local MATCH @@ -1095,22 +1092,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}'}; } +# press "ctrl-x d" to insert the actual date in the form yyyy-mm-dd +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='' @@ -1123,7 +1119,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" @@ -1134,7 +1130,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}) @@ -1147,7 +1143,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 @@ -1186,8 +1182,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 @@ -1202,7 +1197,7 @@ help_zle_parse_keybindings() [[ $load_cache -eq 0 ]] && . $HELP_ZLE_CACHE_FILE && return fi - #fill with default keybindings, possibly to be overwriten in a file later + #fill with default keybindings, possibly to be overwritten in a file later #Note that due to zsh inconsistency on escaping assoc array keys, we encase the key in '' which we will remove later local -A help_zle_keybindings help_zle_keybindings['@']="set MARK" @@ -1255,7 +1250,7 @@ help_zle_parse_keybindings() # ignores lines that are commentend out # grabs first in '' or "" enclosed string with length between 1 and 6 characters 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 ? + #description previously 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 k=${${${${${${${match[1]/\\e\^h/}/\\e\^\?/}/\\e\[5~/}/\\e\[6~/}//(\\e|\^\[)/}//\^/}/3~/} @@ -1288,8 +1283,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 @@ -1305,7 +1299,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) @@ -1336,17 +1330,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} ]] } @@ -1365,7 +1359,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 @@ -1494,7 +1488,7 @@ 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 +bind2maps emacs viins -- -s '^xd' insert-datestamp #k# Insert last typed word bind2maps emacs viins -- -s "\em" insert-last-typed-word #k# A smart shortcut for \kbd{fg} @@ -1581,14 +1575,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 @@ -1599,7 +1593,7 @@ function command_not_found_handler() { # history #v# -HISTFILE=${ZDOTDIR:-${HOME}}/.zsh_history +HISTFILE=${HISTFILE:-${ZDOTDIR:-${HOME}}/.zsh_history} isgrmlcd && HISTSIZE=500 || HISTSIZE=5000 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history @@ -1608,50 +1602,53 @@ isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history DIRSTACKSIZE=${DIRSTACKSIZE:-20} DIRSTACKFILE=${DIRSTACKFILE:-${ZDOTDIR:-${HOME}}/.zdirs} -typeset -gaU GRML_PERSISTENT_DIRSTACK -function grml_dirstack_filter() { - local -a exclude - local filter entry - if zstyle -s ':grml:chpwd:dirstack' filter filter; then - $filter $1 && return 0 - fi - if zstyle -a ':grml:chpwd:dirstack' exclude exclude; then - for entry in "${exclude[@]}"; do - [[ $1 == ${~entry} ]] && return 0 - done - fi - return 1 -} - -chpwd() { - (( $DIRSTACKSIZE <= 0 )) && return - [[ -z $DIRSTACKFILE ]] && return - grml_dirstack_filter $PWD && return - GRML_PERSISTENT_DIRSTACK=( - $PWD "${(@)GRML_PERSISTENT_DIRSTACK[1,$DIRSTACKSIZE]}" - ) - builtin print -l ${GRML_PERSISTENT_DIRSTACK} >! ${DIRSTACKFILE} -} +if zstyle -T ':grml:chpwd:dirstack' enable; then + typeset -gaU GRML_PERSISTENT_DIRSTACK + function grml_dirstack_filter () { + local -a exclude + local filter entry + if zstyle -s ':grml:chpwd:dirstack' filter filter; then + $filter $1 && return 0 + fi + if zstyle -a ':grml:chpwd:dirstack' exclude exclude; then + for entry in "${exclude[@]}"; do + [[ $1 == ${~entry} ]] && return 0 + done + fi + return 1 + } -if [[ -f ${DIRSTACKFILE} ]]; then - # Enabling NULL_GLOB via (N) weeds out any non-existing - # directories from the saved dir-stack file. - dirstack=( ${(f)"$(< $DIRSTACKFILE)"}(N) ) - # "cd -" won't work after login by just setting $OLDPWD, so - [[ -d $dirstack[1] ]] && cd -q $dirstack[1] && cd -q $OLDPWD -fi + function chpwd () { + (( ZSH_SUBSHELL )) && return + (( $DIRSTACKSIZE <= 0 )) && return + [[ -z $DIRSTACKFILE ]] && return + grml_dirstack_filter $PWD && return + GRML_PERSISTENT_DIRSTACK=( + $PWD "${(@)GRML_PERSISTENT_DIRSTACK[1,$DIRSTACKSIZE]}" + ) + builtin print -l ${GRML_PERSISTENT_DIRSTACK} >! ${DIRSTACKFILE} + } -if zstyle -T ':grml:chpwd:dirstack' filter-on-load; then - for i in "${dirstack[@]}"; do - if ! grml_dirstack_filter "$i"; then - GRML_PERSISTENT_DIRSTACK=( - "${GRML_PERSISTENT_DIRSTACK[@]}" - $i - ) - fi - done -else - GRML_PERSISTENT_DIRSTACK=( "${dirstack[@]}" ) + if [[ -f ${DIRSTACKFILE} ]]; then + # Enabling NULL_GLOB via (N) weeds out any non-existing + # directories from the saved dir-stack file. + dirstack=( ${(f)"$(< $DIRSTACKFILE)"}(N) ) + # "cd -" won't work after login by just setting $OLDPWD, so + [[ -d $dirstack[1] ]] && cd -q $dirstack[1] && cd -q $OLDPWD + fi + + if zstyle -t ':grml:chpwd:dirstack' filter-on-load; then + for i in "${dirstack[@]}"; do + if ! grml_dirstack_filter "$i"; then + GRML_PERSISTENT_DIRSTACK=( + "${GRML_PERSISTENT_DIRSTACK[@]}" + $i + ) + fi + done + else + GRML_PERSISTENT_DIRSTACK=( "${dirstack[@]}" ) + fi fi # directory based profiles @@ -1667,7 +1664,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 @@ -1747,7 +1744,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 @@ -1764,13 +1761,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+=" ^" @@ -1791,7 +1794,7 @@ if (( $#batteries > 0 )) ; then fi } -batteryopenbsd(){ +function batteryopenbsd () { GRML_BATTERY_LEVEL='' local bat batfull batwarn batnow num for num in 0 1 ; do @@ -1820,7 +1823,7 @@ for num in 0 1 ; do done } -batteryfreebsd(){ +function batteryfreebsd () { GRML_BATTERY_LEVEL='' local num local -A table @@ -1847,7 +1850,7 @@ for num in 0 1 ; do done } -batterydarwin(){ +function batterydarwin () { GRML_BATTERY_LEVEL='' local -a table table=( ${$(pmset -g ps)[(w)7,8]%%(\%|);} ) @@ -1913,7 +1916,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 @@ -1923,7 +1926,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 @@ -2009,6 +2012,19 @@ function prompt_grml_help () { accordingly. Default (left): rc change-root user at host path vcs percent; Default (right): sad-smiley + - strip-sensitive-characters (boolean): If the \`prompt_subst' option + is active in zsh, the shell performs lots of expansions on prompt + variable strings, including command substitution. So if you don't + control where some of your prompt strings is coming from, this is + an exploitable weakness. Grml's zsh setup does not set this option + and it is off in the shell in zsh-mode by default. If it *is* turned + on however, this style becomes active, and there are two flavours of + it: On per default is a global variant in the '*:setup' context. This + strips characters after the whole prompt string was constructed. There + is a second variant in the '*:items:', that is off by default. + It allows fine grained control over which items' data is stripped. + The characters that are stripped are: \$ and \`. + Available styles in 'items:' are: pre, post. These are strings that are inserted before (pre) and after (post) the item in question. Thus, the following would cause the user name to be printed in red instead of the @@ -2058,7 +2074,7 @@ function grml_prompt_setup () { autoload -Uz vcs_info # The following autoload is disabled for now, since this setup includes a # static version of the ‘add-zsh-hook’ function above. It needs to be - # reenabled as soon as that static definition is removed again. + # re-enabled as soon as that static definition is removed again. #autoload -Uz add-zsh-hook add-zsh-hook precmd prompt_$1_precmd } @@ -2263,7 +2279,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" @@ -2271,14 +2287,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 @@ -2292,21 +2310,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) @@ -2316,14 +2334,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 () { @@ -2367,11 +2404,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_}'"%# " @@ -2380,7 +2415,6 @@ grml_prompt_fallback() { else PROMPT="${RED}${p0}${BLUE}${p1}" fi - unset p0 p1 } if zrcautoload promptinit && promptinit 2>/dev/null ; then @@ -2393,6 +2427,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 @@ -2425,6 +2460,7 @@ if is437; then fi else grml_prompt_fallback + function precmd () { (( ${+functions[vcs_info]} )) && vcs_info; } fi # Terminal-title wizardry @@ -2493,7 +2529,7 @@ function grml_control_xterm_title () { # The following autoload is disabled for now, since this setup includes a # static version of the ‘add-zsh-hook’ function above. It needs to be -# reenabled as soon as that static definition is removed again. +# re-enabled as soon as that static definition is removed again. #zrcautoload add-zsh-hook || add-zsh-hook () { :; } if [[ $NOPRECMD -eq 0 ]]; then add-zsh-hook precmd grml_reset_screen_title @@ -2552,7 +2588,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: @@ -2566,7 +2605,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 @@ -2577,7 +2616,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 @@ -2588,12 +2627,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" @@ -2662,38 +2701,56 @@ 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 policy} + alias acp='apt-cache policy' + if check_com -c apt ; then + #a3# Execute \kbd{apt search} + alias acs='apt search' + #a3# Execute \kbd{apt show} + alias acsh='apt show' + #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 update} + salias au="apt update" + else + alias acs='apt-cache search' + alias acsh='apt-cache show' + 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 @@ -2705,7 +2762,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. @@ -2723,10 +2780,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 @@ -2737,7 +2794,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 } @@ -2759,7 +2816,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 @@ -2769,7 +2826,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 # @@ -2800,7 +2857,7 @@ compdef _functions freload # Module zstat is loaded by default in grml zshrc, no extra action needed for that. # # Known bugs: -# If you happen to come accross a symlink that points to a destination on an other partition +# If you happen to come across a symlink that points to a destination on another partition # with the same inode number, that will be marked as symlink loop though it is not. # Two hints for this situation: # I) Play lottery the same day, as you seem to be rather lucky right now. @@ -2812,15 +2869,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 @@ -2833,8 +2890,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 @@ -2844,7 +2901,7 @@ sll() { file="${file:t}" if [[ -d ${jumpd} ]] ; then - builtin cd "${jumpd}" || RTN=1 + builtin cd -q "${jumpd}" || RTN=1 fi file=$(readlink "$file") @@ -2852,7 +2909,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 @@ -2861,7 +2918,7 @@ sll() { if (( ${#} >= 1 )) ; then print "" fi - builtin cd "${curdir}" + builtin cd -q "${curdir}" done return ${RTN} } @@ -2871,7 +2928,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 @@ -2896,11 +2953,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 @@ -2913,11 +2970,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 @@ -2926,11 +2983,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 @@ -2939,23 +2996,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 @@ -2968,7 +3025,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" @@ -2996,21 +3053,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 @@ -3051,7 +3108,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 @@ -3066,7 +3123,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.' @@ -3080,7 +3137,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 @@ -3098,7 +3155,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 @@ -3110,7 +3167,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' @@ -3121,14 +3178,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 @@ -3142,7 +3202,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} @@ -3206,7 +3266,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 @@ -3280,14 +3340,14 @@ return 0;; return $result } -#f5# cd to directoy and list files -cl() { +#f5# cd to directory and list files +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}" @@ -3297,8 +3357,8 @@ cd() { fi } -#f5# Create Directoy and \kbd{cd} to it -mkcd() { +#f5# Create Directory and \kbd{cd} to it +function mkcd () { if (( ARGC != 1 )); then printf 'usage: mkcd \n' return 1; @@ -3312,25 +3372,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}) } @@ -3356,7 +3416,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]*) @@ -3375,7 +3435,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 @@ -3512,24 +3572,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 @@ -3552,7 +3610,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 @@ -3596,7 +3654,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] ' @@ -3648,7 +3706,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" @@ -3659,13 +3717,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 } @@ -3682,7 +3740,7 @@ fi # end of check whether we have the 'hg'-executable if (( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall ; then - unset abk[V] + unset "abk[V]" unalias 'V' &> /dev/null unfunction vman &> /dev/null unfunction viless &> /dev/null diff --git a/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_gmane b/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_gmane index f2d1e7d..74f8c97 100644 --- a/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_gmane +++ b/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_gmane @@ -63,7 +63,7 @@ function LOOKUP_help_${backend}() { printf ' gname.group.name:description\n' printf ' The '\'':description'\'' part is optional.\n' printf ' That way you can search for group names (using -L, -l and -s) and put\n' - printf ' your prefered groups into that file. That way you get rid of a lot of\n' + printf ' your preferred groups into that file. That way you get rid of a lot of\n' printf ' typing by using completion: %% lu gmane -g \n' printf '\nExamples:\n' printf ' %% zstyle '\'':lookup:*:%s:*'\'' list-default true\n' ${backend} diff --git a/usr_share_grml/zsh/functions/purge b/usr_share_grml/zsh/functions/purge index 344e821..fab7fcd 100644 --- a/usr_share_grml/zsh/functions/purge +++ b/usr_share_grml/zsh/functions/purge @@ -7,7 +7,7 @@ local -a -U FILES [[ -d "$1" ]] && { TRAPEXIT() { popd -q } && pushd -q "$1" } -TEXTEMPFILES=(*.tex(N-.:s/%tex/'(log|toc|aux|nav|snm|out|tex.backup|bbl|blg|bib.backup|vrb|lof|lot|hd|idx|fdb_latexmk|fls|glo|ilg|ind)(.N)'/)) +TEXTEMPFILES=(*.tex(N-.:s/%tex/'(log|toc|aux|nav|snm|out|tex.backup|bbl|blg|bib.backup|vrb|lof|lot|hd|idx|fdb_latexmk|fls|glo|ilg|ind|synctex.gz)(.N)'/)) GHCTEMPFILES=(*.(hs|lhs)(N-.:r:s/%/'.(hi|hc|(p|u|s)_(o|hi))(.N)'/)) @@ -21,6 +21,8 @@ FILES=( *~(.N) \#*\#(.N) *.o(.N) + *.d(.N) + *.d.<->(.N) a.out(.N) (*.|)core(|.<->)(.N) *.cmo(.N)