Hi! I managed to have some success, although it's not perfect. Unfortunately the Eiffel grammar does not allow a 100% solution. Example: --- local x : BOOLEAN --- declares a local variable named `x', while --- x : BOOLEAN do ... end --- Declares a function named `x'. Formal generic parameters like `x : ARRAY[ARRAY[STRING]]' make things more complicate. Anyway, here's my solution (probably incomplete): --- % git config --local -e [diff "Eiffel"] xfuncname = "!^[[:space:]]*(check|class|[Cc]reate|else|elseif|end|ensure|do|!|feature|from|indexing|inherit|is|local|loop|note|require|then|until)[[:space:]]*\n\ ^[[:space:]]*(class[[:space:]]*[[:alpha:]_][[:alnum:]_]*)\n\ ^[[:space:]]*([[:alpha:]_][[:alnum:]_]*[[:space:]]*\\([^(\")]+:[^(\")]+\\)[[:space:]]*:[[:space:]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*[^[:space:]\"]?[^\"=]*)[[:space:]]*$\n\ ^[[:space:]]*([[:alpha:]_][[:alnum:]_]*[[:space:]]*\\([^(\")]+:[^(\")]+\\))[[:space:]]*$\n\ ^[[:space:]]*([[:alpha:]_][[:alnum:]_]*[[:space:]]*:[[:space:]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*[^[:space:]\"]?[^\"=]*)[[:space:]]*$\n\ ^[[:space:]]*([[:alpha:]_][[:alnum:]_]*)[[:space:]]*$" % cat .git/info/attributes *.e diff=Eiffel --- Regards, Ulrich >>> Johannes Sixt <j.sixt@xxxxxxxxxxxxx> schrieb am 22.10.2012 um 15:35 in Nachricht <50854B90.50807@xxxxxxxxxxxxx>: > Am 10/22/2012 15:06, schrieb Ævar Arnfjörð Bjarmason: > > On Mon, Oct 22, 2012 at 1:58 PM, Ulrich Windl > > <Ulrich.Windl@xxxxxxxxxxxxxxxxxxxx> wrote: > >> However there's one little thing I noticed with "git diff": The > >> conte4xt lines (staring with "@@") show the current function (in Perl > >> and C), but they show the current "feature clause" in Eiffel (as > >> opposed to the expected current feature). I wonder how hard it is to > >> fix it (Observed in git 1.7.7 of openSUSE 12.1). > > > > See git.git's e90d065 for an example of adding a new diff pattern. > > It's not necessary to wait until there is built-in support for a new > language. > > For example, for Windows resource files, I have > > *.rc diff=winres > > in .gitattributes or .git/info/attributes and > > [diff "winres"] > xfuncname = > "!^(BEGIN|END|FONT|CAPTION|STYLE)\n^[a-zA-Z_][a-zA-Z_0-9]*.*\n^[[:space:]]*( > [[:alnum:]_]+, > *DIALOG.*)" > > in .git/config (the xfuncname is all on a single line). The first part > beginning at ! up to \n tells to ignore the specified matches. The other > parts separated by \n tell the things to put in the hunk header. You can > have "ignore" parts (with exlamation mark) and "take this" parts (without) > in any order that is convenient, as long as the last one is "take this". > > -- Hannes > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html