# zshrc/30_aliases
#
# Defines command shortcuts
#
# Copyright © 1994–2008 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
# Source repository: git://git.madduck.net/etc/zsh.git
#

function trace() { eval "set -x; $@" }

alias mv='nocorrect mv'
alias cp='nocorrect cp'
alias ln='nocorrect ln'
alias mkdir='nocorrect mkdir'
alias rm='nocorrect rm'

alias find='noglob find'
alias w3m='noglob w3m -no-mouse'
alias links='noglob links'
alias wb='noglob www-browser'
alias wget='noglob wget'
alias curl='noglob curl'
alias apt-cache='noglob apt-cache'
alias locate='noglob locate'

local _USER_AGENT="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.14) Gecko/20080404 Iceweasel/2.0.0.14 (Debian-2.0.0.14-2)"
alias swget="noglob wget --user-agent='$USER_AGENT'"

typeset -a _ls_opts; _ls_opts=(-bC --color=auto)
command ls --group-directories-first >/dev/null 2>&1 \
  && _ls_opts+=--group-directories-first
# I prefer POSIX collation for ls
alias ls="LC_COLLATE=POSIX ls $_ls_opts"

alias l='ls --time-style=+%Y%m%d.%H%M -gG'
alias ll='ls -l'
alias la='ls -a'
alias lla='ls -la'
alias lt='ls -lt'
alias lrt='ls -lrt'
alias lat='ls -lat'
alias lart='ls -lart'
# List only directories and symbolic links that point to directories
alias lsd='ll -d *(-/DN)'

alias lscontext=ls
cd () { __CHPWD_RUN_FIRST=lscontext && builtin cd "$@" && unset __CHPWD_RUN_FIRST }
#_cd_l() { ll }
#chpwd_functions+=_cd_l

# #183394
alias w='w|cat'

alias -g ND='*(/om[1])' # newest directory
alias -g NF='*(.om[1])' # newest file

alias egrep='egrep --color=auto -d skip'
alias fgrep='fgrep --color=auto -d skip'
alias grep='grep --color=auto -d skip'

alias mmv='noglob zmv -W'
alias zcp='zmv -C'
alias zln='zmv -L'
alias zgmv='zmv -p git-mv'

alias cal='cal -3'
alias ftp=lftp

alias mbug='bts show --mbox'
alias bug='BROWSER=www-browser bts show'

edalias() {
  [[ -z "$1" ]] && { echo "Usage: edalias <alias_to_edit>" ; return 1 } || vared aliases'[$1]' ;
}
compdef _aliases edalias

edfunc() {
  [[ -z "$1" ]] && { echo "Usage: edfunc <function_to_edit>" ; return 1 } || zed -f "$1" ;
}
compdef _functions edfunc

doc() { cd /usr/share/doc/$1 }
compdef '_files -W /usr/share/doc -/' doc

alias giti='git init && git add . && git commit -minitial\ checkin && git tag orig'
gbs() {
  local branch; branch="$(git symbolic-ref -q HEAD)"; branch="${branch##*/}"
  git config branch.${branch}.remote ${1:-origin}
  git config branch.${branch}.merge refs/heads/${branch}
  git config branch.${branch}.rebase true
}

if whence mtail >/dev/null; then
  alias t=mtail
elif whence tailf >/dev/null; then
  alias t=tailf
else
  alias t='tail -f'
fi
compdef _files t

function ltail() { t ~log/$1 }
compdef '_files -W ~log' ltail

function lless() { sensible-pager ~log/$1 }
compdef '_files -W ~log' lless

alias tsl='ltail syslog'
alias lsl='lless syslog'
alias tml='ltail mail.log'
alias lml='lless mail.log'
alias tal='ltail auth.log'
alias lal='lless auth.log'
alias tdl='ltail daemon.log'
alias ldl='lless daemon.log'
alias tkl='ltail kern.log'
alias lkl='lless kern.log'

function lgrep() {
  local pattern="$1"; shift
  eval egrep "'$pattern'" "~log/${(j: ~log/:)@}"
}

alias px='ps afux'
alias mps='ps -ao user,pcpu,start,command'

function of() { lsof -np "$1" }
compdef _pids of

function psgrep() { ps aux | grep "[${1[1]}]${1[2,-1]}" }

alias rw-='chmod 600'
alias rwx='chmod 700'
alias r--='chmod 644'
alias r-x='chmod 755'
alias r-s='chmod 2755'
alias rws='chmod 2775'

alias bofh='fortune bofh-excuses'

autoload -U baseconv
alias b2d='baseconv 2 10'
alias d2b='baseconv 10 2'
alias d2h='baseconv 10 16'
alias h2d='baseconv 16 10'
alias d2o='baseconv 10 8'
alias d2o='baseconv 10 8'
alias h2b='baseconv 16 2'
alias b2h='baseconv 2 16'

alias sendmail=/usr/sbin/sendmail

_d() { dict $* }
d() { _d $* | sensible-pager }
the() { d -d moby-thesaurus $* }
typeset -A _LANGUAGES
_LANGUAGES[en]=eng
_LANGUAGES[de]=deu
_LANGUAGES[es]=spa
_LANGUAGES[fr]=fra
_LANGUAGES[it]=ita
_LANGUAGES[tn]=lat
for l0 in ${(k)_LANGUAGES}; do
  for l1 in ${(k)_LANGUAGES}; do
    eval "function _${l0}-${l1}() { _d -d fd-${_LANGUAGES[$l0]}-${_LANGUAGES[$l1]} \$* }"
    eval "function ${l0}-${l1}() { d -d fd-${_LANGUAGES[$l0]}-${_LANGUAGES[$l1]} \$* }"
  done
done
unset '_LANGUAGES[en]'
for l in ${(k)_LANGUAGES}; do
  eval "function ${l}() { (_${l}-en \$*; _en-${l} \$*) | more }"
done
unset _LANGUAGES

alias dpkg-buildpackage="dpkg-buildpackage -k$DEBKEYID -rfakeroot"

bugsub() { echo X-debbugs-autosubscribe: madduck | sendmail -f $DEBEMAIL ${1:?No bug number}-subscribe@bugs.debian.org }
bugunsub() { sendmail -f $DEBEMAIL ${1:?No bug number}-unsubscribe@bugs.debian.org </dev/null }
ptssub() { echo subscribe ${1:?E: no package name given.} | sendmail -f ${2:-$DEBEMAIL} pts@qa.debian.org }
ptsunsub() { echo unsubscribe ${1:?E: no package name given.} | sendmail -f ${2:-$DEBEMAIL} pts@qa.debian.org }
qasub() { echo subscribe ${1:?E: no package name given.} ${2:-unspecifed} | sendmail -f $DEBEMAIL ddpo@qa.debian.org }
qaunsub() { echo unsubscribe ${1:?E: no package name given.} ${2:-unspecifed} | sendmail -f $DEBEMAIL ddpo@qa.debian.org }
listsub() { echo Subject: subscribe | sendmail -f ${1%@*}=${1#*@}@mass.madduck.net ${1%@*}-request@${1#*@} }
listunsub() { echo Subject: unsubscribe | sendmail -f ${1%@*}=${1#*@}@mass.madduck.net ${1%@*}-request@${1#*@} }

uc() { unicode --max=0 --colour=off "$@" | sensible-pager }

alias ipr='ip r'
alias ipa='ip a'
alias ipl='ip l'

alias btd='btdownloadheadless'

function asc () { autossh -t "$@" 'screen -qxp= || screen -qdRR' }
compdef asc=ssh

alias mdtest='swaks -s localhost -t'

if whence devtodo >/dev/null; then
  _devtodo_on_chpwd() {
    local out; out="$(devtodo)"
    [[ -n $out ]] && print "todo:\n$out"
  }
  [[ -z ${(M)chpwd_functions:#_devtodo_on_chpwd} ]] && chpwd_functions+=_devtodo_on_chpwd
fi

pdfextract() {
  local i=$1
  local o=$2
  shift 2
  pdftk "$i" cat "${@:-1-end}" output "${o%.pdf}.pdf"
}
compdef _files pdfextract

gittestfile() {
  local annex; annex=false
  local file

  case "$1" in
    (-a) annex=true;;
    (*)
      if [ -n "$file" ]; then
        echo >&2 "E: filename already given"
        return 1
      fi
      file="$1";;
  esac

  if [ -z "$file" ]; then
    file=$(TMPDIR=${PWD} tempfile -ptest. -s.txt)
  fi

  echo "Test file created $(date)" >| $file

  case "$annex" in
    true)
      git annex add $file
      git commit -m"Add test file $file to annex"
      ;;
    false)
      git add $file
      git commit -m"Add test file $file"
      ;;
  esac
}

# vim:ft=zsh