aboutsummaryrefslogtreecommitdiff
path: root/sh/shrc.d/grep.sh
blob: df2101aa5dda860d22183febe5212a9e068cf042 (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
# Our ~/.profile should already have made a directory with the supported
# options for us; if not, we won't be wrapping grep(1) with a function at all
[ -d "$HOME"/.cache/grep ] || return

# Define function proper
grep() {

    # Add --color if the terminal has at least 8 colors
    [ -e "$HOME"/.cache/grep/color ] &&
    [ "$({ tput colors || tput Co ; } 2>/dev/null)" -ge 8 ] &&
        set -- --color=auto "$@"

    # Add --binary-files=without-match to gracefully skip binary files
    [ -e "$HOME"/.cache/grep/binary-files ] &&
        set -- --binary-files=without-match "$@"

    # Add --exclude to ignore .gitignore and .gitmodules files
    [ -e "$HOME"/.cache/grep/exclude ] &&
        set -- \
            --exclude=.gitignore  \
            --exclude=.gitmodules \
            "$@"

    # Add --exclude-dir to ignore version control dot-directories
    [ -e "$HOME"/.cache/grep/exclude-dir ] &&
        set -- \
            --exclude-dir=.cvs \
            --exclude-dir=.git \
            --exclude-dir=.hg  \
            --exclude-dir=.svn \
            "$@"

    # Run grep(1) with the concluded arguments
    command grep "$@"
}