all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Dima Kogan <dima@secretsauce.net>
To: 19363@debbugs.gnu.org
Subject: bug#19363: Acknowledgement (24.4.1; Notifications can make ERC unusable)
Date: Wed, 31 Dec 2014 07:47:24 -0800	[thread overview]
Message-ID: <878uhnn3ub.fsf@secretsauce.net> (raw)
In-Reply-To: <87bnmkmbx8.fsf@secretsauce.net>

[-- Attachment #1: Type: text/plain, Size: 1581 bytes --]

Here's a solution to THIS bug, for real this time. I'm attaching a
tested-working patch. I'm no longer sure this is a regression since it's
very sensitive to load order. In emacs 24.3 if ERC is byte-compiled then
the bug manifests, but if it isn't then it works ok. In any case, the
patch solves the issue regardless.


To reiterate, ERC works if you start emacs with no init file, and then
evaluate

  (require 'erc)
  (require 'erc-desktop-notifications)
  (erc-notifications-enable)

However ERC does NOT work if you start with just this in the init file:

  (eval-after-load 'erc
    '(progn
       (require 'erc-desktop-notifications)
       (erc-notifications-enable)
       ))


The issue is that in the working case, the value of
erc-server-PRIVMSG-functions ends up as

  (erc-notifications-PRIVMSG erc-auto-query erc-server-PRIVMSG)

and in the broken case as

  (erc-auto-query erc-notifications-PRIVMSG)

erc-server-PRIVMSG is important, so ERC does not work correctly if it is
missing. This missing element is normally added in

 erc-backend.el by

 (define-erc-response-handler (PRIVMSG NOTICE) ...
    which is a macro. In the macro, the significant line is
   (defvar ,hook-name ',fn-name ,(format hook-doc name))

If we have some (eval-after-load 'erc ...) stuff then by the time this
(defvar) is evaluated, the list may already have a value, so the defvar
then does NOT add its value to the list. The patch explicitly changes
the (defvar list default) idiom to
(defvar list nil) (add-to-list 'list default) and thus the default value
always appears in the list.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ERC-no-longer-gets-confused-by-eval-after-load-erc.patch --]
[-- Type: text/x-diff, Size: 1575 bytes --]

From 28bc9430ce6342d210e986586af7b6f12e103043 Mon Sep 17 00:00:00 2001
From: Dima Kogan <dima@secretsauce.net>
Date: Wed, 31 Dec 2014 08:13:57 -0800
Subject: [PATCH] ERC no longer gets confused by (eval-after-load 'erc ...)

ERC was initializing one of its lists with (defvar list default).  If
the list already had a value due to (eval-after-load 'erc ...) for
instance, then (defvar) would see an initialized variable, and would NOT
add the default value to the list.  This was breaking things.  This
patch changes the above defvar idiom to

 (defvar list nil)
 (add-to-list 'list default)

This way the default value is added to the list unconditionally

Closes: #19363
---
 lisp/erc/erc-backend.el | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index fa95d7e..43e56c0 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -1179,8 +1179,11 @@ add things to `%s' instead."
           (cl-loop for alias in aliases
                    collect (intern (format "erc-server-%s-functions" alias)))))
     `(prog2
-         ;; Normal hook variable.
-         (defvar ,hook-name ',fn-name ,(format hook-doc name))
+         ;; Normal hook variable.  The variable may already have a
+         ;; value at this point, so I default to nil, and (add-hook)
+         ;; unconditionally
+         (defvar ,hook-name nil ,(format hook-doc name))
+         (add-to-list ',hook-name ',fn-name)
          ;; Handler function
          (defun ,fn-name (proc parsed)
            ,fn-doc
-- 
2.1.3


  reply	other threads:[~2014-12-31 15:47 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-13  6:32 bug#19363: 24.4.1; Notifications can make ERC unusable Dima Kogan
     [not found] ` <handler.19363.B.141845239213530.ack@debbugs.gnu.org>
2014-12-31  8:34   ` bug#19363: Acknowledgement (24.4.1; Notifications can make ERC unusable) Dima Kogan
2014-12-31  8:59     ` Dima Kogan
2014-12-31 15:47       ` Dima Kogan [this message]
2015-01-04 19:52         ` Stefan Monnier
2015-01-04 21:26           ` Dima Kogan
2015-01-05  1:54             ` Stefan Monnier
2015-01-07  0:38               ` Dima Kogan
2014-12-31 17:46       ` Dima Kogan
2015-01-14 22:07 ` bug#19363: Close debbugs #19363 Kelvin White
2015-01-14 23:17 ` Kelvin White
2015-01-15 18:15   ` Glenn Morris
2015-01-15 23:41 ` Kelvin White
2015-01-16 13:27 ` bug#19363: Kelvin White

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878uhnn3ub.fsf@secretsauce.net \
    --to=dima@secretsauce.net \
    --cc=19363@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.