aboutsummaryrefslogtreecommitdiff
path: root/.zshrc
blob: 226ba68a52addfb1fe34fb4c6d495c8049022b6c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
#
# ~/.zshrc
# Z shell configuration file.
#                                                                        CREDITS
# File was first taken from the following location:
#
#   http://www.tomaw.net/configs/zshrc
#
# Some additions were made by me, Jonathan Patrick Davies <jpds@ubuntu.com>.
# Among these are the Launchpad, Debian, Wikipedia/Wikitravel, BBC search,
# Demonoid, Lonely Planet, Urbandictionary and other various functions. I also
# implemented a few "if" statements to stop zsh complaining about any missing
# objects and placed the dircolors support.
#
# The forkex() function is thanks to Siegfried-Angel Gevatter Pujals
#   <rainct@ubuntu.com>.
#
# Some of this file is thanks to <slarti@gentoo.org>, some is take from
# spider's <spider@gentoo.org> zshrc, and some from the zshwiki.org.
# Some bash functions are nicked from ciaranm's <ciaranm@gentoo.org>
# bashrc.
#
# READ ME
#
# • Remember to change the stuff specific to me! It's all at the top of
#   this file.
#
# • You can obviously only get the most out of this file if you take the
#   time to read through the comments. Of course, you can still experience
#   zsh's superiority by simply plugging this file in and using it.
#

# BEGIN LOCAL

export LC_ALL="LOCALE"
export LANG="LOCALE"
export TZ="America/Toronto"             # Force our time zone this location.
export EDITOR="vim"                     # Long live vim (as our editor).
export NAME="Ryan Kavanagh"             # Our name.
export EMAIL="rak@debian.org"     # Our email address.
export GPGKEY1="E95EDDC9"               # Our old GnuPG key ID.
export GPGKEY="4A11C97A"                # Our GnuPG key ID. 
export DEBFULLNAME=$NAME                # These are used by Debian packaging...
export DEBEMAIL=$EMAIL                  # ...programs.
export DEBSIGN_KEYID=$GPGKEY            # Key ID for signing Debian packages.
export GIT_AUTHOR_NAME=$NAME            # Use our real name for Git.
export GIT_AUTHOR_EMAIL=$EMAIL
export GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME
export GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL
export BZR_EMAIL="$NAME <$EMAIL>"       # Override email for Bazaar.
export GIT_AUTHOR_NAME=$NAME
export DARCS_EMAIL="$NAME <$EMAIL>"
export GREP_OPTIONS="--color=auto"
export QUILT_PATCHES=debian/patches
export PATH=/usr/lib/ccache:/usr/lib/distcc/bin:$HOME/bin:/usr/sbin:/sbin:$PATH
export CCACHE_DIR=/ccache
#export HTTP_PROXY="http://localhost:3128/"
export MANWIDTH=80
export MANOPT="-L en"
export BTS_SENDMAIL_COMMAND="msmtp"
export PYTHONSTARTUP=~/.pythonrc.py
export PAGER=less
export PDFVIEWER=evince
export TEXMFHOME=/home/ryan/.texmf
export LESSCHARSET=utf-8                # Needed for cyrillic &c in less

alias apt-upgrade='sudo apt-get update && sudo aptitude dist-upgrade'
alias emacs='emacs -nw'
alias dbuild='GPG_TTY=$(tty) debuild -S -sa -k$GPGKEY'
alias itp='reportbug -M -B debian --email rak@debian.org --paranoid -K $GPGKEY wnpp'
alias sneezymud='nc play.sneezymud.com 7900'
alias news='tin -g  pqnews.cogeco.ca'
alias bbcr1='mplayer mms://wmlive.bbc.net.uk/wms/bbc_ami/radio1/radio1_bb_live_int_eq1_sl1'
alias bbcr2='mplayer mms://wmlive.bbc.net.uk/wms/bbc_ami/radio2/radio2_bb_live_int_eq1_sl1'
alias bbcr3='mplayer mms://wmlive.bbc.net.uk/wms/bbc_ami/radio3/radio3_bb_live_int_eq1_sl1'
alias rtvec='mplayer -playlist http://radioclasica.rtve.stream.flumotion.com/rtve/radioclasica.mp3.m3u'
alias rtve3='mplayer -playlist http://radio3.rtve.stream.flumotion.com/rtve/radio3.mp3.m3u'
alias rtve5='mplayer -playlist http://radio5.rtve.stream.flumotion.com/rtve/radio5.mp3.m3u'
alias am740='mplayer -playlist http://provisioning.streamtheworld.com/asx/cfzmam.asx'
alias 1920s='mplayer -playlist http://kara.fast-serv.com:8398/listen.pls'
alias 1940s='mplayer http://s2.fastcast4u.com:10102/'
alias wqxr='mplayer -playlist http://www.wqxr.org/stream/wqxr/aac.pls'
alias dismuke='`curl -s http://www.loudcity.com/stations/radio-dismuke | grep --color=never launch | grep --color=never ram | tail -n 1 | sed -e "s@.*href=.@mplayer -playlist http://www.loudcity.com@g;s@. class.*@@g"`'
alias up-theme='rsync -avz --no-p --no-o --no-times -e ssh ~/work/kubuntu-theme-v2/* ryanak.ca:/home/ryan/kubuntu-theme-v2/'
alias startxkde4='startx -nolisten tcp -- :0 &'
alias irssi-notify='ssh -f ryanak.ca -L 2227:127.0.0.1:2227 -N && irssi-notifier &'
alias gpg='gpg-wrapper'
alias i2e='/usr/bin/i2e-cli'
alias mplayer-fb='mplayer -vo fbdev'
alias links2-fb='links2 -driver fb'
alias bzbuild='bzr builddeb -S -- -sa -k$GPGKEY'
alias svbuildi='svn-buildpackage --svn-ignore-new --svn-builder="debuild -S -sa -k$GPGKEY"'
alias svbuild='svn-buildpackage --svn-builder="debuild -S -sa -k$GPGKEY"'
alias gibuild='git-buildpackage --git-builder="sbuild -sAd u"'
alias gibuildi='git-buildpackage --git-ignore-new --git-builder="sbuild -sAd u"'
#alias wtau='wakeonlan 00:0d:56:1b:7a:f0'
alias wtau='sudo etherwake tau'
alias pology='python $HOME/work/pology/scripts/posieve.py'
alias daylog='dch --changelog ${HOME}/work/mcgill/drafts/daylog/daylog'
alias dmit='dch --changelog ${HOME}/work/MIT/bedrock-group/rakavan/daylog'
alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
alias kbd="xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/icd $DISPLAY"
alias vi='vim'
alias sm='tmux attach -t mail || tmux -f ${HOME}/.tmux-mail.conf attach -t mail'
alias remote_3051='ssh -f -N -q -L 6301:192.168.1.207:631 ryan@ryanak.ca'
alias sshfw='ssh -oForwardAgent=yes'
alias mail="RLWRAP_FILTERDIR=${HOME}/.rlwrap rlwrap -z mail_filter mail"
alias s-nail="RLWRAP_FILTERDIR=${HOME}/.rlwrap rlwrap -z mail_filter s-nail"

# END LOCAL

fpath=($fpath
        /home/ryan/.zen/zsh/scripts
        /home/ryan/.zen/zsh/zle)
autoload -U zen

# Ensure that we possess a ~/.zsh/ directory. This is required for the
# ~/.zsh/history file.
if [ ! -d $HOME/.zsh/ ]; then
    mkdir -p $HOME/.zsh/
fi

# Alias/custom commands
#
# Many of these options don's exist on BSD rm/cp/mkdir/ln/etc.
#
# Some are just in case - for 'rm', 'cp' and 'mv' - ask about overwriting or
# deleting files.
# Furthermore, be verbose about what each command is performing to be present of
# what is occuring every time.
if [[ `uname` = "Linux" ]]; then
    alias cp="cp -iv"
    alias mkdir="mkdir -v"
    alias mv="mv -iv"
    alias ln="ln -v"
    # Only delete files on the current file system to avoid removing recursively
    # from bind mounts.
    alias rm="rm -iv --one-file-system"

    alias chown="chown -v"
    alias chmod="chmod -v"
    alias ls="ls --classify --color=always" # Add all colours and
                                            # have fancy symbols for files, etc.
elif [[ `uname` = "OpenBSD" && -x /usr/local/bin/colorls ]]; then
    alias ls="colorls -G"
fi

# Cause encfs unmount a mounted encrypted partition after twenty minutes of
# inactivity by default.
alias encfs="encfs --idle=20"

fpath=($fpath $HOME/.zsh/func)

# Prompt theme.
autoload -U promptinit; promptinit
# prompt walters

# Colours.
autoload -U colors; colors
setopt promptsubst

# Give us a prompt along the lines of:
#
#  jpds@topr>
#
#export PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[green]%}%m%{$reset_color%}%\> "

# Change word boundary characters. Nabbed from
# http://zshwiki.org/KeyBindings.

# By default: export WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>'
# We remove the slash, period, angle brackets, dash here.
export WORDCHARS='*?_-[]~=&;!#$%^(){}'

# Follow GNU LS_COLORS for completion menus
zmodload -i zsh/complist

# Should dircolors exist. Fetch LS_COLORS from it.
if [ "`which dircolors`" != 'dircolors not found' ]; then
    eval "$(dircolors -b)"
fi

zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
zstyle ':completion:*:*:kill:*' list-colors '=%*=01;31'

# Load the completion system
autoload -U compinit; compinit

compdef _quilt dquilt=quilt  # Quilt tab completion for dquilt

# Very powerful version of mv implemented in zsh. The main feature I
# know of it that seperates it from the standard mv is that it saves you
# time by being able to use patterns which are expanded into positional
# parameters. So:
#
# slarti@pohl % zmv (*)foo ${1}bar
#
# On a series of files like onefoo, twofoo, threefoo, fivefoo would be
# renamed to onebar twobar threebar fourbar.
#
# Although that's nifty enough, I suspect there are other features I
# don't know about yet...
#
# Read $fpath/zmv for some more basic examples of usage, and also use
# run-help on it :)
autoload -U zmv

# Command line calculator written in zsh, with a complete history
# mechanism and other shell features.
autoload -U zcalc

# Like xargs, but instead of reading lines of arguments from standard input,
# it takes them from the command line. This is possible/useful because,
# especially with recursive glob operators, zsh often can construct a command
# line for a shell function that is longer than can be accepted by an external
# command. This is what's often referred to as the "shitty Linux exec limit" ;)
# The limitation is on the number of characters or arguments.
# 
# slarti@pohl % echo {1..30000}
# zsh: argument list too long: /bin/echo
# zsh: exit 127   /bin/echo {1..30000}
autoload -U zargs

# Yes, we are as bloated as emacs
autoload -U tetris
zle -N tetris
bindkey "^Xt" tetris

# Makes it easy to type URLs as command line arguments. As you type, the
# input character is analyzed and, if it mayn eed quoting, the current
# word is checked for a URI scheme. If one is found and the current word
# is not already quoted, a blackslash is inserted before the input
# caracter.
autoload -U url-quote-magic
zle -N self-insert url-quote-magic

# zed is a tiny command-line editor in pure ZSH; no other shell could do
# this.  zed itself is simple as anything, but it's killer feature for
# me is that it can edit functions on the go with zed -f <funcname> (or
# fned <funcname>. This is useful for me when I'm using and defining
# functions interactively, for example, when I'm working through the
# Portage tree in CVS. It allows me to edit a function on the fly,
# without having to call the last definition back up from the history
# and re-edit that in ZLE. It also indents the function, even if it was
# defined on all one line in the line editor, making it easy as anything
# to edit.
#
# ^X^W to save, ^C to abort.
autoload -U zed

# Incremental completion of a word. After starting this, a list of
# completion choices can be shown after every character you type, which
# can deleted with ^H or delete. Return will accept the current
# completion. Hit tab for normal completion, ^G to get back where you
# came from and ^D to list matches.
autoload -U incremental-complete-word
zle -N incremental-complete-word
bindkey "^Xi" incremental-complete-word

# This function allows you type a file pattern, and see the results of
# the expansion at each step.  When you hit return, they will be
# inserted into the command line.
autoload -U insert-files
zle -N insert-files
bindkey "^Xf" insert-files

# This set of functions implements a sort of magic history searching.
# After predict-on, typing characters causes the editor to look backward
# in the history for the first line beginning with what you have typed so
# far.  After predict-off, editing returns to normal for the line found.
# In fact, you often don't even need to use predict-off, because if the
# line doesn't match something in the history, adding a key performs
# standard completion - though editing in the middle is liable to delete
# the rest of the line.
autoload -U predict-on
zle -N predict-on
zle -N predict-off
bindkey "^X^Z" predict-on
bindkey "^Z" predict-off

# run-help is a help finder, bound in ZLE to M-h.  It doesn't need to be
# autoloaded to work - the non-autoloaded version just looks up a man
# page for the command under the cursor, then when that process is
# finished it pulls your old command line back up from the buffer stack.
# However, with the autoloaded function and:
#
# mkdir ~/zsh-help; cd ~/zsh-help MANPAGER="less" man zshbuiltins | \
# colcrt | perl /usr/share/zsh/4.2.1/Util/helpfiles
#
# It'll work for zsh builtins too. By the way, I've assumed some things
# in that command. ~/zsh-help can be wherever you like, MANPAGER needs
# to be any standard pager (less, pg, more, just not the MANPAGER I have
# defined in this file), colcrt can be col -bx, and the path to
# helpfiles may be different for you (Util may not even be installed
# with your distribution; fair enough, make install doesn't install it.
# Dig up a source tarball and everything is in there).

# Load the new one
autoload -U run-help

# Press Alt-H to show help for command we are currently on.
bindkey '[[A' run-help

# History file name and maximum size.
HISTFILE="$HOME/.zsh/history"
SAVEHIST=15000
HISTSIZE=15000

# Push History from previous sessions. IF $HISTFILE exists.
if [ -f $HISTFILE ]; then
    fc -R $HISTFILE
fi

## Key bindings
# You may use:
# % autoload -U zkbd
# % zkbd
# to discover your keys.

# bindkey -v             # Vi keybindings.

typeset -U fpath

prompt wunjo
# Actually, stick with emacs for the moment. The vi keymap just doesn't
# seem to be as complete (even if it's nicer for editing, there's no
# execute-named-cmd bound, for example).
bindkey -e             # Emacs keybindings.

# Up, down left, right.
# echotc forms part of the zsh/termcap module. It outputs the termcap value
# corresponding to the capability it was given as an argument. man zshmodules.
zmodload -i zsh/termcap
bindkey "$(echotc kl)" backward-char
bindkey "$(echotc kr)" forward-char
bindkey "$(echotc ku)" up-line-or-history
bindkey "$(echotc kd)" down-line-or-history

bindkey '\e[3~' delete-char # Delete

if [[ "$TERM" == "rxvt-unicode" || "$TERM" == "screen" ]]; then
    bindkey '\e[7~' beginning-of-line # Home
    bindkey '\e[8~' end-of-line # End
elif [[ "$TERM" == "linux" ]]; then
    bindkey '\e[1~' beginning-of-line # Home
    bindkey '\e[4~' end-of-line # End    
else # At least xterm; probably other terms too
    bindkey '\e[H~' beginning-of-line # Home
    bindkey '\e[F~' end-of-line # End
fi

bindkey '\e[5~' up-history # PageUp
bindkey '\e[6~' down-history # PageDown

# This function sets the window tile to user@host:/workingdir before each
# prompt. If you're using screen, it sets the window title (works
# wonderfully for 'hardstatus' lines.
precmd() {
#    [[ -t 1 ]] || return
    case $TERM in
        *xterm*|rxvt*) print -Pn "\e]2;%n@%m:%~\a"
        ;;
        screen*) print -Pn "\ek%n@%m:%~\e\\"
        ;;
    esac
}

# This sets the window title to the last run command.
preexec() {
#    [[ -t 1 ]] || return
    case $TERM in
        *xterm*|rxvt*) print -Pn "\e]2;$1\a"
        ;;
        screen*) print -Pn "\ek$1\e\\"
        ;;
    esac
}

# Custom commands.

loop() {
    while [ 1 -eq 1 ]; do
        $@
    done
}

# CTAN downloader

ctand() {
    wget http://mirror.ctan.org/macros/latex/contrib/$1.zip && unzip $1.zip
}

# For formating text files for a printer
fmtpr() {
    fmt --width=62 $@ | LC_ALL=C LANG=C pr -o 10 -W 62 -J -F -l 62 
}

#
# Debian.
#
debian.bugs.number() {
    # Debian Bug Tracker - by number.
    w3m "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=$1"
}

debian.bugs.package() {
    # Debian Bug Tracker - by package.
    w3m "http://bugs.debian.org/cgi-bin/pkgreport.cgi?src=$1"
}

debian.packages() {
    # Debian Packages.
    # Add 'src:' in front of the package name to search for source packages.
    w3m "http://packages.debian.org/$1"
}

debian.qa.maintainer() {
    # Debian QA Maintainer search by email address.
    w3m "http://qa.debian.org/developer.php?login=$1"
}

debian.qa.package() {
    # Debian QA Maintainer search by package name.
    w3m "http://qa.debian.org/developer.php?package=$1"
}

debian.qa.pts() {
    # Debian Package Tracking system - developers.
    w3m "http://packages.qa.debian.org/$1"
}

debian.qa.task() {
    # Debian QA - search for task.
    w3m "http://qa.debian.org/developer.php?task=$1"
}

debian.wiki() {
    # Search the Debian Wiki.
    w3m "http://wiki.debian.org/?action=fullsearch&value=$@"
}

#
# Ubuntu.
#

ubuntu.help() {
    # Ubuntu Help site.
    w3m "https://help.ubuntu.com/community/?action=fullsearch&value=$@"
}

ubuntu.packages() {
    # Ubuntu packages.
    # Again; add: "src:" in order to search for source packages.
    w3m "http://packages.ubuntu.com/$1"
}

ubuntu.wiki() {
    # Search the Ubuntu wiki.
    w3m "https://wiki.ubuntu.com/?action=fullsearch&value=$@"
}

#
# Launchpad.
#

launchpad.answers.number() {
    # Display a Launchpad answer by number.
    w3m "https://answers.launchpad.net/questions/$1"
}

launchpad.answers.package() {
    # Display list of questions for package in Launchpad.
    w3m "https://answers.launchpad.net/ubuntu/+source/$1"
}

launchpad.answers.search() {
    # Search Launchpad answers.
    w3m "https://answers.launchpad.net/questions/+questions?field.search_text=$@"
}

launchpad.blueprints() {
    # Search Launchpad blueprints.
    w3m "https://blueprints.launchpad.net/?searchtext=$@"
}

launchpad.bugs.number() {
    # Display a Launchpad bug by number.
    w3m "https://bugs.launchpad.net/bugs/$1"
}

launchpad.bugs.package() {
    # Display list of bugs for a package.
    w3m "https://bugs.launchpad.net/ubuntu/+source/$1"
}

launchpad.packages() {
    # Launchpad packages for Ubuntu.
    w3m "http://launchpad.net/ubuntu/+source/$1"
}

launchpad.project() {
    # Display a Launchpad project.
    w3m "https://launchpad.net/$1"
}

launchpad.project.search() {
    # Search Launchpad projects.
    w3m "https://launchpad.net/projects/+index?text=$@"
}

#
# Others.
#

google() {
    # Google search.
    w3m "http://www.google.com/search?q=$@"
}

bbc.search() {
    # Search the BBC website.
    w3m "http://search.bbc.co.uk/cgi-bin/search/results.pl?q=$@"
}

demonoid() {
    # Search Demonoid.com torrents.
    w3m "http://www.demonoid.com/files/?query=$@"
}

freedictonary.acronyms() {
    # Look up an acronym on the FreeDictonary.
    w3m "http://acronyms.thefreedictionary.com/$1"
}

imdb() {
    # Search IMDb.
    w3m "http://www.imdb.com/find?q=$@"
}

lonelyplanet() {
    # Search Lonely Planet.
    w3m "http://search.lonelyplanet.com/search.do?Ntt=$@"
}

urbandictionary() {
    # Search Urbandictionary.com.
    w3m "http://www.urbandictionary.com/define.php?term=$@"
}

wikipedia() {
    # Wikipedia search. English section.
    w3m "http://en.wikipedia.org/wiki/Special:Search?search=$@"
}

wiktionary() {
    # Search Wiktionary for a term.
    w3m "http://en.wiktionary.org/wiki/Special:Search?search=$@"
}

wikitravel() {
    # Wikitravel search. English section.
    w3m "http://wikitravel.org/en/Special:Search?search=$@"
}


forkex() {
    # Fork program $@ from console.
    nohup "$@" >/dev/null 2>&1 <&1 & disown %%
}

#conjugate() {
#    # Conjugates the verb $@
#    w3m "http://www.mijnwoordenboek.nl/EN/verb/$@"
#}

conjugate() {
    # Conjugates the verb $@
    w3m "http://www.verbix.com/cache/webverbix/1/$@.shtml"
}

proxy() {
    export http_proxy=http://localhost:3128/
}

noproxy() {
    unset http_proxy
}

gbp-snap() {
    if [[ -e $@ ]]; then
        git-dch -aSN $1
    else
        git-dch -aS
    fi
    gpg-mounter
    gibuild --git-ignore-new
    DSC=`head -n1 debian/changelog | sed -e 's/\(.*\) (\(.*\)).*/\1_\2.dsc/g'`
    DIST=`head -n1 debian/changelog | sed -e 's/.* \(.*\);.*/\1/g'`
    cd ..
    sbuild -d $DIST $DSC
}

enru() {
    dict -d mueller7accent $@ | less
}

# Pretty menu!
zstyle ':completion:*' menu select=1
zstyle ':completion:*' select-prompt %SScroll active at %p%s.

# Completion options.
zstyle ':completion:*' completer _complete _prefix
zstyle ':completion::prefix-1:*' completer _complete
zstyle ':completion:incremental:*' completer _complete _correct
zstyle ':completion:predict:*' completer _complete

# Completion caching.
zstyle ':completion::complete:*' use-cache 1
zstyle ':completion::complete:*' cache-path ~/.zsh/cache/$HOST

# Expand partial paths.
zstyle ':completion:*' expand 'yes'
zstyle ':completion:*' squeeze-slashes 'yes'

# Include non-hidden directories in globbed file completions
# for certain commands.
zstyle ':completion::complete:*' '\'

# Use menuselection for PID completion.
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always

#  tag-order 'globbed-files directories' all-files.
zstyle ':completion::complete:*:tar:directories' file-patterns '*~.*(-/)'

# Do not complete backup files as executables.
zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~'

# Separate matches into groups.
zstyle ':completion:*:matches' group 'yes'

# With commands like rm, it's annoying if you keep getting offered the same
# file multiple times. This fixes it. Also good for cp, et cetera..
zstyle ':completion:*:rm:*' ignore-line yes
zstyle ':completion:*:cp:*' ignore-line yes

# Describe each match group.
zstyle ':completion:*:descriptions' format "%B---- %d%b"

# Messages/warnings format.
zstyle ':completion:*:messages' format '%B%U---- %d%u%b' 
zstyle ':completion:*:warnings' format '%B%U---- no match for: %d%u%b'

# Describe options in full.
zstyle ':completion:*:options' description 'yes'
zstyle ':completion:*:options' auto-description '%d'

# Simulate spider's old abbrev-expand 3.0.5 patch 
#zstyle ':completion:*:history-words' stop verbose
#zstyle ':completion:*:history-words' remove-all-dups yes
#zstyle ':completion:*:history-words' list false

# From the zshwiki. Hide CVS files/directories from being completed.
zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS'
zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'

# Also from the wiki. Hide uninteresting users from completion.
zstyle ':completion:*:*:*:users' ignored-patterns \
adm apache bin daemon games gdm halt ident junkbust lp mail mailnull \
named news nfsnobody nobody nscd ntp operator pcap postgres radvd \
rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs backup  bind  \
dictd  gnats  identd  irc  man  messagebus  postfix  proxy  sys \
www-data alias amavis at clamav cmd5checkpw cron cyrus dhcp dnscache \
dnslog foldingathome guest haldaemon jabber ldap mailman mpd mysql \
nut p2p portage postmaster qmaild qmaill qmailp qmailq qmailr qmails \
smmsp tinydns vpopmail wasabi zope

# Pull hosts from $HOME/.ssh/known_hosts, also from the wiki
# local _myhosts. If it exists that is.
if [ -f $HOME/.ssh/known_hosts ]; then
    _myhosts=( ${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[0-9]*}%%\ *}%%,*} )
    zstyle ':completion:*' hosts $_myhosts
fi

# Approximate completion. From the wiki.
zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 1 numeric

zstyle ':completion:*:sudo:*' command-path /usr/sbin /usr/bin /sbin /bin \
                                           /usr/X11R6/bin

# NOTE: Comment this out for now. Breaks preexec and precmd above.
#if [ -f /etc/zsh_command_not_found ]; then
#    . /etc/zsh_command_not_found
#fi

# Options
setopt			\
NO_all_export		\
   always_last_prompt	\
   always_to_end	\
   append_history	\
   auto_cd		\
   auto_list		\
   auto_menu		\
   auto_name_dirs	\
   auto_param_keys	\
   auto_param_slash	\
   auto_pushd		\
   auto_remove_slash	\
NO_auto_resume		\
   bad_pattern		\
   bang_hist		\
NO_beep			\
   brace_ccl		\
   correct_all		\
NO_bsd_echo		\
NO_cdable_vars		\
NO_chase_links		\
   clobber		\
   complete_aliases	\
   complete_in_word	\
   correct		\
NO_correct_all		\
   csh_junkie_history	\
NO_csh_junkie_loops	\
NO_csh_junkie_quotes	\
NO_csh_null_glob	\
   equals		\
   extended_glob	\
   extended_history	\
   function_argzero	\
   glob			\
NO_glob_assign		\
   glob_complete	\
NO_glob_dots		\
NO_glob_subst		\
NO_hash_cmds		\
NO_hash_dirs		\
   hash_list_all	\
   hist_allow_clobber	\
   hist_beep		\
   hist_ignore_dups	\
   hist_ignore_space	\
NO_hist_no_store	\
   hist_verify		\
NO_hup			\
NO_ignore_braces	\
NO_ignore_eof		\
   interactive_comments	\
   inc_append_history	\
NO_list_ambiguous	\
NO_list_beep		\
   list_types		\
   long_list_jobs	\
   magic_equal_subst	\
NO_mail_warning		\
NO_mark_dirs		\
   menu_complete	\
   multios		\
   nomatch		\
   notify		\
NO_null_glob		\
   numeric_glob_sort	\
NO_overstrike		\
   path_dirs		\
   posix_builtins	\
NO_print_exit_value 	\
NO_prompt_cr		\
   prompt_subst		\
   pushd_ignore_dups	\
NO_pushd_minus		\
   pushd_silent		\
   pushd_to_home	\
   rc_expand_param	\
NO_rc_quotes		\
NO_rm_star_silent	\
NO_sh_file_expansion	\
   sh_option_letters	\
   share_history        \
   short_loops		\
NO_sh_word_split	\
NO_single_line_zle	\
NO_sun_keyboard_hack	\
NO_verbose		\
   zle

# GPG / SSH AGENT

if [[ "True" = "True" ]]; then
    keychain id_rsa id_rsa.lambda id_ecdsa1 id_ecdsa2 id_ecdsa
    keychain -Q ${GPGKEY} ${GPGKEY1}
    [ -z "$HOSTNAME" ] && HOSTNAME=`uname -n`
    [ -f $HOME/.keychain/$HOSTNAME-sh ] &&
           . $HOME/.keychain/$HOSTNAME-sh
    [ -f $HOME/.keychain/$HOSTNAME-sh-gpg ] &&
           . $HOME/.keychain/$HOSTNAME-sh-gpg
fi