From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tom Tromey Newsgroups: gmane.emacs.bugs Subject: bug#25354: patch for this bug Date: Sat, 05 Aug 2017 22:25:14 -0600 Message-ID: <87efspe311.fsf@tromey.com> References: <8760lvt5at.fsf@tromey.com> <87tw771ulh.fsf@tromey.com> <8360jnjxxo.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1501993580 8887 195.159.176.226 (6 Aug 2017 04:26:20 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 6 Aug 2017 04:26:20 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cc: 25354@debbugs.gnu.org, Tom Tromey To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Aug 06 06:26:14 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1deD8k-0001hK-AR for geb-bug-gnu-emacs@m.gmane.org; Sun, 06 Aug 2017 06:26:10 +0200 Original-Received: from localhost ([::1]:59700 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1deD8o-0000tG-Sc for geb-bug-gnu-emacs@m.gmane.org; Sun, 06 Aug 2017 00:26:14 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42931) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1deD8h-0000sn-Ks for bug-gnu-emacs@gnu.org; Sun, 06 Aug 2017 00:26:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1deD8c-00046F-Lg for bug-gnu-emacs@gnu.org; Sun, 06 Aug 2017 00:26:07 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:41318) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1deD8c-000466-H4 for bug-gnu-emacs@gnu.org; Sun, 06 Aug 2017 00:26:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1deD8c-0008Hx-9y for bug-gnu-emacs@gnu.org; Sun, 06 Aug 2017 00:26:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tom Tromey Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 06 Aug 2017 04:26:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25354 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 25354-submit@debbugs.gnu.org id=B25354.150199355231845 (code B ref 25354); Sun, 06 Aug 2017 04:26:02 +0000 Original-Received: (at 25354) by debbugs.gnu.org; 6 Aug 2017 04:25:52 +0000 Original-Received: from localhost ([127.0.0.1]:43995 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1deD8R-0008HZ-LR for submit@debbugs.gnu.org; Sun, 06 Aug 2017 00:25:51 -0400 Original-Received: from gproxy3-pub.mail.unifiedlayer.com ([69.89.30.42]:49364) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1deD8Q-0008HM-0e for 25354@debbugs.gnu.org; Sun, 06 Aug 2017 00:25:50 -0400 Original-Received: from CMOut01 (unknown [10.0.90.82]) by gproxy3.mail.unifiedlayer.com (Postfix) with ESMTP id 6084940270 for <25354@debbugs.gnu.org>; Sat, 5 Aug 2017 22:25:40 -0600 (MDT) Original-Received: from box522.bluehost.com ([74.220.219.122]) by CMOut01 with id tgRZ1v05v2f2jeq01gRcQN; Sat, 05 Aug 2017 22:25:40 -0600 X-Authority-Analysis: v=2.2 cv=XMVAcUpE c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=KeKAF7QvOSUA:10 a=mDV3o1hIAAAA:8 a=zstS-IiYAAAA:8 a=TScnz9CcfwyhIEGuBtcA:9 a=rFY0df-xyU1Jmt6q:21 a=9KaQ-3NIS6n3_X95:21 a=_FVE-zBwftR9WsbkzFJk:22 a=4G6NA9xxw8l3yy4pmD5M:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=ujMGEifK/rR7iKvLRXwo5Zy3O+YeufaG8GQ9Eu1oP1Y=; b=ZrB7oMbTO+ff6fUHFw0KD/xZWU ixyFSajO9qriVsdqbSUctTOc2BLqzd9Iyheh9czzAPsSuVQx7tD7FvUS8d3vmuSlgcT1nSccRyb6E K8YH5g94VGzMPQxhmq+0nE/QR; Original-Received: from 75-166-24-97.hlrn.qwest.net ([75.166.24.97]:35482 helo=bapiya) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1deD7u-001aZw-HU; Sat, 05 Aug 2017 22:25:18 -0600 X-Attribution: Tom In-Reply-To: <8360jnjxxo.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 05 Mar 2017 22:00:51 +0200") X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box522.bluehost.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 75.166.24.97 X-Exim-ID: 1deD7u-001aZw-HU X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 75-166-24-97.hlrn.qwest.net (bapiya) [75.166.24.97]:35482 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== X-Local-Domain: yes X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:135473 Archived-At: >>>>> "Eli" == Eli Zaretskii 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 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))