summaryrefslogtreecommitdiffstats
path: root/highlight-vc-diffs.post
diff options
context:
space:
mode:
Diffstat (limited to 'highlight-vc-diffs.post')
-rw-r--r--highlight-vc-diffs.post74
1 files changed, 74 insertions, 0 deletions
diff --git a/highlight-vc-diffs.post b/highlight-vc-diffs.post
new file mode 100644
index 0000000..72bfe33
--- /dev/null
+++ b/highlight-vc-diffs.post
@@ -0,0 +1,74 @@
+;;;;;
+title: highlight VC diffs
+tags: tips, emacs, git, vc, diff
+date: 2013-01-25 02:20
+format: md
+;;;;;
+
+Sometimes you come across these gems of packages that seem to fulfill
+a wish that you didn't even realise you had.
+
+Today I came across
+[git-gutter](https://github.com/syohex/emacs-git-gutter) for Emacs and
+its companion
+[git-gutter-fringe](https://github.com/syohex/emacs-git-gutter-fringe),
+which are apparently based on an extension for Sumblime Text 2. These
+show the status of changes in a special "gutter" next to the fringe or
+in the fringe itself. This is very cool stuff.
+
+To enable it I added the following code to my Emacs init file:
+
+``` emacs-lisp
+(eval-after-load "git-gutter" '(load "git-gutter-fringe"))
+
+(defun maybe-use-git-gutter ()
+ "Run `git-gutter' if the current file is being tracked by git."
+ (when (eq (vc-backend (buffer-file-name)) 'Git)
+ (git-gutter)))
+
+(add-hook 'after-save-hook 'maybe-use-git-gutter)
+(add-hook 'after-change-major-mode-hook 'maybe-use-git-gutter)
+(add-hook 'window-configuration-change-hook 'maybe-use-git-gutter)
+```
+
+`git-gutter` was easily installed through MELPA, but I had to download
+`git-gutter-fringe` separately and use `package-install-file` to
+install that.
+
+I had to load `git-gutter-fringe` manually because it didn't seem to
+have any autoloads defined, and I had to run it using these three
+hooks because the information seemed to disappear if I switched
+windows and came back, didn't automatically update after saving and
+didn't automatically show anything when first loading the file. This
+was all fine, since just calling the function updates the buffer it's
+easy to use this way.
+
+Later, though, I stumbled upon
+[diff-hl](https://github.com/dgutov/diff-hl) by accident. I was
+looking for anything involving the fringe, which I think, for the most
+part, is underused.
+
+It does pretty much the same thing, except that it does so at least
+for git, bazaar and mercurial (according to the readme). It also
+defines some commands for working with the blocks of changes, like
+navigating between them and reverting them. It uses the fringe by
+default, and doesn't require a separate package to be installed. And
+it's much easier to set up.
+
+It can also be installed through MELPA, and afterwards it's just a
+line in our init file away:
+
+``` emacs-lisp
+(global-diff-hl-mode)
+```
+
+Of course if you don't want it enabled globally you can call
+`diff-hl-mode` from some hooks, but this way works fine for me.
+
+It's funny how I had no idea these existed, didn't even think about
+needing/wanting this feature and then finding two of them in the same
+day.
+
+<!-- Local Variables: -->
+<!-- mode: markdown -->
+<!-- End: -->