#k# complete word from history with menu
bindkey "^X^X" hist-complete
+## complete word from currently visible SCREEN buffer.
+if check_com -c screen ; then
+ _complete_screen_display() {
+ [[ "$TERM" != "screen" ]] && return 1
+
+ local TMPFILE=$(mktemp)
+ local -U -a _screen_display_wordlist
+ trap "rm -f $TMPFILE" EXIT
+
+ screen -X hardcopy $TMPFILE
+ # fill array with contents from screen hardcopy
+ _screen_display_wordlist=( ${(QQ)$(<$TMPFILE)} )
+ # remove PREFIX to be completed from that array
+ _screen_display_wordlist[${_screen_display_wordlist[(i)$PREFIX]}]=""
+ compadd -a _screen_display_wordlist
+ }
+ #k# complete word from currently visible GNU screen buffer
+ bindkey -r "^XS"
+ compdef -k _complete_screen_display complete-word '^XS'
+fi
+
# }}}
# {{{ history
#f5# Clean up directory - remove well known tempfiles
purge() {
- FILES=(*~(N) .*~(N) \#*\#(N) *.o(N) a.out(N) *.core(N) *.cmo(N) *.cmi(N) .*.swp(N))
- NBFILES=${#FILES}
+ emulate -L zsh
+ setopt HIST_SUBST_PATTERN
+ local -a TEXTEMPFILES GHCTEMPFILES PYTEMPFILES FILES
+ TEXTEMPFILES=(*.tex(N:s/%tex/'(log|toc|aux|nav|snm|out|tex.backup|bbl|blg|bib.backup|vrb|lof|lot|hd|idx)(N)'/))
+ GHCTEMPFILES=(*.(hs|lhs)(N:r:s/%/'.(hi|hc|(p|u|s)_(o|hi))(N)'/))
+ PYTEMPFILES=(*.py(N:s/%py/'(pyc|pyo)(N)'/))
+ LONELY_MOOD_FILES=((*.mood)(NDe:'local -a AF;AF=( ${${REPLY#.}%mood}(mp3|flac|ogg|asf|wmv|aac)(N) ); [[ -z "$AF" ]]':))
+ FILES=(*~(.N) \#*\#(.N) *.o(.N) a.out(.N) (*.|)core(.N) *.cmo(.N) *.cmi(.N) .*.swp(.N) *.(orig|rej)(.DN) *.dpkg-(old|dist|new)(DN) ._(cfg|mrg)[0-9][0-9][0-9][0-9]_*(N) ${~TEXTEMPFILES} ${~GHCTEMPFILES} ${~PYTEMPFILES} ${LONELY_MOOD_FILES})
+ local NBFILES=${#FILES}
+ local CURDIRSUDO=""
+ [[ ! -w ./ ]] && CURDIRSUDO=$SUDO
if [[ $NBFILES > 0 ]] ; then
- print $FILES
+ print -l $FILES
local ans
echo -n "Remove these files? [y/n] "
read -q ans
if [[ $ans == "y" ]] ; then
- rm ${FILES}
+ $CURDIRSUDO rm ${FILES}
echo ">> $PWD purged, $NBFILES files removed"
else
echo "Ok. .. then not.."
}
fi
+#f5# run command or function in a list of directories
+rundirs() {
+ local d CMD STARTDIR=$PWD
+ CMD=$1; shift
+ ( for d ($@) {cd -q $d && { print cd $d; ${(z)CMD} ; cd -q $STARTDIR }} )
+}
+
# Translate DE<=>EN
# 'translate' looks up fot a word in a file with language-to-language
# translations (field separator should be " : "). A typical wordlist looks
}
# Usage: simple-extract <file>
+# Using option -d deletes the original archive file.
#f5# Smart archive extractor
-simple-extract () {
+simple-extract() {
emulate -L zsh
- if [[ -f $1 ]] ; then
- case $1 in
- *.tar.bz2) bzip2 -v -d $1 ;;
- *.tar.gz) tar -xvzf $1 ;;
- *.rar) unrar $1 ;;
- *.deb) ar -x $1 ;;
- *.bz2) bzip2 -d $1 ;;
- *.lzh) lha x $1 ;;
- *.gz) gunzip -d $1 ;;
- *.tar) tar -xvf $1 ;;
- *.tgz) gunzip -d $1 ;;
- *.tbz2) tar -jxvf $1 ;;
- *.zip) unzip $1 ;;
- *.Z) uncompress $1 ;;
- *) echo "'$1' Error. Please go away" ;;
+ setopt extended_glob noclobber
+ local DELETE_ORIGINAL DECOMP_CMD USES_STDIN USES_STDOUT GZTARGET WGET_CMD
+ local RC=0
+ zparseopts -D -E "d=DELETE_ORIGINAL"
+ for ARCHIVE in "${@}"; do
+ case $ARCHIVE in
+ *.(tar.bz2|tbz2|tbz))
+ DECOMP_CMD="tar -xvjf -"
+ USES_STDIN=true
+ USES_STDOUT=false
+ ;;
+ *.(tar.gz|tgz))
+ DECOMP_CMD="tar -xvzf -"
+ USES_STDIN=true
+ USES_STDOUT=false
+ ;;
+ *.(tar.xz|txz|tar.lzma))
+ DECOMP_CMD="tar -xvJf -"
+ USES_STDIN=true
+ USES_STDOUT=false
+ ;;
+ *.tar)
+ DECOMP_CMD="tar -xvf -"
+ USES_STDIN=true
+ USES_STDOUT=false
+ ;;
+ *.rar)
+ DECOMP_CMD="unrar x"
+ USES_STDIN=false
+ USES_STDOUT=false
+ ;;
+ *.lzh)
+ DECOMP_CMD="lha x"
+ USES_STDIN=false
+ USES_STDOUT=false
+ ;;
+ *.7z)
+ DECOMP_CMD="7z x"
+ USES_STDIN=false
+ USES_STDOUT=false
+ ;;
+ *.(zip|jar))
+ DECOMP_CMD="unzip"
+ USES_STDIN=false
+ USES_STDOUT=false
+ ;;
+ *.deb)
+ DECOMP_CMD="ar -x"
+ USES_STDIN=false
+ USES_STDOUT=false
+ ;;
+ *.bz2)
+ DECOMP_CMD="bzip2 -d -c -"
+ USES_STDIN=true
+ USES_STDOUT=true
+ ;;
+ *.(gz|Z))
+ DECOMP_CMD="gzip -d -c -"
+ USES_STDIN=true
+ USES_STDOUT=true
+ ;;
+ *.(xz|lzma))
+ DECOMP_CMD="xz -d -c -"
+ USES_STDIN=true
+ USES_STDOUT=true
+ ;;
+ *)
+ print "ERROR: '$ARCHIVE' has unrecognized archive type." >&2
+ RC=$((RC+1))
+ continue
+ ;;
esac
- else
- echo "'$1' is not a valid file"
- fi
+
+ if ! check_com ${DECOMP_CMD[(w)1]}; then
+ echo "ERROR: ${DECOMP_CMD[(w)1]} not installed." >&2
+ RC=$((RC+2))
+ continue
+ fi
+
+ GZTARGET="${ARCHIVE:t:r}"
+ if [[ -f $ARCHIVE ]] ; then
+
+ print "Extracting '$ARCHIVE' ..."
+ if $USES_STDIN; then
+ if $USES_STDOUT; then
+ ${=DECOMP_CMD} < "$ARCHIVE" > $GZTARGET
+ else
+ ${=DECOMP_CMD} < "$ARCHIVE"
+ fi
+ else
+ if $USES_STDOUT; then
+ ${=DECOMP_CMD} "$ARCHIVE" > $GZTARGET
+ else
+ ${=DECOMP_CMD} "$ARCHIVE"
+ fi
+ fi
+ [[ $? -eq 0 && -n "$DELETE_ORIGINAL" ]] && rm -f "$ARCHIVE"
+
+ elif [[ "$ARCHIVE" == (#s)(https|http|ftp)://* ]] ; then
+ if check_com curl; then
+ WGET_CMD="curl -k -s -o -"
+ elif check_com wget; then
+ WGET_CMD="wget -q -O - --no-check-certificate"
+ else
+ print "ERROR: neither wget nor curl is installed" >&2
+ RC=$((RC+4))
+ continue
+ fi
+ print "Downloading and Extracting '$ARCHIVE' ..."
+ if $USES_STDIN; then
+ if $USES_STDOUT; then
+ ${=WGET_CMD} "$ARCHIVE" | ${=DECOMP_CMD} > $GZTARGET
+ RC=$((RC+$?))
+ else
+ ${=WGET_CMD} "$ARCHIVE" | ${=DECOMP_CMD}
+ RC=$((RC+$?))
+ fi
+ else
+ if $USES_STDOUT; then
+ ${=DECOMP_CMD} =(${=WGET_CMD} "$ARCHIVE") > $GZTARGET
+ else
+ ${=DECOMP_CMD} =(${=WGET_CMD} "$ARCHIVE")
+ fi
+ fi
+
+ else
+ print "ERROR: '$ARCHIVE' is neither a valid file nor a supported URI." >&2
+ RC=$((RC+8))
+ fi
+ done
+ return $RC
+}
+
+__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()
+{
+ _arguments \
+ '-d[delete original archivefile after extraction]' \
+ '*:Archive Or Uri:__archive_or_uri'
}
+compdef _simple_extract simple-extract
+alias se=simple-extract
# Usage: smartcompress <file> (<type>)
#f5# Smart archive creator
autoload $func
done
}
+compdef _functions refunc
# a small check to see which DIR is located on which server/partition.
# stolen and modified from Sven's zshrc.forall