aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Dasmohapatra2011-07-04 15:23:04 +0200
committerLars Magne Ingebrigtsen2011-07-04 15:23:04 +0200
commitc1e57b47608627bf9432e5e32efc7457b49a991c (patch)
treec14327527bcadbf11a34241f0a112f41d8256f41
parent4d19331f6bcf4823fef5e2070abdb651ff8cbe19 (diff)
downloademacs-c1e57b47608627bf9432e5e32efc7457b49a991c.tar.gz
emacs-c1e57b47608627bf9432e5e32efc7457b49a991c.zip
* erc.el (erc-generate-new-buffer-name): Reuse old buffer names
when reconnecting. Fixes: debbugs:5563
-rw-r--r--lisp/erc/ChangeLog5
-rw-r--r--lisp/erc/erc.el41
2 files changed, 29 insertions, 17 deletions
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 @@
12011-07-04 Vivek Dasmohapatra <vivek@etla.org>
2
3 * erc.el (erc-generate-new-buffer-name): Reuse old buffer names
4 when reconnecting (bug#5563).
5
12011-06-23 Lars Magne Ingebrigtsen <larsi@gnus.org> 62011-06-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
2 7
3 * erc.el (erc-ssl): Made into a synonym for erc-tls, which 8 * 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:
1555(defun erc-generate-new-buffer-name (server port target &optional proc) 1555(defun erc-generate-new-buffer-name (server port target &optional proc)
1556 "Create a new buffer name based on the arguments." 1556 "Create a new buffer name based on the arguments."
1557 (when (numberp port) (setq port (number-to-string port))) 1557 (when (numberp port) (setq port (number-to-string port)))
1558 (let* ((buf-name (or target 1558 (let ((buf-name (or target
1559 (or (let ((name (concat server ":" port))) 1559 (or (let ((name (concat server ":" port)))
1560 (when (> (length name) 1) 1560 (when (> (length name) 1)
1561 name)) 1561 name))
1562 ; This fallback should in fact never happen 1562 ;; This fallback should in fact never happen
1563 "*erc-server-buffer*")))) 1563 "*erc-server-buffer*")))
1564 buffer-name)
1564 ;; Reuse existing buffers, but not if the buffer is a connected server 1565 ;; Reuse existing buffers, but not if the buffer is a connected server
1565 ;; buffer and not if its associated with a different server than the 1566 ;; buffer and not if its associated with a different server than the
1566 ;; current ERC buffer. 1567 ;; current ERC buffer.
1567 (if (and erc-reuse-buffers 1568 ;; if buf-name is taken by a different connection (or by something !erc)
1568 (get-buffer buf-name) 1569 ;; then see if "buf-name/server" meets the same criteria
1569 (or target 1570 (dolist (candidate (list buf-name (concat buf-name "/" server)))
1570 (with-current-buffer (get-buffer buf-name) 1571 (if (and (not buffer-name)
1571 (and (erc-server-buffer-p) 1572 erc-reuse-buffers
1572 (not (erc-server-process-alive))))) 1573 (get-buffer candidate)
1573 (with-current-buffer (get-buffer buf-name) 1574 (or target
1574 (and (string= erc-session-server server) 1575 (with-current-buffer (get-buffer candidate)
1575 (erc-port-equal erc-session-port port)))) 1576 (and (erc-server-buffer-p)
1576 buf-name 1577 (not (erc-server-process-alive)))))
1577 (generate-new-buffer-name buf-name)))) 1578 (with-current-buffer (get-buffer candidate)
1579 (and (string= erc-session-server server)
1580 (erc-port-equal erc-session-port port))))
1581 (setq buffer-name candidate)))
1582 ;; if buffer-name is unset, neither candidate worked out for us,
1583 ;; fallback to the old <N> uniquification method:
1584 (or buffer-name (generate-new-buffer-name buf-name)) ))
1578 1585
1579(defun erc-get-buffer-create (server port target &optional proc) 1586(defun erc-get-buffer-create (server port target &optional proc)
1580 "Create a new buffer based on the arguments." 1587 "Create a new buffer based on the arguments."