[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#30639: 25.1; ERC buffer name not unique, broken on reconnect [patch]
From: |
Kevin Brubeck Unhammer |
Subject: |
bug#30639: 25.1; ERC buffer name not unique, broken on reconnect [patch] |
Date: |
Wed, 24 Jun 2020 11:12:35 +0200 |
Hi,
This commit caused a regression:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40121
cdefc045893a7fed57856ac385ab41c71f61c09f makes buffer #hello be used for
*both* networks instead of #hello<2> created on the next network. And
not just that, the other buffers on the same network will get their
network changed (so if #goodbye was on network1, and you connect to
network2 and join #hello there, #goodbye will say it's on network2).
I haven't looked into doing this change correctly yet, but reverting it
at least makes ERC work again for me.
best regards,
Kevin Brubeck Unhammer
John Goerzen <jgoerzen@complete.org> čálii:
> Hi,
>
> Over at https://www.emacswiki.org/emacs/ErcBugs, there is a description
> as follows:
>
> "When you're in two channels with the same name, e.g. #hello, on
> different networks, the buffers are called #hello and #hello<2>. Now, if
> you temporarily lose your connection (e.g. unplug the network cable and
> plug it back in) and ERC reconnects, #hello<2> will not be re-used, but
> instead #hello<3> will be created."
>
> I have observed this. This all goes back to a bug in
> erc/erc.el:erc-generate-new-buffer-name
>
> The comments in the function as given are reasonable, but the logic
> differs. In particular, the test in the dolist always fails when
> (get-buffer candidate) is nil; that is, the test always fails when the
> buffer does not already exist. This causes the test to drop through to
> the section at the bottom every time, which results not only in the
> server appending logic never being used, but also in the concatenation
> of /server never being attempted.
>
> Here is a working replacement:
>
> (defun erc-generate-new-buffer-name (server port target)
> "Create a new buffer name based on the arguments."
> (when (numberp port) (setq port (number-to-string port)))
> (let ((buf-name (or target
> (or (let ((name (concat server ":" port)))
> (when (> (length name) 1)
> name))
> ;; This fallback should in fact never happen
> "*erc-server-buffer*")))
> buffer-name)
> ;; Reuse existing buffers, but not if the buffer is a connected server
> ;; buffer and not if its associated with a different server than the
> ;; current ERC buffer.
> ;; if buf-name is taken by a different connection (or by something !erc)
> ;; then see if "buf-name/server" meets the same criteria
> (dolist (candidate (list buf-name (concat buf-name "/" server)))
> (if (and (not buffer-name)
> erc-reuse-buffers
> (or (not (get-buffer candidate))
> (or target
> (with-current-buffer (get-buffer candidate)
> (and (erc-server-buffer-p)
> (not (erc-server-process-alive)))))
> (with-current-buffer (get-buffer candidate)
> (and (string= erc-session-server server)
> (erc-port-equal erc-session-port port)))))
> (setq buffer-name candidate)))
> ;; if buffer-name is unset, neither candidate worked out for us,
> ;; fallback to the old <N> uniquification method:
> (or buffer-name (generate-new-buffer-name (concat buf-name "/"
> server))) ))
>
>
> In GNU Emacs 25.1.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.11)
> of 2017-09-15, modified by Debian built on trouble
> Windowing system distributor 'The X.Org Foundation', version 11.0.11902000
> System Description: Debian GNU/Linux 9.3 (stretch)
>
> Configured using:
> 'configure --build x86_64-linux-gnu --prefix=/usr
> --sharedstatedir=/var/lib --libexecdir=/usr/lib
> --localstatedir=/var/lib --infodir=/usr/share/info
> --mandir=/usr/share/man --with-pop=yes
>
> --enable-locallisppath=/etc/emacs25:/etc/emacs:/usr/local/share/emacs/25.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/25.1/site-lisp:/usr/share/emacs/site-lisp
> --with-sound=alsa --build x86_64-linux-gnu --prefix=/usr
> --sharedstatedir=/var/lib --libexecdir=/usr/lib
> --localstatedir=/var/lib --infodir=/usr/share/info
> --mandir=/usr/share/man --with-pop=yes
>
> --enable-locallisppath=/etc/emacs25:/etc/emacs:/usr/local/share/emacs/25.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/25.1/site-lisp:/usr/share/emacs/site-lisp
> --with-sound=alsa --with-x=yes --with-x-toolkit=gtk3
> --with-toolkit-scroll-bars 'CFLAGS=-g -O2
> -fdebug-prefix-map=/build/emacs25-wN2qS3/emacs25-25.1+1=.
> -fstack-protector-strong
> -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
> -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'
>
> Configured features:
> XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
> NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
> TOOLKIT_SCROLL_BARS GTK3 X11
>
> Important settings:
> value of $LANG: en_US.utf8
> locale-coding-system: utf-8-unix
>
> Major mode: mu4e:main
>
>
>
>
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bug#30639: 25.1; ERC buffer name not unique, broken on reconnect [patch],
Kevin Brubeck Unhammer <=