X-Git-Url: http://git.grml.org/?a=blobdiff_plain;ds=inline;f=etc%2Fzsh%2Fzshrc;h=55268d0b0374d487a2052a63fa9f24ff84ff6676;hb=3591a4c2133ad10b9b4a456402a9bb9e6019084b;hp=f2e1b3958f672b8ce69bf97da93c963f3c0e2ef1;hpb=5c716b322f326200b851bdd3c8751cb1ab475e6e;p=grml-etc-core.git
diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc
index f2e1b39..55268d0 100644
--- a/etc/zsh/zshrc
+++ b/etc/zsh/zshrc
@@ -134,7 +134,12 @@ is43(){
}
is433(){
- [[ $ZSH_VERSION == 4.3.<3->* || $ZSH_VERSION == <5->* ]] && return 0
+ [[ $ZSH_VERSION == 4.3.<3->* || $ZSH_VERSION == 4.<4->* || $ZSH_VERSION == <5->* ]] && return 0
+ return 1
+}
+
+is439(){
+ [[ $ZSH_VERSION == 4.3.<9->* || $ZSH_VERSION == 4.<4->* || $ZSH_VERSION == <5->* ]] && return 0
return 1
}
@@ -276,6 +281,7 @@ setopt nobeep # avoid "beep"ing
setopt pushd_ignore_dups # don't push the same dir twice.
setopt noglobdots # * shouldn't match dotfiles. ever.
setopt noshwordsplit # use zsh style word splitting
+setopt unset # don't error out when unset parameters are used
# }}}
@@ -291,79 +297,6 @@ GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0}
ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0}
-if isgrmlcd ; then
- GRML_WARN_SKEL=${GRML_WARN_SKEL:-0}
-else
- GRML_WARN_SKEL=${GRML_WARN_SKEL:-1}
-fi
-
-if (( GRML_WARN_SKEL != 0 )) ; then
-
-function grml_warn_skel_main() {
- printf '
-Dear user,
-
-You updated grml'\''s zshrc which brings a major change.
-The configuration is kept only in one file, being the global zshrc.
-In the past, the configuration was split in two files, with the
-second file being the .zshrc file from /etc/skel.
-
-If you have a .zshrc file in your home directory that originally
-came from the skel directory, please remove it. This is also the case
-if you followed earlier instructions from the grml-zsh-refcard or
-from on non-grml systems.
-
-Please see the current grml-zsh-refcard (available at
-) for updated installation information. In short,
-you don'\''t want a .zshrc.global file. Install the global zshrc to
-~/.zshrc and be done.
-
-If you need changes to the configuration, use ~/.zshrc.pre and
-~/.zshrc.local.
-
-'
-}
-
-function grml_warn_skel_remove() {
- printf 'To remove this warning execute '\''grml_do_not_warn_skel'\''.\n\n'
-}
-
-function grml_do_not_warn_skel() {
- printf '# Do not warn about old skel dot-files anymore\n' >>! ~/.zshrc.pre
- printf 'GRML_WARN_SKEL=0\n' >>! ~/.zshrc.pre
-}
-
-# let's try to guess how the user uses us.
-if is-at-least 4.3.7 ; then
- # funcsourcetrace requires at least version 4.3.7 of zsh.
- GRML_SRC_FILE="${${funcsourcetrace[1]}%:*}"
-
- grml_warn_skel_main
- case ${GRML_SRC_FILE} in
- (${HOME}/.zshrc.global)
- grml_warn_skel_remove
- printf '\nIt looks like you copied the grml zshrc to '\''~/.zshrc.global'\''.\n'
- printf 'Nowadays you just copy the global zshrc to '\''~/.zshrc'\'' to use\n'
- printf 'it on a non-grml-system.\n'
- ;;
- (${HOME}/.zshrc)
- printf '\nIt looks like you copied the grml zshrc to '\''~/.zshrc'\''.\n'
- printf 'We'\''ll disable this warning automatically for later sessions.\n'
- grml_do_not_warn_skel
- ;;
- (*)
- grml_do_not_warn_skel
- ;;
- esac
-else
- grml_warn_skel_main
- grml_warn_skel_remove
-fi
-
-unfunction grml_warn_skel_remove grml_warn_skel_main
-
-fi # GRML_WARN_SKEL
-
# }}}
# utility functions {{{
@@ -540,32 +473,6 @@ xsource "/etc/sysconfig/keyboard"
TZ=$(xcat /etc/timezone)
# }}}
-# check for potentially old files in 'completion.d' {{{
-setopt extendedglob
-xof=(/etc/zsh/completion.d/*~/etc/zsh/completion.d/_*(N))
-if (( ${#xof} > 0 )) ; then
- printf '\n -!- INFORMATION\n\n'
- printf ' -!- %s file(s) not starting with an underscore (_) found in\n' ${#xof}
- printf ' -!- /etc/zsh/completion.d/.\n\n'
- printf ' -!- While this has been the case in old versions of grml-etc-core,\n'
- printf ' -!- recent versions of the grml-zsh-setup have all these files rewritten\n'
- printf ' -!- and renamed. Furthermore, the grml-zsh-setup will *only* add files\n'
- printf ' -!- named _* to that directory.\n\n'
- printf ' -!- If you added functions to completion.d yourself, please consider\n'
- printf ' -!- moving them to /etc/zsh/functions.d/. Files in that directory, not\n'
- printf ' -!- starting with an underscore are marked for automatic loading\n'
- printf ' -!- by default (so that is quite convenient).\n\n'
- printf ' -!- If there are files *not* starting with an underscore from an older\n'
- printf ' -!- grml-etc-core in completion.d, you may safely remove them.\n\n'
- printf ' -!- Delete the files for example via running:\n\n'
- printf " rm ${xof}\n\n"
- printf ' -!- Note, that this message will *not* go away, unless you yourself\n'
- printf ' -!- resolve the situation manually.\n\n'
- BROKEN_COMPLETION_DIR=1
-fi
-unset xof
-# }}}
-
# {{{ set some variables
if check_com -c vim ; then
#v#
@@ -598,22 +505,16 @@ fi
# do Fink setup on darwin
isdarwin && xsource /sw/bin/init.sh
-# completion functions go to /etc/zsh/completion.d
-# function files may be put into /etc/zsh/functions.d, from where they
-# will be automatically autoloaded.
-if [[ -n "$BROKEN_COMPLETION_DIR" ]] ; then
- print 'Warning: not setting completion directories because broken files have been found.' >&2
-else
- [[ -d /etc/zsh/completion.d ]] && fpath=( $fpath /etc/zsh/completion.d )
- if [[ -d /etc/zsh/functions.d ]] ; then
- fdir='/etc/zsh/functions.d'
- fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
+# load our function and completion directories
+for fdir in /usr/share/grml/zsh/completion /usr/share/grml/functions; do
+ fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
+ if [[ ${fpath} == '/usr/share/grml/zsh/functions' ]] ; then
for func in ${fdir}/**/[^_]*[^~](N.) ; do
zrcautoload ${func:t}
done
- unset fdir
fi
-fi
+done
+unset fdir func
# support colors in less
export LESS_TERMCAP_mb=$'\E[01;31m'
@@ -686,18 +587,12 @@ zle -N insert-unicode-char
#k# Insert Unicode character
bindkey '^Xi' insert-unicode-char
-# just type 'cd ...' to get 'cd ../..'
-# rationalise-dot() {
-# if [[ $LBUFFER == *.. ]] ; then
-# LBUFFER+=/..
-# else
-# LBUFFER+=.
-# fi
-# }
-# zle -N rationalise-dot
-# bindkey . rationalise-dot
-
-# bindkey '\eq' push-line-or-edit
+#m# k Shift-tab Perform backwards menu completion
+if [[ -n "$terminfo[kcbt]" ]]; then
+ bindkey "$terminfo[kcbt]" reverse-menu-complete
+elif [[ -n "$terminfo[cbt]" ]]; then # required for GNU screen
+ bindkey "$terminfo[cbt]" reverse-menu-complete
+fi
## toggle the ,. abbreviation feature on/off
# NOABBREVIATION: default abbreviation-state
@@ -735,6 +630,11 @@ zle -N slash-backward-kill-word
#k# Kill everything in a word up to its last \kbd{/}
bindkey '\ev' slash-backward-kill-word
+# use the new *-pattern-* widgets for incremental history search
+if is439 ; then
+ bindkey '^r' history-incremental-pattern-search-backward
+ bindkey '^s' history-incremental-pattern-search-forward
+fi
# }}}
# a generic accept-line wrapper {{{
@@ -757,7 +657,7 @@ bindkey '\ev' slash-backward-kill-word
zstyle ':acceptline:*' rehash true
function Accept-Line() {
- setopt localoptions noksharrays
+ emulate -L zsh
local -a subs
local -xi aldone
local sub
@@ -776,6 +676,7 @@ function Accept-Line() {
}
function Accept-Line-getdefault() {
+ emulate -L zsh
local default_action
zstyle -s ":acceptline:${alcontext}" default_action default_action
@@ -790,7 +691,7 @@ function Accept-Line-getdefault() {
}
function accept-line() {
- setopt localoptions noksharrays
+ emulate -L zsh
local -a cmdline
local -x alcontext
local buf com fname format msg default_action
@@ -944,7 +845,9 @@ 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
-zrcautoload run-help # use via 'esc-h'
+for rh in run-help{,-git,-svk,-svn}; do
+ zrcautoload $rh
+done; unset rh
# completion system
if zrcautoload compinit ; then
@@ -964,17 +867,9 @@ done
# autoload zsh modules when they are referenced
if is4 ; then
- tmpargs=(
- a stat
- a zpty
- ap mapfile
- )
-
- while (( ${#tmpargs} > 0 )) ; do
- zmodload -${tmpargs[1]} zsh/${tmpargs[2]} ${tmpargs[2]}
- shift 2 tmpargs
- done
- unset tmpargs
+ zmodload -a zsh/stat zstat
+ zmodload -a zsh/zpty zpty
+ zmodload -ap zsh/mapfile mapfile
fi
if is4 && zrcautoload insert-files && zle -N insert-files ; then
@@ -1003,11 +898,11 @@ if is4 && [[ -n ${(k)modules[zsh/complist]} ]] ; then
fi
# press "ctrl-e d" to insert the actual date in the form yyyy-mm-dd
-_bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
-zle -N _bkdate
+insert-datestamp() { LBUFFER+=${(%):-'%D{%Y-%m-%d}'}; }
+zle -N insert-datestamp
#k# Insert a timestamp on the command line (yyyy-mm-dd)
-bindkey '^Ed' _bkdate
+bindkey '^Ed' insert-datestamp
# press esc-m for inserting last typed word again (thanks to caphuso!)
insert-last-typed-word() { zle insert-last-word -- 0 -1 };
@@ -1016,8 +911,19 @@ zle -N insert-last-typed-word;
#k# Insert last typed word
bindkey "\em" insert-last-typed-word
-#k# Shortcut for \kbd{fg}
-bindkey -s '^z' "fg\n"
+function grml-zsh-fg() {
+ if (( ${#jobstates} )); then
+ zle .push-input
+ [[ -o hist_ignore_space ]] && BUFFER=' ' || BUFFER=''
+ BUFFER="${BUFFER}fg"
+ zle .accept-line
+ else
+ zle -M 'No background jobs. Doing nothing.'
+ fi
+}
+zle -N grml-zsh-fg
+#k# A smart shortcut for \kbd{fg}
+bindkey '^z' grml-zsh-fg
# run command line as user root via sudo:
sudo-command-line() {
@@ -1070,10 +976,12 @@ if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
fi
chpwd() {
+ local -ax my_stack
+ my_stack=( ${PWD} ${dirstack} )
if is42 ; then
- builtin print -l ${(u)dirstack} >! ${DIRSTACKFILE}
+ builtin print -l ${(u)my_stack} >! ${DIRSTACKFILE}
else
- uprint dirstack >! ${DIRSTACKFILE}
+ uprint my_stack >! ${DIRSTACKFILE}
fi
}
@@ -1227,6 +1135,12 @@ if ! is41 ; then
zstyle ':vcs_info:*' enable false
fi
+if zrcautoload vcs_info; then
+ GRML_VCS_INFO=0
+else
+# I'm not reindenting the whole code below.
+GRML_VCS_INFO=1
+
# The following code is imported from the file 'zsh/functions/vcs_info'
# from ,
# which distributed under the same terms as zsh itself.
@@ -1710,30 +1624,38 @@ VCS_INFO_git_getaction () { #{{{
}
# }}}
VCS_INFO_git_getbranch () { #{{{
- local gitbranch gitdir=$1
+ local gitbranch gitdir=$1 tmp actiondir
local gitsymref='git symbolic-ref HEAD'
- if [[ -d "${gitdir}/rebase-apply" ]] \
- || [[ -d "${gitdir}/rebase" ]] \
- || [[ -d "${gitdir}/../.dotest" ]] \
- || [[ -f "${gitdir}/MERGE_HEAD" ]] ; then
+ actiondir=''
+ for tmp in "${gitdir}/rebase-apply" \
+ "${gitdir}/rebase" \
+ "${gitdir}/../.dotest"; do
+ if [[ -d ${tmp} ]]; then
+ actiondir=${tmp}
+ break
+ fi
+ done
+ if [[ -n ${actiondir} ]]; then
+ gitbranch="$(${(z)gitsymref} 2> /dev/null)"
+ [[ -z ${gitbranch} ]] && [[ -r ${actiondir}/head-name ]] \
+ && gitbranch="$(< ${actiondir}/head-name)"
+
+ elif [[ -f "${gitdir}/MERGE_HEAD" ]] ; then
gitbranch="$(${(z)gitsymref} 2> /dev/null)"
- [[ -z ${gitbranch} ]] && [[ -r ${gitdir}/rebase-apply/head-name ]] \
- && gitbranch="$(< ${gitdir}/rebase-apply/head-name)"
+ [[ -z ${gitbranch} ]] && gitbranch="$(< ${gitdir}/MERGE_HEAD)"
- elif [[ -f "${gitdir}/rebase-merge/interactive" ]] \
- || [[ -d "${gitdir}/rebase-merge" ]] ; then
+ elif [[ -d "${gitdir}/rebase-merge" ]] ; then
gitbranch="$(< ${gitdir}/rebase-merge/head-name)"
- elif [[ -f "${gitdir}/.dotest-merge/interactive" ]] \
- || [[ -d "${gitdir}/.dotest-merge" ]] ; then
+ elif [[ -d "${gitdir}/.dotest-merge" ]] ; then
gitbranch="$(< ${gitdir}/.dotest-merge/head-name)"
else
gitbranch="$(${(z)gitsymref} 2> /dev/null)"
if [[ $? -ne 0 ]] ; then
- gitbranch="$(git describe --exact-match HEAD 2>/dev/null)"
+ gitbranch="refs/tags/$(git describe --exact-match HEAD 2>/dev/null)"
if [[ $? -ne 0 ]] ; then
gitbranch="${${"$(< $gitdir/HEAD)"}[1,7]}..."
@@ -1741,7 +1663,7 @@ VCS_INFO_git_getbranch () { #{{{
fi
fi
- printf '%s' "${gitbranch##refs/heads/}"
+ printf '%s' "${gitbranch##refs/[^/]##/}"
return 0
}
# }}}
@@ -1833,6 +1755,7 @@ VCS_INFO_detect_by_dir() { #{{{
realbasedir="$(VCS_INFO_realpath ${basedir})"
while [[ ${realbasedir} != '/' ]]; do
+ [[ -r ${realbasedir} ]] || return 1
if [[ -n ${vcs_comm[detect_need_file]} ]] ; then
[[ -d ${basedir}/${dirname} ]] && \
[[ -e ${basedir}/${dirname}/${vcs_comm[detect_need_file]} ]] && \
@@ -1865,7 +1788,7 @@ VCS_INFO_cdv_detect() { #{{{
}
# }}}
VCS_INFO_cvs_detect() { #{{{
- VCS_INFO_check_com svn || return 1
+ VCS_INFO_check_com cvs || return 1
[[ -d "./CVS" ]] && [[ -r "./CVS/Repository" ]] && return 0
return 1
}
@@ -1954,6 +1877,7 @@ vcs_info_printsys () { # {{{
}
# }}}
vcs_info_lastmsg () { # {{{
+ emulate -L zsh
local -i i
VCS_INFO_maxexports
@@ -1969,6 +1893,11 @@ vcs_info_lastmsg () { # {{{
}
# }}}
vcs_info () { # {{{
+ emulate -L zsh
+ setopt extendedglob
+
+ [[ -r . ]] || return 1
+
local pat
local -i found
local -a VCSs disabled dps
@@ -2040,6 +1969,8 @@ vcs_info () { # {{{
VCS_INFO_set --nvcs preinit
# }}}
+fi
+
# Change vcs_info formats for the grml prompt. The 2nd format sets up
# $vcs_info_msg_1_ to contain "zsh: repo-name" used to set our screen title.
# TODO: The included vcs_info() version still uses $VCS_INFO_message_N_.
@@ -2084,6 +2015,26 @@ setopt prompt_subst
# make sure to use right prompt only when not running a command
is41 && setopt transient_rprompt
+
+function ESC_print () {
+ info_print $'\ek' $'\e\\' "$@"
+}
+function set_title () {
+ info_print $'\e]0;' $'\a' "$@"
+}
+
+function info_print () {
+ local esc_begin esc_end
+ esc_begin="$1"
+ esc_end="$2"
+ shift 2
+ printf '%s' ${esc_begin}
+ for item in "$@" ; do
+ printf '%s ' "$item"
+ done
+ printf '%s' "${esc_end}"
+}
+
# TODO: revise all these NO* variables and especially their documentation
# in zsh-help() below.
is4 && [[ $NOPRECMD -eq 0 ]] && precmd () {
@@ -2093,9 +2044,11 @@ is4 && [[ $NOPRECMD -eq 0 ]] && precmd () {
if [[ $TERM == screen* ]] ; then
if [[ -n ${VCS_INFO_message_1_} ]] ; then
- print -nP "\ek${VCS_INFO_message_1_}\e\\"
+ ESC_print ${VCS_INFO_message_1_}
+ elif [[ -n ${vcs_info_msg_1_} ]] ; then
+ ESC_print ${vcs_info_msg_1_}
else
- print -nP "\ekzsh\e\\"
+ ESC_print "zsh"
fi
fi
# just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT
@@ -2113,7 +2066,7 @@ is4 && [[ $NOPRECMD -eq 0 ]] && precmd () {
[[ ${NOTITLE} -gt 0 ]] && return 0
case $TERM in
(xterm*|rxvt*)
- print -Pn "\e]0;%n@%m: %~\a"
+ set_title ${(%):-"%n@%m: %~"}
;;
esac
}
@@ -2131,13 +2084,13 @@ preexec () {
if [[ "$TERM" == screen* ]] ; then
# local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # don't use hostname
local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
- echo -ne "\ek$CMD\e\\"
+ ESC_print ${CMD}
fi
# adjust title of xterm
[[ ${NOTITLE} -gt 0 ]] && return 0
case $TERM in
(xterm*|rxvt*)
- print -Pn "\e]0;%n@%m: $1\a"
+ set_title "${(%):-"%n@%m:"}" "$1"
;;
esac
}
@@ -2154,23 +2107,29 @@ fi
# don't use colors on dumb terminals (like emacs):
if [[ "$TERM" == dumb ]] ; then
- PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_0_}'"%# "
+ PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< "
else
# only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt
# set variable identifying the chroot you work in (used in the prompt below)
if [[ $GRMLPROMPT -gt 0 ]] ; then
PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D
-${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< %# "
+${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "
else
# This assembles the primary prompt string
if (( EUID != 0 )); then
- PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_0_}'"%# "
+ PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "
else
- PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "'${VCS_INFO_message_0_}'"%# "
+ PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< "
fi
fi
fi
+if (( GRML_VCS_INFO )); then
+ PROMPT="${PROMPT}"'${VCS_INFO_message_0_}'"%# "
+else
+ PROMPT="${PROMPT}"'${vcs_info_msg_0_}'"%# "
+fi
+
# if we are inside a grml-chroot set a specific prompt theme
if [[ -n "$GRML_CHROOT" ]] ; then
PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# "
@@ -2198,7 +2157,11 @@ if check_com -c screen ; then
elif [[ -r $HOME/.screenrc ]] ; then
alias screen="${commands[screen]} -c $HOME/.screenrc"
else
- [[ -r /etc/grml/screenrc_grml ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc_grml"
+ if [[ -r /etc/grml/screenrc_grml ]]; then
+ alias screen="${commands[screen]} -c /etc/grml/screenrc_grml"
+ else
+ [[ -r /etc/grml/screenrc ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc"
+ fi
fi
fi
@@ -2237,7 +2200,7 @@ alias rm='nocorrect rm' # no spelling correction on rm
#a1# Execute \kbd{rmdir}
alias rd='rmdir'
-#a1# Execute \kbd{rmdir}
+#a1# Execute \kbd{mkdir}
alias md='mkdir'
# see http://www.cl.cam.ac.uk/~mgk25/unicode.html#term for details
@@ -2272,7 +2235,6 @@ swspeak() {
export PS1="%m%# "
/usr/sbin/swspeak-setup $@
else # old version:
- aumix -w 90 -v 90 -p 90 -m 90
if ! [[ -r /dev/softsynth ]] ; then
flite -o play -t "Sorry, software synthesizer not available. Did you boot with swspeak bootoption?"
return 1
@@ -2294,6 +2256,12 @@ check_com 0 || alias 0='return 0'
check_com S &>/dev/null || alias S='screen'
check_com s &>/dev/null || alias s='ssh'
+# especially for roadwarriors using GNU screen and ssh:
+if ! check_com asc &>/dev/null ; then
+ asc() { autossh -t "$@" 'screen -RdU' }
+ compdef asc=ssh
+fi
+
# get top 10 shell commands:
alias top10='print -l ? ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
@@ -2439,12 +2407,17 @@ if check_com -c grep-status ; then
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
- alias cdrecord="echo 'cdrecord is not provided under its original name by Debian anymore.
+if [[ -L /usr/bin/cdrecord ]] || ! check_com -c cdrecord; then
+ if check_com -c wodim; then
+ cdrecord() {
+ cat <' with menu
- zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
+ # automatically complete 'cd -' and 'cd -' with menu
+ # zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
# insert all expansions for expand completer
zstyle ':completion:*:expand:*' tag-order all-expansions
@@ -2670,8 +2643,12 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
fi
}
- if check_com -c 915resolution ; then
- alias 855resolution='echo -e "Please use 915resolution as resolution modify tool for Intel graphic chipset."; return -1'
+ if check_com -c 915resolution; then
+ 855resolution() {
+ echo "Please use 915resolution as resolution modifying tool for Intel \
+graphic chipset."
+ return -1
+ }
fi
#a1# Output version of running grml
@@ -2683,7 +2660,10 @@ If you want to use xinit anyway please call \"/usr/bin/xinit\"."
fi
if check_com -c grml-debootstrap ; then
- alias debian2hd='print "Installing debian to harddisk is possible via using grml-debootstrap." ; return 1'
+ debian2hd() {
+ echo "Installing debian to harddisk is possible by using grml-debootstrap."
+ return 1
+ }
fi
}
# }}}
@@ -2720,23 +2700,7 @@ setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
#f1# Reload an autoloadable function
freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
-
-# TODO: Who really uses reload()? The proper way to reload a zsh setup is to
-# actually restart the shell via 'exec zsh'. And reload with arguments is the
-# same as freload() above. -ft
-#f1# Reload zsh setup
-reload() {
- if [[ "$#*" -eq 0 ]] ; then
- [[ -r ~/.zshrc ]] && . ~/.zshrc
- else
- local fn
- for fn in "$@"; do
- unfunction $fn
- autoload -U $fn
- done
- fi
-}
-compdef _functions reload freload
+compdef _functions freload
#f1# List symlinks in detail (more detailed version of 'readlink -f' and 'whence -s')
sll() {
@@ -3025,9 +2989,17 @@ iwclient() {
salias dhclient "$(wavemon -d | awk '/device/{print $2}')"
}
-# spawn a minimally set up ksh - useful if you want to umount /usr/.
+# spawn a minimally set up mksh - useful if you want to umount /usr/.
minimal-shell() {
- exec env -i ENV="/etc/minimal-shellrc" HOME="$HOME" TERM="$TERM" ksh
+ emulate -L zsh
+ local shell="/bin/mksh"
+
+ if [[ ! -x ${shell} ]]; then
+ printf '`%s'\'' not available, giving up.\n' ${shell} >&2
+ return 1
+ fi
+
+ exec env -i ENV="/etc/minimal-shellrc" HOME="$HOME" TERM="$TERM" ${shell}
}
# a wrapper for vim, that deals with title setting
@@ -3103,6 +3075,41 @@ exit 0;
return $?
}
+ssl_hashes=( sha512 sha256 sha1 md5 )
+
+for sh in ${ssl_hashes}; do
+ ssl-cert-${sh}() {
+ emulate -L zsh
+ if [[ -z $1 ]] ; then
+ printf 'usage: %s \n' "ssh-cert-${sh}"
+ return 1
+ fi
+ openssl x509 -noout -fingerprint -${sh} -in $1
+ }
+done; unset sh
+
+ssl-cert-fingerprints() {
+ emulate -L zsh
+ local i
+ if [[ -z $1 ]] ; then
+ printf 'usage: ssl-cert-fingerprints \n'
+ return 1
+ fi
+ for i in ${ssl_hashes}
+ do ssl-cert-$i $1;
+ done
+}
+
+ssl-cert-info() {
+ emulate -L zsh
+ if [[ -z $1 ]] ; then
+ printf 'usage: ssl-cert-info \n'
+ return 1
+ fi
+ openssl x509 -noout -text -in $1
+ ssl-cert-fingerprints $1
+}
+
# }}}
# {{{ make sure our environment is clean regarding colors
@@ -3177,20 +3184,6 @@ alias CO="./configure"
#a2# Execute \kbd{./configure --help}
alias CH="./configure --help"
-# arch/tla stuff
-if check_com -c tla ; then
- #a2# Execute \kbd{tla what-changed --diffs | less}
- alias tdi='tla what-changed --diffs | less'
- #a2# Execute \kbd{tla-buildpackage}
- alias tbp='tla-buildpackage'
- #a2# Execute \kbd{tla archive-mirror}
- alias tmi='tla archive-mirror'
- #a2# Execute \kbd{tla commit}
- alias tco='tla commit'
- #a2# Execute \kbd{tla star-merge}
- alias tme='tla star-merge'
-fi
-
# listing stuff
#a2# Execute \kbd{ls -lSrah}
alias dir="ls -lSrah"
@@ -3201,9 +3194,9 @@ alias lsa='ls -a .*(.)' # only show dot-files
#a2# Only files with setgid/setuid/sticky flag
alias lss='ls -l *(s,S,t)' # only files with setgid/setuid/sticky flag
#a2# Only show 1st ten symlinks
-alias lsl='ls -l *(@[1,10])' # only symlinks
+alias lsl='ls -l *(@)' # only symlinks
#a2# Display only executables
-alias lsx='ls -l *(*[1,10])' # only executables
+alias lsx='ls -l *(*)' # only executables
#a2# Display world-{readable,writable,executable} files
alias lsw='ls -ld *(R,W,X.^ND/)' # world-{readable,writable,executable} files
#a2# Display the ten biggest files
@@ -3233,8 +3226,6 @@ alias r-x='chmod 755'
#a2# Execute \kbd{mkdir -o}
alias md='mkdir -p'
-check_com -c ipython && alias ips='ipython -p sh'
-
# console stuff
#a2# Execute \kbd{mplayer -vo fbdev}
alias cmplayer='mplayer -vo fbdev'
@@ -3253,12 +3244,6 @@ check_com -c python && alias http="python -m SimpleHTTPServer"
# Use 'g' instead of 'git':
check_com g || alias g='git'
-# check whether Debian's package management (dpkg) is running
-if check_com salias ; then
- #a2# Check whether a dpkg instance is currently running
- salias check_dpkg_running="dpkg_running"
-fi
-
# work around non utf8 capable software in utf environment via $LANG and luit
if check_com isutfenv && check_com luit ; then
if check_com -c mrxvt ; then
@@ -3428,7 +3413,11 @@ disassemble(){
}
#f5# Firefox remote control - open given URL
fir() {
- firefox -a firefox -remote "openURL($1)"
+ if [ -e /etc/debian_version ]; then
+ firefox -a iceweasel -remote "openURL($1)" || firefox ${1}&
+ else
+ firefox -a firefox -remote "openURL($1)" || firefox ${1}&
+ fi
}
#f5# Create Directoy and \kbd{cd} to it
mcd() {
@@ -3442,26 +3431,16 @@ mdiff() {
memusage() {
ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc
}
-#f5# Show contents of tar file
+#f5# Show contents of gzipped tar file
shtar() {
emulate -L zsh
gunzip -c $1 | tar -tf - -- | $PAGER
}
-#f5# Show contents of tgz file
-shtgz() {
- emulate -L zsh
- tar -ztf $1 | $PAGER
-}
#f5# Show contents of zip file
shzip() {
emulate -L zsh
unzip -l $1 | $PAGER
}
-#f5# Greps signature from file
-sig() {
- emulate -L zsh
- agrep -d '^-- $' "$*" ~/.Signature
-}
#f5# Unified diff
udiff() {
emulate -L zsh
@@ -3473,17 +3452,6 @@ viless() {
vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}"
}
-# download video from youtube
-ytdl() {
- emulate -L zsh
- if ! [[ -n "$2" ]] ; then
- print "Usage: ydtl http://youtube.com/watch?v=.... outputfile.flv">&2
- return 1
- else
- wget -O${2} "http://youtube.com/get_video?"${${${"$(wget -o/dev/null -O- "${1}" | grep -e watch_fullscreen)"}##*watch_fullscreen\?}%%\&fs=*}
- fi
-}
-
# Function Usage: uopen $URL/$file
#f5# Download a file and display it locally
uopen() {
@@ -3523,7 +3491,7 @@ limg() {
if [[ $#images -eq 0 ]] ; then
print "No image files found"
else
- ls "$@" "$images[@]"
+ ls "$images[@]"
fi
}
@@ -3546,12 +3514,26 @@ regcheck() {
pcre_match $2 && echo "regex matches" || echo "regex does not match"
}
-#f5# List files which have been modified within the last {\it n} days
-new() {
+#f5# List files which have been accessed within the last {\it n} days, {\it n} defaults to 1
+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() {
emulate -L zsh
- print -l *(m-$1)
+ print -l -- *(c-${1:-1})
}
+#f5# List files which have been modified within the last {\it n} days, {\it n} defaults to 1
+modified() {
+ emulate -L zsh
+ print -l -- *(m-${1:-1})
+}
+# modified() was named new() in earlier versions, add an alias for backwards compatibility
+check_com new || alias new=modified
+
#f5# Grep in history
greph() {
emulate -L zsh
@@ -3612,7 +3594,7 @@ purge() {
rm ${FILES}
echo ">> $PWD purged, $NBFILES files removed"
else
- echo "Ok. .. than not.."
+ echo "Ok. .. then not.."
fi
fi
}
@@ -3780,19 +3762,8 @@ ansi-colors() {
done
}
-# suidfind() { ls -latg $path | grep '^...s' }
#f5# Find all files in \$PATH with setuid bit set
-suidfind() { ls -latg $path/*(sN) }
-
-# See above but this is /better/ ... anywise ..
-findsuid() {
- print 'Output will be written to ~/suid_* ...'
- $SUDO find / -type f \( -perm -4000 -o -perm -2000 \) -ls > ~/suid_suidfiles.`date "+%Y-%m-%d"`.out 2>&1
- $SUDO find / -type d \( -perm -4000 -o -perm -2000 \) -ls > ~/suid_suiddirs.`date "+%Y-%m-%d"`.out 2>&1
- $SUDO find / -type f \( -perm -2 -o -perm -20 \) -ls > ~/suid_writefiles.`date "+%Y-%m-%d"`.out 2>&1
- $SUDO find / -type d \( -perm -2 -o -perm -20 \) -ls > ~/suid_writedirs.`date "+%Y-%m-%d"`.out 2>&1
- print 'Finished'
-}
+suidfind() { ls -latg $path | grep '^...s' }
# TODO: So, this is the third incarnation of this function!?
#f5# Reload given functions
@@ -4016,50 +3987,6 @@ getair() {
[[ -x /usr/local/bin/air ]] && [[ -n "$DISPLAY" ]] && $SUDO air
}
-#f5# Get specific git commitdiff
-git-get-diff() {
- emulate -L zsh
- if [[ -z $GITTREE ]] ; then
- GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
- fi
- if ! [[ -z $1 ]] ; then
- ${=BROWSER} "http://kernel.org/git/?p=$GITTREE;a=commitdiff;h=$1"
- else
- echo "Usage: git-get-diff "
- fi
-}
-
-#f5# Get specific git commit
-git-get-commit() {
- emulate -L zsh
- if [[ -z $GITTREE ]] ; then
- GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
- fi
- if ! [[ -z $1 ]] ; then
- ${=BROWSER} "http://kernel.org/git/?p=$GITTREE;a=commit;h=$1"
- else
- echo "Usage: git-get-commit "
- fi
-}
-
-#f5# Get specific git diff
-git-get-plaindiff () {
- emulate -L zsh
- if [[ -z $GITTREE ]] ; then
- GITTREE='linux/kernel/git/torvalds/linux-2.6.git'
- fi
- if [[ -z $1 ]] ; then
- echo 'Usage: git-get-plaindiff '
- else
- echo -n "Downloading $1.diff ... "
- # avoid "generating ..." stuff from kernel.org server:
- wget --quiet "http://kernel.org/git/?p=$GITTREE;a=commitdiff_plain;h=$1" -O /dev/null
- wget --quiet "http://kernel.org/git/?p=$GITTREE;a=commitdiff_plain;h=$1" -O $1.diff \
- && echo done || echo failed
- fi
-}
-
-
# http://strcat.de/blog/index.php?/archives/335-Software-sauber-deinstallieren...html
#f5# Log 'make install' output
mmake() {
@@ -4097,16 +4024,6 @@ exirename() {
fi
}
-# open file in vim and jump to line
-# http://www.downgra.de/archives/2007/05/08/T19_21_11/
-j2v() {
- emulate -L zsh
- local -a params
- params=(${*//(#m):[0-9]*:/\\n+${MATCH//:/}}) # replace ':23:' to '\n+23'
- params=(${(s|\n|)${(j|\n|)params}}) # join array using '\n', then split on all '\n'
- vim ${params}
-}
-
# get_ic() - queries imap servers for capabilities; real simple. no imaps
ic_get() {
emulate -L zsh
@@ -4212,41 +4129,46 @@ if check_com -c highlight ; then
compdef _hl_complete hl
fi
+# TODO:
+# Rewrite this by either using tinyurl.com's API
+# or using another shortening service to comply with
+# tinyurl.com's policy.
+#
# Create small urls via http://tinyurl.com using wget(1).
-function zurl() {
- emulate -L zsh
- [[ -z $1 ]] && { print "USAGE: zurl " ; return 1 }
-
- local PN url tiny grabber search result preview
- PN=$0
- url=$1
-# Check existence of given URL with the help of ping(1).
-# N.B. ping(1) only works without an eventual given protocol.
- ping -c 1 ${${url#(ftp|http)://}%%/*} >& /dev/null || \
- read -q "?Given host ${${url#http://*/}%/*} is not reachable by pinging. Proceed anyway? [y|n] "
-
- if (( $? == 0 )) ; then
-# Prepend 'http://' to given URL where necessary for later output.
- [[ ${url} != http(s|)://* ]] && url='http://'${url}
- tiny='http://tinyurl.com/create.php?url='
- if check_com -c wget ; then
- grabber='wget -O- -o/dev/null'
- else
- print "wget is not available, but mandatory for ${PN}. Aborting."
- fi
-# Looking for i.e.`copy('http://tinyurl.com/7efkze')' in TinyURL's HTML code.
- search='copy\(?http://tinyurl.com/[[:alnum:]]##*'
- result=${(M)${${${(f)"$(${=grabber} ${tiny}${url})"}[(fr)${search}*]}//[()\';]/}%%http:*}
-# TinyURL provides the rather new feature preview for more confidence.
- preview='http://preview.'${result#http://}
-
- printf '%s\n\n' "${PN} - Shrinking long URLs via webservice TinyURL ."
- printf '%s\t%s\n\n' 'Given URL:' ${url}
- printf '%s\t%s\n\t\t%s\n' 'TinyURL:' ${result} ${preview}
- else
- return 1
- fi
-}
+#function zurl() {
+# emulate -L zsh
+# [[ -z $1 ]] && { print "USAGE: zurl " ; return 1 }
+#
+# local PN url tiny grabber search result preview
+# PN=$0
+# url=$1
+## Check existence of given URL with the help of ping(1).
+## N.B. ping(1) only works without an eventual given protocol.
+# ping -c 1 ${${url#(ftp|http)://}%%/*} >& /dev/null || \
+# read -q "?Given host ${${url#http://*/}%/*} is not reachable by pinging. Proceed anyway? [y|n] "
+#
+# if (( $? == 0 )) ; then
+## Prepend 'http://' to given URL where necessary for later output.
+# [[ ${url} != http(s|)://* ]] && url='http://'${url}
+# tiny='http://tinyurl.com/create.php?url='
+# if check_com -c wget ; then
+# grabber='wget -O- -o/dev/null'
+# else
+# print "wget is not available, but mandatory for ${PN}. Aborting."
+# fi
+## Looking for i.e.`copy('http://tinyurl.com/7efkze')' in TinyURL's HTML code.
+# search='copy\(?http://tinyurl.com/[[:alnum:]]##*'
+# result=${(M)${${${(f)"$(${=grabber} ${tiny}${url})"}[(fr)${search}*]}//[()\';]/}%%http:*}
+## TinyURL provides the rather new feature preview for more confidence.
+# preview='http://preview.'${result#http://}
+#
+# printf '%s\n\n' "${PN} - Shrinking long URLs via webservice TinyURL ."
+# printf '%s\t%s\n\n' 'Given URL:' ${url}
+# printf '%s\t%s\n\t\t%s\n' 'TinyURL:' ${result} ${preview}
+# else
+# return 1
+# fi
+#}
#f2# Print a specific line of file(s).
linenr () {
@@ -4279,7 +4201,7 @@ whatwhen() {
emulate -L zsh
local usage help ident format_l format_s first_char remain first last
usage='USAGE: whatwhen [options] '
- help='Use' \`'whatwhen -h'\'' for further explanations.'
+ help='Use `whatwhen -h'\'' for further explanations.'
ident=${(l,${#${:-Usage: }},, ,)}
format_l="${ident}%s\t\t\t%s\n"
format_s="${format_l//(\\t)##/\\t}"
@@ -4522,15 +4444,11 @@ if (( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall ; then
unset abk[V]
unalias 'V' &> /dev/null
unfunction vman &> /dev/null
- unfunction vimpm &> /dev/null
- unfunction vimhelp &> /dev/null
unfunction viless &> /dev/null
unfunction 2html &> /dev/null
# manpages are not in grmlsmall
unfunction manzsh &> /dev/null
- unalias man2 &> /dev/null
- unalias man &> /dev/null
unfunction man2 &> /dev/null
fi
@@ -4551,3 +4469,6 @@ zrclocal
## END OF FILE #################################################################
# vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4
+# Local variables:
+# mode: sh
+# End: