Subject: bug#12771: closed (Re: bug#12771: 24.2.50; Gomoku displays statistics in other buffers)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 01 Nov 2012 02:29:02 +0000

Your bug report

#12771: 24.2.50; Gomoku displays statistics in other buffers

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
12771: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12771
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#12771: 24.2.50; Gomoku displays statistics in other buffers
From: Chong Yidong <[email-masked]>
To: Stephen Berman <[email-masked]>
Cc: [email-masked]
Date: Thu, 01 Nov 2012 10:25:50 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Stephen Berman <[email-masked]> writes:

> As a result of killing the *Gomoku* buffer in step 3, the gomoku command
> in step 4 tests gomoku-game-in-progress, and because its value is still
> t (since the game was not finished), gomoku-terminate-game is called,
> which in turn calls gomoku-display-statistics, which changes the mode
> line of the current buffer, which is still *scratch* here.  The patch
> below prevents this by ensuring the mode line is only changed if the
> *Gomoku* buffer is current.

Committed, thanks.

Subject: 24.2.50; Gomoku displays statistics in other buffers
From: Stephen Berman <[email-masked]>
To: [email-masked]
Date: Wed, 31 Oct 2012 12:23:41 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

0. emacs -Q
1. M-x gomoku
2. Answer the question to start playing, or type C-g.
3. C-x k to kill the *Gomoku* buffer.
   => Now the current buffer is *scratch*; note the mode line text:
   " U:**-  *scratch*      All L5     (Lisp Interaction) "
4. M-x gomoku
   => The mode line of *scratch* now looks like this:
   " U:**-  *scratch*      All L5     (Lisp Interaction: Won 0, lost 0) "

As a result of killing the *Gomoku* buffer in step 3, the gomoku command
in step 4 tests gomoku-game-in-progress, and because its value is still
t (since the game was not finished), gomoku-terminate-game is called,
which in turn calls gomoku-display-statistics, which changes the mode
line of the current buffer, which is still *scratch* here.  The patch
below prevents this by ensuring the mode line is only changed if the
*Gomoku* buffer is current.

In addition, the patch changes "Won" to "won", which I believe conforms
to standard practice in English for use of capitalization after a colon
(cf. http://en.wikipedia.org/wiki/Colon_%28punctuation%29) and looks
better to me.  (However, the patch doesn't change the use of
mode-line-process for displaying the statistics, despite the comment
acknowledging that this is not clean.)

In GNU Emacs 24.2.50.1 (x86_64-suse-linux-gnu, GTK+ Version 3.4.4)
 of 2012-10-27 on rosalinde
Bzr revision: 110689 [email-masked]
Windowing system distributor `The X.Org Foundation', version 11.0.11203000
System Description:	openSUSE 12.2 (x86_64)

2012-10-31  Stephen Berman  <[email-masked]>

	* play/gomoku.el (gomoku-display-statistics): Update mode line
	only when Gomoku buffer is current.  Don't capitalize "won", to
	conform to standard practice. (Bug#xxxxxx)

=== modified file 'lisp/play/gomoku.el'
--- lisp/play/gomoku.el	2012-09-01 01:04:26 +0000
+++ lisp/play/gomoku.el	2012-10-31 10:25:10 +0000
@@ -1054,16 +1054,18 @@
 
 (defun gomoku-display-statistics ()
   "Obnoxiously display some statistics about previous games in mode line."
-  ;; We store this string in the mode-line-process local variable.
-  ;; This is certainly not the cleanest way out ...
-  (setq mode-line-process
-	(format ": Won %d, lost %d%s"
-		gomoku-number-of-human-wins
-		gomoku-number-of-emacs-wins
-		(if (zerop gomoku-number-of-draws)
-		    ""
-		  (format ", drew %d" gomoku-number-of-draws))))
-  (force-mode-line-update))
+  ;; Update mode line only when Gomoku buffer is current (bug#xxxxxx).
+  (when (string= (buffer-name) gomoku-buffer-name)
+    ;; We store this string in the mode-line-process local variable.
+    ;; This is certainly not the cleanest way out ...
+    (setq mode-line-process
+	  (format ": won %d, lost %d%s"
+		  gomoku-number-of-human-wins
+		  gomoku-number-of-emacs-wins
+		  (if (zerop gomoku-number-of-draws)
+		      ""
+		    (format ", drew %d" gomoku-number-of-draws))))
+    (force-mode-line-update)))
 
 (defun gomoku-switch-to-window ()
   "Find or create the Gomoku buffer, and display it."