gnu-utils.plugin.zsh 2.63 KB
Newer Older
Sorin Ionescu's avatar
Sorin Ionescu committed
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
# ------------------------------------------------------------------------------
#          FILE:  gnu-utils.plugin.zsh
#   DESCRIPTION:  oh-my-zsh plugin file.
#        AUTHOR:  Sorin Ionescu (sorin.ionescu@gmail.com)
#       VERSION:  1.0.0
# ------------------------------------------------------------------------------


if [[ -x "${commands[gwhoami]}" ]]; then 
  __gnu_utils() {
    emulate -L zsh
    local gcmds
    local gcmd
    local cmd
    local prefix

    # coreutils 
    gcmds=('g[' 'gbase64' 'gbasename' 'gcat' 'gchcon' 'gchgrp' 'gchmod'
    'gchown' 'gchroot' 'gcksum' 'gcomm' 'gcp' 'gcsplit' 'gcut' 'gdate'
    'gdd' 'gdf' 'gdir' 'gdircolors' 'gdirname' 'gdu' 'gecho' 'genv' 'gexpand'
    'gexpr' 'gfactor' 'gfalse' 'gfmt' 'gfold' 'ggroups' 'ghead' 'ghostid'
    'gid' 'ginstall' 'gjoin' 'gkill' 'glink' 'gln' 'glogname' 'gls' 'gmd5sum'
    'gmkdir' 'gmkfifo' 'gmknod' 'gmktemp' 'gmv' 'gnice' 'gnl' 'gnohup' 'gnproc'
    'god' 'gpaste' 'gpathchk' 'gpinky' 'gpr' 'gprintenv' 'gprintf' 'gptx' 'gpwd'
    'greadlink' 'grm' 'grmdir' 'gruncon' 'gseq' 'gsha1sum' 'gsha224sum'
    'gsha256sum' 'gsha384sum' 'gsha512sum' 'gshred' 'gshuf' 'gsleep' 'gsort'
    'gsplit' 'gstat' 'gstty' 'gsum' 'gsync' 'gtac' 'gtail' 'gtee' 'gtest'
    'gtimeout' 'gtouch' 'gtr' 'gtrue' 'gtruncate' 'gtsort' 'gtty' 'guname'
    'gunexpand' 'guniq' 'gunlink' 'guptime' 'gusers' 'gvdir' 'gwc' 'gwho'
    'gwhoami' 'gyes')

32
33
34
35
    # findutils
    gcmds+=('gfind' 'gxargs' 'glocate')

    # Not part of either coreutils or findutils, installed separately.
Sorin Ionescu's avatar
Sorin Ionescu committed
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
    gcmds+=('gsed' 'gtar' 'gtime')

    for gcmd in "${gcmds[@]}"; do
      #
      # This method allows for builtin commands to be primary but it's
      # lost if hash -r or rehash -f is executed. Thus, those two 
      # functions have to be wrapped.
      #
      (( ${+commands[$gcmd]} )) && hash ${gcmd[2,-1]}=${commands[$gcmd]}

      #
      # This method generates wrapper functions.
      # It will override shell builtins.
      #
      # (( ${+commands[$gcmd]} )) && \
      # eval "function $gcmd[2,-1]() { \"${prefix}/${gcmd//"["/"\\["}\" \"\$@\"; }"

      #
      # This method is inflexible since the aliases are at risk of being
      # overriden resulting in the BSD coreutils being called.
      #
      # (( ${+commands[$gcmd]} )) && \
      # alias "$gcmd[2,-1]"="${prefix}/${gcmd//"["/"\\["}"
    done

    return 0
  }
  __gnu_utils;

  function hash() {
    if [[ "$*" =~ "-(r|f)" ]]; then
      builtin hash "$@"
      __gnu_utils
    else
      builtin hash "$@"
    fi
  }

  function rehash() {
    if [[ "$*" =~ "-f" ]]; then
      builtin rehash "$@"
      __gnu_utils
    else
      builtin rehash "$@"
    fi
  }
fi