summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/init-git.el30
1 files changed, 30 insertions, 0 deletions
diff --git a/lisp/init-git.el b/lisp/init-git.el
index 678231d..85ef138 100644
--- a/lisp/init-git.el
+++ b/lisp/init-git.el
@@ -591,6 +591,29 @@ show tags by default."
((derived-mode-p 'magit-log-mode)
(call-interactively #'km/magit-log-flip-revs))))
+(defun km/magit-diff-visit-file (&optional prev-rev other-window)
+ "Like `magit-diff-visit-file', but with the option to visit REV^.
+
+If prefix argument PREV-REV is non-nil, visit file for REV^
+instead of REV. If not in `magit-revision-mode', the prefix
+argument has no effect.
+
+OTHER-WINDOW corresponds to `magit-diff-visit-file's OTHER-WINDOW
+argument. Interactively, this can be accessed using the command
+`km/magit-diff-visit-file-other-window'."
+ (interactive "P")
+ (let ((magit-refresh-args (if (and prev-rev
+ (derived-mode-p 'magit-revision-mode))
+ (cons (concat (car magit-refresh-args) "^")
+ (cdr magit-refresh-args))
+ magit-refresh-args))
+ (current-prefix-arg (and other-window (list 4))))
+ (call-interactively #'magit-diff-visit-file)))
+
+(defun km/magit-diff-visit-file-other-window (&optional prev-rev)
+ (interactive "P")
+ (km/magit-diff-visit-file prev-rev t))
+
(define-key ctl-x-4-map "g" 'magit-find-file-other-window)
(define-key km/file-map "g" 'magit-find-file)
@@ -607,6 +630,8 @@ show tags by default."
;; `magit-diff-visit-file-worktree' is also on C-RET.
(define-key magit-file-section-map (kbd "C-j") 'magit-diff-visit-file-worktree)
(define-key magit-hunk-section-map (kbd "C-j") 'magit-diff-visit-file-worktree)
+(define-key magit-file-section-map (kbd "C-o") 'km/magit-diff-visit-file-other-window)
+(define-key magit-hunk-section-map (kbd "C-o") 'km/magit-diff-visit-file-other-window)
(define-key magit-log-mode-map "j" 'km/magit-avy-goto-subword-1)
(define-key magit-refs-mode-map "j" 'km/magit-avy-goto-subword-1)
@@ -614,6 +639,11 @@ show tags by default."
(define-key magit-refs-mode-map (kbd "C-c C-t") 'km/magit-refs-toggle-tags)
+(define-key magit-file-section-map [remap magit-visit-thing]
+ 'km/magit-diff-visit-file)
+(define-key magit-hunk-section-map [remap magit-visit-thing]
+ 'km/magit-diff-visit-file)
+
(define-key magit-refs-mode-map (kbd "C-c C-f") 'km/magit-refs-filter-recent)
(define-key magit-process-mode-map (kbd "C-c C-k") 'magit-process-kill)