[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#25354: patch for this bug
From: |
Tom Tromey |
Subject: |
bug#25354: patch for this bug |
Date: |
Sat, 05 Aug 2017 22:25:14 -0600 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
>>>>> "Eli" == Eli Zaretskii <eliz@gnu.org> writes:
Eli> Thanks. This should be mentioned in NEWS, and the user manual needs
Eli> an update.
How about this?
Tom
commit 4cf134bf68e374df32876b411dd0c31c6bcde85e
Author: Tom Tromey <tom@tromey.com>
Date: Sun Mar 5 10:48:41 2017 -0700
Show number of errors in compilation-mode mode-line
Bug#25354
* lisp/progmodes/compile.el (compilation-num-errors-found): Provide
default value.
(compilation-num-warnings-found, compilation-num-infos-found): New
defvars.
(compilation-mode-line-errors): New defconst.
(compilation-face): Remove.
(compilation-type, compilation--note-type): New functions.
(compilation-parse-errors): Call compilation--note-type.
(compilation-start): Include compilation-mode-line-errors in
mode-line-process.
(compilation-setup): Initialize compilation-num-* variables to 0.
(compilation-handle-exit): Include compilation-mode-line-errors in
mode-line-process.
* doc/emacs/building.texi (Compilation): Document new feature.
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index f7eb8fe..cc79eae 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -90,6 +90,10 @@ Compilation
remains fixed while compilation output is added at the end of the
buffer.
+ While compilation proceeds, the mode line is updated to show the
+number of errors, warnings, and informational messages that have been
+seen so far.
+
@cindex compilation buffer, keeping point at end
@vindex compilation-scroll-output
If you change the variable @code{compilation-scroll-output} to a
diff --git a/etc/NEWS b/etc/NEWS
index b72793d..9d092db 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -732,6 +732,11 @@ where to place point after C-c M-r and C-c M-s.
*** Messages from CMake are now recognized.
+++
+*** The number of errors, warnings, and informational messages is now
+displayed in the mode line. These are updated as compilation
+proceeds.
+
++++
*** A new option 'dired-always-read-filesystem' default to nil.
If non-nil, buffers visiting files are reverted before search them;
for instance, in 'dired-mark-files-containing-regexp' a non-nil value
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 31ec5a6..f0935cd 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -127,7 +127,21 @@ compilation-error
(defvar compilation-arguments nil
"Arguments that were given to `compilation-start'.")
-(defvar compilation-num-errors-found)
+(defvar compilation-num-errors-found 0)
+(defvar compilation-num-warnings-found 0)
+(defvar compilation-num-infos-found 0)
+
+(defconst compilation-mode-line-errors
+ '(" [" (:propertize (:eval (int-to-string compilation-num-errors-found))
+ face compilation-error
+ help-echo "Number of errors so far")
+ " " (:propertize (:eval (int-to-string compilation-num-warnings-found))
+ face compilation-warning
+ help-echo "Number of warnings so far")
+ " " (:propertize (:eval (int-to-string compilation-num-infos-found))
+ face compilation-info
+ help-echo "Number of informational messages so far")
+ "]"))
;; If you make any changes to `compilation-error-regexp-alist-alist',
;; be sure to run the ERT test in test/lisp/progmodes/compile-tests.el.
@@ -886,10 +900,10 @@ compilation-skip-visited
:group 'compilation
:version "22.1")
-(defun compilation-face (type)
- (or (and (car type) (match-end (car type)) compilation-warning-face)
- (and (cdr type) (match-end (cdr type)) compilation-info-face)
- compilation-error-face))
+(defun compilation-type (type)
+ (or (and (car type) (match-end (car type)) 1)
+ (and (cdr type) (match-end (cdr type)) 0)
+ 2))
;; LOC (or location) is a list of (COLUMN LINE FILE-STRUCTURE nil nil)
@@ -1334,6 +1348,14 @@ compilation--parse-region
(compilation-parse-errors start end)))
+(defun compilation--note-type (type)
+ "Note that a new message with severity TYPE was seen.
+This updates the appropriate variable used by the mode-line."
+ (cl-case type
+ (0 (cl-incf compilation-num-infos-found))
+ (1 (cl-incf compilation-num-warnings-found))
+ (2 (cl-incf compilation-num-errors-found))))
+
(defun compilation-parse-errors (start end &rest rules)
"Parse errors between START and END.
The errors recognized are the ones specified in RULES which default
@@ -1397,14 +1419,17 @@ compilation-parse-errors
file line end-line col end-col (or type 2) fmt))
(when (integerp file)
+ (setq type (if (consp type)
+ (compilation-type type)
+ (or type 2)))
+ (compilation--note-type type)
+
(compilation--put-prop
file 'font-lock-face
- (if (consp type)
- (compilation-face type)
- (symbol-value (aref [compilation-info-face
- compilation-warning-face
- compilation-error-face]
- (or type 2))))))
+ (symbol-value (aref [compilation-info-face
+ compilation-warning-face
+ compilation-error-face]
+ type))))
(compilation--put-prop
line 'font-lock-face compilation-line-face)
@@ -1768,7 +1793,8 @@ compilation-start
outbuf command))))
;; Make the buffer's mode line show process state.
(setq mode-line-process
- '(:propertize ":%s" face compilation-mode-line-run))
+ '((:propertize ":%s" face compilation-mode-line-run)
+ compilation-mode-line-errors))
;; Set the process as killable without query by default.
;; This allows us to start a new compilation without
@@ -1797,7 +1823,8 @@ compilation-start
(message "Executing `%s'..." command)
;; Fake mode line display as if `start-process' were run.
(setq mode-line-process
- '(:propertize ":run" face compilation-mode-line-run))
+ '((:propertize ":run" face compilation-mode-line-run)
+ compilation-mode-line-errors))
(force-mode-line-update)
(sit-for 0) ; Force redisplay
(save-excursion
@@ -2106,6 +2133,9 @@ compilation-setup
(make-local-variable 'compilation-messages-start)
(make-local-variable 'compilation-error-screen-columns)
(make-local-variable 'overlay-arrow-position)
+ (setq-local compilation-num-errors-found 0)
+ (setq-local compilation-num-warnings-found 0)
+ (setq-local compilation-num-infos-found 0)
(set (make-local-variable 'overlay-arrow-string) "")
(setq next-error-overlay-arrow-position nil)
(add-hook 'kill-buffer-hook
@@ -2195,16 +2225,18 @@ compilation-handle-exit
(add-text-properties omax (point)
(append '(compilation-handle-exit t) nil))
(setq mode-line-process
- (let ((out-string (format ":%s [%s]" process-status (cdr status)))
- (msg (format "%s %s" mode-name
- (replace-regexp-in-string "\n?$" ""
- (car status)))))
- (message "%s" msg)
- (propertize out-string
- 'help-echo msg
- 'face (if (> exit-status 0)
- 'compilation-mode-line-fail
- 'compilation-mode-line-exit))))
+ (list
+ (let ((out-string (format ":%s [%s]" process-status (cdr status)))
+ (msg (format "%s %s" mode-name
+ (replace-regexp-in-string "\n?$" ""
+ (car status)))))
+ (message "%s" msg)
+ (propertize out-string
+ 'help-echo msg
+ 'face (if (> exit-status 0)
+ 'compilation-mode-line-fail
+ 'compilation-mode-line-exit)))
+ compilation-mode-line-errors))
;; Force mode line redisplay soon.
(force-mode-line-update)
(if (and opoint (< opoint omax))
- bug#25354: patch for this bug,
Tom Tromey <=