diff options
author | Vivek Dasmohapatra <[email protected]> | 2011-07-04 15:23:04 +0200 |
---|---|---|
committer | Lars Magne Ingebrigtsen <[email protected]> | 2011-07-04 15:23:04 +0200 |
commit | c1e57b47608627bf9432e5e32efc7457b49a991c (patch) | |
tree | c14327527bcadbf11a34241f0a112f41d8256f41 /lisp/erc | |
parent | 4d19331f6bcf4823fef5e2070abdb651ff8cbe19 (diff) |
* erc.el (erc-generate-new-buffer-name): Reuse old buffer names
when reconnecting.
Fixes: debbugs:5563
Diffstat (limited to 'lisp/erc')
-rw-r--r-- | lisp/erc/ChangeLog | 5 | ||||
-rw-r--r-- | lisp/erc/erc.el | 41 |
2 files changed, 29 insertions, 17 deletions
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 3d9b0c8646..1560f2a904 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2011-07-04 Vivek Dasmohapatra <[email protected]> + + * erc.el (erc-generate-new-buffer-name): Reuse old buffer names + when reconnecting (bug#5563). + 2011-06-23 Lars Magne Ingebrigtsen <[email protected]> * 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 e036c1d97f..a4040b239c 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 <N> 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." |