]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a new command in *Compile-Log* buffers to re-byte-compile
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 1 Oct 2019 13:39:59 +0000 (15:39 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 1 Oct 2019 13:40:05 +0000 (15:40 +0200)
* lisp/emacs-lisp/bytecomp.el (emacs-lisp-compilation-recompile):
New command (bug#4516).
(emacs-lisp-compilation--current-file)
(emacs-lisp-compilation-mode-map): New variables with new `g'
binding.
(byte-compile-log-file): Set variable so that `g' can recompile it.

etc/NEWS
lisp/emacs-lisp/bytecomp.el

index ec40e5e2abe0cdf294b635f2201b57c88b33de9a..1a5047f60a5ea805e1639ea929382843566991d4 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -582,6 +582,11 @@ This is because on the one hand it suffers from various misbehaviors in corner
 cases that have plagued it for years, and on the other experiments indicated
 that it doesn't bring any measurable benefit.
 
+---
+*** The 'g' keystroke in *Compile-Log* buffers has been bound to a new
+command that will recompile the file previously compiled with 'M-x
+byte-compile-file' and the like.
+
 ** compile.el
 ---
 *** In 'compilation-error-regexp-alist', 'line' (and 'end-line') can
index 44a65ed4c6a2557435b9fb61dbd09201e5d03819..2b26390b180660892dcd42f6b882afaffc7e827b 100644 (file)
@@ -1045,8 +1045,26 @@ message buffer `default-directory'."
   :type '(repeat (choice (const :tag "Default" nil)
                         (string :tag "Directory"))))
 
+(defvar emacs-lisp-compilation-mode-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map compilation-minor-mode-map)
+    (define-key map "g" 'emacs-lisp-compilation-recompile)
+    map))
+
+(defvar emacs-lisp-compilation--current-file nil)
+
 (define-compilation-mode emacs-lisp-compilation-mode "elisp-compile"
-  "The variant of `compilation-mode' used for emacs-lisp compilation buffers.")
+  "The variant of `compilation-mode' used for emacs-lisp compilation buffers."
+  (setq-local emacs-lisp-compilation--current-file nil))
+
+(defun emacs-lisp-compilation-recompile ()
+  "Recompile the previously byte-compiled file."
+  (interactive)
+  (unless emacs-lisp-compilation--current-file
+    (error "No previously compiled file"))
+  (unless (stringp emacs-lisp-compilation--current-file)
+    (error "Only files can be recompiled"))
+  (byte-compile-file emacs-lisp-compilation--current-file))
 
 (defvar byte-compile-current-form nil)
 (defvar byte-compile-dest-file nil)
@@ -1236,6 +1254,7 @@ message buffer `default-directory'."
           ;; Do this after setting default-directory.
           (unless (derived-mode-p 'compilation-mode)
              (emacs-lisp-compilation-mode))
+           (setq emacs-lisp-compilation--current-file byte-compile-current-file)
           (compilation-forget-errors)
           pt))))