--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/zshrc.d/30-functions.zrc Sat Jul 14 19:20:57 2012 +0200
@@ -0,0 +1,97 @@
+
+#############
+# Functions #
+#############
+
+# Commande tres pratique pour formatter un fichier .man
+# exemple : mf prog.1
+function mf() { tbl $* | nroff -mandoc | less -s }
+
+# ,,(), ,,,() for quickly changing $CWD {{{1
+# http://www.shell-fu.org/lister.php?id=769
+
+# Go up n levels:
+# ,, 3
+function ,, (){
+ local arg=${1:-1};
+ local dir=""
+ while [ $arg -gt 0 ]; do
+ dir="../$dir"
+ arg=$(($arg - 1));
+ done
+ cd $dir >&/dev/null
+}
+
+# Go up to a named dir
+# ,,, usr
+function ,,, (){
+ if [ -z "$1" ]; then
+ return
+ fi
+ local maxlvl=16
+ local dir=$1
+ while [ $maxlvl -gt 0 ]; do
+ dir="../$dir"
+ maxlvl=$(($maxlvl - 1));
+ if [ -d "$dir" ]; then
+ cd $dir >&/dev/null
+ fi
+ done
+}
+
+
+# Customized version from Frank Terbeck' scripts
+# http://bewatermyfriend.org/p/2011/013/
+# "." will display the current working directory
+# ".." will get you 1 directory up,
+# "..." will get you 2 directories up, etc.
+function ft_accept_line_cd_up() {
+ setopt local_options extended_glob
+ local -a cmdline
+ cmdline=( ${(z)BUFFER} )
+ if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == "." ]] ; then
+ BUFFER="pwd"
+ zle ".$WIDGET"
+ return
+ fi
+ if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == ..## ]] ; then
+ BUFFER='cd '
+ for (( i = 2; i <= ${#${cmdline[1]}}; i++ )); do
+ BUFFER="${BUFFER}../"
+ done
+ BUFFER=${BUFFER%/}
+ fi
+ zle ".$WIDGET"
+}
+zle -N accept-line ft_accept_line_cd_up
+
+# 2nd part, completion support...
+function ft_complete_with_dots() {
+ setopt local_options extended_glob
+ local -a cmdline
+ cmdline=( ${(z)BUFFER} )
+ if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == ..## ]] ; then
+ BUFFER='cd '
+ for (( i = 2; i <= ${#${cmdline[1]}}; i++ )); do
+ BUFFER="${BUFFER}../"
+ done
+ CURSOR=${#BUFFER}
+ fi
+ zle ".$WIDGET"
+}
+# Disabling for now as I don't know how to fallback to automatic correction...
+#zle -N expand-or-complete ft_complete_with_dots
+
+
+# genpass()
+# Generates a tough password of a given length
+# Borrowed (and slightly modifed) from Seth House github repository.
+
+function genpass() {
+ if [ ! "$1" ]; then
+ echo "Usage: $0 20"
+ echo "For a random, 20-character password."
+ return 1
+ fi
+ dd if=/dev/urandom count=1 2>/dev/null | tr -cd 'A-Za-z0-9' | cut -c-$1
+}