From 38f7538d8f62ee287e8271d048f1230d840c11a0 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Mon, 13 Apr 2020 23:21:34 -0400 Subject: [PATCH] New function erc-switch-to-buffer-other-window * lisp/erc/erc.el (erc-switch-to-buffer): Factor out the buffer choice implementation from here ... (erc--switch-to-buffer): ... to here. (erc-switch-to-buffer-other-window): New function, like `erc-switch-to-buffer', but uses `switch-to-buffer-other-window' instead, to open the buffer in another window. --- etc/NEWS | 5 +++++ lisp/erc/erc.el | 47 ++++++++++++++++++++++++++++------------------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index f4edfaf9bec..f3ef798a426 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1647,6 +1647,11 @@ adjacent to an apostrophe, like "nick's". *** Set 'erc-button-url-regexp' to 'browse-url-button-regexp' which better handles surrounding pair of parentheses. +--- +*** New function 'erc-switch-to-buffer-other-window' +which is like 'erc-switch-to-buffer', but opens the buffer in another +window. + ** EUDC --- diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 5c63382d86f..cc5226bf6ed 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1762,29 +1762,38 @@ nil." res))) (define-obsolete-function-alias 'erc-iswitchb 'erc-switch-to-buffer "25.1") +(defun erc--switch-to-buffer (&optional arg) + (read-buffer "Switch to ERC buffer: " + (when (boundp 'erc-modified-channels-alist) + (buffer-name (caar (last erc-modified-channels-alist)))) + t + ;; Only allow ERC buffers in the same session. + (let ((proc (unless arg erc-server-process))) + (lambda (bufname) + (let ((buf (if (consp bufname) + (cdr bufname) (get-buffer bufname)))) + (when buf + (erc--buffer-p buf (lambda () t) proc) + (with-current-buffer buf + (and (derived-mode-p 'erc-mode) + (or (null proc) + (eq proc erc-server-process)))))))))) (defun erc-switch-to-buffer (&optional arg) - "Prompt for a ERC buffer to switch to. -When invoked with prefix argument, use all erc buffers. Without prefix -ARG, allow only buffers related to same session server. + "Prompt for an ERC buffer to switch to. +When invoked with prefix argument, use all ERC buffers. Without +prefix ARG, allow only buffers related to same session server. If `erc-track-mode' is in enabled, put the last element of `erc-modified-channels-alist' in front of the buffer list." (interactive "P") - (switch-to-buffer - (read-buffer "Switch to ERC buffer: " - (when (boundp 'erc-modified-channels-alist) - (buffer-name (caar (last erc-modified-channels-alist)))) - t - ;; Only allow ERC buffers in the same session. - (let ((proc (unless arg erc-server-process))) - (lambda (bufname) - (let ((buf (if (consp bufname) - (cdr bufname) (get-buffer bufname)))) - (when buf - (erc--buffer-p buf (lambda () t) proc) - (with-current-buffer buf - (and (derived-mode-p 'erc-mode) - (or (null proc) - (eq proc erc-server-process))))))))))) + (switch-to-buffer (erc--switch-to-buffer arg))) +(defun erc-switch-to-buffer-other-window (&optional arg) + "Prompt for an ERC buffer to switch to in another window. +When invoked with prefix argument, use all ERC buffers. Without +prefix ARG, allow only buffers related to same session server. +If `erc-track-mode' is in enabled, put the last element of +`erc-modified-channels-alist' in front of the buffer list." + (interactive "P") + (switch-to-buffer-other-window (erc--switch-to-buffer arg))) (defun erc-channel-list (proc) "Return a list of channel buffers. -- 2.39.2