diff -r 000000000000 -r 7215ca490221 zshrc.d/30-functions.zrc --- /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 +}