From 233b00a683a1a92ab693e0ba5d485c19a0eb8c4b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 13 Jun 2026 13:22:31 -0400 Subject: [PATCH] Don't load `diff-mode` so eagerly (bug#81222) * .dir-locals.el (diff-add-log-use-relative-names): Move to `diff-mode`. * lisp/vc/vc-git.el: Don't require `diff-mode`. (vc-git-region-history-mode-map): Don't set the keymap parent yet. (vc-git-region-history-font-lock): Declare `diff-font-lock-keywords` to silence the compiler warning. (vc-git-region-history-mode): Require `diff-mode` and set the keymap parent here. --- .dir-locals.el | 4 ++-- lisp/vc/vc-git.el | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.dir-locals.el b/.dir-locals.el index b1123032443..d1cc520e232 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -7,7 +7,6 @@ (emacs-lisp-docstring-fill-column . 72) (vc-git-annotate-switches . "-w") (bug-reference-url-format . "https://debbugs.gnu.org/%s") - (diff-add-log-use-relative-names . t) (etags-regen-regexp-alist . ((("c" "objc") . @@ -57,7 +56,8 @@ (change-log-mode . ((add-log-time-zone-rule . t) (fill-column . 74) (mode . bug-reference))) - (diff-mode . ((mode . whitespace))) + (diff-mode . ((mode . whitespace) + (diff-add-log-use-relative-names . t))) (emacs-lisp-mode . ((indent-tabs-mode . nil) (electric-quote-comment . nil) (electric-quote-string . nil) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index b66f13f7268..e68945cda8d 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -2070,12 +2070,8 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"." (vc-git-command buffer 'async nil "log" "-p" ;"--follow" ;FIXME: not supported? (format "-L%d,%d:%s" lfrom lto (file-relative-name file)))) -(require 'diff-mode) - (defvar vc-git-region-history-mode-map - (let ((map (make-composed-keymap - nil (make-composed-keymap - (list diff-mode-map vc-git-log-view-mode-map))))) + (let ((map (make-sparse-keymap))) map)) (defvar vc-git--log-view-long-font-lock-keywords nil) @@ -2083,6 +2079,7 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"." '((vc-git-region-history-font-lock))) (defun vc-git-region-history-font-lock (limit) + (defvar diff-font-lock-keywords) (let ((in-diff (save-excursion (beginning-of-line) (or (looking-at "^\\(?:diff\\|commit\\)\\>") @@ -2094,8 +2091,9 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"." limit t) (match-beginning 1) limit)))) - (let ((font-lock-keywords (if in-diff diff-font-lock-keywords - vc-git--log-view-long-font-lock-keywords))) + (let ((font-lock-keywords + (if in-diff diff-font-lock-keywords + vc-git--log-view-long-font-lock-keywords))) (font-lock-fontify-keywords-region (point) end)) (goto-char end) (prog1 (< (point) limit) @@ -2103,8 +2101,14 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"." nil)) (define-derived-mode vc-git-region-history-mode - vc-git-log-view-mode "Git-Region-History" + vc-git-log-view-mode "Git-Region-History" "Major mode to browse Git's \"log -p\" output." + (require 'diff-mode) + (defvar diff-mode-map) + (unless (keymap-parent vc-git-region-history-mode-map) + (set-keymap-parent vc-git-region-history-mode-map + (make-composed-keymap + (list diff-mode-map vc-git-log-view-mode-map)))) (setq-local vc-git--log-view-long-font-lock-keywords log-view-font-lock-keywords) (setq-local font-lock-defaults