KernelNewbies:

You have to source [wiki:roelkluin/cvars cvars] to use these tools and run these commands in your git Linux kernel directory.

gg

gg does something like

git grep -n -E [other_options] "$(bli2 "$1")"

bli2

bli2() parses a string and transforms it into a more complex extended regexp, which it simply echoes.

To understand how it parses things try these:

bli2 "@V"
bli2 "@d"
bli2 " "
bli2 "
 "

Note that @V will catch the identifier of a simple local variable, @d will catch a number (even if it's a hex or 1ull), spaces are squeezed and parsed to match optional spaces.

bli2 pattern

description of what is echoed

echoed string (literally)

number of back-references

any space

optional space

[[:space:]]*

-

\!

exclamation mark (because bash otherwise bangs)

!

-

@S

obligatory space

[[:space:]]+

-

@V

identifier

[[:alpha:]_]+[[:alnum:]_]*

-

@K

identifier in only uppercases

[[:upper:]_]+[[:upper:][:digit:]_]*

-

@Q

a non-alnumeric

[^[:alnum:]_]

-

@Q2

a non-alnumeric or extension to the left of a variable

[^[:alnum:]_>.]

-

@w

(pointer) member, array

see `bli2 "@w"'

1

@d

any number

see `bli2 "@d"'

1

@n

any number of lines, subsequent matches on the beginning of the next line

([^\n]*\n)*

1

\(...\)

up to 2 nested parentheses

see `bli2 "\(...\)"'

2

\{...\}

up to 2 nested curly brackets

see `bli2 "\{...\}"'

2

\[...\]

up to 2 nested square brackets

see `bli2 "\[...\]"'

2

\(-..\)

characters optionally followed by up to 2 nested parentheses

see `bli2 "\(-..\)"'

3

\{-..\}

characters optionally followed by up to 2 nested curly brackets

see `bli2 "\{-..\}"'

3

\{.8.\}

up to 8 nested curly brackets

see `bli2 "\(.8.\)"'

8

gres

I wrote this to do a multiline (git-)grep, See [wiki:roelkluin/gres_examples examples]. gres does something in the order of:

git grep -E -n -other_opts "$(bli2 "$1")" -- '*.c' '*.h' | sed -n -r "$(ecsed2 "${@:2})"

with `gres -B1 -A40 "pattern1" "pattern2" "..."' the `-B1' and `-A40' are passed to git-grep, bli2() parses the first pattern to a extended regexp query. Subsequent patterns are passed to ecsed2() which are used to create a sed script. With this script, sed parses the `git grep' output and prints only the output of which the last - but not prior - patterns matched.

The sed script transforms the first of the `path/to/filename.c-301-' into a vi command, the remainder are removed. Until an end-of-function- or end-of-match-pattern occurs, lines are extended. Any comments are removed. For each match that `git grep' piped to sed, (parsed) matches are displayed if no exclusion pattern matched and the last pattern matched.

KernelNewbies: roelkluin/cvars_howto (last edited 2009-12-30 11:40:01 by d133062)