-# Filename: zshrc
+# Filename: /etc/zsh/zshrc
# Purpose: config file for zsh (z shell)
# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
fi
# }}}
-# setting some default values {{{
-
# load .zshrc.pre to give the user the chance to overwrite the defaults
[[ -r ${HOME}/.zshrc.pre ]] && source ${HOME}/.zshrc.pre
-NOCOR=${NOCOR:-0}
-NOMENU=${NOMENU:-0}
-NOPRECMD=${NOPRECMD:-0}
-BATTERY=${BATTERY:-0}
-GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
-GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0}
-# }}}
-
# {{{ check for version/system
# check for versions (compatibility reasons)
is4(){
isgrmlsmall() { return 1 }
fi
+isdarwin(){
+ [[ $OSTYPE == darwin* ]] && return 0
+ return 1
+}
+
#f1# are we running within an utf environment?
isutfenv() {
case "$LANG $CHARSET $LANGUAGE" in
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() {
+ setopt local_options extended_glob
+ local fdir ffile
+ local -i ffound
+
+ ffile=${1}
+ (( found = 0 ))
+ for fdir in ${fpath} ; do
+ [[ -e ${fdir}/${ffile} ]] && (( ffound = 1 ))
+ done
+
+ (( ffound == 0 )) && return 1
+ if [[ $ZSH_VERSION == 3.1.<6-> || $ZSH_VERSION == <4->* ]] ; then
+ autoload -U ${ffile} || return 1
+ else
+ autoload ${ffile} || return 1
+ fi
+ return 0
+}
+
+# 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 }
+
+# }}}
+
+# setting some default values {{{
+
+NOCOR=${NOCOR:-0}
+NOMENU=${NOMENU:-0}
+NOPRECMD=${NOPRECMD:-0}
+BATTERY=${BATTERY:-0}
+GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
+GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-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 <http://grml.org/console/> on non-grml systems.
+
+Please see the current grml-zsh-refcard (available at
+<http://grml.org/zsh/>) 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 {{{
return 0
}
-# autoload wrapper - use this one instead of autoload directly
-function zrcautoload() {
- setopt local_options extended_glob
- local fdir ffile
- local -i ffound
-
- ffile=${1}
- (( found = 0 ))
- for fdir in ${fpath} ; do
- [[ -e ${fdir}/${ffile} ]] && (( ffound = 1 ))
- done
-
- (( ffound == 0 )) && return 1
- if [[ $ZSH_VERSION == 3.1.<6-> || $ZSH_VERSION == <4->* ]] ; then
- autoload -U ${ffile} || return 1
- else
- autoload ${ffile} || return 1
- fi
- return 0
-}
-
#}}}
-# 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 }
-
-# }}}
-
# locale setup {{{
if [[ -z "$LANG" ]] ; then
xsource "/etc/default/locale"
# color setup for ls:
check_com -c dircolors && eval $(dircolors -b)
-
-# set width of man pages to 80 for more convenient reading
-# export MANWIDTH=${MANWIDTH:-80}
-
-# Search path for the cd command
-# cdpath=(.. ~)
+# color setup for ls on OS X:
+isdarwin && export CLICOLOR=1
+
+# do MacPorts setup on darwin
+if isdarwin && [[ -d /opt/local ]]; then
+ # Note: PATH gets set in /etc/zprofile on Darwin, so this can't go into
+ # zshenv.
+ PATH="/opt/local/bin:/opt/local/sbin:$PATH"
+ MANPATH="/opt/local/share/man:$MANPATH"
+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
else
[[ -d /etc/zsh/completion.d ]] && fpath=( $fpath /etc/zsh/completion.d )
if [[ -d /etc/zsh/functions.d ]] ; then
- fpath+=( /etc/zsh/functions.d )
- for func in /etc/zsh/functions.d/[^_]*[^~](N.) ; do
- zrcautoload -U ${func:t}
+ fdir='/etc/zsh/functions.d'
+ fpath=( ${fdir} ${fdir}/**/*(/N) ${fpath} )
+ for func in ${fdir}/**/[^_]*[^~](N.) ; do
+ zrcautoload ${func:t}
done
+ unset fdir
fi
fi
#k# menu selection: pick item but stay in the menu
bindkey -M menuselect '\e^M' accept-and-menu-complete
- # use the vi navigation keys (hjkl) besides cursor keys in menu completion
- #bindkey -M menuselect 'h' vi-backward-char # left
- #bindkey -M menuselect 'k' vi-up-line-or-history # up
- #bindkey -M menuselect 'l' vi-forward-char # right
- #bindkey -M menuselect 'j' vi-down-line-or-history # bottom
-
# accept a completion and try to complete again by using menu
# completion; very useful with completing directories
# by using 'undo' one's got a simple file browser
#k# Insert last typed word
bindkey "\em" insert-last-typed-word
-# set command prediction from history, see 'man 1 zshcontrib'
-# is4 && zrcautoload predict-on && \
-# zle -N predict-on && \
-# zle -N predict-off && \
-# bindkey "^X^Z" predict-on && \
-# bindkey "^Z" predict-off
-
#k# Shortcut for \kbd{fg<enter>}
bindkey -s '^z' "fg\n"
-# press ctrl-q to quote line:
-# mquote () {
-# zle beginning-of-line
-# zle forward-word
-# # RBUFFER="'$RBUFFER'"
-# RBUFFER=${(q)RBUFFER}
-# zle end-of-line
-# }
-# zle -N mquote && bindkey '^q' mquote
-
# run command line as user root via sudo:
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
# list duplicates an older one, the older command is removed from the list
setopt histignorespace # remove command lines from the history list when
# the first character on the line is a space
-# setopt histallowclobber # add `|' to output redirections in the history
-# setopt NO_clobber # warning if file exists ('cat /dev/null > ~/.zshrc')
setopt auto_cd # if a command is issued that can't be executed as a normal command,
# and the command is the name of a directory, perform the cd command to that directory
setopt extended_glob # in order to use #, ~ and ^ for filename generation
setopt hash_list_all # Whenever a command completion is attempted, make sure \
# the entire command path is hashed first.
setopt completeinword # not just at the end
-# setopt nocheckjobs # don't warn me about bg processes when exiting
setopt nohup # and don't kill them, either
-# setopt printexitvalue # alert me if something failed
-# setopt dvorak # with spelling correction, assume dvorak kb
setopt auto_pushd # make cd push the old directory onto the directory stack.
setopt nonomatch # try to avoid the 'zsh: no matches found...'
setopt nobeep # avoid "beep"ing
REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 seconds
watch=(notme root) # watch for everyone but me and root
-# define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
-# WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
-# WORDCHARS=.
-# WORDCHARS='*?_[]~=&;!#$%^(){}'
-# WORDCHARS='${WORDCHARS:s@/@}'
-
# only slash should be considered as a word separator:
slash-backward-kill-word() {
local WORDCHARS="${WORDCHARS:s@/@}"
# disable - Provide a list of systems, you don't want
# the vcs_info() to check for repositories
# (checked in the 'init' context, too).
+# disable-patterns - A list of patterns that are checked against $PWD.
+# If the pattern matches, vcs_info will be disabled.
+# Say, ~/.zsh is a directory under version control,
+# in which you do not want vcs_info to be active, do:
+# zstyle ':vcs_info:*' disable-patterns "$HOME/.zsh+(|/*)"
# use-simple - If there are two different ways of gathering
# information, you can select the simpler one
# by setting this style to true; the default
# max-exports 2
# enable true
# disable (empty list)
+# disable-patterns (empty list)
# use-simple false
# use-prompt-escapes true
#
}
# }}}
vcs_info () { # {{{
+ local pat
local -i found
- local -a VCSs disabled
+ local -a VCSs disabled dps
local -x vcs usercontext
local -ax msgs
local -Ax vcs_comm
return 0
}
zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled
+
+ zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable-patterns" dps
+ for pat in ${dps} ; do
+ if [[ ${PWD} == ${~pat} ]] ; then
+ [[ -n ${vcs_info_msg_0_} ]] && VCS_INFO_set --clear
+ return 0
+ fi
+ done
+
VCS_INFO_maxexports
(( found = 0 ))
# adjust title of xterm
# see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
case $TERM in
- (xterm*|rxvt)
+ (xterm*|rxvt*)
print -Pn "\e]0;%n@%m: %~\a"
;;
esac
# }}}
# {{{ some aliases
-if [[ $UID -eq 0 ]] ; then
- [[ -r /etc/grml/screenrc ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
-elif [[ -r $HOME/.screenrc ]] ; then
- alias screen="/usr/bin/screen -c $HOME/.screenrc"
-else
- [[ -r /etc/grml/screenrc_grml ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
+if check_com -c screen ; then
+ if [[ $UID -eq 0 ]] ; then
+ [[ -r /etc/grml/screenrc ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc"
+ 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"
+ fi
fi
# do we have GNU ls with color-support?
=======================================$reset_color"
print '
-Main configuration of zsh happens in /etc/zsh/zshrc (global)
-and /etc/skel/.zshrc which is copied to $HOME/.zshrc once.
-The files are part of the package grml-etc-core, if you want to
+Main configuration of zsh happens in /etc/zsh/zshrc.
+That file is part of the package grml-etc-core, if you want to
use them on a non-grml-system just get the tar.gz from
-http://deb.grml.org/ or get the files from the mercurial
-repository:
+http://deb.grml.org/ or (preferably) get it from the git repository:
+
+ http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
+
+This version of grml'\''s zsh setup does not use skel/.zshrc anymore.
+The file is still there, but it is empty for backwards compatibility.
- http://git.grml.org/?p=grml-etc-core.git;a=blob_plain;f=etc/zsh/zshrc
- http://git.grml.org/?p=grml-etc-core.git;a=blob_plain;f=etc/skel/.zshrc
+For your own changes use these two files:
+ $HOME/.zshrc.pre
+ $HOME/.zshrc.local
-If you want to stay in sync with zsh configuration of grml
-run '\''ln -sf /etc/skel/.zshrc $HOME/.zshrc'\'' and configure
-your own stuff in $HOME/.zshrc.local. System wide configuration
-without touching configuration files of grml can take place
-in /etc/zsh/zshrc.local.
+The former is sourced very early in our zshrc, the latter is sourced
+very lately.
-If you want to use the configuration of user grml also when
-running as user root just run '\''zshskel'\'' which will source
-the file /etc/skel/.zshrc.
+System wide configuration without touching configuration files of grml
+can take place in /etc/zsh/zshrc.local.
+
+Normally, the root user (EUID == 0) does not get the whole grml setup.
+If you want to force the whole setup for that user, too, set
+GRML_ALWAYS_LOAD_ALL=1 in .zshrc.pre in root'\''s home directory.
For information regarding zsh start at http://grml.org/zsh/
A value greater than 0 is enables a feature; a value equal to zero
disables it. If you like one or the other of these settings, you can
-add them to ~/.zshenv to ensure they are set when sourcing grml'\''s
+add them to ~/.zshrc.pre to ensure they are set when sourcing grml'\''s
zshrc.'
print "
alias llog="$PAGER /var/log/syslog" # take a look at the syslog
#a1# Take a look at the syslog: \kbd{tail -f /var/log/syslog}
alias tlog="tail -f /var/log/syslog" # follow the syslog
- #a1# (Re)-source \kbd{/etc/skel/.zshrc}
- alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc
fi
# sort installed Debian-packages by size
# {{{ completion system
# called later (via is4 && grmlcomp)
-# notice: use 'zstyle' for getting current settings
+# 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() {
# TODO: This could use some additional information
zstyle ':completion:*:manuals.*' insert-sections true
zstyle ':completion:*:man:*' menu yes select
+ # provide .. as a completion
+ zstyle ':completion:*' special-dirs ..
+
# run rehash on completion so new installed program are found automatically:
_force_rehash() {
(( CURRENT == 1 )) && rehash
fi'
fi
- # zstyle ':completion:*' completer _complete _correct _approximate
- # zstyle ':completion:*' expand prefix suffix
-
- # complete shell aliases
- # zstyle ':completion:*' completer _expand_alias _complete _approximate
-
# command for process lists, the local web server details and host completion
zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
localhost
)
zstyle ':completion:*:hosts' hosts $hosts
+ # TODO: so, why is this here?
# zstyle '*' hosts $hosts
- # specify your logins:
- # my_accounts=(
- # {grml,grml1}@foo.invalid
- # grml-devel@bar.invalid
- # )
- # other_accounts=(
- # {fred,root}@foo.invalid
- # vera@bar.invalid
- # )
- # zstyle ':completion:*:my-accounts' users-hosts $my_accounts
- # zstyle ':completion:*:other-accounts' users-hosts $other_accounts
-
- # specify specific port/service settings:
- # telnet_users_hosts_ports=(
- # user1@host1:
- # user2@host2:
- # @mail-server:{smtp,pop3}
- # @news-server:nntp
- # @proxy-server:8000
- # )
- # zstyle ':completion:*:*:telnet:*' users-hosts-ports $telnet_users_hosts_ports
-
# use generic completion system for programs not yet defined; (_gnu_generic works
# with commands that provide a --help option with "standard" gnu-like output.)
compdef _gnu_generic tail head feh cp mv df stow uname ipacsum fetchipac
compdef _man qma
else
manzsh() { /usr/bin/man zshall | vim -c "se ft=man| se hlsearch" +/"$1" - ; }
- # manzsh() { /usr/bin/man zshall | most +/"$1" ; }
- # [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
- # manzsh() { man zshall | $MYLESS -p $1 ; }
fi
if check_com -c $PAGER ; then
cp -a "$1" "${1}_$(date --iso-8601=seconds)"
}
-# Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html
-# bash() {
-# NO_SWITCH="yes" command bash "$@"
-# }
-# restart () {
-# exec $SHELL $SHELL_ARGS "$@"
-# }
-
#f1# grep for patterns in grml's zsh setup
zg() {
#{{{
# }}}
-# log out? set timeout in seconds {{{
-# TMOUT=1800
-# do not log out in some specific terminals:
-# if [[ "${TERM}" == ([Exa]term*|rxvt|dtterm|screen*) ]] ; then
-# unset TMOUT
-# fi
-# }}}
-
# {{{ make sure our environment is clean regarding colors
for color in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $color
# }}}
# source another config file if present {{{
xsource "/etc/zsh/zshrc.local"
-xsource "${HOME}/.zshenv"
# }}}
# "persistent history" {{{
fi
# }}}
-## genrefcard.pl settings {{{
-### example: split functions-search 8,16,24,32
-#@# split functions-search 8
-## }}}
-
#:grep:marker:for:mika: :-)
### non-root (EUID != 0) code below
###
(( GRML_ALWAYS_LOAD_ALL == 0 )) && (( $EUID == 0 )) && return 0
-# autoloading stuff {{{
-# associate types and extensions (be aware with perl scripts and anwanted behaviour!)
-# check_com zsh-mime-setup || { autoload zsh-mime-setup && zsh-mime-setup }
-# alias -s pl='perl -S'
-# }}}
-
# variables {{{
# set terminal property (used e.g. by msgid-chooser)
[[ -f /usr/share/classpath/glibj.zip ]] && export JIKESPATH=/usr/share/classpath/glibj.zip
# }}}
-# set options {{{
-
-# Allow comments even in interactive shells i. e.
-# $ uname # This command prints system informations
-# zsh: bad pattern: #
-# $ setopt interactivecomments
-# $ uname # This command prints system informations
-# Linux
-# setopt interactivecomments
-
-# ctrl-s will no longer freeze the terminal.
-# stty erase "^?"
-
-# }}}
-
-# {{{ global aliases
-# These do not have to be at the beginning of the command line.
-# Avoid typing cd ../../ for going two dirs down and so on
-# Usage, e.g.: "$ cd ...' or just '$ ...' with 'setopt auto_cd'
-# Notice: deactivated by 061112 by default, we use another approach
-# known as "power completion / abbreviation expansion"
-# alias -g '...'='../..'
-# alias -g '....'='../../..'
-# alias -g BG='& exit'
-# alias -g C='|wc -l'
-# alias -g G='|grep'
-# alias -g H='|head'
-# alias -g Hl=' --help |& less -r'
-# alias -g K='|keep'
-# alias -g L='|less'
-# alias -g LL='|& less -r'
-# alias -g M='|most'
-# alias -g N='&>/dev/null'
-# alias -g R='| tr A-z N-za-m'
-# alias -g SL='| sort | less'
-# alias -g S='| sort'
-# alias -g T='|tail'
-# alias -g V='| vim -'
-# }}}
-
# aliases {{{
# Xterm resizing-fu.
alias huge='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
alias smartfont='echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
alias semifont='echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
-# if [[ "$TERM" == "xterm" ]] && [[ "$LINES" -ge 50 ]] && [[ "$COLUMNS" -ge 100 ]] && [[ -z "$SSH_CONNECTION" ]] ; then
-# large
-# fi
# general
#a2# Execute \kbd{du -sch}
alias da='du -sch'
#a2# Execute \kbd{jobs -l}
alias j='jobs -l'
-# alias u='translate -i' # translate
# compile stuff
#a2# Execute \kbd{./configure}
alias CH="./configure --help"
# http://conkeror.mozdev.org/
+# TODO: I think this should be removed, as conkeror is not a simple extension anymore
#a2# Run a keyboard driven firefox
alias conkeror='firefox -chrome chrome://conkeror/content'
#a2# Execute \kbd{links2 -driver fb}
alias fblinks='links2 -driver fb'
-# ignore ~/.ssh/known_hosts entries
-# alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "PreferredAuthentications=keyboard-interactive"'
#a2# ssh with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset
alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
# one blank line between each line
if [[ -r ~/.terminfo/m/mostlike ]] ; then
-# alias man2='MANPAGER="sed -e G |less" TERMINFO=~/.terminfo TERM=mostlike /usr/bin/man'
#f5# Watch manpages in a stretched style
man2() { PAGER='dash -c "sed G | /usr/bin/less"' TERM=mostlike /usr/bin/man "$@" ; }
fi
# d():Copyright 2005 Nikolai Weibull <nikolai@bitwi.se>
-# notice: option AUTO_PUSHD has to be set
+# note: option AUTO_PUSHD has to be set
#f5# Jump between directories
d() {
emulate -L zsh
esac
}
-# Some quick Perl-hacks aka /useful/ oneliner
-# bew() { perl -le 'print unpack "B*","'$1'"' }
-# web() { perl -le 'print pack "B*","'$1'"' }
-# hew() { perl -le 'print unpack "H*","'$1'"' }
-# weh() { perl -le 'print pack "H*","'$1'"' }
-# pversion() { perl -M$1 -le "print $1->VERSION" } # i. e."pversion LWP -> 5.79"
-# getlinks () { perl -ne 'while ( m/"((www|ftp|http):\/\/.*?)"/gc ) { print $1, "\n"; }' $* }
-# gethrefs () { perl -ne 'while ( m/href="([^"]*)"/gc ) { print $1, "\n"; }' $* }
-# getanames () { perl -ne 'while ( m/a name="([^"]*)"/gc ) { print $1, "\n"; }' $* }
-# getforms () { perl -ne 'while ( m:(\</?(input|form|select|option).*?\>):gic ) { print $1, "\n"; }' $* }
-# getstrings () { perl -ne 'while ( m/"(.*?)"/gc ) { print $1, "\n"; }' $*}
-# getanchors () { perl -ne 'while ( m/«([^«»\n]+)»/gc ) { print $1, "\n"; }' $* }
-# showINC () { perl -e 'for (@INC) { printf "%d %s\n", $i++, $_ }' }
-# vimpm () { vim `perldoc -l $1 | sed -e 's/pod$/pm/'` }
-# vimhelp () { vim -c "help $1" -c on -c "au! VimEnter *" }
-
#f5# List all occurrences of programm in current PATH
plap() {
if [[ $# = 0 ]] ; then
print ""
print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")""
print "Shell.: Zsh $ZSH_VERSION (PID = $$, $SHLVL nests)"
- print "Term..: $TTY ($TERM), $BAUD bauds, $COLUMNS x $LINES cars"
+ print "Term..: $TTY ($TERM), ${BAUD:+$BAUD bauds, }$COLUMNS x $LINES cars"
print "Login.: $LOGNAME (UID = $EUID) on $HOST"
print "System: $(cat /etc/[A-Za-z]*[_-][rv]e[lr]*)"
print "Uptime:$(uptime)"
mkdir -p ${root}/${subdir}/{cur,new,tmp}
}
-# xtrename() rename xterm from within GNU-screen
+#f5# Change the xterm title from within GNU-screen
xtrename() {
- if [[ -z ${DISPLAY} ]] ; then
- printf 'xtrename only makes sense in X11.\n'
- return 1
+ if [[ ${1} != "-f" ]] ; then
+ if [[ -z ${DISPLAY} ]] ; then
+ printf 'xtrename only makes sense in X11.\n'
+ return 1
+ fi
+ else
+ shift
fi
if [[ -z ${1} ]] ; then
- printf 'usage: xtrename() "title for xterm"\n'
+ printf 'usage: xtrename [-f] "title for xterm"\n'
printf ' renames the title of xterm from _within_ screen.\n'
- printf ' Also works without screen.\n'
+ printf ' also works without screen.\n'
+ printf ' will not work if DISPLAY is unset, use -f to override.\n'
return 0
fi
print -n "\eP\e]0;${1}\C-G\e\\"
compdef _hl_complete hl
fi
-# create small urls via tinyurl.com using wget, grep and sed
-zurl() {
- [[ -z ${1} ]] && print "please give an url to shrink." && return 1
- local url=${1}
- local tiny="http://tinyurl.com/create.php?url="
- #print "${tiny}${url}" ; return
- wget -O- \
- -o/dev/null \
- "${tiny}${url}" \
- | grep -Eio 'value="(http://tinyurl.com/.*)"' \
- | sed 's/value=//;s/"//g'
+# Create small urls via http://tinyurl.com using wget(1).
+function zurl() {
+ [[ -z ${1} ]] && { print "USAGE: zurl <URL>" ; 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. <http://tinyurl.com/preview.php>
+ preview='http://preview.'${result#http://}
+
+ printf '%s\n\n' "${PN} - Shrinking long URLs via webservice TinyURL <http://tinyurl.com>."
+ 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).
# }}}
# some useful commands often hard to remember - let's grep for them {{{
+# actually use our zg() function now. :)
# Work around ion/xterm resize bug.
#if [[ "$SHLVL" -eq 1 ]]; then
# }}}
-### doc strings for external functions from files {{{
+## genrefcard.pl settings {{{
+
+### doc strings for external functions from files
#m# f5 grml-wallpaper() Sets a wallpaper (try completion for possible values)
-#}}}
+
+### example: split functions-search 8,16,24,32
+#@# split functions-search 8
+
+## }}}
## END OF FILE #################################################################
# vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4