;;;;;
title: Some quick git diff tips
tags: org-mode, lisp, config, git
date: 2013-08-11 00:54
format: md
;;;;;

A couple of quick tips. As you possibly know you can specify some
options to be used for diffs (and other things) per file type. The one
I'm interested in is the function name.

## For org-mode

The primary way of identifying which part of an org-mode document a
change occurs in seems to me to be the heading. So, in your
`$HOME/.gitconfig` put:

    [diff "org"]
          xfuncname = "^\\*+.*"

Which should show any lines starting with one or more `*` characters.
And then in `$XDG_CONFIG_HOME/git/attributes` or
`$HOME/.config/git/attributes` put:

    ,*.org   diff=org

## For lisp and lisp-like langauges

For anything that resembles lisp (so Common Lisp, Emacs Lisp, Hy,
scheme, etc.) I would think that the easiest thing to do is just see
the closes top-level form. So, in your `$HOME/.gitconfig` put:

    [diff "lisp"]
          xfuncname = "^\\([^ ]+ [^ ]+"

Which should show the opening parenthesis and the first two words. For
example:

    (defun some-function-name
    (defclass my-awesome-class
    (define-route this-strange-route

And then put in your `$XDG_CONFIG_HOME/git/attributes` or
`$HOME/.config/git/attributes`:

    ,*.lisp  diff=lisp
    ,*.el    diff=lisp
    ,*.hy    diff=lisp
    ,*.scm   diff=lisp

And possibly any other lisp-like language files you can think of.
