 	    'mouse-face 'mode-line-highlight
 	    'help-echo "mouse-1: goto line")))))))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; vc mode
+(require 'vc-hooks)
+(require 'vc-git)
+
+(def-with-selected-window my-magit-status ()
+  (magit-status))
+
+(defvar my-vc-mode-line-keymap
+  (let ((map (make-sparse-keymap)))
+    (define-key map [mode-line mouse-1] 'my-magit-status)
+    map))
+
+;; Let's only care about Git for now.
+(defun vc-mode-line (file &optional backend)
+  (interactive (list buffer-file-name))
+  (when (eq backend 'Git)
+    (setq vc-mode
+          (propertize (format "{%s}" (vc-git--symbolic-ref file))
+                      'mouse-face 'mode-line-highlight
+                      'help-echo "Click for Magit status"
+                      'local-map my-vc-mode-line-keymap))
+    (force-mode-line-update)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Put it all  together


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Buffer modified
(defvar my-mode-line-buffer-modified-p-keymap
  (let ((map (make-sparse-keymap)))
    (define-key map [mode-line mouse-1] 'save-buffer)
    (define-key map [mode-line down-mouse-1] 'ignore)
    (define-key map [mode-line S-mouse-1] 'my-unsaved-changes)
    map))

     (interactive "e")
     (with-selected-window (posn-window (event-start event))
       ,@body)))

(defmacro def-modeline-var (name &rest body)
  `(progn
