zshrc.d/30-functions.zrc
changeset 0 7215ca490221
child 5 5dbc9ebf690c
equal deleted inserted replaced
-1:000000000000 0:7215ca490221
       
     1 
       
     2 #############
       
     3 # Functions #
       
     4 #############
       
     5 
       
     6 # Commande tres pratique pour formatter un fichier .man
       
     7 # exemple : mf prog.1
       
     8 function mf() { tbl $* | nroff -mandoc | less -s }
       
     9 
       
    10 # ,,(), ,,,() for quickly changing $CWD {{{1
       
    11 # http://www.shell-fu.org/lister.php?id=769
       
    12 
       
    13 # Go up n levels:
       
    14 # ,, 3
       
    15 function ,, (){
       
    16     local arg=${1:-1};
       
    17     local dir=""
       
    18     while [ $arg -gt 0 ]; do
       
    19         dir="../$dir"
       
    20         arg=$(($arg - 1));
       
    21     done
       
    22     cd $dir >&/dev/null
       
    23 }
       
    24 
       
    25 # Go up to a named dir
       
    26 # ,,, usr
       
    27 function ,,, (){
       
    28     if [ -z "$1" ]; then
       
    29         return
       
    30     fi
       
    31     local maxlvl=16
       
    32     local dir=$1
       
    33     while [ $maxlvl -gt 0 ]; do
       
    34         dir="../$dir"
       
    35         maxlvl=$(($maxlvl - 1));
       
    36         if [ -d "$dir" ]; then
       
    37             cd $dir >&/dev/null
       
    38         fi
       
    39     done
       
    40 }
       
    41 
       
    42 
       
    43 # Customized version from Frank Terbeck' scripts
       
    44 # http://bewatermyfriend.org/p/2011/013/
       
    45 # "."   will display the current working directory
       
    46 # ".."  will get you 1 directory up,
       
    47 # "..." will get you 2 directories up, etc.
       
    48 function ft_accept_line_cd_up() {
       
    49     setopt local_options extended_glob
       
    50     local -a cmdline
       
    51     cmdline=( ${(z)BUFFER} )
       
    52     if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == "." ]] ; then
       
    53         BUFFER="pwd"
       
    54         zle ".$WIDGET"
       
    55         return
       
    56     fi
       
    57     if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == ..## ]] ; then
       
    58         BUFFER='cd '
       
    59         for (( i = 2; i <= ${#${cmdline[1]}}; i++ )); do
       
    60             BUFFER="${BUFFER}../"
       
    61         done
       
    62         BUFFER=${BUFFER%/}
       
    63     fi
       
    64     zle ".$WIDGET"
       
    65 }
       
    66 zle -N accept-line ft_accept_line_cd_up
       
    67 
       
    68 # 2nd part, completion support...
       
    69 function ft_complete_with_dots() {
       
    70     setopt local_options extended_glob
       
    71     local -a cmdline
       
    72     cmdline=( ${(z)BUFFER} )
       
    73     if (( ${#cmdline} == 1 )) && [[ ${cmdline[1]} == ..## ]] ; then
       
    74         BUFFER='cd '
       
    75         for (( i = 2; i <= ${#${cmdline[1]}}; i++ )); do
       
    76             BUFFER="${BUFFER}../"
       
    77         done
       
    78         CURSOR=${#BUFFER}
       
    79     fi
       
    80     zle ".$WIDGET"
       
    81 }
       
    82 # Disabling for now as I don't know how to fallback to automatic correction...
       
    83 #zle -N expand-or-complete ft_complete_with_dots
       
    84 
       
    85 
       
    86 # genpass()
       
    87 # Generates a tough password of a given length
       
    88 # Borrowed (and slightly modifed) from Seth House github repository.
       
    89 
       
    90 function genpass() {
       
    91     if [ ! "$1" ]; then
       
    92         echo "Usage: $0 20"
       
    93         echo "For a random, 20-character password."
       
    94         return 1
       
    95     fi
       
    96     dd if=/dev/urandom count=1 2>/dev/null | tr -cd 'A-Za-z0-9' | cut -c-$1
       
    97 }