This repository has been archived on 2026-10-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
SimplyEmacs/lisp/init-git.el
T

84 lines
2.1 KiB
EmacsLisp
Executable File

;;; init-git.el --- Magit configuration -*- lexical-binding: t; -*-
;;; Commentary:
;; Use Magit with its native keybindings while preserving Evil's window
;; management.
;;
;; Magit buffers are displayed in a dedicated side window on the right.
;;
;; Custom keybindings:
;; C-c C-g - Open Magit
;; C-w - Evil window map
;; j - Next section
;; k - Previous section
;; q - Kill Magit buffer and close the side window
;;; Code:
(use-package magit
:after evil
:bind
(("C-c C-g" . magit-status))
:config
;; Magit appearance and behaviour.
;; Highlight the exact characters that changed.
(setq magit-diff-refine-hunk 'all)
;; Show more surrounding context in diffs.
(setq magit-diff-context-lines 5)
;; Show all transient options.
(setq transient-default-level 5)
;; Don't ask about saving modified buffers.
(setq magit-save-repository-buffers 'dontask)
;; Display Magit in a dedicated side window on the right.
(add-to-list
'display-buffer-alist
'("\\*magit"
(display-buffer-in-side-window)
(side . right)
(slot . 0)
(window-width . 0.45)
(dedicated . t)))
;; Custom commands.
(defun my/magit-quit ()
"Kill the current Magit buffer and close its window."
(interactive)
(quit-window t))
;; Keybindings.
(dolist (map '(magit-mode-map
magit-status-mode-map
magit-log-mode-map
magit-diff-mode-map
magit-revision-mode-map))
(with-eval-after-load 'magit
(when (boundp map)
(let ((keymap (symbol-value map)))
;; Keep Evil window commands.
(define-key keymap (kbd "C-w") evil-window-map)
;; Vim-style movement.
(define-key keymap (kbd "j") #'magit-section-forward)
(define-key keymap (kbd "k") #'magit-section-backward)
;; Quit Magit.
(define-key keymap (kbd "q") #'my/magit-quit)))))
(with-eval-after-load 'which-key
(which-key-add-key-based-replacements
"C-c C-g" "Magit")))
(provide 'init-git)
;;; init-git.el ends here