Created
July 24, 2016 03:09
-
-
Save syohex/d51da18c9c7bccecfa96fa808b11a956 to your computer and use it in GitHub Desktop.
List hunks and jump there
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/git-gutter.el b/git-gutter.el | |
index 15dc837..29c0425 100644 | |
--- a/git-gutter.el | |
+++ b/git-gutter.el | |
@@ -1057,6 +1057,72 @@ start revision." | |
(message "Added %d lines, Deleted %d lines" added deleted)) | |
(cons added deleted)))) | |
+(defvar git-gutter:list-mode-map | |
+ (let ((map (make-sparse-keymap))) | |
+ (define-key map (kbd "q") #'quit-window) | |
+ (define-key map (kbd "RET") #'git-gutter:list-goto-line) | |
+ (define-key map (kbd "n") #'git-gutter:list-next-line) | |
+ (define-key map (kbd "p") #'git-gutter:list-previous-line) | |
+ map)) | |
+ | |
+(defvar git-gutter:list-buffer nil) | |
+(defun git-gutter:list-goto-line () | |
+ (interactive) | |
+ (let ((linestr (car (split-string (buffer-substring-no-properties | |
+ (line-beginning-position) (line-end-position)) ":")))) | |
+ (select-window (get-buffer-window git-gutter:list-buffer)) | |
+ (save-restriction | |
+ (widen) | |
+ (goto-char (point-min)) | |
+ (forward-line (1- (string-to-number linestr)))))) | |
+ | |
+(defun git-gutter:list-next-line (arg) | |
+ (interactive "p") | |
+ (forward-line arg) | |
+ (when (eobp) | |
+ (goto-char (point-min))) | |
+ (save-selected-window | |
+ (git-gutter:list-goto-line))) | |
+ | |
+(defun git-gutter:list-previous-line (arg) | |
+ (interactive "p") | |
+ (forward-line (- arg)) | |
+ (when (bobp) | |
+ (goto-char (point-max)) | |
+ (forward-line -1)) | |
+ (save-selected-window | |
+ (git-gutter:list-goto-line))) | |
+ | |
+(define-derived-mode git-gutter:list-mode nil "" | |
+ "" | |
+ (setq buffer-read-only t) | |
+ (use-local-map git-gutter:list-mode-map)) | |
+ | |
+(defun git-gutter:list () | |
+ (interactive) | |
+ (let ((diffinfos git-gutter:diffinfos) | |
+ (buf (current-buffer))) | |
+ (with-current-buffer (get-buffer-create "*git-gutter-list*") | |
+ (let ((inhibit-read-only t)) | |
+ (erase-buffer) | |
+ (cl-loop for diffinfo in diffinfos | |
+ for start-line = (git-gutter-hunk-start-line diffinfo) | |
+ for first-line = (with-temp-buffer | |
+ (insert (git-gutter-hunk-content diffinfo)) | |
+ (goto-char (point-min)) | |
+ (forward-line +1) | |
+ (buffer-substring-no-properties | |
+ (1+ (point)) (line-end-position))) | |
+ do | |
+ (insert (format "%s: %s\n" | |
+ (propertize (number-to-string start-line) | |
+ 'face '((:foreground "cyan"))) | |
+ first-line))) | |
+ (git-gutter:list-mode) | |
+ (set (make-local-variable 'git-gutter:list-buffer) buf) | |
+ (goto-char (point-min)) | |
+ (pop-to-buffer (current-buffer)))))) | |
+ | |
(provide 'git-gutter) | |
;;; git-gutter.el ends here |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment