summaryrefslogtreecommitdiff
path: root/lisp/vc-annotate-lens-mode.el
blob: b615a1b9f38ce494461e9ad6f3e1c7ab130f8519 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
;;; Code:

;;; Commit
;; commit 6257322d751dc36eaaf509682da164f6aef3ff90
;; Author: Matthew Kosarek <mattkae@protonmail.com>
;; Date:   Sat Sep 3 12:01:26 2022 -0400

;;     Big upgrade to javascript/typescript to use a lanugage server

;; diff --git a/init.el b/init.el
;; --- a/init.el
;; +++ b/init.el


(make-variable-buffer-local
 (defvar vc-annotate-lens-cursor-position 0
   "Holds the cursor position from the last run of post-command-hooks."))

(defun do-stuff-if-moved-post-command ()
  "Show version control history of the current line in a flash."
  (unless (equal (line-number-at-pos) vc-annotate-lens-cursor-position)
    (setq vc-annotate-lens-cursor-position (line-number-at-pos)))
  
  (remove-overlays) ; TODO: Only remove the overlay that we last displayed
  
  (let ((git-info (shell-command-to-string (format "git log -u -L%d,%d:%s" vc-annotate-lens-cursor-position vc-annotate-lens-cursor-position buffer-file-name))))

    (let (( git-info-split (split-string git-info "\n" )))
      (let (
          ( commit-line (nth 0 git-info-split))
          ( author-line (nth 1 git-info-split))
          ( date-line (nth 2 git-info-split)))
        (overlay-put (make-overlay (point-at-eol) (+ 3 (point-at-eol))) 'display (format "    %s\n" author-line)) 
        )
      )
    )
  )


 (define-minor-mode vc-annotate-lens-mode
   "Show 'vc-annotate' information when you move to a line."
   :lighter " vc-annotate-lens"
   )

 (add-hook 'vc-annotate-lens-mode-on-hook (lambda () (add-hook 'post-command-hook #'do-stuff-if-moved-post-command)))
 (add-hook 'vc-annotate-lens-mode-off-hook (lambda () (remove-hook 'post-command-hook #'do-stuff-if-moved-post-command)))

 (provide 'vc-annotate-lens-mode)
;;; vc-annotate-lens-mode.el ends here.