#!/usr/bin/zsh
# -*- mode: shell-script -*-
# In Emacs, use M-x folding. Quick reference:
#
# Show all sections' text 'C-c @ C-o'
# Hide all sections' text 'C-c @ C-w'
# Show a section's text 'C-c @ C-s'
# Hide a section's text 'C-c @ C-x'
# {{{ zstyle completions
## These next 2 lines are from compinstall.
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*:options' description 'yes'
zstyle ':completion:*:options' auto-description '%d'
## All of the following zstyles are from:
## (http://www.zshwiki.org/cgi-bin/wiki.pl?ZshCompletionTips)
### Use cache
## Some functions, like _apt and _dpkg, are very slow. You can use a cache in
## order to proxy the list of results (like the list of available debian
## packages)
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache
## Prevent CVS files/directories from being completed
zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS'
zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'
# Allow zsh to complete on hostnames found in common config files.
local _myhosts;
_myhosts=( ${${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%[# ]*}//,/ }:#\!*}
${=${(f)"$(cat /etc/hosts(|)(N) <<(ypcat hosts 2>/dev/null))"}%%\#*}
);
zstyle ':completion:*' hosts $_myhosts;
## With commands like `rm' it's annoying if one gets offered the same filename
## again even if it is already on the command line. To avoid that:
#
zstyle ':completion:*:rm:*' ignore-line yes
## Load the completion module.
zstyle :compinstall filename '/home/zyrnix/.zshrc'
autoload -U compinit
compinit
# }}}
# {{{ PS1 prompt
# Enable this for a nice interactive way to get a decent prompt.
# autoload -U promptinit
# promptinit
# prompt adam1
## At the command line, you can do this to see the various prompts:
# prompt -l # display all
# prompt -h # help
# This is based on adam1 from promptinit. I altered it so it includes a
# history number and return code. It does not truncate the path.
#
# It looks like this (with colors):
# 384 zyrnix@server ~/tmp %
#
PS1=$'%h %{\e[22;44m%}%n@%m%{\e[00m%} %{\e[01;36m%}%0~%{\e[01;37m%} %# %{\e[00m%}'
# }}}
# {{{ xterm tweaks
## FAQ 3.5 How do I get the meta key to work on my xterm?
## http://zsh.sourceforge.net/FAQ/zshfaq03.html#l21
[[ $TERM = "xterm" ]] && stty pass8 && bindkey -me
## FAQ 3.6 How do I automatically display the directory in my xterm title bar?
## http://zsh.sourceforge.net/FAQ/zshfaq03.html#l22
##
## I modified the xterm version because it was too plain.
chpwd() {
[[ -t 1 ]] || return
case $TERM in
sun-cmd) print -Pn "\e]l%~\e\\"
;;
*xterm*|rxvt|(dt|k|E)term) print -Pn "\e]2;% [zsh $ZSH_VERSION] %n@%m: %~\a"
;;
esac
}
# }}}
# {{{ Zsh FAQ entries
## FAQ 3.18: Why does zsh kill off all my background jobs when I logout?
## http://zsh.sourceforge.net/FAQ/zshfaq03.html#l34
# setopt nohup
#
## Or start jobs with &! instead of & to disown them
## (disown = don't kill at logout)
## FAQ 3.21: Why is my history not being saved?
## http://zsh.sourceforge.net/FAQ/zshfaq03.html#l37
##
## I modified this to allow for 2,000 entries instead of 200.
HISTSIZE=2000
HISTFILE=~/.zsh_history
SAVEHIST=2000
## FAQ 3.23: How do I prevent the prompt overwriting output when there is no
## newline?
## http://zsh.sourceforge.net/FAQ/zshfaq03.html#l39
##
## According to the manual, this prevents multi-line editing because the editor
## does not know where the start of the line appears.
##
# unsetopt prompt_cr
# }}}
# {{{ General setopts
## Don't clobber files by default. Force myself to use >! or >| and >>! or >>|
## to clobber the file
unsetopt clobber
## I use dvorak, so correct spelling mistakes that a dvorak user would make
setopt dvorak
## Extended history.
## Instead of just a list of commands, append it with this:
## `:<beginning time since epoch>:<elapsed seconds>:<command>'.
setopt extended_history
## Automatically append directories to the push/pop list
setopt auto_pushd
## Maximum size of the directory stack
DIRSTACKSIZE=50
## Allow for 10MB max coredumps
limit coredumpsize 10m
# }}}
# {{{ Emacs compatibility
## FAQ 3.10: Why does zsh not work in an Emacs shell mode any more?
## http://zsh.sourceforge.net/FAQ/zshfaq03.html#l26
[[ $EMACS = t ]] && unsetopt zle
# Enable emacs keymap
bindkey -e
# From resolve (http://repose.cx/conf/.zshrc)
WORDCHARS='' # Emacs compatible M-b and M-f
bindkey "\C-w" kill-region # Emacs C-w command support
# }}}
# {{{ Watch logins
## Watch for logins and logouts from all accounts including mine.
watch=all
## Watch every 30 seconds
logcheck=30
## Change the watch format to something more informative
# %n = username, %M = hostname, %a = action, %l = tty, %T = time,
# %W = date
WATCHFMT="%n from %M has %a tty%l at %T %W"
# }}}
# {{{ Aliases
## Aliases
alias ls="ls --color=auto"
alias targx="tar -zxvf"
alias targc="tar -cxvf"
alias tarbx="tar --bzip2 -xvf"
alias tarbc="tar --bzip2 -cvf"
# }}}
# {{{ Setopts from Resolve
## From resolve's config (http://repose.cx/conf/.zshrc)
setopt extended_glob # Weird & wacky pattern matching - yay zsh!
setopt complete_in_word # Not just at the end
setopt always_to_end # When complete from middle, move cursor
setopt correct # Spelling correction
setopt hist_verify # When using ! cmds, confirm first
setopt interactive_comments # Escape commands so I can use them later
setopt print_exit_value # Alert me if something's failed
# }}}
# {{{ Environment variables
## Anti-aliasing in the two toolkits (from resolve)
## Use this type of assignment to set the variable if not already set
(( ${+QT_XFT} )) || export QT_XFT=1
(( ${+GDK_USE_XFT} )) || export GDK_USE_XFT=1
## I don't like the new locale settings. If your distribution changes
## your locale, you will notice things like 'ls' are different.
##
## To see what you are currently using, type 'locale' in a console.
##
## LC_COLLATE affects the way 'ls' displays items. If you leave it as
## en_US then it will intermix different cases and dot files.
##
## LC_TIME affects the way 'ls -l' displays items:
##
## This is using 'LC_TIME=en_US'
## -rw-r--r-- 1 zyrnix zyrnix 144508 2005-04-04 04:49 Debian.jpg
##
## This is using the older style 'LC_TIME=C'
## -rw-r--r-- 1 zyrnix zyrnix 144508 Apr 4 04:49 Debian.jpg
##
## These environment variables affect each locale categories for all
## locale-aware programs:
##
## LC_CTYPE Character classification and case conversion.
## LC_COLLATE Collation order.
## LC_TIME Date and time formats.
## LC_NUMERIC Non-monetary numeric formats.
## LC_MONETARY Monetary formats.
## LC_MESSAGES Formats of informative and diagnostic messages and
## interactive responses.
## LC_PAPER Paper size.
## LC_NAME Name formats.
## LC_ADDRESS Address formats and location information.
## LC_TELEPHONE Telephone number formats.
## LC_MEASUREMENT Measurement units (Metric or Other).
## LC_IDENTIFICATION Metadata about the locale information.
## LOCPATH The directory where locale data is stored.
## The default is /usr/lib/locale.
export LC_COLLATE="C"; # Display the old 'ls -a' formatting.
export LC_TIME="C"; # Display the old 'ls -l' formatting.
# }}}
# {{{ Aliases
## Aliases
alias ls="ls --color=auto"
alias targx="tar -zxvf"
alias targc="tar -cxvf"
alias tarbx="tar --bzip2 -xvf"
alias tarbc="tar --bzip2 -cvf"
# Setup my path to include other directories
PATH=$PATH:/sbin:/usr/sbin
# }}}
# {{{ Packing function
## Bzip2 all files and directories given on the command line.
pack(){
if [[ $# -le 0 ]]; then
echo "Usage: $0 <files or directories>";
return 1;
fi
integer i;
for ((i=1; i <= $#; i++)); do
# Be extra paranoid and remove all slashes. Since we can run 'rm -rf' from
# this function, make us cd to the directory and execute it there.
local entry=${argv[i]//\//};
# If it is already compressed, don't bother recompressing.
# This means match any of the extensions at the end of the name.
# Make sure it is a file or directory and not a symlink.
if [ -h "${entry}" ]; then
echo "Skipping \"${entry}\" because it is a symlink."
else
if [ -f "${entry}" ]; then
# Convert it to lower case, and then check the entry extension.
if [ -z ${${(L)entry}//%*.(gz|bz2|zip|tgz|tbz)/} ]; then
echo "Skipping \"${entry}\" because it is already compressed"
else
bzip2 -9 -v "${entry}"
fi
elif [ -d "${entry}" ]; then
if [ -f "${entry}.tar.bz2" ]; then
echo "Error: File \"${entry}.tar.bz2\" already exists!"
else
echo "Compressing directory ${entry}"
# rm with ./ to make sure we aren't accidentally doing /.
# rm with -- to avoid problems with 'rm *' where there is a file
# named -r.
tar -cvpf "${entry}.tar" "${entry}/" && bzip2 -9 -v "${entry}.tar" \
&& rm -rf -- ./"${entry}"
fi
else
echo "Skipping \"${entry}\" because it is not a file or directory."
fi
fi
done
}
# }}}