syscfg/emacs/module/module-magit.el

67 lines
2.4 KiB
EmacsLisp

;;; module-magit.el --- git integration
;;;
;;; Commentary:
;;;
;;; Setup git integration with Emacs.
;;;
;;; Code:
(require 'module-pkg)
(pkg/require-defer 'magit)
(with-eval-after-load 'magit
(setq magit-display-buffer-function
#'magit-display-buffer-same-window-except-diff-v1)
;; git reset --soft $(git merge-base branch1 branch2)
(defun magit-reset-to-merge-base ()
"Reset to merge-base of two branches using Magit's branch selection."
(interactive)
(require 'magit)
(let* ((branch1 (magit-read-branch "Select first branch: "))
(branch2 (magit-read-branch "Select second branch: "))
(merge-base (magit-git-string "merge-base" branch1 branch2)))
(if merge-base
(progn
(magit-reset-internal "--soft" merge-base)
(message "Reset to merge-base of %s and %s" branch1 branch2))
(user-error "No merge-base found between %s and %s" branch1 branch2))))
;; git reset --soft @{u}
(defun magit-reset-to-upstream ()
"Reset to upstream of the current branch using Magit."
(interactive)
(require 'magit)
(let ((current-branch (magit-get-current-branch)))
(if current-branch
(let ((upstream (magit-get-upstream-branch current-branch)))
(if upstream
(progn
(magit-reset-internal "--soft" "@{u}")
(message "Reset to upstream of %s (%s)" current-branch upstream))
(user-error "No upstream branch set for %s" current-branch)))
(user-error "Not on a branch"))))
(defvar my/magit-prefix-map (make-sparse-keymap))
(define-key ctl-x-map "g" my/magit-prefix-map)
(define-key my/magit-prefix-map "g" #'magit-status)
(define-key my/magit-prefix-map "rb" #'magit-reset-to-merge-base)
(define-key my/magit-prefix-map "ru" #'magit-reset-to-upstream)
(define-key my/magit-prefix-map "ll" #'magit-log)
(define-key my/magit-prefix-map "la" #'magit-log-all)
(define-key my/magit-prefix-map "lf" #'magit-log-buffer-file)
(define-key my/magit-prefix-map "Rs" #'magit-reset-soft)
(define-key my/magit-prefix-map "Rh" #'magit-reset-hard)
(define-key my/magit-prefix-map "!" #'magit-run)
(define-key my/magit-prefix-map "bb" #'magit-branch)
(define-key my/magit-prefix-map "bc" #'magit-branch-create)
(define-key my/magit-prefix-map "bs" #'magit-branch-checkout)
(define-key my/magit-prefix-map "mm" #'magit-merge)
(define-key my/magit-prefix-map "dd" #'magit-diff))
(provide 'module-magit)
;;; module-magit.el ends here.