From: Vivek Dasmohapatra Date: Mon, 4 Jul 2011 13:23:04 +0000 (+0200) Subject: * erc.el (erc-generate-new-buffer-name): Reuse old buffer names X-Git-Tag: emacs-pretest-24.0.90~104^2~152^2~196 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c1e57b47608627bf9432e5e32efc7457b49a991c;p=emacs.git * erc.el (erc-generate-new-buffer-name): Reuse old buffer names when reconnecting. Fixes: debbugs:5563 --- diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 3d9b0c8646f..1560f2a9049 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2011-07-04 Vivek Dasmohapatra + + * erc.el (erc-generate-new-buffer-name): Reuse old buffer names + when reconnecting (bug#5563). + 2011-06-23 Lars Magne Ingebrigtsen * erc.el (erc-ssl): Made into a synonym for erc-tls, which diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index e036c1d97f2..a4040b239c1 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1555,26 +1555,33 @@ symbol, it may have these values: (defun erc-generate-new-buffer-name (server port target &optional proc) "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*")))) + (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 (and erc-reuse-buffers - (get-buffer buf-name) - (or target - (with-current-buffer (get-buffer buf-name) - (and (erc-server-buffer-p) - (not (erc-server-process-alive))))) - (with-current-buffer (get-buffer buf-name) - (and (string= erc-session-server server) - (erc-port-equal erc-session-port port)))) - buf-name - (generate-new-buffer-name buf-name)))) + ;; 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 + (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 uniquification method: + (or buffer-name (generate-new-buffer-name buf-name)) )) (defun erc-get-buffer-create (server port target &optional proc) "Create a new buffer based on the arguments."