GNU bug report logs - #36843
26.2; ERC lurker feature broken

Previous Next

Package: emacs;

Reported by: Thibault Polge <thibault <at> thb.lt>

Date: Mon, 29 Jul 2019 22:06:02 UTC

Severity: normal

Tags: fixed, patch

Found in versions 24.4, 26.2

Fixed in version 27.1

Done: Noam Postavsky <npostavs <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #24 received at 36843 <at> debbugs.gnu.org (full text, mbox):

From: Amin Bandali <bandali <at> gnu.org>
To: Noam Postavsky <npostavs <at> gmail.com>
Cc: Thibault Polge <thibault <at> thb.lt>, 36843 <at> debbugs.gnu.org
Subject: Re: bug#36843: 26.2; ERC lurker feature broken
Date: Tue, 27 Aug 2019 10:31:00 -0400
[Message part 1 (text/plain, inline)]
Noam Postavsky <npostavs <at> gmail.com> writes:

> Amin Bandali <bandali <at> gnu.org> writes:
>
>> From: Amin Bandali <bandali <at> gnu.org>
>
> This address seems to be different than what's in the copyright list.
> Could you use that one, since otherwise it's a bit confusing as to
> whether I'm actually looking at the entry of the right person.
>

Thanks for bringing this to my attention.  I’d changed my email back in
December 2018 and had notified the copyright clerk about it, but it
seems that their change hadn’t properly propagated to copyright.list.
It should be there now.

>
>> Date: Sat, 17 Aug 2019 14:09:11 -0400
>> Subject: [PATCH] Fix erc-lurker-update-status
>>
>> Fix erc-lurker-update-status (bug#36843), broken since
>> d0fcaff514d2be16ccf73817f658318cf85221e3.
>>
>> * lisp/erc/erc.el: define `erc-message-parsed', lexically bind it in
>
> Instead of "lexically" I believe you actually mean "dynamically"
> (binding lexically is the cause of the bug).  And I would reformat like
> this:
>

Good catch!  I rebased on latest master and reformatted per your
suggestion.  I’ve attached an updated patch below.

Thanks for your feedback.

[0001-Fix-erc-lurker-update-status-bug-36843.patch (text/x-diff, inline)]
From 2bc8f35e4a0f76e7b59950738fbfdc3c3e48263c Mon Sep 17 00:00:00 2001
From: Amin Bandali <bandali <at> gnu.org>
Date: Sat, 17 Aug 2019 14:09:11 -0400
Subject: [PATCH] Fix erc-lurker-update-status (bug#36843)

Broken since 2013-08-22 "* lisp/erc/erc.el: Use lexical-binding".

* lisp/erc/erc.el (erc-message-parsed): New variable.
(erc-display-message): Dynamically bind it.
(erc-lurker-update-status): Check it instead of using `parsed'
directly.  This results in `erc-lurker-state' being properly updated
to keep track of non-lurkers, and thus `erc-lurker-p' returning
correct results rather than return t for everyone.
---
 lisp/erc/erc.el | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index f5c9decc3a..9ea9e608ac 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -2594,6 +2594,8 @@ erc-lurker-cleanup-interval
 consumption of lurker state during long Emacs sessions and/or ERC
 sessions with large numbers of incoming PRIVMSGs.")
 
+(defvar erc-message-parsed)
+
 (defun erc-lurker-update-status (_message)
   "Update `erc-lurker-state' if necessary.
 
@@ -2603,18 +2605,20 @@ erc-lurker-update-status
 current time.  Otherwise, take no action.
 
 This function depends on the fact that `erc-display-message'
-dynamically binds `parsed', which is used to check if the current
-message is a PRIVMSG and to determine its sender.  See also
-`erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'.
+dynamically binds `erc-message-parsed', which is used to check if
+the current message is a PRIVMSG and to determine its sender.
+See also `erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'.
 
 In order to limit memory consumption, this function also calls
 `erc-lurker-cleanup' once every `erc-lurker-cleanup-interval'
 updates of `erc-lurker-state'."
-  (when (and (boundp 'parsed) (erc-response-p parsed))
-    (let* ((command (erc-response.command parsed))
+  (when (and (boundp 'erc-message-parsed)
+	     (erc-response-p erc-message-parsed))
+    (let* ((command (erc-response.command erc-message-parsed))
            (sender
             (erc-lurker-maybe-trim
-             (car (erc-parse-user (erc-response.sender parsed)))))
+             (car (erc-parse-user
+		   (erc-response.sender erc-message-parsed)))))
            (server
             (erc-canonicalize-server-name erc-server-announced-name)))
       (when (equal command "PRIVMSG")
@@ -2704,7 +2708,8 @@ erc-display-message
 See also `erc-format-message' and `erc-display-line'."
   (let ((string (if (symbolp msg)
                     (apply #'erc-format-message msg args)
-                  msg)))
+                  msg))
+	(erc-message-parsed parsed))
     (setq string
           (cond
            ((null type)
-- 
2.23.0


This bug report was last modified 5 years and 265 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.