emacs/lisp/erc/erc-status-sidebar.el

613 lines
26 KiB
EmacsLisp
Raw Normal View History

lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
;;; erc-status-sidebar.el --- HexChat-like activity overview for ERC -*- lexical-binding: t; -*-
;; Copyright (C) 2017, 2020-2025 Free Software Foundation, Inc.
;; Author: Andrew Barbarello
;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
;; URL: https://github.com/drewbarbs/erc-status-sidebar
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; This package provides a HexChat-like sidebar for joined channels in
;; ERC. It relies on the `erc-track' module, and displays all of the
;; same information that `erc-track' does in the mode line, but in an
;; alternative format in form of a sidebar.
;; Shout out to sidebar.el <https://github.com/sebastiencs/sidebar.el>
;; and outline-toc.el <https://github.com/abingham/outline-toc.el> for
;; the sidebar window management ideas.
;; Usage:
;; Use M-x erc-status-sidebar-open RET to open the ERC status sidebar
;; in the current frame. Make sure that the `erc-track' module is
;; active (this is the default).
;; Use M-x erc-status-sidebar-close RET to close the sidebar on the
;; current frame. With a prefix argument, it closes the sidebar on
;; all frames.
;; Use M-x erc-status-sidebar-kill RET to kill the sidebar buffer and
;; close the sidebar on all frames.
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
;; In addition to the commands above, you can also try the all-in-one
;; entry point `erc-bufbar-mode'. See its doc string for usage.
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
;; If you want the status sidebar enabled whenever you use ERC, add
;; `bufbar' to `erc-modules'. Note that this library also has a major
;; mode, `erc-status-sidebar-mode', which is for internal use.
;;; Code:
(require 'erc)
(require 'erc-track)
(require 'fringe)
(require 'seq)
(defgroup erc-status-sidebar nil
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
"A responsive side window listing all connected ERC buffers.
More commonly known as a window list or \"buflist\", this side
panel displays clickable buffer names for switching to with the
mouse. By default, ERC highlights the name corresponding to the
selected window's buffer, if any. In this context, \"connected\"
just means associated with the same IRC session, even one that
has ceased communicating with its server. For information on how
the window itself works, see Info node `(elisp) Side Windows'."
:group 'erc)
(defcustom erc-status-sidebar-buffer-name "*ERC Status*"
"Name of the sidebar buffer."
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
:type 'string)
(defcustom erc-status-sidebar-mode-line-format "ERC Status"
"Mode line format for the status sidebar."
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
:type 'string)
(defcustom erc-status-sidebar-header-line-format nil
"Header line format for the status sidebar."
:type '(choice (const :tag "No header line" nil)
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
string))
(defcustom erc-status-sidebar-width 15
"Default width of the sidebar (in columns)."
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
:type 'number)
(defcustom erc-status-sidebar-channel-sort
'erc-status-sidebar-default-chansort
"Sorting function used to determine order of channels in the sidebar."
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
:type 'function)
(defcustom erc-status-sidebar-channel-format
'erc-status-sidebar-default-chan-format
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
"Function used to format channel names for display in the sidebar.
Only consulted for certain values of `erc-status-sidebar-style'."
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
:type 'function)
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(defcustom erc-status-sidebar-highlight-active-buffer t
"Whether to highlight the selected window's buffer in the sidebar.
ERC uses the same instance across all frames. May not be
compatible with all values of `erc-status-sidebar-style'."
; Prepare for ERC 5.6 release * doc/misc/erc.texi: Minor tweak in SASL section. * etc/ERC-NEWS: Revise various sections under 5.6. * lisp/erc/erc-button.el (erc-button-alist): Remove comment. (erc-nick-popup-alist): Remove comment. * lisp/erc/erc-fill.el (erc-fill-wrap-margin-width): Remove comment. (erc-fill-wrap-margin-side): Remove comment. (erc-fill-line-spacing): Remove comment. (erc-fill-wrap-use-pixels): Remove comment. (erc-fill-wrap-visual-keys): Remove comment. (erc-fill-wrap-force-screen-line-movement): Remove comment. (erc-fill-wrap-merge): Remove comment. * lisp/erc/erc-goodies.el (erc-scrolltobottom-all): Remove comment. (erc-keep-place-indicator-style): Remove comment. (erc-keep-place-indicator-buffer-type): Remove comment. (erc-keep-place-indicator-follow): Remove comment. * lisp/erc/erc-networks.el (erc-server-alist): Remove comment. * lisp/erc/erc-nicks.el (erc-nicks): Remove comment. * lisp/erc/erc-speedbar.el (erc-speedbar-nicknames-window-width): Remove comment. (erc-speedbar-hide-mode-topic): Remove comment. (erc-speedbar-my-nick-face): Remove comment. * lisp/erc/erc-stamp.el (erc-timestamp-format-right): Remove comment. (erc-echo-timestamp-zone): Remove comment. (erc-timestamp-use-align-to): Remove comment. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-highlight-active-buffer): Remove comment. (erc-status-sidebar-style): Remove comment. (erc-status-sidebar-click-display-action): Remove comment. * lisp/erc/erc.el: Bump required Compat version to 29.1.4.3 in Package-Requires header. (erc-notice-face): Remove comment. (erc-action-face): Remove comment. (erc-interactive-display): Remove comment. (erc-auto-reconnect-display-timeout): Remove comment. (erc-reconnect-display-server-buffers): Remove comment. (erc-modules): Remove comment. * test/lisp/erc/resources/base/display-message/multibuf.eld: Remove reference to specific ERC version in QUIT command reason. * test/lisp/erc/resources/base/assoc/reconplay/foonet.eld: Timeout.
2023-11-07 23:51:27 -08:00
:package-version '(ERC . "5.6")
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
:type 'boolean)
(defcustom erc-status-sidebar-style 'all-queries-first
"Preset style for rendering the sidebar.
When set to `channels-only', ERC limits the items in the
status bar to uniquified channels. It uses the options
and functions
`erc-channel-list',
`erc-status-sidebar-channel-sort',
`erc-status-sidebar-get-channame',
`erc-status-sidebar-channel-format'
`erc-status-sidebar-default-insert'
for selecting, formatting, naming, and inserting entries. When
set to one of the various `all-*' values, such as `all-mixed',
ERC shows channels and queries under their respective server
buffers, using the functions
`erc-status-sidebar-all-target-buffers',
`erc-status-sidebar-default-allsort',
`erc-status-sidebar-prefer-target-as-name',
`erc-status-sidebar-default-chan-format',
`erc-status-sidebar-pad-hierarchy'
for the above-mentioned purposes. ERC also accepts a list of
2023-12-10 13:22:04 +01:00
functions to perform these roles a la carte. Since the members
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
of the above sets aren't really interoperable, we don't offer
them here as customization choices, but you can still specify
them manually. See doc strings for a description of their
expected arguments and return values."
; Prepare for ERC 5.6 release * doc/misc/erc.texi: Minor tweak in SASL section. * etc/ERC-NEWS: Revise various sections under 5.6. * lisp/erc/erc-button.el (erc-button-alist): Remove comment. (erc-nick-popup-alist): Remove comment. * lisp/erc/erc-fill.el (erc-fill-wrap-margin-width): Remove comment. (erc-fill-wrap-margin-side): Remove comment. (erc-fill-line-spacing): Remove comment. (erc-fill-wrap-use-pixels): Remove comment. (erc-fill-wrap-visual-keys): Remove comment. (erc-fill-wrap-force-screen-line-movement): Remove comment. (erc-fill-wrap-merge): Remove comment. * lisp/erc/erc-goodies.el (erc-scrolltobottom-all): Remove comment. (erc-keep-place-indicator-style): Remove comment. (erc-keep-place-indicator-buffer-type): Remove comment. (erc-keep-place-indicator-follow): Remove comment. * lisp/erc/erc-networks.el (erc-server-alist): Remove comment. * lisp/erc/erc-nicks.el (erc-nicks): Remove comment. * lisp/erc/erc-speedbar.el (erc-speedbar-nicknames-window-width): Remove comment. (erc-speedbar-hide-mode-topic): Remove comment. (erc-speedbar-my-nick-face): Remove comment. * lisp/erc/erc-stamp.el (erc-timestamp-format-right): Remove comment. (erc-echo-timestamp-zone): Remove comment. (erc-timestamp-use-align-to): Remove comment. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-highlight-active-buffer): Remove comment. (erc-status-sidebar-style): Remove comment. (erc-status-sidebar-click-display-action): Remove comment. * lisp/erc/erc.el: Bump required Compat version to 29.1.4.3 in Package-Requires header. (erc-notice-face): Remove comment. (erc-action-face): Remove comment. (erc-interactive-display): Remove comment. (erc-auto-reconnect-display-timeout): Remove comment. (erc-reconnect-display-server-buffers): Remove comment. (erc-modules): Remove comment. * test/lisp/erc/resources/base/display-message/multibuf.eld: Remove reference to specific ERC version in QUIT command reason. * test/lisp/erc/resources/base/assoc/reconplay/foonet.eld: Timeout.
2023-11-07 23:51:27 -08:00
:package-version '(ERC . "5.6")
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
:type '(choice (const channels-only)
(const all-mixed)
(const all-queries-first)
(const all-channels-first)
(list (function :tag "Buffer lister")
(function :tag "Buffer sorter")
(function :tag "Name extractor")
(function :tag "Name formatter")
(function :tag "Name inserter"))))
(defcustom erc-status-sidebar-click-display-action t
"How to display a buffer when clicked.
Values can be anything recognized by `display-buffer' for its
ACTION parameter."
; Prepare for ERC 5.6 release * doc/misc/erc.texi: Minor tweak in SASL section. * etc/ERC-NEWS: Revise various sections under 5.6. * lisp/erc/erc-button.el (erc-button-alist): Remove comment. (erc-nick-popup-alist): Remove comment. * lisp/erc/erc-fill.el (erc-fill-wrap-margin-width): Remove comment. (erc-fill-wrap-margin-side): Remove comment. (erc-fill-line-spacing): Remove comment. (erc-fill-wrap-use-pixels): Remove comment. (erc-fill-wrap-visual-keys): Remove comment. (erc-fill-wrap-force-screen-line-movement): Remove comment. (erc-fill-wrap-merge): Remove comment. * lisp/erc/erc-goodies.el (erc-scrolltobottom-all): Remove comment. (erc-keep-place-indicator-style): Remove comment. (erc-keep-place-indicator-buffer-type): Remove comment. (erc-keep-place-indicator-follow): Remove comment. * lisp/erc/erc-networks.el (erc-server-alist): Remove comment. * lisp/erc/erc-nicks.el (erc-nicks): Remove comment. * lisp/erc/erc-speedbar.el (erc-speedbar-nicknames-window-width): Remove comment. (erc-speedbar-hide-mode-topic): Remove comment. (erc-speedbar-my-nick-face): Remove comment. * lisp/erc/erc-stamp.el (erc-timestamp-format-right): Remove comment. (erc-echo-timestamp-zone): Remove comment. (erc-timestamp-use-align-to): Remove comment. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-highlight-active-buffer): Remove comment. (erc-status-sidebar-style): Remove comment. (erc-status-sidebar-click-display-action): Remove comment. * lisp/erc/erc.el: Bump required Compat version to 29.1.4.3 in Package-Requires header. (erc-notice-face): Remove comment. (erc-action-face): Remove comment. (erc-interactive-display): Remove comment. (erc-auto-reconnect-display-timeout): Remove comment. (erc-reconnect-display-server-buffers): Remove comment. (erc-modules): Remove comment. * test/lisp/erc/resources/base/display-message/multibuf.eld: Remove reference to specific ERC version in QUIT command reason. * test/lisp/erc/resources/base/assoc/reconplay/foonet.eld: Timeout.
2023-11-07 23:51:27 -08:00
:package-version '(ERC . "5.6")
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
:type '(choice (const :tag "Always use/create other window" t)
(const :tag "Let `display-buffer' decide" nil)
(const :tag "Same window" (display-buffer-same-window
(inhibit-same-window . nil)))
(cons :tag "Action"
(choice function (repeat function))
(alist :tag "Action arguments"
:key-type symbol
:value-type (sexp :tag "Value")))))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(defvar erc-status-sidebar--singular-p t
"Whether to restrict the sidebar to a single frame.
This variable only affects `erc-bufbar-mode'. Disabling it does
not arrange for automatically showing the sidebar in all frames.
Rather, disabling it allows for displaying the sidebar in the
selected frame even if it's already showing in some other frame.")
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(defvar hl-line-mode)
(declare-function hl-line-highlight "hl-line" nil)
(defun erc-status-sidebar-display-window ()
"Display the status buffer in a side window. Return the new window."
(display-buffer
(erc-status-sidebar-get-buffer)
`(display-buffer-in-side-window . ((side . left)
(window-width . ,erc-status-sidebar-width)))))
(defun erc-status-sidebar-get-window (&optional no-creation)
"Return the created/existing window displaying the status buffer.
If NO-CREATION is non-nil, the window is not created."
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(let ((sidebar-window (get-buffer-window erc-status-sidebar-buffer-name
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
erc-status-sidebar--singular-p)))
(unless (or sidebar-window no-creation)
(with-current-buffer (erc-status-sidebar-get-buffer)
(setq-local vertical-scroll-bar nil))
(setq sidebar-window (erc-status-sidebar-display-window))
(set-window-dedicated-p sidebar-window t)
(set-window-parameter sidebar-window 'no-delete-other-windows t)
;; Don't cycle to this window with `other-window'.
(set-window-parameter sidebar-window 'no-other-window t)
(setq cursor-type nil)
(set-window-fringes sidebar-window 0 0)
;; Set a custom display table so the window doesn't show a
;; truncation symbol when a channel name is too big.
(let ((dt (make-display-table)))
(set-window-display-table sidebar-window dt)
(set-display-table-slot dt 'truncation ?\ )))
sidebar-window))
(defun erc-status-sidebar-buffer-exists-p ()
"Check if the sidebar buffer exists."
(get-buffer erc-status-sidebar-buffer-name))
(defun erc-status-sidebar-get-buffer ()
"Return the sidebar buffer, creating it if it doesn't exist."
(get-buffer-create erc-status-sidebar-buffer-name))
(defun erc-status-sidebar-close (&optional all-frames)
"Close the sidebar.
If called with prefix argument (ALL-FRAMES non-nil), the sidebar
will be closed on all frames.
The erc-status-sidebar buffer is left alone, but the window
containing it on the current frame is closed. See
`erc-status-sidebar-kill'."
(interactive "P")
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(mapcar #'delete-window ; FIXME use `mapc'.
(get-buffer-window-list (erc-status-sidebar-get-buffer)
nil (if all-frames t))))
(defmacro erc-status-sidebar-writable (&rest body)
"Make the status buffer writable while executing BODY."
`(let ((buffer-read-only nil))
,@body))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(defun erc-status-sidebar--open ()
"Maybe open the sidebar, respecting `erc-status-sidebar--singular-p'."
(save-excursion
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(if (erc-status-sidebar-buffer-exists-p)
(erc-status-sidebar-get-window)
(with-current-buffer (erc-status-sidebar-get-buffer)
(erc-status-sidebar-mode)
(erc-status-sidebar-refresh)))))
;;;###autoload(autoload 'erc-bufbar-mode "erc-status-sidebar" nil t)
(define-erc-module bufbar nil
"Show `erc-track'-like activity in a side window.
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
When enabling, show the sidebar immediately in the current frame
if called from a connected ERC buffer. Otherwise, arrange for
doing so on connect or whenever next displaying a new ERC buffer.
When disabling, hide the status window in all frames. With a
negative prefix arg, also shutdown the session. Normally, this
module only allows one sidebar window in an Emacs session. To
override this, use `erc-status-sidebar-open' to force creation
and `erc-status-sidebar-close' to hide a single instance on the
current frame only."
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
((unless erc-track-mode
(unless (memq 'track erc-modules)
(erc--warn-once-before-connect 'erc-bufbar-mode
"Module `bufbar' needs global module `track'. Enabling now."
" This will affect \C-]all\C-] ERC sessions."
" Add `track' to `erc-modules' to silence this message."))
(erc-track-mode +1))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(add-hook 'erc--setup-buffer-hook #'erc-status-sidebar--open)
Replace some uses of erc-error * lisp/erc/erc-button.el (erc-button--display-error-notice-with-keys-and-warn): Use `erc--lwarn' so the warnings buffer is overridable for testing. * lisp/erc/erc-sasl.el (erc-sasl-mode, erc-sasl-enable): Signal an `error' instead of calling `erc-error', which continues execution. In this special case, the session cannot continue initializing, since connection registration can't reasonably be expected to complete successfully. (erc-sasl--destroy): Don't run `erc-quit-hook', and issue a warning of level `:error' to get users' attention instead of calling `ding'. * lisp/erc/erc-speedbar.el (erc-speedbar--emulate-sidebar-set-window-preserve-size): Don't set window parameters. Doing this basically made `erc-speedbar-toggle-nicknames-window-lock' unusable. (erc-speedbar--toggle-nicknames-sidebar): Manually unlock the window after toggling. (erc-nickbar-mode, erc-nickbar-enable, erc-nickbar-disable): Don't `ding' when called in a non-ERC buffer, and make sure to call `erc-speedbar--ensure' from an ERC buffer. Also, don't disable minor-mode var when speedbar buffer doesn't exist because that doesn't ensure it'll be created the next time around, and users may count on the activation state remaining consistent. (erc-speedbar-toggle-nicknames-window-lock): Make usable from lisp with explicit numeric arg. * lisp/erc/erc-status-sidebar.el (erc-bufbar-mode, erc-bufbar-enable): Only create the side window from an erc-mode buffer to ensure the ratio is preserved when burying the current buffer, e.g., with `custom-buffer-done'. * lisp/erc/erc.el (erc--warnings-buffer-name, erc--lwarn): New function, an analog of `lwarn', that allows for overriding the warnings buffer with the new variable `erc--warnings-buffer-name'. (erc-cmd-SERVER): Add comment. * test/lisp/erc/erc-scenarios-sasl.el (erc-scenarios-sasl--plain-fail): Expect warning instead of error. * test/lisp/erc/erc-scenarios-status-sidebar.el (erc-scenarios-status-sidebar--bufbar): Refresh when interactive as well. * test/lisp/erc/resources/sasl/plain-failed.eld: Expect EOF instead of "CAP END". (Bug#63595)
2023-12-18 20:50:26 -08:00
;; Preserve side-window dimensions after `custom-buffer-done'.
Mark if-let and when-let obsolete * lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark if-let and when-let obsolete (bug#73853 and elsewhere). Move docstring text around so that if-let* and when-let* descriptions no longer refer to if-let and when-let. * etc/NEWS: Announce the change. * admin/admin.el (reminder-for-release-blocking-bugs): * doc/misc/erc.texi (display-buffer): * lisp/ansi-color.el (ansi-color-apply) (ansi-color--face-vec-face): * lisp/ansi-osc.el (ansi-osc-apply-on-region) (ansi-osc-hyperlink): * lisp/arc-mode.el (archive-goto-file) (archive-next-file-displayer): * lisp/auth-source-pass.el (auth-source-pass-search) (auth-source-pass--parse-data) (auth-source-pass--find-match-many): * lisp/autorevert.el (auto-revert-notify-rm-watch): * lisp/buff-menu.el (Buffer-menu-unmark-all-buffers) (Buffer-menu-group-by-root): * lisp/calendar/parse-time.el (parse-iso8601-time-string): * lisp/cedet/pulse.el (pulse-tick): * lisp/comint.el (comint--fontify-input-ppss-flush-indirect) (comint--intersect-regions): * lisp/completion-preview.el (completion-preview--try-table) (completion-preview--capf-wrapper, completion-preview--update): * lisp/cus-edit.el (setopt--set) (custom-dirlocals-maybe-update-cons, custom-dirlocals-validate): * lisp/custom.el (load-theme): * lisp/descr-text.el (describe-char): * lisp/desktop.el (desktop--emacs-pid-running-p): * lisp/dired-x.el (menu): * lisp/dired.el (dired-font-lock-keywords) (dired-insert-directory, dired--insert-disk-space, dired-mode): * lisp/dnd.el (dnd-handle-multiple-urls): * lisp/dom.el (dom-remove-attribute): * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): * lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare): * lisp/emacs-lisp/comp-common.el (comp-function-type-spec): * lisp/emacs-lisp/comp-cstr.el (comp--all-classes) (comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem) (comp-cstr-intersection-no-mem, comp-cstr-fixnum-p) (comp-cstr-type-p): * lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install) (native--compile-async): * lisp/emacs-lisp/comp.el (comp--get-function-cstr) (comp--function-pure-p, comp--intern-func-in-ctxt) (comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar) (comp--add-call-cstr, comp--compute-dominator-tree) (comp--dom-tree-walker, comp--ssa-rename) (comp--function-call-maybe-fold, comp--fwprop-call) (comp--call-optim-func): * lisp/emacs-lisp/edebug.el (edebug-global-prefix) (edebug-remove-instrumentation): * lisp/emacs-lisp/eieio.el (initialize-instance): * lisp/emacs-lisp/ert-x.el (ert-resource-directory): * lisp/emacs-lisp/ert.el (ert--expand-should-1) (ert-test-location, ert-write-junit-test-report) (ert-test--erts-test): * lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string) (icons--create): * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p): * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate--make-autoload) (loaddefs-generate--parse-file): * lisp/emacs-lisp/multisession.el (multisession-edit-mode--revert, multisession-edit-value): * lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data) (package-vc--version, package-vc--clone): * lisp/emacs-lisp/package.el (package--reload-previously-loaded): * lisp/emacs-lisp/pp.el (pp--insert-lisp): * lisp/emacs-lisp/subr-x.el (add-display-text-property): * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): * lisp/emacs-lisp/timer.el (run-at-time): * lisp/emacs-lisp/vtable.el (vtable-goto-table) (vtable-goto-column, vtable-update-object, vtable--insert-line) (vtable--compute-widths, vtable--make-keymap): * lisp/emacs-lisp/warnings.el (display-warning): * lisp/epa-file.el (epa-file-insert-file-contents): * lisp/epa.el (epa-show-key): * lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt) (PRIVMSG, erc--get-isupport-entry): * lisp/erc/erc-button.el (erc-button-add-nickname-buttons) (erc--button-next): * lisp/erc/erc-common.el (erc--find-group): * lisp/erc/erc-fill.el (erc-fill, erc-fill-static) (erc-fill--wrap-escape-hidden-speaker) (erc-fill--wrap-unmerge-on-date-stamp) (erc-fill--wrap-massage-initial-message-post-clear) (erc-fill-wrap, erc-fill--wrap-rejigger-region): * lisp/erc/erc-goodies.el (erc--scrolltobottom-all) (erc--keep-place-indicator-on-window-buffer-change) (keep-place-indicator, erc--keep-place-indicator-adjust-on-clear) (erc-keep-place-move, erc--command-indicator-display): * lisp/erc/erc-ibuffer.el (erc-members): * lisp/erc/erc-join.el (erc-join--remove-requested-channel) (erc-autojoin--join): * lisp/erc/erc-networks.el (erc-networks--id-qualifying-init-parts, erc-networks--id-reload) (erc-networks--id-ensure-comparable) (erc-networks--reclaim-orphaned-target-buffers) (erc-networks--server-select): * lisp/erc/erc-nicks.el (erc-nicks-invert) (erc-nicks--redirect-face-widget-link, erc-nicks--highlight) (erc-nicks--highlight-button) (erc-nicks--list-faces-help-button-action, erc-nicks-list-faces) (erc-nicks-refresh, erc-nicks--colors-from-faces) (erc-nicks--track-prioritize) (erc-nicks--remember-face-for-track): * lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next) (erc--querypoll-on-352, erc--querypoll-send): * lisp/erc/erc-sasl.el (erc-sasl--read-password): * lisp/erc/erc-services.el (erc-services-issue-ghost-and-retry-nick): * lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar) (erc-speedbar-toggle-nicknames-window-lock) (erc-speedbar--compose-nicks-face): * lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect) (erc-stamp-prefix-log-filter, erc--conceal-prompt) (erc--insert-timestamp-left, erc-insert-timestamp-right) (erc-stamp--defer-date-insertion-on-post-modify) (erc-insert-timestamp-left-and-right) (erc-stamp--redo-right-stamp-post-clear) (erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps): * lisp/erc/erc-status-sidebar.el (bufbar) (erc-status-sidebar-prefer-target-as-name) (erc-status-sidebar-default-allsort, erc-status-sidebar-click): * lisp/erc/erc-track.el (erc-track--shortened-names-get) (erc-track--setup, erc-track--select-mode-line-face) (erc-track-modified-channels, erc-track--collect-faces-in) (erc-track--switch-buffer, erc-track--replace-killed-buffer): * lisp/erc/erc-truncate.el (erc-truncate--setup) (erc-truncate-buffer): * lisp/erc/erc.el (erc--ensure-query-member) (erc--ensure-query-members, erc--remove-channel-users-but) (erc--cusr-change-status, erc--find-mode, erc--update-modules) (erc-log-irc-protocol, erc--refresh-prompt) (erc--restore-important-text-props) (erc--order-text-properties-from-hash, erc-send-input-line) (erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY) (erc-cmd-BANLIST, erc--speakerize-nick) (erc--format-speaker-input-message, erc-channel-receive-names) (erc-send-current-line, erc-format-target-and/or-network) (erc-kill-buffer-function, erc-restore-text-properties) (erc--get-eq-comparable-cmd): * lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which) (eshell-maybe-replace-by-alias): * lisp/eshell/em-glob.el (eshell-glob-convert): * lisp/eshell/em-pred.el (eshell-pred-user-or-group) (eshell-pred-file-time, eshell-pred-file-type) (eshell-pred-file-mode, eshell-pred-file-links) (eshell-pred-file-size): * lisp/eshell/em-prompt.el (eshell-forward-paragraph) (eshell-next-prompt): * lisp/eshell/esh-arg.el (eshell-resolve-current-argument): * lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which) (eshell-plain-command--which, eshell-plain-command): * lisp/eshell/esh-io.el (eshell-duplicate-handles) (eshell-protect-handles, eshell-get-target, eshell-close-target): * lisp/eshell/esh-proc.el (eshell-sentinel): * lisp/eshell/esh-var.el (eshell-parse-variable-ref) (eshell-get-variable, eshell-set-variable): * lisp/faces.el (face-at-point): * lisp/ffap.el (ffap-in-project): * lisp/filenotify.el (file-notify--rm-descriptor): * lisp/files-x.el (read-dir-locals-file) (connection-local-update-profile-variables) (connection-local-value): * lisp/files.el (file-remote-p, abbreviate-file-name) (set-auto-mode, hack-local-variables) (revert-buffer-restore-read-only): * lisp/find-dired.el (find-dired-sort-by-filename): * lisp/font-lock.el (font-lock--filter-keywords): * lisp/gnus/gnus-art.el (article-emojize-symbols): * lisp/gnus/gnus-int.el (gnus-close-server): * lisp/gnus/gnus-search.el (gnus-search-transform) (gnus-search-indexed-parse-output, gnus-search-server-to-engine): * lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url): * lisp/gnus/gnus.el (gnus-check-backend-function): * lisp/gnus/message.el (message-send-mail): * lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers): * lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article) (nnatom--read-article-or-group-authors, nnatom--read-publish) (nnatom--read-update, nnatom--read-links): * lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server) (nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article) (nnfeed-retrieve-headers, nnfeed--print-part) (nnfeed-request-article, nnfeed-request-group) (nnfeed-request-list, nnfeed--group-description) (nnfeed-request-group-description) (nnfeed-request-list-newsgroups, nnfeed-request-rename-group): * lisp/gnus/nnmh.el (nnmh-update-gnus-unreads): * lisp/help-fns.el (help-find-source) (help-fns--insert-menu-bindings, help-fns--mention-first-release) (help-fns--mention-shortdoc-groups) (help-fns--customize-variable-version) (help-fns--face-custom-version-info, describe-mode): * lisp/help-mode.el (help-make-xrefs): * lisp/help.el (help-key-description, help--describe-command): * lisp/hfy-cmap.el (htmlfontify-load-rgb-file): * lisp/ibuf-ext.el (ibuffer-jump-to-filter-group) (ibuffer-kill-filter-group, ibuffer-kill-line) (ibuffer-save-filter-groups, ibuffer-save-filters, filename) (basename, file-extension, ibuffer-diff-buffer-with-file-1) (ibuffer-mark-by-file-name-regexp) (ibuffer-mark-by-content-regexp): * lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen): * lisp/ibuffer.el (ibuffer-mouse-toggle-mark) (ibuffer-toggle-marks, ibuffer-mark-interactive) (ibuffer-compile-format, process, ibuffer-map-lines): * lisp/image.el (image--compute-map) (image--compute-original-map): * lisp/image/exif.el (exif-parse-buffer): * lisp/image/image-converter.el (image-convert-p, image-convert) (image-converter--find-converter): * lisp/image/image-dired-util.el (image-dired-file-name-at-point): * lisp/image/image-dired.el (image-dired-track-original-file) (image-dired--on-file-in-dired-buffer) (image-dired--with-thumbnail-buffer) (image-dired-jump-original-dired-buffer) (image-dired--slideshow-step, image-dired-display-image): * lisp/image/wallpaper.el (wallpaper--init-action-kill) (wallpaper--find-setter, wallpaper--find-command) (wallpaper--find-command-args, wallpaper--x-monitor-name): * lisp/info-look.el (info-lookup-interactive-arguments) (info-complete)::(:mode): * lisp/info.el (info-pop-to-buffer, Info-read-node-name-1): * lisp/international/emoji.el (emoji--adjust-displayable-1) (emoji--add-recent): * lisp/jsonrpc.el (jsonrpc--call-deferred) (jsonrpc--process-sentinel, jsonrpc--remove): * lisp/keymap.el (keymap-local-lookup): * lisp/mail/emacsbug.el (report-emacs-bug-hook) (submit-emacs-patch): * lisp/mail/ietf-drums.el (ietf-drums-parse-addresses): * lisp/mail/mailclient.el (mailclient-send-it): * lisp/mail/rfc6068.el (rfc6068-parse-mailto-url): * lisp/mail/undigest.el (rmail-digest-parse-mixed-mime): * lisp/minibuffer.el (completion-metadata-get) (completions--after-change) (minibuffer-visible-completions--filter): * lisp/net/browse-url.el (browse-url-url-at-point) (browse-url-file-url, browse-url-emacs): * lisp/net/dbus.el (dbus-byte-array-to-string) (dbus-monitor-goto-serial): * lisp/net/dictionary.el (dictionary-search): * lisp/net/eww.el (eww--download-directory) (eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit) (eww-follow-link, eww-read-alternate-url) (eww-copy-alternate-url): * lisp/net/goto-addr.el (goto-address-at-point): * lisp/net/mailcap.el (mailcap-mime-info): * lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string) (rcirc-kill-buffer-hook, rcirc-print, rcirc-when) (rcirc-color-attributes, rcirc-handler-NICK) (rcirc-handler-TAGMSG, rcirc-handler-BATCH): * lisp/net/shr.el (shr-descend, shr-adaptive-fill-function) (shr-correct-dom-case, shr-tag-a): * lisp/net/sieve.el (sieve-manage-quit): * lisp/outline.el (outline-cycle-buffer): * lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate): * lisp/proced.el (proced-auto-update-timer): * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc): * lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph): * lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset) (c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun): * lisp/progmodes/compile.el (compilation-error-properties) (compilation-find-file-1): * lisp/progmodes/eglot.el (eglot--check-object) (eglot--read-server, eglot-upgrade-eglot) (eglot-handle-notification, eglot--CompletionParams) (eglot-completion-at-point, eglot--sig-info) (eglot-register-capability): * lisp/progmodes/elisp-mode.el (emacs-lisp-native-compile-and-load) (elisp-eldoc-var-docstring-with-value): * lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test): * lisp/progmodes/flymake.el (flymake--update-eol-overlays) (flymake-eldoc-function): * lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom) (gdb-frame-handler): * lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring) (go-ts-mode--comment-on-previous-line-p) (go-ts-mode--get-test-regexp-at-point) (go-ts-mode-test-this-file): * lisp/progmodes/grep.el (lgrep, rgrep-default-command) (grep-file-at-point): * lisp/progmodes/perl-mode.el (perl--end-of-format-p): * lisp/progmodes/php-ts-mode.el (php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun): * lisp/progmodes/project.el (project--other-place-command) (project--find-default-from, project--transplant-file-name) (project-prefixed-buffer-name, project--remove-from-project-list) (project-prompt-project-name, project-remember-projects-under) (project--switch-project-command) (project-uniquify-dirname-transform, project-mode-line-format): * lisp/progmodes/python.el (python-font-lock-keywords-maximum-decoration) (python--treesit-fontify-union-types) (python-shell-get-process-name, python-shell-restart) (python-shell-completion-at-point, python-ffap-module-path) (python-util-comint-end-of-output-p, python--import-sources) (python-add-import, python-remove-import, python-fix-imports): * lisp/progmodes/xref.el (xref--add-log-current-defun): * lisp/repeat.el (repeat-echo-message-string): * lisp/saveplace.el (save-place-dired-hook): * lisp/server.el (server-save-buffers-kill-terminal): * lisp/shadowfile.el (shadow-make-fullname) (shadow-contract-file-name, shadow-define-literal-group): * lisp/shell.el (shell-highlight-undef-mode): * lisp/simple.el (command-completion-using-modes-p) (command-execute, file-user-uid, file-group-gid) (first-completion, last-completion, switch-to-completions): * lisp/startup.el (startup--load-user-init-file): * lisp/tab-line.el (tab-line-tabs-buffer-group-by-project): * lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer): * lisp/term/android-win.el (android-encode-select-string) (gui-backend-set-selection): * lisp/term/haiku-win.el (haiku-dnd-convert-string) (haiku-select-encode-xstring, haiku-select-encode-utf-8-string): * lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize): * lisp/textmodes/ispell.el (ispell-completion-at-point): * lisp/textmodes/sgml-mode.el (sgml-validate) (html-mode--complete-at-point): * lisp/textmodes/tex-mode.el (tex-recenter-output-buffer) (xref-backend-references): * lisp/thingatpt.el (thing-at-point-file-at-point) (thing-at-point-face-at-point): * lisp/thread.el (thread-list--get-status): * lisp/time.el (world-clock-copy-time-as-kill, world-clock): * lisp/touch-screen.el (touch-screen-handle-touch): * lisp/treesit.el (treesit-language-at, treesit-node-at) (treesit-node-on, treesit-buffer-root-node) (treesit-node-field-name, treesit-local-parsers-at) (treesit-local-parsers-on, treesit--cleanup-local-range-overlays) (treesit-font-lock-recompute-features) (treesit-font-lock-fontify-region, treesit-transpose-sexps) (treesit-add-log-current-defun, treesit-major-mode-setup) (treesit--explorer-refresh, treesit-install-language-grammar): * lisp/url/url.el (url-retrieve-synchronously): * lisp/vc/smerge-mode.el (smerge-diff): * lisp/vc/vc-dir.el (vc-dir): * lisp/vc/vc-dispatcher.el (vc-do-async-command): * lisp/vc/vc-git.el (vc-git-dir--branch-headers) (vc-git-dir--stash-headers, vc-git--log-edit-summary-check) (vc-git-stash-list): * lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset) (vc-clone): * lisp/visual-wrap.el (visual-wrap--apply-to-line): * lisp/wid-edit.el (widget-text) (widget-editable-list-insert-before): * lisp/window-tool-bar.el (window-tool-bar--keymap-entry-to-string): * lisp/window.el (display-buffer, display-buffer-full-frame) (window-point-context-set, window-point-context-use) (window-point-context-use-default-function): * lisp/xdg.el (xdg-current-desktop): * lisp/xwidget.el (xwidget-webkit-callback): * lisp/yank-media.el (yank-media--get-selection) (yank-media-types): * test/lisp/comint-tests.el (comint-tests/test-password-function): * test/lisp/completion-preview-tests.el (completion-preview-tests--capf): * test/lisp/cus-edit-tests.el (with-cus-edit-test): * test/lisp/erc/erc-scenarios-base-local-modules.el (-phony-sblm-): * test/lisp/erc/erc-scenarios-stamp.el (erc-scenarios-stamp--on-post-modify): * test/lisp/erc/erc-services-tests.el (erc-services-tests--asp-parse-entry): * test/lisp/erc/erc-tests.el (erc-modules--internal-property) (erc--find-mode, erc-tests--update-modules): * test/lisp/erc/resources/erc-d/erc-d-i.el (erc-d-i--parse-message): * test/lisp/erc/resources/erc-d/erc-d-t.el (erc-d-t-kill-related-buffers, erc-d-t-with-cleanup): * test/lisp/erc/resources/erc-d/erc-d-tests.el (erc-d-i--parse-message--irc-parser-tests): * test/lisp/erc/resources/erc-d/erc-d-u.el (erc-d-u--read-exchange-slowly): * test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire) (erc-d--finalize-done, erc-d--command-handle-all): * test/lisp/erc/resources/erc-scenarios-common.el (erc-scenarios-common-with-cleanup): * test/lisp/erc/resources/erc-tests-common.el (erc-tests--common-display-message) (erc-tests-common-create-subprocess): * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): * test/lisp/international/mule-tests.el (mule-cmds-tests--ucs-names-missing-names): * test/lisp/progmodes/python-tests.el (python-tests-get-shell-interpreter) (python-tests--get-interpreter-info): * test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-resource-file): * test/lisp/replace-tests.el (replace-tests-with-undo): * test/src/emacs-tests.el (emacs-tests--seccomp-debug): * test/src/process-tests.el (process-tests--emacs-command) (process-tests--emacs-binary, process-tests--dump-file): * test/src/treesit-tests.el (treesit--ert-test-defun-navigation): Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
(when-let* (((not erc--updating-modules-p))
(buf (or (and (derived-mode-p 'erc-mode) (current-buffer))
(car (erc-buffer-filter
(lambda () erc-server-connected))))))
Replace some uses of erc-error * lisp/erc/erc-button.el (erc-button--display-error-notice-with-keys-and-warn): Use `erc--lwarn' so the warnings buffer is overridable for testing. * lisp/erc/erc-sasl.el (erc-sasl-mode, erc-sasl-enable): Signal an `error' instead of calling `erc-error', which continues execution. In this special case, the session cannot continue initializing, since connection registration can't reasonably be expected to complete successfully. (erc-sasl--destroy): Don't run `erc-quit-hook', and issue a warning of level `:error' to get users' attention instead of calling `ding'. * lisp/erc/erc-speedbar.el (erc-speedbar--emulate-sidebar-set-window-preserve-size): Don't set window parameters. Doing this basically made `erc-speedbar-toggle-nicknames-window-lock' unusable. (erc-speedbar--toggle-nicknames-sidebar): Manually unlock the window after toggling. (erc-nickbar-mode, erc-nickbar-enable, erc-nickbar-disable): Don't `ding' when called in a non-ERC buffer, and make sure to call `erc-speedbar--ensure' from an ERC buffer. Also, don't disable minor-mode var when speedbar buffer doesn't exist because that doesn't ensure it'll be created the next time around, and users may count on the activation state remaining consistent. (erc-speedbar-toggle-nicknames-window-lock): Make usable from lisp with explicit numeric arg. * lisp/erc/erc-status-sidebar.el (erc-bufbar-mode, erc-bufbar-enable): Only create the side window from an erc-mode buffer to ensure the ratio is preserved when burying the current buffer, e.g., with `custom-buffer-done'. * lisp/erc/erc.el (erc--warnings-buffer-name, erc--lwarn): New function, an analog of `lwarn', that allows for overriding the warnings buffer with the new variable `erc--warnings-buffer-name'. (erc-cmd-SERVER): Add comment. * test/lisp/erc/erc-scenarios-sasl.el (erc-scenarios-sasl--plain-fail): Expect warning instead of error. * test/lisp/erc/erc-scenarios-status-sidebar.el (erc-scenarios-status-sidebar--bufbar): Refresh when interactive as well. * test/lisp/erc/resources/sasl/plain-failed.eld: Expect EOF instead of "CAP END". (Bug#63595)
2023-12-18 20:50:26 -08:00
(with-current-buffer buf
(erc-status-sidebar--open))))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
((remove-hook 'erc--setup-buffer-hook #'erc-status-sidebar--open)
(erc-status-sidebar-close 'all-frames)
Mark if-let and when-let obsolete * lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark if-let and when-let obsolete (bug#73853 and elsewhere). Move docstring text around so that if-let* and when-let* descriptions no longer refer to if-let and when-let. * etc/NEWS: Announce the change. * admin/admin.el (reminder-for-release-blocking-bugs): * doc/misc/erc.texi (display-buffer): * lisp/ansi-color.el (ansi-color-apply) (ansi-color--face-vec-face): * lisp/ansi-osc.el (ansi-osc-apply-on-region) (ansi-osc-hyperlink): * lisp/arc-mode.el (archive-goto-file) (archive-next-file-displayer): * lisp/auth-source-pass.el (auth-source-pass-search) (auth-source-pass--parse-data) (auth-source-pass--find-match-many): * lisp/autorevert.el (auto-revert-notify-rm-watch): * lisp/buff-menu.el (Buffer-menu-unmark-all-buffers) (Buffer-menu-group-by-root): * lisp/calendar/parse-time.el (parse-iso8601-time-string): * lisp/cedet/pulse.el (pulse-tick): * lisp/comint.el (comint--fontify-input-ppss-flush-indirect) (comint--intersect-regions): * lisp/completion-preview.el (completion-preview--try-table) (completion-preview--capf-wrapper, completion-preview--update): * lisp/cus-edit.el (setopt--set) (custom-dirlocals-maybe-update-cons, custom-dirlocals-validate): * lisp/custom.el (load-theme): * lisp/descr-text.el (describe-char): * lisp/desktop.el (desktop--emacs-pid-running-p): * lisp/dired-x.el (menu): * lisp/dired.el (dired-font-lock-keywords) (dired-insert-directory, dired--insert-disk-space, dired-mode): * lisp/dnd.el (dnd-handle-multiple-urls): * lisp/dom.el (dom-remove-attribute): * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): * lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare): * lisp/emacs-lisp/comp-common.el (comp-function-type-spec): * lisp/emacs-lisp/comp-cstr.el (comp--all-classes) (comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem) (comp-cstr-intersection-no-mem, comp-cstr-fixnum-p) (comp-cstr-type-p): * lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install) (native--compile-async): * lisp/emacs-lisp/comp.el (comp--get-function-cstr) (comp--function-pure-p, comp--intern-func-in-ctxt) (comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar) (comp--add-call-cstr, comp--compute-dominator-tree) (comp--dom-tree-walker, comp--ssa-rename) (comp--function-call-maybe-fold, comp--fwprop-call) (comp--call-optim-func): * lisp/emacs-lisp/edebug.el (edebug-global-prefix) (edebug-remove-instrumentation): * lisp/emacs-lisp/eieio.el (initialize-instance): * lisp/emacs-lisp/ert-x.el (ert-resource-directory): * lisp/emacs-lisp/ert.el (ert--expand-should-1) (ert-test-location, ert-write-junit-test-report) (ert-test--erts-test): * lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string) (icons--create): * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p): * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate--make-autoload) (loaddefs-generate--parse-file): * lisp/emacs-lisp/multisession.el (multisession-edit-mode--revert, multisession-edit-value): * lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data) (package-vc--version, package-vc--clone): * lisp/emacs-lisp/package.el (package--reload-previously-loaded): * lisp/emacs-lisp/pp.el (pp--insert-lisp): * lisp/emacs-lisp/subr-x.el (add-display-text-property): * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): * lisp/emacs-lisp/timer.el (run-at-time): * lisp/emacs-lisp/vtable.el (vtable-goto-table) (vtable-goto-column, vtable-update-object, vtable--insert-line) (vtable--compute-widths, vtable--make-keymap): * lisp/emacs-lisp/warnings.el (display-warning): * lisp/epa-file.el (epa-file-insert-file-contents): * lisp/epa.el (epa-show-key): * lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt) (PRIVMSG, erc--get-isupport-entry): * lisp/erc/erc-button.el (erc-button-add-nickname-buttons) (erc--button-next): * lisp/erc/erc-common.el (erc--find-group): * lisp/erc/erc-fill.el (erc-fill, erc-fill-static) (erc-fill--wrap-escape-hidden-speaker) (erc-fill--wrap-unmerge-on-date-stamp) (erc-fill--wrap-massage-initial-message-post-clear) (erc-fill-wrap, erc-fill--wrap-rejigger-region): * lisp/erc/erc-goodies.el (erc--scrolltobottom-all) (erc--keep-place-indicator-on-window-buffer-change) (keep-place-indicator, erc--keep-place-indicator-adjust-on-clear) (erc-keep-place-move, erc--command-indicator-display): * lisp/erc/erc-ibuffer.el (erc-members): * lisp/erc/erc-join.el (erc-join--remove-requested-channel) (erc-autojoin--join): * lisp/erc/erc-networks.el (erc-networks--id-qualifying-init-parts, erc-networks--id-reload) (erc-networks--id-ensure-comparable) (erc-networks--reclaim-orphaned-target-buffers) (erc-networks--server-select): * lisp/erc/erc-nicks.el (erc-nicks-invert) (erc-nicks--redirect-face-widget-link, erc-nicks--highlight) (erc-nicks--highlight-button) (erc-nicks--list-faces-help-button-action, erc-nicks-list-faces) (erc-nicks-refresh, erc-nicks--colors-from-faces) (erc-nicks--track-prioritize) (erc-nicks--remember-face-for-track): * lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next) (erc--querypoll-on-352, erc--querypoll-send): * lisp/erc/erc-sasl.el (erc-sasl--read-password): * lisp/erc/erc-services.el (erc-services-issue-ghost-and-retry-nick): * lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar) (erc-speedbar-toggle-nicknames-window-lock) (erc-speedbar--compose-nicks-face): * lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect) (erc-stamp-prefix-log-filter, erc--conceal-prompt) (erc--insert-timestamp-left, erc-insert-timestamp-right) (erc-stamp--defer-date-insertion-on-post-modify) (erc-insert-timestamp-left-and-right) (erc-stamp--redo-right-stamp-post-clear) (erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps): * lisp/erc/erc-status-sidebar.el (bufbar) (erc-status-sidebar-prefer-target-as-name) (erc-status-sidebar-default-allsort, erc-status-sidebar-click): * lisp/erc/erc-track.el (erc-track--shortened-names-get) (erc-track--setup, erc-track--select-mode-line-face) (erc-track-modified-channels, erc-track--collect-faces-in) (erc-track--switch-buffer, erc-track--replace-killed-buffer): * lisp/erc/erc-truncate.el (erc-truncate--setup) (erc-truncate-buffer): * lisp/erc/erc.el (erc--ensure-query-member) (erc--ensure-query-members, erc--remove-channel-users-but) (erc--cusr-change-status, erc--find-mode, erc--update-modules) (erc-log-irc-protocol, erc--refresh-prompt) (erc--restore-important-text-props) (erc--order-text-properties-from-hash, erc-send-input-line) (erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY) (erc-cmd-BANLIST, erc--speakerize-nick) (erc--format-speaker-input-message, erc-channel-receive-names) (erc-send-current-line, erc-format-target-and/or-network) (erc-kill-buffer-function, erc-restore-text-properties) (erc--get-eq-comparable-cmd): * lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which) (eshell-maybe-replace-by-alias): * lisp/eshell/em-glob.el (eshell-glob-convert): * lisp/eshell/em-pred.el (eshell-pred-user-or-group) (eshell-pred-file-time, eshell-pred-file-type) (eshell-pred-file-mode, eshell-pred-file-links) (eshell-pred-file-size): * lisp/eshell/em-prompt.el (eshell-forward-paragraph) (eshell-next-prompt): * lisp/eshell/esh-arg.el (eshell-resolve-current-argument): * lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which) (eshell-plain-command--which, eshell-plain-command): * lisp/eshell/esh-io.el (eshell-duplicate-handles) (eshell-protect-handles, eshell-get-target, eshell-close-target): * lisp/eshell/esh-proc.el (eshell-sentinel): * lisp/eshell/esh-var.el (eshell-parse-variable-ref) (eshell-get-variable, eshell-set-variable): * lisp/faces.el (face-at-point): * lisp/ffap.el (ffap-in-project): * lisp/filenotify.el (file-notify--rm-descriptor): * lisp/files-x.el (read-dir-locals-file) (connection-local-update-profile-variables) (connection-local-value): * lisp/files.el (file-remote-p, abbreviate-file-name) (set-auto-mode, hack-local-variables) (revert-buffer-restore-read-only): * lisp/find-dired.el (find-dired-sort-by-filename): * lisp/font-lock.el (font-lock--filter-keywords): * lisp/gnus/gnus-art.el (article-emojize-symbols): * lisp/gnus/gnus-int.el (gnus-close-server): * lisp/gnus/gnus-search.el (gnus-search-transform) (gnus-search-indexed-parse-output, gnus-search-server-to-engine): * lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url): * lisp/gnus/gnus.el (gnus-check-backend-function): * lisp/gnus/message.el (message-send-mail): * lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers): * lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article) (nnatom--read-article-or-group-authors, nnatom--read-publish) (nnatom--read-update, nnatom--read-links): * lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server) (nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article) (nnfeed-retrieve-headers, nnfeed--print-part) (nnfeed-request-article, nnfeed-request-group) (nnfeed-request-list, nnfeed--group-description) (nnfeed-request-group-description) (nnfeed-request-list-newsgroups, nnfeed-request-rename-group): * lisp/gnus/nnmh.el (nnmh-update-gnus-unreads): * lisp/help-fns.el (help-find-source) (help-fns--insert-menu-bindings, help-fns--mention-first-release) (help-fns--mention-shortdoc-groups) (help-fns--customize-variable-version) (help-fns--face-custom-version-info, describe-mode): * lisp/help-mode.el (help-make-xrefs): * lisp/help.el (help-key-description, help--describe-command): * lisp/hfy-cmap.el (htmlfontify-load-rgb-file): * lisp/ibuf-ext.el (ibuffer-jump-to-filter-group) (ibuffer-kill-filter-group, ibuffer-kill-line) (ibuffer-save-filter-groups, ibuffer-save-filters, filename) (basename, file-extension, ibuffer-diff-buffer-with-file-1) (ibuffer-mark-by-file-name-regexp) (ibuffer-mark-by-content-regexp): * lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen): * lisp/ibuffer.el (ibuffer-mouse-toggle-mark) (ibuffer-toggle-marks, ibuffer-mark-interactive) (ibuffer-compile-format, process, ibuffer-map-lines): * lisp/image.el (image--compute-map) (image--compute-original-map): * lisp/image/exif.el (exif-parse-buffer): * lisp/image/image-converter.el (image-convert-p, image-convert) (image-converter--find-converter): * lisp/image/image-dired-util.el (image-dired-file-name-at-point): * lisp/image/image-dired.el (image-dired-track-original-file) (image-dired--on-file-in-dired-buffer) (image-dired--with-thumbnail-buffer) (image-dired-jump-original-dired-buffer) (image-dired--slideshow-step, image-dired-display-image): * lisp/image/wallpaper.el (wallpaper--init-action-kill) (wallpaper--find-setter, wallpaper--find-command) (wallpaper--find-command-args, wallpaper--x-monitor-name): * lisp/info-look.el (info-lookup-interactive-arguments) (info-complete)::(:mode): * lisp/info.el (info-pop-to-buffer, Info-read-node-name-1): * lisp/international/emoji.el (emoji--adjust-displayable-1) (emoji--add-recent): * lisp/jsonrpc.el (jsonrpc--call-deferred) (jsonrpc--process-sentinel, jsonrpc--remove): * lisp/keymap.el (keymap-local-lookup): * lisp/mail/emacsbug.el (report-emacs-bug-hook) (submit-emacs-patch): * lisp/mail/ietf-drums.el (ietf-drums-parse-addresses): * lisp/mail/mailclient.el (mailclient-send-it): * lisp/mail/rfc6068.el (rfc6068-parse-mailto-url): * lisp/mail/undigest.el (rmail-digest-parse-mixed-mime): * lisp/minibuffer.el (completion-metadata-get) (completions--after-change) (minibuffer-visible-completions--filter): * lisp/net/browse-url.el (browse-url-url-at-point) (browse-url-file-url, browse-url-emacs): * lisp/net/dbus.el (dbus-byte-array-to-string) (dbus-monitor-goto-serial): * lisp/net/dictionary.el (dictionary-search): * lisp/net/eww.el (eww--download-directory) (eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit) (eww-follow-link, eww-read-alternate-url) (eww-copy-alternate-url): * lisp/net/goto-addr.el (goto-address-at-point): * lisp/net/mailcap.el (mailcap-mime-info): * lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string) (rcirc-kill-buffer-hook, rcirc-print, rcirc-when) (rcirc-color-attributes, rcirc-handler-NICK) (rcirc-handler-TAGMSG, rcirc-handler-BATCH): * lisp/net/shr.el (shr-descend, shr-adaptive-fill-function) (shr-correct-dom-case, shr-tag-a): * lisp/net/sieve.el (sieve-manage-quit): * lisp/outline.el (outline-cycle-buffer): * lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate): * lisp/proced.el (proced-auto-update-timer): * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc): * lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph): * lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset) (c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun): * lisp/progmodes/compile.el (compilation-error-properties) (compilation-find-file-1): * lisp/progmodes/eglot.el (eglot--check-object) (eglot--read-server, eglot-upgrade-eglot) (eglot-handle-notification, eglot--CompletionParams) (eglot-completion-at-point, eglot--sig-info) (eglot-register-capability): * lisp/progmodes/elisp-mode.el (emacs-lisp-native-compile-and-load) (elisp-eldoc-var-docstring-with-value): * lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test): * lisp/progmodes/flymake.el (flymake--update-eol-overlays) (flymake-eldoc-function): * lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom) (gdb-frame-handler): * lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring) (go-ts-mode--comment-on-previous-line-p) (go-ts-mode--get-test-regexp-at-point) (go-ts-mode-test-this-file): * lisp/progmodes/grep.el (lgrep, rgrep-default-command) (grep-file-at-point): * lisp/progmodes/perl-mode.el (perl--end-of-format-p): * lisp/progmodes/php-ts-mode.el (php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun): * lisp/progmodes/project.el (project--other-place-command) (project--find-default-from, project--transplant-file-name) (project-prefixed-buffer-name, project--remove-from-project-list) (project-prompt-project-name, project-remember-projects-under) (project--switch-project-command) (project-uniquify-dirname-transform, project-mode-line-format): * lisp/progmodes/python.el (python-font-lock-keywords-maximum-decoration) (python--treesit-fontify-union-types) (python-shell-get-process-name, python-shell-restart) (python-shell-completion-at-point, python-ffap-module-path) (python-util-comint-end-of-output-p, python--import-sources) (python-add-import, python-remove-import, python-fix-imports): * lisp/progmodes/xref.el (xref--add-log-current-defun): * lisp/repeat.el (repeat-echo-message-string): * lisp/saveplace.el (save-place-dired-hook): * lisp/server.el (server-save-buffers-kill-terminal): * lisp/shadowfile.el (shadow-make-fullname) (shadow-contract-file-name, shadow-define-literal-group): * lisp/shell.el (shell-highlight-undef-mode): * lisp/simple.el (command-completion-using-modes-p) (command-execute, file-user-uid, file-group-gid) (first-completion, last-completion, switch-to-completions): * lisp/startup.el (startup--load-user-init-file): * lisp/tab-line.el (tab-line-tabs-buffer-group-by-project): * lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer): * lisp/term/android-win.el (android-encode-select-string) (gui-backend-set-selection): * lisp/term/haiku-win.el (haiku-dnd-convert-string) (haiku-select-encode-xstring, haiku-select-encode-utf-8-string): * lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize): * lisp/textmodes/ispell.el (ispell-completion-at-point): * lisp/textmodes/sgml-mode.el (sgml-validate) (html-mode--complete-at-point): * lisp/textmodes/tex-mode.el (tex-recenter-output-buffer) (xref-backend-references): * lisp/thingatpt.el (thing-at-point-file-at-point) (thing-at-point-face-at-point): * lisp/thread.el (thread-list--get-status): * lisp/time.el (world-clock-copy-time-as-kill, world-clock): * lisp/touch-screen.el (touch-screen-handle-touch): * lisp/treesit.el (treesit-language-at, treesit-node-at) (treesit-node-on, treesit-buffer-root-node) (treesit-node-field-name, treesit-local-parsers-at) (treesit-local-parsers-on, treesit--cleanup-local-range-overlays) (treesit-font-lock-recompute-features) (treesit-font-lock-fontify-region, treesit-transpose-sexps) (treesit-add-log-current-defun, treesit-major-mode-setup) (treesit--explorer-refresh, treesit-install-language-grammar): * lisp/url/url.el (url-retrieve-synchronously): * lisp/vc/smerge-mode.el (smerge-diff): * lisp/vc/vc-dir.el (vc-dir): * lisp/vc/vc-dispatcher.el (vc-do-async-command): * lisp/vc/vc-git.el (vc-git-dir--branch-headers) (vc-git-dir--stash-headers, vc-git--log-edit-summary-check) (vc-git-stash-list): * lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset) (vc-clone): * lisp/visual-wrap.el (visual-wrap--apply-to-line): * lisp/wid-edit.el (widget-text) (widget-editable-list-insert-before): * lisp/window-tool-bar.el (window-tool-bar--keymap-entry-to-string): * lisp/window.el (display-buffer, display-buffer-full-frame) (window-point-context-set, window-point-context-use) (window-point-context-use-default-function): * lisp/xdg.el (xdg-current-desktop): * lisp/xwidget.el (xwidget-webkit-callback): * lisp/yank-media.el (yank-media--get-selection) (yank-media-types): * test/lisp/comint-tests.el (comint-tests/test-password-function): * test/lisp/completion-preview-tests.el (completion-preview-tests--capf): * test/lisp/cus-edit-tests.el (with-cus-edit-test): * test/lisp/erc/erc-scenarios-base-local-modules.el (-phony-sblm-): * test/lisp/erc/erc-scenarios-stamp.el (erc-scenarios-stamp--on-post-modify): * test/lisp/erc/erc-services-tests.el (erc-services-tests--asp-parse-entry): * test/lisp/erc/erc-tests.el (erc-modules--internal-property) (erc--find-mode, erc-tests--update-modules): * test/lisp/erc/resources/erc-d/erc-d-i.el (erc-d-i--parse-message): * test/lisp/erc/resources/erc-d/erc-d-t.el (erc-d-t-kill-related-buffers, erc-d-t-with-cleanup): * test/lisp/erc/resources/erc-d/erc-d-tests.el (erc-d-i--parse-message--irc-parser-tests): * test/lisp/erc/resources/erc-d/erc-d-u.el (erc-d-u--read-exchange-slowly): * test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire) (erc-d--finalize-done, erc-d--command-handle-all): * test/lisp/erc/resources/erc-scenarios-common.el (erc-scenarios-common-with-cleanup): * test/lisp/erc/resources/erc-tests-common.el (erc-tests--common-display-message) (erc-tests-common-create-subprocess): * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): * test/lisp/international/mule-tests.el (mule-cmds-tests--ucs-names-missing-names): * test/lisp/progmodes/python-tests.el (python-tests-get-shell-interpreter) (python-tests--get-interpreter-info): * test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-resource-file): * test/lisp/replace-tests.el (replace-tests-with-undo): * test/src/emacs-tests.el (emacs-tests--seccomp-debug): * test/src/process-tests.el (process-tests--emacs-command) (process-tests--emacs-binary, process-tests--dump-file): * test/src/treesit-tests.el (treesit--ert-test-defun-navigation): Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
(when-let* ((arg erc--module-toggle-prefix-arg)
((numberp arg))
((< arg 0)))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(erc-status-sidebar-kill))))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
;;;###autoload
(defun erc-status-sidebar-open ()
"Open or create a sidebar window in the current frame.
When `erc-bufbar-mode' is active, do this even if one already
exists in another frame."
(interactive)
(let ((erc-status-sidebar--singular-p (not erc-bufbar-mode)))
(erc-status-sidebar--open)))
;;;###autoload
(defun erc-status-sidebar-toggle ()
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
"Toggle the sidebar open/closed on the current frame.
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
When opening, and `erc-bufbar-mode' is active, create a sidebar
even if one already exists in another frame."
(interactive)
(if (get-buffer-window erc-status-sidebar-buffer-name nil)
(erc-status-sidebar-close)
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(erc-status-sidebar-open)))
(defun erc-status-sidebar-get-channame (buffer)
"Return name of BUFFER with all leading \"#\" characters removed."
(let ((s (buffer-name buffer)))
(if (string-match "^#\\{1,2\\}" s)
(setq s (replace-match "" t t s)))
(downcase s)))
(defun erc-status-sidebar-default-chansort (chanlist)
"Sort CHANLIST case-insensitively for display in the sidebar."
(sort chanlist (lambda (x y)
(string< (erc-status-sidebar-get-channame x)
(erc-status-sidebar-get-channame y)))))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(defvar erc-status-sidebar--trimpat nil)
(defvar erc-status-sidebar--prechan nil)
(defun erc-status-sidebar-prefer-target-as-name (buffer)
"Return some name to represent buffer in the sidebar."
Mark if-let and when-let obsolete * lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark if-let and when-let obsolete (bug#73853 and elsewhere). Move docstring text around so that if-let* and when-let* descriptions no longer refer to if-let and when-let. * etc/NEWS: Announce the change. * admin/admin.el (reminder-for-release-blocking-bugs): * doc/misc/erc.texi (display-buffer): * lisp/ansi-color.el (ansi-color-apply) (ansi-color--face-vec-face): * lisp/ansi-osc.el (ansi-osc-apply-on-region) (ansi-osc-hyperlink): * lisp/arc-mode.el (archive-goto-file) (archive-next-file-displayer): * lisp/auth-source-pass.el (auth-source-pass-search) (auth-source-pass--parse-data) (auth-source-pass--find-match-many): * lisp/autorevert.el (auto-revert-notify-rm-watch): * lisp/buff-menu.el (Buffer-menu-unmark-all-buffers) (Buffer-menu-group-by-root): * lisp/calendar/parse-time.el (parse-iso8601-time-string): * lisp/cedet/pulse.el (pulse-tick): * lisp/comint.el (comint--fontify-input-ppss-flush-indirect) (comint--intersect-regions): * lisp/completion-preview.el (completion-preview--try-table) (completion-preview--capf-wrapper, completion-preview--update): * lisp/cus-edit.el (setopt--set) (custom-dirlocals-maybe-update-cons, custom-dirlocals-validate): * lisp/custom.el (load-theme): * lisp/descr-text.el (describe-char): * lisp/desktop.el (desktop--emacs-pid-running-p): * lisp/dired-x.el (menu): * lisp/dired.el (dired-font-lock-keywords) (dired-insert-directory, dired--insert-disk-space, dired-mode): * lisp/dnd.el (dnd-handle-multiple-urls): * lisp/dom.el (dom-remove-attribute): * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): * lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare): * lisp/emacs-lisp/comp-common.el (comp-function-type-spec): * lisp/emacs-lisp/comp-cstr.el (comp--all-classes) (comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem) (comp-cstr-intersection-no-mem, comp-cstr-fixnum-p) (comp-cstr-type-p): * lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install) (native--compile-async): * lisp/emacs-lisp/comp.el (comp--get-function-cstr) (comp--function-pure-p, comp--intern-func-in-ctxt) (comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar) (comp--add-call-cstr, comp--compute-dominator-tree) (comp--dom-tree-walker, comp--ssa-rename) (comp--function-call-maybe-fold, comp--fwprop-call) (comp--call-optim-func): * lisp/emacs-lisp/edebug.el (edebug-global-prefix) (edebug-remove-instrumentation): * lisp/emacs-lisp/eieio.el (initialize-instance): * lisp/emacs-lisp/ert-x.el (ert-resource-directory): * lisp/emacs-lisp/ert.el (ert--expand-should-1) (ert-test-location, ert-write-junit-test-report) (ert-test--erts-test): * lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string) (icons--create): * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p): * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate--make-autoload) (loaddefs-generate--parse-file): * lisp/emacs-lisp/multisession.el (multisession-edit-mode--revert, multisession-edit-value): * lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data) (package-vc--version, package-vc--clone): * lisp/emacs-lisp/package.el (package--reload-previously-loaded): * lisp/emacs-lisp/pp.el (pp--insert-lisp): * lisp/emacs-lisp/subr-x.el (add-display-text-property): * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): * lisp/emacs-lisp/timer.el (run-at-time): * lisp/emacs-lisp/vtable.el (vtable-goto-table) (vtable-goto-column, vtable-update-object, vtable--insert-line) (vtable--compute-widths, vtable--make-keymap): * lisp/emacs-lisp/warnings.el (display-warning): * lisp/epa-file.el (epa-file-insert-file-contents): * lisp/epa.el (epa-show-key): * lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt) (PRIVMSG, erc--get-isupport-entry): * lisp/erc/erc-button.el (erc-button-add-nickname-buttons) (erc--button-next): * lisp/erc/erc-common.el (erc--find-group): * lisp/erc/erc-fill.el (erc-fill, erc-fill-static) (erc-fill--wrap-escape-hidden-speaker) (erc-fill--wrap-unmerge-on-date-stamp) (erc-fill--wrap-massage-initial-message-post-clear) (erc-fill-wrap, erc-fill--wrap-rejigger-region): * lisp/erc/erc-goodies.el (erc--scrolltobottom-all) (erc--keep-place-indicator-on-window-buffer-change) (keep-place-indicator, erc--keep-place-indicator-adjust-on-clear) (erc-keep-place-move, erc--command-indicator-display): * lisp/erc/erc-ibuffer.el (erc-members): * lisp/erc/erc-join.el (erc-join--remove-requested-channel) (erc-autojoin--join): * lisp/erc/erc-networks.el (erc-networks--id-qualifying-init-parts, erc-networks--id-reload) (erc-networks--id-ensure-comparable) (erc-networks--reclaim-orphaned-target-buffers) (erc-networks--server-select): * lisp/erc/erc-nicks.el (erc-nicks-invert) (erc-nicks--redirect-face-widget-link, erc-nicks--highlight) (erc-nicks--highlight-button) (erc-nicks--list-faces-help-button-action, erc-nicks-list-faces) (erc-nicks-refresh, erc-nicks--colors-from-faces) (erc-nicks--track-prioritize) (erc-nicks--remember-face-for-track): * lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next) (erc--querypoll-on-352, erc--querypoll-send): * lisp/erc/erc-sasl.el (erc-sasl--read-password): * lisp/erc/erc-services.el (erc-services-issue-ghost-and-retry-nick): * lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar) (erc-speedbar-toggle-nicknames-window-lock) (erc-speedbar--compose-nicks-face): * lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect) (erc-stamp-prefix-log-filter, erc--conceal-prompt) (erc--insert-timestamp-left, erc-insert-timestamp-right) (erc-stamp--defer-date-insertion-on-post-modify) (erc-insert-timestamp-left-and-right) (erc-stamp--redo-right-stamp-post-clear) (erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps): * lisp/erc/erc-status-sidebar.el (bufbar) (erc-status-sidebar-prefer-target-as-name) (erc-status-sidebar-default-allsort, erc-status-sidebar-click): * lisp/erc/erc-track.el (erc-track--shortened-names-get) (erc-track--setup, erc-track--select-mode-line-face) (erc-track-modified-channels, erc-track--collect-faces-in) (erc-track--switch-buffer, erc-track--replace-killed-buffer): * lisp/erc/erc-truncate.el (erc-truncate--setup) (erc-truncate-buffer): * lisp/erc/erc.el (erc--ensure-query-member) (erc--ensure-query-members, erc--remove-channel-users-but) (erc--cusr-change-status, erc--find-mode, erc--update-modules) (erc-log-irc-protocol, erc--refresh-prompt) (erc--restore-important-text-props) (erc--order-text-properties-from-hash, erc-send-input-line) (erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY) (erc-cmd-BANLIST, erc--speakerize-nick) (erc--format-speaker-input-message, erc-channel-receive-names) (erc-send-current-line, erc-format-target-and/or-network) (erc-kill-buffer-function, erc-restore-text-properties) (erc--get-eq-comparable-cmd): * lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which) (eshell-maybe-replace-by-alias): * lisp/eshell/em-glob.el (eshell-glob-convert): * lisp/eshell/em-pred.el (eshell-pred-user-or-group) (eshell-pred-file-time, eshell-pred-file-type) (eshell-pred-file-mode, eshell-pred-file-links) (eshell-pred-file-size): * lisp/eshell/em-prompt.el (eshell-forward-paragraph) (eshell-next-prompt): * lisp/eshell/esh-arg.el (eshell-resolve-current-argument): * lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which) (eshell-plain-command--which, eshell-plain-command): * lisp/eshell/esh-io.el (eshell-duplicate-handles) (eshell-protect-handles, eshell-get-target, eshell-close-target): * lisp/eshell/esh-proc.el (eshell-sentinel): * lisp/eshell/esh-var.el (eshell-parse-variable-ref) (eshell-get-variable, eshell-set-variable): * lisp/faces.el (face-at-point): * lisp/ffap.el (ffap-in-project): * lisp/filenotify.el (file-notify--rm-descriptor): * lisp/files-x.el (read-dir-locals-file) (connection-local-update-profile-variables) (connection-local-value): * lisp/files.el (file-remote-p, abbreviate-file-name) (set-auto-mode, hack-local-variables) (revert-buffer-restore-read-only): * lisp/find-dired.el (find-dired-sort-by-filename): * lisp/font-lock.el (font-lock--filter-keywords): * lisp/gnus/gnus-art.el (article-emojize-symbols): * lisp/gnus/gnus-int.el (gnus-close-server): * lisp/gnus/gnus-search.el (gnus-search-transform) (gnus-search-indexed-parse-output, gnus-search-server-to-engine): * lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url): * lisp/gnus/gnus.el (gnus-check-backend-function): * lisp/gnus/message.el (message-send-mail): * lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers): * lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article) (nnatom--read-article-or-group-authors, nnatom--read-publish) (nnatom--read-update, nnatom--read-links): * lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server) (nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article) (nnfeed-retrieve-headers, nnfeed--print-part) (nnfeed-request-article, nnfeed-request-group) (nnfeed-request-list, nnfeed--group-description) (nnfeed-request-group-description) (nnfeed-request-list-newsgroups, nnfeed-request-rename-group): * lisp/gnus/nnmh.el (nnmh-update-gnus-unreads): * lisp/help-fns.el (help-find-source) (help-fns--insert-menu-bindings, help-fns--mention-first-release) (help-fns--mention-shortdoc-groups) (help-fns--customize-variable-version) (help-fns--face-custom-version-info, describe-mode): * lisp/help-mode.el (help-make-xrefs): * lisp/help.el (help-key-description, help--describe-command): * lisp/hfy-cmap.el (htmlfontify-load-rgb-file): * lisp/ibuf-ext.el (ibuffer-jump-to-filter-group) (ibuffer-kill-filter-group, ibuffer-kill-line) (ibuffer-save-filter-groups, ibuffer-save-filters, filename) (basename, file-extension, ibuffer-diff-buffer-with-file-1) (ibuffer-mark-by-file-name-regexp) (ibuffer-mark-by-content-regexp): * lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen): * lisp/ibuffer.el (ibuffer-mouse-toggle-mark) (ibuffer-toggle-marks, ibuffer-mark-interactive) (ibuffer-compile-format, process, ibuffer-map-lines): * lisp/image.el (image--compute-map) (image--compute-original-map): * lisp/image/exif.el (exif-parse-buffer): * lisp/image/image-converter.el (image-convert-p, image-convert) (image-converter--find-converter): * lisp/image/image-dired-util.el (image-dired-file-name-at-point): * lisp/image/image-dired.el (image-dired-track-original-file) (image-dired--on-file-in-dired-buffer) (image-dired--with-thumbnail-buffer) (image-dired-jump-original-dired-buffer) (image-dired--slideshow-step, image-dired-display-image): * lisp/image/wallpaper.el (wallpaper--init-action-kill) (wallpaper--find-setter, wallpaper--find-command) (wallpaper--find-command-args, wallpaper--x-monitor-name): * lisp/info-look.el (info-lookup-interactive-arguments) (info-complete)::(:mode): * lisp/info.el (info-pop-to-buffer, Info-read-node-name-1): * lisp/international/emoji.el (emoji--adjust-displayable-1) (emoji--add-recent): * lisp/jsonrpc.el (jsonrpc--call-deferred) (jsonrpc--process-sentinel, jsonrpc--remove): * lisp/keymap.el (keymap-local-lookup): * lisp/mail/emacsbug.el (report-emacs-bug-hook) (submit-emacs-patch): * lisp/mail/ietf-drums.el (ietf-drums-parse-addresses): * lisp/mail/mailclient.el (mailclient-send-it): * lisp/mail/rfc6068.el (rfc6068-parse-mailto-url): * lisp/mail/undigest.el (rmail-digest-parse-mixed-mime): * lisp/minibuffer.el (completion-metadata-get) (completions--after-change) (minibuffer-visible-completions--filter): * lisp/net/browse-url.el (browse-url-url-at-point) (browse-url-file-url, browse-url-emacs): * lisp/net/dbus.el (dbus-byte-array-to-string) (dbus-monitor-goto-serial): * lisp/net/dictionary.el (dictionary-search): * lisp/net/eww.el (eww--download-directory) (eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit) (eww-follow-link, eww-read-alternate-url) (eww-copy-alternate-url): * lisp/net/goto-addr.el (goto-address-at-point): * lisp/net/mailcap.el (mailcap-mime-info): * lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string) (rcirc-kill-buffer-hook, rcirc-print, rcirc-when) (rcirc-color-attributes, rcirc-handler-NICK) (rcirc-handler-TAGMSG, rcirc-handler-BATCH): * lisp/net/shr.el (shr-descend, shr-adaptive-fill-function) (shr-correct-dom-case, shr-tag-a): * lisp/net/sieve.el (sieve-manage-quit): * lisp/outline.el (outline-cycle-buffer): * lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate): * lisp/proced.el (proced-auto-update-timer): * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc): * lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph): * lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset) (c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun): * lisp/progmodes/compile.el (compilation-error-properties) (compilation-find-file-1): * lisp/progmodes/eglot.el (eglot--check-object) (eglot--read-server, eglot-upgrade-eglot) (eglot-handle-notification, eglot--CompletionParams) (eglot-completion-at-point, eglot--sig-info) (eglot-register-capability): * lisp/progmodes/elisp-mode.el (emacs-lisp-native-compile-and-load) (elisp-eldoc-var-docstring-with-value): * lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test): * lisp/progmodes/flymake.el (flymake--update-eol-overlays) (flymake-eldoc-function): * lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom) (gdb-frame-handler): * lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring) (go-ts-mode--comment-on-previous-line-p) (go-ts-mode--get-test-regexp-at-point) (go-ts-mode-test-this-file): * lisp/progmodes/grep.el (lgrep, rgrep-default-command) (grep-file-at-point): * lisp/progmodes/perl-mode.el (perl--end-of-format-p): * lisp/progmodes/php-ts-mode.el (php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun): * lisp/progmodes/project.el (project--other-place-command) (project--find-default-from, project--transplant-file-name) (project-prefixed-buffer-name, project--remove-from-project-list) (project-prompt-project-name, project-remember-projects-under) (project--switch-project-command) (project-uniquify-dirname-transform, project-mode-line-format): * lisp/progmodes/python.el (python-font-lock-keywords-maximum-decoration) (python--treesit-fontify-union-types) (python-shell-get-process-name, python-shell-restart) (python-shell-completion-at-point, python-ffap-module-path) (python-util-comint-end-of-output-p, python--import-sources) (python-add-import, python-remove-import, python-fix-imports): * lisp/progmodes/xref.el (xref--add-log-current-defun): * lisp/repeat.el (repeat-echo-message-string): * lisp/saveplace.el (save-place-dired-hook): * lisp/server.el (server-save-buffers-kill-terminal): * lisp/shadowfile.el (shadow-make-fullname) (shadow-contract-file-name, shadow-define-literal-group): * lisp/shell.el (shell-highlight-undef-mode): * lisp/simple.el (command-completion-using-modes-p) (command-execute, file-user-uid, file-group-gid) (first-completion, last-completion, switch-to-completions): * lisp/startup.el (startup--load-user-init-file): * lisp/tab-line.el (tab-line-tabs-buffer-group-by-project): * lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer): * lisp/term/android-win.el (android-encode-select-string) (gui-backend-set-selection): * lisp/term/haiku-win.el (haiku-dnd-convert-string) (haiku-select-encode-xstring, haiku-select-encode-utf-8-string): * lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize): * lisp/textmodes/ispell.el (ispell-completion-at-point): * lisp/textmodes/sgml-mode.el (sgml-validate) (html-mode--complete-at-point): * lisp/textmodes/tex-mode.el (tex-recenter-output-buffer) (xref-backend-references): * lisp/thingatpt.el (thing-at-point-file-at-point) (thing-at-point-face-at-point): * lisp/thread.el (thread-list--get-status): * lisp/time.el (world-clock-copy-time-as-kill, world-clock): * lisp/touch-screen.el (touch-screen-handle-touch): * lisp/treesit.el (treesit-language-at, treesit-node-at) (treesit-node-on, treesit-buffer-root-node) (treesit-node-field-name, treesit-local-parsers-at) (treesit-local-parsers-on, treesit--cleanup-local-range-overlays) (treesit-font-lock-recompute-features) (treesit-font-lock-fontify-region, treesit-transpose-sexps) (treesit-add-log-current-defun, treesit-major-mode-setup) (treesit--explorer-refresh, treesit-install-language-grammar): * lisp/url/url.el (url-retrieve-synchronously): * lisp/vc/smerge-mode.el (smerge-diff): * lisp/vc/vc-dir.el (vc-dir): * lisp/vc/vc-dispatcher.el (vc-do-async-command): * lisp/vc/vc-git.el (vc-git-dir--branch-headers) (vc-git-dir--stash-headers, vc-git--log-edit-summary-check) (vc-git-stash-list): * lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset) (vc-clone): * lisp/visual-wrap.el (visual-wrap--apply-to-line): * lisp/wid-edit.el (widget-text) (widget-editable-list-insert-before): * lisp/window-tool-bar.el (window-tool-bar--keymap-entry-to-string): * lisp/window.el (display-buffer, display-buffer-full-frame) (window-point-context-set, window-point-context-use) (window-point-context-use-default-function): * lisp/xdg.el (xdg-current-desktop): * lisp/xwidget.el (xwidget-webkit-callback): * lisp/yank-media.el (yank-media--get-selection) (yank-media-types): * test/lisp/comint-tests.el (comint-tests/test-password-function): * test/lisp/completion-preview-tests.el (completion-preview-tests--capf): * test/lisp/cus-edit-tests.el (with-cus-edit-test): * test/lisp/erc/erc-scenarios-base-local-modules.el (-phony-sblm-): * test/lisp/erc/erc-scenarios-stamp.el (erc-scenarios-stamp--on-post-modify): * test/lisp/erc/erc-services-tests.el (erc-services-tests--asp-parse-entry): * test/lisp/erc/erc-tests.el (erc-modules--internal-property) (erc--find-mode, erc-tests--update-modules): * test/lisp/erc/resources/erc-d/erc-d-i.el (erc-d-i--parse-message): * test/lisp/erc/resources/erc-d/erc-d-t.el (erc-d-t-kill-related-buffers, erc-d-t-with-cleanup): * test/lisp/erc/resources/erc-d/erc-d-tests.el (erc-d-i--parse-message--irc-parser-tests): * test/lisp/erc/resources/erc-d/erc-d-u.el (erc-d-u--read-exchange-slowly): * test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire) (erc-d--finalize-done, erc-d--command-handle-all): * test/lisp/erc/resources/erc-scenarios-common.el (erc-scenarios-common-with-cleanup): * test/lisp/erc/resources/erc-tests-common.el (erc-tests--common-display-message) (erc-tests-common-create-subprocess): * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): * test/lisp/international/mule-tests.el (mule-cmds-tests--ucs-names-missing-names): * test/lisp/progmodes/python-tests.el (python-tests-get-shell-interpreter) (python-tests--get-interpreter-info): * test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-resource-file): * test/lisp/replace-tests.el (replace-tests-with-undo): * test/src/emacs-tests.el (emacs-tests--seccomp-debug): * test/src/process-tests.el (process-tests--emacs-command) (process-tests--emacs-binary, process-tests--dump-file): * test/src/treesit-tests.el (treesit--ert-test-defun-navigation): Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
(if-let* ((target (buffer-local-value 'erc--target buffer)))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(cond ((and erc-status-sidebar--trimpat (erc--target-channel-p target))
(string-trim-left (erc--target-string target)
erc-status-sidebar--trimpat))
((and erc-status-sidebar--prechan (erc--target-channel-p target))
(concat erc-status-sidebar--prechan
(erc--target-string target)))
(t (erc--target-string target)))
(buffer-name buffer)))
;; This could be converted into an option if people want.
(defvar erc-status-sidebar--show-disconnected t)
(defun erc-status-sidebar-all-target-buffers (process)
(erc-buffer-filter (lambda ()
(and erc--target
(or erc-status-sidebar--show-disconnected
(erc-server-process-alive))))
process))
;; FIXME profile this. Rebuilding the graph every time track updates
;; seems wasteful for occasions where server messages are processed
;; unthrottled, such as during history playback. If it's a problem,
;; we should look into rewriting this using `ewoc' or some other
;; solution that maintains a persistent model.
(defun erc-status-sidebar-default-allsort (target-buffers)
"Return a list of servers interspersed with their targets."
(mapcan (pcase-lambda (`(,proc . ,chans))
(cons (process-buffer proc)
(let ((erc-status-sidebar--trimpat
(and (eq erc-status-sidebar-style 'all-mixed)
(with-current-buffer (process-buffer proc)
Mark if-let and when-let obsolete * lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark if-let and when-let obsolete (bug#73853 and elsewhere). Move docstring text around so that if-let* and when-let* descriptions no longer refer to if-let and when-let. * etc/NEWS: Announce the change. * admin/admin.el (reminder-for-release-blocking-bugs): * doc/misc/erc.texi (display-buffer): * lisp/ansi-color.el (ansi-color-apply) (ansi-color--face-vec-face): * lisp/ansi-osc.el (ansi-osc-apply-on-region) (ansi-osc-hyperlink): * lisp/arc-mode.el (archive-goto-file) (archive-next-file-displayer): * lisp/auth-source-pass.el (auth-source-pass-search) (auth-source-pass--parse-data) (auth-source-pass--find-match-many): * lisp/autorevert.el (auto-revert-notify-rm-watch): * lisp/buff-menu.el (Buffer-menu-unmark-all-buffers) (Buffer-menu-group-by-root): * lisp/calendar/parse-time.el (parse-iso8601-time-string): * lisp/cedet/pulse.el (pulse-tick): * lisp/comint.el (comint--fontify-input-ppss-flush-indirect) (comint--intersect-regions): * lisp/completion-preview.el (completion-preview--try-table) (completion-preview--capf-wrapper, completion-preview--update): * lisp/cus-edit.el (setopt--set) (custom-dirlocals-maybe-update-cons, custom-dirlocals-validate): * lisp/custom.el (load-theme): * lisp/descr-text.el (describe-char): * lisp/desktop.el (desktop--emacs-pid-running-p): * lisp/dired-x.el (menu): * lisp/dired.el (dired-font-lock-keywords) (dired-insert-directory, dired--insert-disk-space, dired-mode): * lisp/dnd.el (dnd-handle-multiple-urls): * lisp/dom.el (dom-remove-attribute): * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): * lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare): * lisp/emacs-lisp/comp-common.el (comp-function-type-spec): * lisp/emacs-lisp/comp-cstr.el (comp--all-classes) (comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem) (comp-cstr-intersection-no-mem, comp-cstr-fixnum-p) (comp-cstr-type-p): * lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install) (native--compile-async): * lisp/emacs-lisp/comp.el (comp--get-function-cstr) (comp--function-pure-p, comp--intern-func-in-ctxt) (comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar) (comp--add-call-cstr, comp--compute-dominator-tree) (comp--dom-tree-walker, comp--ssa-rename) (comp--function-call-maybe-fold, comp--fwprop-call) (comp--call-optim-func): * lisp/emacs-lisp/edebug.el (edebug-global-prefix) (edebug-remove-instrumentation): * lisp/emacs-lisp/eieio.el (initialize-instance): * lisp/emacs-lisp/ert-x.el (ert-resource-directory): * lisp/emacs-lisp/ert.el (ert--expand-should-1) (ert-test-location, ert-write-junit-test-report) (ert-test--erts-test): * lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string) (icons--create): * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p): * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate--make-autoload) (loaddefs-generate--parse-file): * lisp/emacs-lisp/multisession.el (multisession-edit-mode--revert, multisession-edit-value): * lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data) (package-vc--version, package-vc--clone): * lisp/emacs-lisp/package.el (package--reload-previously-loaded): * lisp/emacs-lisp/pp.el (pp--insert-lisp): * lisp/emacs-lisp/subr-x.el (add-display-text-property): * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): * lisp/emacs-lisp/timer.el (run-at-time): * lisp/emacs-lisp/vtable.el (vtable-goto-table) (vtable-goto-column, vtable-update-object, vtable--insert-line) (vtable--compute-widths, vtable--make-keymap): * lisp/emacs-lisp/warnings.el (display-warning): * lisp/epa-file.el (epa-file-insert-file-contents): * lisp/epa.el (epa-show-key): * lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt) (PRIVMSG, erc--get-isupport-entry): * lisp/erc/erc-button.el (erc-button-add-nickname-buttons) (erc--button-next): * lisp/erc/erc-common.el (erc--find-group): * lisp/erc/erc-fill.el (erc-fill, erc-fill-static) (erc-fill--wrap-escape-hidden-speaker) (erc-fill--wrap-unmerge-on-date-stamp) (erc-fill--wrap-massage-initial-message-post-clear) (erc-fill-wrap, erc-fill--wrap-rejigger-region): * lisp/erc/erc-goodies.el (erc--scrolltobottom-all) (erc--keep-place-indicator-on-window-buffer-change) (keep-place-indicator, erc--keep-place-indicator-adjust-on-clear) (erc-keep-place-move, erc--command-indicator-display): * lisp/erc/erc-ibuffer.el (erc-members): * lisp/erc/erc-join.el (erc-join--remove-requested-channel) (erc-autojoin--join): * lisp/erc/erc-networks.el (erc-networks--id-qualifying-init-parts, erc-networks--id-reload) (erc-networks--id-ensure-comparable) (erc-networks--reclaim-orphaned-target-buffers) (erc-networks--server-select): * lisp/erc/erc-nicks.el (erc-nicks-invert) (erc-nicks--redirect-face-widget-link, erc-nicks--highlight) (erc-nicks--highlight-button) (erc-nicks--list-faces-help-button-action, erc-nicks-list-faces) (erc-nicks-refresh, erc-nicks--colors-from-faces) (erc-nicks--track-prioritize) (erc-nicks--remember-face-for-track): * lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next) (erc--querypoll-on-352, erc--querypoll-send): * lisp/erc/erc-sasl.el (erc-sasl--read-password): * lisp/erc/erc-services.el (erc-services-issue-ghost-and-retry-nick): * lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar) (erc-speedbar-toggle-nicknames-window-lock) (erc-speedbar--compose-nicks-face): * lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect) (erc-stamp-prefix-log-filter, erc--conceal-prompt) (erc--insert-timestamp-left, erc-insert-timestamp-right) (erc-stamp--defer-date-insertion-on-post-modify) (erc-insert-timestamp-left-and-right) (erc-stamp--redo-right-stamp-post-clear) (erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps): * lisp/erc/erc-status-sidebar.el (bufbar) (erc-status-sidebar-prefer-target-as-name) (erc-status-sidebar-default-allsort, erc-status-sidebar-click): * lisp/erc/erc-track.el (erc-track--shortened-names-get) (erc-track--setup, erc-track--select-mode-line-face) (erc-track-modified-channels, erc-track--collect-faces-in) (erc-track--switch-buffer, erc-track--replace-killed-buffer): * lisp/erc/erc-truncate.el (erc-truncate--setup) (erc-truncate-buffer): * lisp/erc/erc.el (erc--ensure-query-member) (erc--ensure-query-members, erc--remove-channel-users-but) (erc--cusr-change-status, erc--find-mode, erc--update-modules) (erc-log-irc-protocol, erc--refresh-prompt) (erc--restore-important-text-props) (erc--order-text-properties-from-hash, erc-send-input-line) (erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY) (erc-cmd-BANLIST, erc--speakerize-nick) (erc--format-speaker-input-message, erc-channel-receive-names) (erc-send-current-line, erc-format-target-and/or-network) (erc-kill-buffer-function, erc-restore-text-properties) (erc--get-eq-comparable-cmd): * lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which) (eshell-maybe-replace-by-alias): * lisp/eshell/em-glob.el (eshell-glob-convert): * lisp/eshell/em-pred.el (eshell-pred-user-or-group) (eshell-pred-file-time, eshell-pred-file-type) (eshell-pred-file-mode, eshell-pred-file-links) (eshell-pred-file-size): * lisp/eshell/em-prompt.el (eshell-forward-paragraph) (eshell-next-prompt): * lisp/eshell/esh-arg.el (eshell-resolve-current-argument): * lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which) (eshell-plain-command--which, eshell-plain-command): * lisp/eshell/esh-io.el (eshell-duplicate-handles) (eshell-protect-handles, eshell-get-target, eshell-close-target): * lisp/eshell/esh-proc.el (eshell-sentinel): * lisp/eshell/esh-var.el (eshell-parse-variable-ref) (eshell-get-variable, eshell-set-variable): * lisp/faces.el (face-at-point): * lisp/ffap.el (ffap-in-project): * lisp/filenotify.el (file-notify--rm-descriptor): * lisp/files-x.el (read-dir-locals-file) (connection-local-update-profile-variables) (connection-local-value): * lisp/files.el (file-remote-p, abbreviate-file-name) (set-auto-mode, hack-local-variables) (revert-buffer-restore-read-only): * lisp/find-dired.el (find-dired-sort-by-filename): * lisp/font-lock.el (font-lock--filter-keywords): * lisp/gnus/gnus-art.el (article-emojize-symbols): * lisp/gnus/gnus-int.el (gnus-close-server): * lisp/gnus/gnus-search.el (gnus-search-transform) (gnus-search-indexed-parse-output, gnus-search-server-to-engine): * lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url): * lisp/gnus/gnus.el (gnus-check-backend-function): * lisp/gnus/message.el (message-send-mail): * lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers): * lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article) (nnatom--read-article-or-group-authors, nnatom--read-publish) (nnatom--read-update, nnatom--read-links): * lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server) (nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article) (nnfeed-retrieve-headers, nnfeed--print-part) (nnfeed-request-article, nnfeed-request-group) (nnfeed-request-list, nnfeed--group-description) (nnfeed-request-group-description) (nnfeed-request-list-newsgroups, nnfeed-request-rename-group): * lisp/gnus/nnmh.el (nnmh-update-gnus-unreads): * lisp/help-fns.el (help-find-source) (help-fns--insert-menu-bindings, help-fns--mention-first-release) (help-fns--mention-shortdoc-groups) (help-fns--customize-variable-version) (help-fns--face-custom-version-info, describe-mode): * lisp/help-mode.el (help-make-xrefs): * lisp/help.el (help-key-description, help--describe-command): * lisp/hfy-cmap.el (htmlfontify-load-rgb-file): * lisp/ibuf-ext.el (ibuffer-jump-to-filter-group) (ibuffer-kill-filter-group, ibuffer-kill-line) (ibuffer-save-filter-groups, ibuffer-save-filters, filename) (basename, file-extension, ibuffer-diff-buffer-with-file-1) (ibuffer-mark-by-file-name-regexp) (ibuffer-mark-by-content-regexp): * lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen): * lisp/ibuffer.el (ibuffer-mouse-toggle-mark) (ibuffer-toggle-marks, ibuffer-mark-interactive) (ibuffer-compile-format, process, ibuffer-map-lines): * lisp/image.el (image--compute-map) (image--compute-original-map): * lisp/image/exif.el (exif-parse-buffer): * lisp/image/image-converter.el (image-convert-p, image-convert) (image-converter--find-converter): * lisp/image/image-dired-util.el (image-dired-file-name-at-point): * lisp/image/image-dired.el (image-dired-track-original-file) (image-dired--on-file-in-dired-buffer) (image-dired--with-thumbnail-buffer) (image-dired-jump-original-dired-buffer) (image-dired--slideshow-step, image-dired-display-image): * lisp/image/wallpaper.el (wallpaper--init-action-kill) (wallpaper--find-setter, wallpaper--find-command) (wallpaper--find-command-args, wallpaper--x-monitor-name): * lisp/info-look.el (info-lookup-interactive-arguments) (info-complete)::(:mode): * lisp/info.el (info-pop-to-buffer, Info-read-node-name-1): * lisp/international/emoji.el (emoji--adjust-displayable-1) (emoji--add-recent): * lisp/jsonrpc.el (jsonrpc--call-deferred) (jsonrpc--process-sentinel, jsonrpc--remove): * lisp/keymap.el (keymap-local-lookup): * lisp/mail/emacsbug.el (report-emacs-bug-hook) (submit-emacs-patch): * lisp/mail/ietf-drums.el (ietf-drums-parse-addresses): * lisp/mail/mailclient.el (mailclient-send-it): * lisp/mail/rfc6068.el (rfc6068-parse-mailto-url): * lisp/mail/undigest.el (rmail-digest-parse-mixed-mime): * lisp/minibuffer.el (completion-metadata-get) (completions--after-change) (minibuffer-visible-completions--filter): * lisp/net/browse-url.el (browse-url-url-at-point) (browse-url-file-url, browse-url-emacs): * lisp/net/dbus.el (dbus-byte-array-to-string) (dbus-monitor-goto-serial): * lisp/net/dictionary.el (dictionary-search): * lisp/net/eww.el (eww--download-directory) (eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit) (eww-follow-link, eww-read-alternate-url) (eww-copy-alternate-url): * lisp/net/goto-addr.el (goto-address-at-point): * lisp/net/mailcap.el (mailcap-mime-info): * lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string) (rcirc-kill-buffer-hook, rcirc-print, rcirc-when) (rcirc-color-attributes, rcirc-handler-NICK) (rcirc-handler-TAGMSG, rcirc-handler-BATCH): * lisp/net/shr.el (shr-descend, shr-adaptive-fill-function) (shr-correct-dom-case, shr-tag-a): * lisp/net/sieve.el (sieve-manage-quit): * lisp/outline.el (outline-cycle-buffer): * lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate): * lisp/proced.el (proced-auto-update-timer): * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc): * lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph): * lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset) (c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun): * lisp/progmodes/compile.el (compilation-error-properties) (compilation-find-file-1): * lisp/progmodes/eglot.el (eglot--check-object) (eglot--read-server, eglot-upgrade-eglot) (eglot-handle-notification, eglot--CompletionParams) (eglot-completion-at-point, eglot--sig-info) (eglot-register-capability): * lisp/progmodes/elisp-mode.el (emacs-lisp-native-compile-and-load) (elisp-eldoc-var-docstring-with-value): * lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test): * lisp/progmodes/flymake.el (flymake--update-eol-overlays) (flymake-eldoc-function): * lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom) (gdb-frame-handler): * lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring) (go-ts-mode--comment-on-previous-line-p) (go-ts-mode--get-test-regexp-at-point) (go-ts-mode-test-this-file): * lisp/progmodes/grep.el (lgrep, rgrep-default-command) (grep-file-at-point): * lisp/progmodes/perl-mode.el (perl--end-of-format-p): * lisp/progmodes/php-ts-mode.el (php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun): * lisp/progmodes/project.el (project--other-place-command) (project--find-default-from, project--transplant-file-name) (project-prefixed-buffer-name, project--remove-from-project-list) (project-prompt-project-name, project-remember-projects-under) (project--switch-project-command) (project-uniquify-dirname-transform, project-mode-line-format): * lisp/progmodes/python.el (python-font-lock-keywords-maximum-decoration) (python--treesit-fontify-union-types) (python-shell-get-process-name, python-shell-restart) (python-shell-completion-at-point, python-ffap-module-path) (python-util-comint-end-of-output-p, python--import-sources) (python-add-import, python-remove-import, python-fix-imports): * lisp/progmodes/xref.el (xref--add-log-current-defun): * lisp/repeat.el (repeat-echo-message-string): * lisp/saveplace.el (save-place-dired-hook): * lisp/server.el (server-save-buffers-kill-terminal): * lisp/shadowfile.el (shadow-make-fullname) (shadow-contract-file-name, shadow-define-literal-group): * lisp/shell.el (shell-highlight-undef-mode): * lisp/simple.el (command-completion-using-modes-p) (command-execute, file-user-uid, file-group-gid) (first-completion, last-completion, switch-to-completions): * lisp/startup.el (startup--load-user-init-file): * lisp/tab-line.el (tab-line-tabs-buffer-group-by-project): * lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer): * lisp/term/android-win.el (android-encode-select-string) (gui-backend-set-selection): * lisp/term/haiku-win.el (haiku-dnd-convert-string) (haiku-select-encode-xstring, haiku-select-encode-utf-8-string): * lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize): * lisp/textmodes/ispell.el (ispell-completion-at-point): * lisp/textmodes/sgml-mode.el (sgml-validate) (html-mode--complete-at-point): * lisp/textmodes/tex-mode.el (tex-recenter-output-buffer) (xref-backend-references): * lisp/thingatpt.el (thing-at-point-file-at-point) (thing-at-point-face-at-point): * lisp/thread.el (thread-list--get-status): * lisp/time.el (world-clock-copy-time-as-kill, world-clock): * lisp/touch-screen.el (touch-screen-handle-touch): * lisp/treesit.el (treesit-language-at, treesit-node-at) (treesit-node-on, treesit-buffer-root-node) (treesit-node-field-name, treesit-local-parsers-at) (treesit-local-parsers-on, treesit--cleanup-local-range-overlays) (treesit-font-lock-recompute-features) (treesit-font-lock-fontify-region, treesit-transpose-sexps) (treesit-add-log-current-defun, treesit-major-mode-setup) (treesit--explorer-refresh, treesit-install-language-grammar): * lisp/url/url.el (url-retrieve-synchronously): * lisp/vc/smerge-mode.el (smerge-diff): * lisp/vc/vc-dir.el (vc-dir): * lisp/vc/vc-dispatcher.el (vc-do-async-command): * lisp/vc/vc-git.el (vc-git-dir--branch-headers) (vc-git-dir--stash-headers, vc-git--log-edit-summary-check) (vc-git-stash-list): * lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset) (vc-clone): * lisp/visual-wrap.el (visual-wrap--apply-to-line): * lisp/wid-edit.el (widget-text) (widget-editable-list-insert-before): * lisp/window-tool-bar.el (window-tool-bar--keymap-entry-to-string): * lisp/window.el (display-buffer, display-buffer-full-frame) (window-point-context-set, window-point-context-use) (window-point-context-use-default-function): * lisp/xdg.el (xdg-current-desktop): * lisp/xwidget.el (xwidget-webkit-callback): * lisp/yank-media.el (yank-media--get-selection) (yank-media-types): * test/lisp/comint-tests.el (comint-tests/test-password-function): * test/lisp/completion-preview-tests.el (completion-preview-tests--capf): * test/lisp/cus-edit-tests.el (with-cus-edit-test): * test/lisp/erc/erc-scenarios-base-local-modules.el (-phony-sblm-): * test/lisp/erc/erc-scenarios-stamp.el (erc-scenarios-stamp--on-post-modify): * test/lisp/erc/erc-services-tests.el (erc-services-tests--asp-parse-entry): * test/lisp/erc/erc-tests.el (erc-modules--internal-property) (erc--find-mode, erc-tests--update-modules): * test/lisp/erc/resources/erc-d/erc-d-i.el (erc-d-i--parse-message): * test/lisp/erc/resources/erc-d/erc-d-t.el (erc-d-t-kill-related-buffers, erc-d-t-with-cleanup): * test/lisp/erc/resources/erc-d/erc-d-tests.el (erc-d-i--parse-message--irc-parser-tests): * test/lisp/erc/resources/erc-d/erc-d-u.el (erc-d-u--read-exchange-slowly): * test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire) (erc-d--finalize-done, erc-d--command-handle-all): * test/lisp/erc/resources/erc-scenarios-common.el (erc-scenarios-common-with-cleanup): * test/lisp/erc/resources/erc-tests-common.el (erc-tests--common-display-message) (erc-tests-common-create-subprocess): * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): * test/lisp/international/mule-tests.el (mule-cmds-tests--ucs-names-missing-names): * test/lisp/progmodes/python-tests.el (python-tests-get-shell-interpreter) (python-tests--get-interpreter-info): * test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-resource-file): * test/lisp/replace-tests.el (replace-tests-with-undo): * test/src/emacs-tests.el (emacs-tests--seccomp-debug): * test/src/process-tests.el (process-tests--emacs-command) (process-tests--emacs-binary, process-tests--dump-file): * test/src/treesit-tests.el (treesit--ert-test-defun-navigation): Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
(when-let* ((ch-pfxs (erc--get-isupport-entry
'CHANTYPES 'single)))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(regexp-quote ch-pfxs)))))
(erc-status-sidebar--prechan
(and (eq erc-status-sidebar-style
'all-queries-first)
"\C-?")))
(sort chans
(lambda (x y)
(string<
(erc-status-sidebar-prefer-target-as-name x)
(erc-status-sidebar-prefer-target-as-name y)))))))
(sort (seq-group-by (lambda (b)
(buffer-local-value 'erc-server-process b))
target-buffers)
(lambda (a b)
(string< (buffer-name (process-buffer (car a)))
(buffer-name (process-buffer (car b))))))))
(defvar-local erc-status-sidebar--active-marker nil
"Marker indicating currently active buffer.")
(defun erc-status-sidebar--set-active-line (erc-buffer)
(when (and erc-status-sidebar-highlight-active-buffer
(eq (window-buffer (and (minibuffer-window-active-p
(selected-window))
(minibuffer-selected-window)))
erc-buffer))
(set-marker erc-status-sidebar--active-marker (point))))
(defun erc-status-sidebar-default-insert (channame chanbuf _chanlist)
"Insert CHANNAME followed by a newline.
Maybe arrange to highlight line if CHANBUF is showing in the
focused window."
(erc-status-sidebar--set-active-line chanbuf)
(insert channame "\n"))
(defun erc-status-sidebar-pad-hierarchy (bufname buffer buflist)
"Prefix BUFNAME to emphasize BUFFER's role in BUFLIST."
(if (and (buffer-live-p buffer) (buffer-local-value 'erc--target buffer))
(insert " ")
(unless (eq buffer (car buflist))
(insert "\n"))) ; ^L
(when bufname
(erc-status-sidebar--set-active-line buffer))
(insert (or bufname
(and-let* (((not (buffer-live-p buffer)))
(next (cadr (member buffer buflist)))
((buffer-live-p next))
(proc (buffer-local-value 'erc-server-process next))
(id (process-get proc 'erc-networks--id))
((erc-networks--id-string id))))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
"???")
"\n"))
(defun erc-status-sidebar-default-chan-format (channame
&optional num-messages erc-face)
"Format CHANNAME for display in the sidebar.
If NUM-MESSAGES is non-nil, append it to the channel name. If
ERC-FACE is non-nil, apply it to channel name. If it is equal to
`erc-default-face', also apply bold property to make the channel
name stand out."
(when num-messages
(setq channame (format "%s [%d]" channame num-messages)))
(when erc-face
(put-text-property 0 (length channame) 'face erc-face channame)
(when (eq erc-face 'erc-default-face)
(add-face-text-property 0 (length channame) 'bold t channame)))
channame)
(defun erc-status-sidebar-refresh ()
"Update the content of the sidebar."
(interactive)
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(pcase-let* ((`(,list-fn ,sort-fn ,name-fn ,fmt-fn ,insert-fn)
(pcase erc-status-sidebar-style
('channels-only (list #'erc-channel-list
erc-status-sidebar-channel-sort
#'erc-status-sidebar-get-channame
erc-status-sidebar-channel-format
#'erc-status-sidebar-default-insert))
((or 'all-mixed 'all-queries-first 'all-channels-first)
'(erc-status-sidebar-all-target-buffers
erc-status-sidebar-default-allsort
erc-status-sidebar-prefer-target-as-name
erc-status-sidebar-default-chan-format
erc-status-sidebar-pad-hierarchy))
(v v)))
(chanlist (apply sort-fn (funcall list-fn nil) nil))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(windows nil))
(with-current-buffer (erc-status-sidebar-get-buffer)
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(dolist (window (get-buffer-window-list nil nil t))
(push (cons window (window-start window)) windows))
(erc-status-sidebar-writable
(delete-region (point-min) (point-max))
(goto-char (point-min))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(if erc-status-sidebar--active-marker
(set-marker erc-status-sidebar--active-marker nil)
(setq erc-status-sidebar--active-marker (make-marker)))
(dolist (chanbuf chanlist)
(let* ((tup (seq-find (lambda (tup) (eq (car tup) chanbuf))
erc-modified-channels-alist))
(count (if tup (cadr tup)))
(face (if tup (cddr tup)))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(face (if (or (not (buffer-live-p chanbuf))
(not (erc-server-process-alive chanbuf)))
`(shadow ,face)
face))
(channame (apply fmt-fn
(copy-sequence (funcall name-fn chanbuf))
count face nil))
(cnlen (length channame)))
(put-text-property 0 cnlen 'erc-buf chanbuf channame)
(put-text-property 0 cnlen 'mouse-face 'highlight channame)
(put-text-property
0 cnlen 'help-echo
"mouse-1: switch to buffer in other window" channame)
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(funcall insert-fn channame chanbuf chanlist)))
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(when windows
(map-apply #'set-window-start windows))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(when (and erc-status-sidebar-highlight-active-buffer
(marker-buffer erc-status-sidebar--active-marker))
(goto-char erc-status-sidebar--active-marker)
(require 'hl-line)
(unless hl-line-mode (hl-line-mode +1))
(hl-line-highlight))))))
(defun erc-status-sidebar-kill ()
"Close the ERC status sidebar and its buffer."
(interactive)
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(when (and erc-bufbar-mode (not erc--module-toggle-prefix-arg))
(erc-bufbar-mode -1))
(ignore-errors (kill-buffer erc-status-sidebar-buffer-name)))
(defun erc-status-sidebar-click (event)
"Handle click EVENT in `erc-status-sidebar-mode-map'."
(interactive "e")
(save-excursion
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(let ((window (posn-window (event-start event)))
(pos (posn-point (event-end event))))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
;; Current buffer is "ERC Status" and its window is selected
(cl-assert (eq major-mode 'erc-status-sidebar-mode))
(cl-assert (eq (selected-window) window))
(cl-assert (eq (window-buffer window) (current-buffer)))
Mark if-let and when-let obsolete * lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark if-let and when-let obsolete (bug#73853 and elsewhere). Move docstring text around so that if-let* and when-let* descriptions no longer refer to if-let and when-let. * etc/NEWS: Announce the change. * admin/admin.el (reminder-for-release-blocking-bugs): * doc/misc/erc.texi (display-buffer): * lisp/ansi-color.el (ansi-color-apply) (ansi-color--face-vec-face): * lisp/ansi-osc.el (ansi-osc-apply-on-region) (ansi-osc-hyperlink): * lisp/arc-mode.el (archive-goto-file) (archive-next-file-displayer): * lisp/auth-source-pass.el (auth-source-pass-search) (auth-source-pass--parse-data) (auth-source-pass--find-match-many): * lisp/autorevert.el (auto-revert-notify-rm-watch): * lisp/buff-menu.el (Buffer-menu-unmark-all-buffers) (Buffer-menu-group-by-root): * lisp/calendar/parse-time.el (parse-iso8601-time-string): * lisp/cedet/pulse.el (pulse-tick): * lisp/comint.el (comint--fontify-input-ppss-flush-indirect) (comint--intersect-regions): * lisp/completion-preview.el (completion-preview--try-table) (completion-preview--capf-wrapper, completion-preview--update): * lisp/cus-edit.el (setopt--set) (custom-dirlocals-maybe-update-cons, custom-dirlocals-validate): * lisp/custom.el (load-theme): * lisp/descr-text.el (describe-char): * lisp/desktop.el (desktop--emacs-pid-running-p): * lisp/dired-x.el (menu): * lisp/dired.el (dired-font-lock-keywords) (dired-insert-directory, dired--insert-disk-space, dired-mode): * lisp/dnd.el (dnd-handle-multiple-urls): * lisp/dom.el (dom-remove-attribute): * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): * lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare): * lisp/emacs-lisp/comp-common.el (comp-function-type-spec): * lisp/emacs-lisp/comp-cstr.el (comp--all-classes) (comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem) (comp-cstr-intersection-no-mem, comp-cstr-fixnum-p) (comp-cstr-type-p): * lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install) (native--compile-async): * lisp/emacs-lisp/comp.el (comp--get-function-cstr) (comp--function-pure-p, comp--intern-func-in-ctxt) (comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar) (comp--add-call-cstr, comp--compute-dominator-tree) (comp--dom-tree-walker, comp--ssa-rename) (comp--function-call-maybe-fold, comp--fwprop-call) (comp--call-optim-func): * lisp/emacs-lisp/edebug.el (edebug-global-prefix) (edebug-remove-instrumentation): * lisp/emacs-lisp/eieio.el (initialize-instance): * lisp/emacs-lisp/ert-x.el (ert-resource-directory): * lisp/emacs-lisp/ert.el (ert--expand-should-1) (ert-test-location, ert-write-junit-test-report) (ert-test--erts-test): * lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string) (icons--create): * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p): * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate--make-autoload) (loaddefs-generate--parse-file): * lisp/emacs-lisp/multisession.el (multisession-edit-mode--revert, multisession-edit-value): * lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data) (package-vc--version, package-vc--clone): * lisp/emacs-lisp/package.el (package--reload-previously-loaded): * lisp/emacs-lisp/pp.el (pp--insert-lisp): * lisp/emacs-lisp/subr-x.el (add-display-text-property): * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): * lisp/emacs-lisp/timer.el (run-at-time): * lisp/emacs-lisp/vtable.el (vtable-goto-table) (vtable-goto-column, vtable-update-object, vtable--insert-line) (vtable--compute-widths, vtable--make-keymap): * lisp/emacs-lisp/warnings.el (display-warning): * lisp/epa-file.el (epa-file-insert-file-contents): * lisp/epa.el (epa-show-key): * lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt) (PRIVMSG, erc--get-isupport-entry): * lisp/erc/erc-button.el (erc-button-add-nickname-buttons) (erc--button-next): * lisp/erc/erc-common.el (erc--find-group): * lisp/erc/erc-fill.el (erc-fill, erc-fill-static) (erc-fill--wrap-escape-hidden-speaker) (erc-fill--wrap-unmerge-on-date-stamp) (erc-fill--wrap-massage-initial-message-post-clear) (erc-fill-wrap, erc-fill--wrap-rejigger-region): * lisp/erc/erc-goodies.el (erc--scrolltobottom-all) (erc--keep-place-indicator-on-window-buffer-change) (keep-place-indicator, erc--keep-place-indicator-adjust-on-clear) (erc-keep-place-move, erc--command-indicator-display): * lisp/erc/erc-ibuffer.el (erc-members): * lisp/erc/erc-join.el (erc-join--remove-requested-channel) (erc-autojoin--join): * lisp/erc/erc-networks.el (erc-networks--id-qualifying-init-parts, erc-networks--id-reload) (erc-networks--id-ensure-comparable) (erc-networks--reclaim-orphaned-target-buffers) (erc-networks--server-select): * lisp/erc/erc-nicks.el (erc-nicks-invert) (erc-nicks--redirect-face-widget-link, erc-nicks--highlight) (erc-nicks--highlight-button) (erc-nicks--list-faces-help-button-action, erc-nicks-list-faces) (erc-nicks-refresh, erc-nicks--colors-from-faces) (erc-nicks--track-prioritize) (erc-nicks--remember-face-for-track): * lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next) (erc--querypoll-on-352, erc--querypoll-send): * lisp/erc/erc-sasl.el (erc-sasl--read-password): * lisp/erc/erc-services.el (erc-services-issue-ghost-and-retry-nick): * lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar) (erc-speedbar-toggle-nicknames-window-lock) (erc-speedbar--compose-nicks-face): * lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect) (erc-stamp-prefix-log-filter, erc--conceal-prompt) (erc--insert-timestamp-left, erc-insert-timestamp-right) (erc-stamp--defer-date-insertion-on-post-modify) (erc-insert-timestamp-left-and-right) (erc-stamp--redo-right-stamp-post-clear) (erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps): * lisp/erc/erc-status-sidebar.el (bufbar) (erc-status-sidebar-prefer-target-as-name) (erc-status-sidebar-default-allsort, erc-status-sidebar-click): * lisp/erc/erc-track.el (erc-track--shortened-names-get) (erc-track--setup, erc-track--select-mode-line-face) (erc-track-modified-channels, erc-track--collect-faces-in) (erc-track--switch-buffer, erc-track--replace-killed-buffer): * lisp/erc/erc-truncate.el (erc-truncate--setup) (erc-truncate-buffer): * lisp/erc/erc.el (erc--ensure-query-member) (erc--ensure-query-members, erc--remove-channel-users-but) (erc--cusr-change-status, erc--find-mode, erc--update-modules) (erc-log-irc-protocol, erc--refresh-prompt) (erc--restore-important-text-props) (erc--order-text-properties-from-hash, erc-send-input-line) (erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY) (erc-cmd-BANLIST, erc--speakerize-nick) (erc--format-speaker-input-message, erc-channel-receive-names) (erc-send-current-line, erc-format-target-and/or-network) (erc-kill-buffer-function, erc-restore-text-properties) (erc--get-eq-comparable-cmd): * lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which) (eshell-maybe-replace-by-alias): * lisp/eshell/em-glob.el (eshell-glob-convert): * lisp/eshell/em-pred.el (eshell-pred-user-or-group) (eshell-pred-file-time, eshell-pred-file-type) (eshell-pred-file-mode, eshell-pred-file-links) (eshell-pred-file-size): * lisp/eshell/em-prompt.el (eshell-forward-paragraph) (eshell-next-prompt): * lisp/eshell/esh-arg.el (eshell-resolve-current-argument): * lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which) (eshell-plain-command--which, eshell-plain-command): * lisp/eshell/esh-io.el (eshell-duplicate-handles) (eshell-protect-handles, eshell-get-target, eshell-close-target): * lisp/eshell/esh-proc.el (eshell-sentinel): * lisp/eshell/esh-var.el (eshell-parse-variable-ref) (eshell-get-variable, eshell-set-variable): * lisp/faces.el (face-at-point): * lisp/ffap.el (ffap-in-project): * lisp/filenotify.el (file-notify--rm-descriptor): * lisp/files-x.el (read-dir-locals-file) (connection-local-update-profile-variables) (connection-local-value): * lisp/files.el (file-remote-p, abbreviate-file-name) (set-auto-mode, hack-local-variables) (revert-buffer-restore-read-only): * lisp/find-dired.el (find-dired-sort-by-filename): * lisp/font-lock.el (font-lock--filter-keywords): * lisp/gnus/gnus-art.el (article-emojize-symbols): * lisp/gnus/gnus-int.el (gnus-close-server): * lisp/gnus/gnus-search.el (gnus-search-transform) (gnus-search-indexed-parse-output, gnus-search-server-to-engine): * lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url): * lisp/gnus/gnus.el (gnus-check-backend-function): * lisp/gnus/message.el (message-send-mail): * lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers): * lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article) (nnatom--read-article-or-group-authors, nnatom--read-publish) (nnatom--read-update, nnatom--read-links): * lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server) (nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article) (nnfeed-retrieve-headers, nnfeed--print-part) (nnfeed-request-article, nnfeed-request-group) (nnfeed-request-list, nnfeed--group-description) (nnfeed-request-group-description) (nnfeed-request-list-newsgroups, nnfeed-request-rename-group): * lisp/gnus/nnmh.el (nnmh-update-gnus-unreads): * lisp/help-fns.el (help-find-source) (help-fns--insert-menu-bindings, help-fns--mention-first-release) (help-fns--mention-shortdoc-groups) (help-fns--customize-variable-version) (help-fns--face-custom-version-info, describe-mode): * lisp/help-mode.el (help-make-xrefs): * lisp/help.el (help-key-description, help--describe-command): * lisp/hfy-cmap.el (htmlfontify-load-rgb-file): * lisp/ibuf-ext.el (ibuffer-jump-to-filter-group) (ibuffer-kill-filter-group, ibuffer-kill-line) (ibuffer-save-filter-groups, ibuffer-save-filters, filename) (basename, file-extension, ibuffer-diff-buffer-with-file-1) (ibuffer-mark-by-file-name-regexp) (ibuffer-mark-by-content-regexp): * lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen): * lisp/ibuffer.el (ibuffer-mouse-toggle-mark) (ibuffer-toggle-marks, ibuffer-mark-interactive) (ibuffer-compile-format, process, ibuffer-map-lines): * lisp/image.el (image--compute-map) (image--compute-original-map): * lisp/image/exif.el (exif-parse-buffer): * lisp/image/image-converter.el (image-convert-p, image-convert) (image-converter--find-converter): * lisp/image/image-dired-util.el (image-dired-file-name-at-point): * lisp/image/image-dired.el (image-dired-track-original-file) (image-dired--on-file-in-dired-buffer) (image-dired--with-thumbnail-buffer) (image-dired-jump-original-dired-buffer) (image-dired--slideshow-step, image-dired-display-image): * lisp/image/wallpaper.el (wallpaper--init-action-kill) (wallpaper--find-setter, wallpaper--find-command) (wallpaper--find-command-args, wallpaper--x-monitor-name): * lisp/info-look.el (info-lookup-interactive-arguments) (info-complete)::(:mode): * lisp/info.el (info-pop-to-buffer, Info-read-node-name-1): * lisp/international/emoji.el (emoji--adjust-displayable-1) (emoji--add-recent): * lisp/jsonrpc.el (jsonrpc--call-deferred) (jsonrpc--process-sentinel, jsonrpc--remove): * lisp/keymap.el (keymap-local-lookup): * lisp/mail/emacsbug.el (report-emacs-bug-hook) (submit-emacs-patch): * lisp/mail/ietf-drums.el (ietf-drums-parse-addresses): * lisp/mail/mailclient.el (mailclient-send-it): * lisp/mail/rfc6068.el (rfc6068-parse-mailto-url): * lisp/mail/undigest.el (rmail-digest-parse-mixed-mime): * lisp/minibuffer.el (completion-metadata-get) (completions--after-change) (minibuffer-visible-completions--filter): * lisp/net/browse-url.el (browse-url-url-at-point) (browse-url-file-url, browse-url-emacs): * lisp/net/dbus.el (dbus-byte-array-to-string) (dbus-monitor-goto-serial): * lisp/net/dictionary.el (dictionary-search): * lisp/net/eww.el (eww--download-directory) (eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit) (eww-follow-link, eww-read-alternate-url) (eww-copy-alternate-url): * lisp/net/goto-addr.el (goto-address-at-point): * lisp/net/mailcap.el (mailcap-mime-info): * lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string) (rcirc-kill-buffer-hook, rcirc-print, rcirc-when) (rcirc-color-attributes, rcirc-handler-NICK) (rcirc-handler-TAGMSG, rcirc-handler-BATCH): * lisp/net/shr.el (shr-descend, shr-adaptive-fill-function) (shr-correct-dom-case, shr-tag-a): * lisp/net/sieve.el (sieve-manage-quit): * lisp/outline.el (outline-cycle-buffer): * lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate): * lisp/proced.el (proced-auto-update-timer): * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc): * lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph): * lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset) (c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun): * lisp/progmodes/compile.el (compilation-error-properties) (compilation-find-file-1): * lisp/progmodes/eglot.el (eglot--check-object) (eglot--read-server, eglot-upgrade-eglot) (eglot-handle-notification, eglot--CompletionParams) (eglot-completion-at-point, eglot--sig-info) (eglot-register-capability): * lisp/progmodes/elisp-mode.el (emacs-lisp-native-compile-and-load) (elisp-eldoc-var-docstring-with-value): * lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test): * lisp/progmodes/flymake.el (flymake--update-eol-overlays) (flymake-eldoc-function): * lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom) (gdb-frame-handler): * lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring) (go-ts-mode--comment-on-previous-line-p) (go-ts-mode--get-test-regexp-at-point) (go-ts-mode-test-this-file): * lisp/progmodes/grep.el (lgrep, rgrep-default-command) (grep-file-at-point): * lisp/progmodes/perl-mode.el (perl--end-of-format-p): * lisp/progmodes/php-ts-mode.el (php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun): * lisp/progmodes/project.el (project--other-place-command) (project--find-default-from, project--transplant-file-name) (project-prefixed-buffer-name, project--remove-from-project-list) (project-prompt-project-name, project-remember-projects-under) (project--switch-project-command) (project-uniquify-dirname-transform, project-mode-line-format): * lisp/progmodes/python.el (python-font-lock-keywords-maximum-decoration) (python--treesit-fontify-union-types) (python-shell-get-process-name, python-shell-restart) (python-shell-completion-at-point, python-ffap-module-path) (python-util-comint-end-of-output-p, python--import-sources) (python-add-import, python-remove-import, python-fix-imports): * lisp/progmodes/xref.el (xref--add-log-current-defun): * lisp/repeat.el (repeat-echo-message-string): * lisp/saveplace.el (save-place-dired-hook): * lisp/server.el (server-save-buffers-kill-terminal): * lisp/shadowfile.el (shadow-make-fullname) (shadow-contract-file-name, shadow-define-literal-group): * lisp/shell.el (shell-highlight-undef-mode): * lisp/simple.el (command-completion-using-modes-p) (command-execute, file-user-uid, file-group-gid) (first-completion, last-completion, switch-to-completions): * lisp/startup.el (startup--load-user-init-file): * lisp/tab-line.el (tab-line-tabs-buffer-group-by-project): * lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer): * lisp/term/android-win.el (android-encode-select-string) (gui-backend-set-selection): * lisp/term/haiku-win.el (haiku-dnd-convert-string) (haiku-select-encode-xstring, haiku-select-encode-utf-8-string): * lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize): * lisp/textmodes/ispell.el (ispell-completion-at-point): * lisp/textmodes/sgml-mode.el (sgml-validate) (html-mode--complete-at-point): * lisp/textmodes/tex-mode.el (tex-recenter-output-buffer) (xref-backend-references): * lisp/thingatpt.el (thing-at-point-file-at-point) (thing-at-point-face-at-point): * lisp/thread.el (thread-list--get-status): * lisp/time.el (world-clock-copy-time-as-kill, world-clock): * lisp/touch-screen.el (touch-screen-handle-touch): * lisp/treesit.el (treesit-language-at, treesit-node-at) (treesit-node-on, treesit-buffer-root-node) (treesit-node-field-name, treesit-local-parsers-at) (treesit-local-parsers-on, treesit--cleanup-local-range-overlays) (treesit-font-lock-recompute-features) (treesit-font-lock-fontify-region, treesit-transpose-sexps) (treesit-add-log-current-defun, treesit-major-mode-setup) (treesit--explorer-refresh, treesit-install-language-grammar): * lisp/url/url.el (url-retrieve-synchronously): * lisp/vc/smerge-mode.el (smerge-diff): * lisp/vc/vc-dir.el (vc-dir): * lisp/vc/vc-dispatcher.el (vc-do-async-command): * lisp/vc/vc-git.el (vc-git-dir--branch-headers) (vc-git-dir--stash-headers, vc-git--log-edit-summary-check) (vc-git-stash-list): * lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset) (vc-clone): * lisp/visual-wrap.el (visual-wrap--apply-to-line): * lisp/wid-edit.el (widget-text) (widget-editable-list-insert-before): * lisp/window-tool-bar.el (window-tool-bar--keymap-entry-to-string): * lisp/window.el (display-buffer, display-buffer-full-frame) (window-point-context-set, window-point-context-use) (window-point-context-use-default-function): * lisp/xdg.el (xdg-current-desktop): * lisp/xwidget.el (xwidget-webkit-callback): * lisp/yank-media.el (yank-media--get-selection) (yank-media-types): * test/lisp/comint-tests.el (comint-tests/test-password-function): * test/lisp/completion-preview-tests.el (completion-preview-tests--capf): * test/lisp/cus-edit-tests.el (with-cus-edit-test): * test/lisp/erc/erc-scenarios-base-local-modules.el (-phony-sblm-): * test/lisp/erc/erc-scenarios-stamp.el (erc-scenarios-stamp--on-post-modify): * test/lisp/erc/erc-services-tests.el (erc-services-tests--asp-parse-entry): * test/lisp/erc/erc-tests.el (erc-modules--internal-property) (erc--find-mode, erc-tests--update-modules): * test/lisp/erc/resources/erc-d/erc-d-i.el (erc-d-i--parse-message): * test/lisp/erc/resources/erc-d/erc-d-t.el (erc-d-t-kill-related-buffers, erc-d-t-with-cleanup): * test/lisp/erc/resources/erc-d/erc-d-tests.el (erc-d-i--parse-message--irc-parser-tests): * test/lisp/erc/resources/erc-d/erc-d-u.el (erc-d-u--read-exchange-slowly): * test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire) (erc-d--finalize-done, erc-d--command-handle-all): * test/lisp/erc/resources/erc-scenarios-common.el (erc-scenarios-common-with-cleanup): * test/lisp/erc/resources/erc-tests-common.el (erc-tests--common-display-message) (erc-tests-common-create-subprocess): * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): * test/lisp/international/mule-tests.el (mule-cmds-tests--ucs-names-missing-names): * test/lisp/progmodes/python-tests.el (python-tests-get-shell-interpreter) (python-tests--get-interpreter-info): * test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-resource-file): * test/lisp/replace-tests.el (replace-tests-with-undo): * test/src/emacs-tests.el (emacs-tests--seccomp-debug): * test/src/process-tests.el (process-tests--emacs-command) (process-tests--emacs-binary, process-tests--dump-file): * test/src/treesit-tests.el (treesit--ert-test-defun-navigation): Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
(when-let* ((buf (get-text-property pos 'erc-buf)))
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
;; Option operates relative to last selected window
(select-window (get-mru-window nil nil 'not-selected))
(pop-to-buffer buf erc-status-sidebar-click-display-action)))))
(defun erc-status-sidebar-scroll-up (lines)
"Scroll sidebar buffer's content LINES linse upward.
If LINES is nil, scroll up a full screen's worth."
(interactive "P")
(let ((other-window-scroll-buffer (erc-status-sidebar-get-buffer)))
(scroll-other-window lines)))
(defun erc-status-sidebar-scroll-down (lines)
"Scroll sidebar buffer's content LINES lines downward.
If LINES is nil, scroll down a full screen's worth."
(interactive "P")
(let ((other-window-scroll-buffer (erc-status-sidebar-get-buffer)))
(scroll-other-window-down lines)))
(defun erc-status-sidebar-recenter (arg)
"Recenter the status sidebar.
Expect `erc-status-sidebar-highlight-active-buffer' to be non-nil
and to be invoked in a buffer matching the line currently
highlighted."
(interactive "P")
(let* ((buf (erc-status-sidebar-get-buffer))
(win (get-buffer-window buf)))
(with-current-buffer buf
(when (and erc-status-sidebar--active-marker
(marker-position erc-status-sidebar--active-marker))
(with-selected-window win
(goto-char erc-status-sidebar--active-marker)
(recenter arg t))))))
(defvar erc-status-sidebar-mode-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map special-mode-map)
(define-key map [mouse-1] #'erc-status-sidebar-click)
map))
(defvar erc-status-sidebar-refresh-triggers
'(erc-track-list-changed-hook
erc-join-hook
erc-part-hook
erc-kill-buffer-hook
erc-kill-channel-hook
erc-kill-server-hook
erc-kick-hook
erc-disconnected-hook
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
erc-quit-hook)
"Hooks to refresh the sidebar on.
This may be set locally in the status-sidebar buffer under
various conditions, like when the option
`erc-status-sidebar-highlight-active-buffer' is non-nil.")
(defvar erc-status-sidebar--highlight-refresh-triggers
'(window-selection-change-functions)
"Triggers enabled with `erc-status-sidebar-highlight-active-buffer'.")
(defun erc-status-sidebar--refresh-unless-input ()
"Run `erc-status-sidebar-refresh' unless there are unread commands.
Also abstain when the user is interacting with the minibuffer."
(unless (or (input-pending-p) (minibuffer-window-active-p (selected-window)))
(erc-status-sidebar-refresh)))
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
(defun erc-status-sidebar--post-refresh (&rest _ignore)
"Schedule sidebar refresh for execution after command stack is cleared.
Ignore arguments in IGNORE, allowing this function to be added to
hooks that invoke it with arguments."
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(run-at-time 0 nil #'erc-status-sidebar--refresh-unless-input))
(defun erc-status-sidebar-mode--unhook ()
"Remove hooks installed by `erc-status-sidebar-mode'."
(dolist (hk erc-status-sidebar-refresh-triggers)
(remove-hook hk #'erc-status-sidebar--post-refresh))
(remove-hook 'window-configuration-change-hook
#'erc-status-sidebar-set-window-preserve-size))
(defun erc-status-sidebar-set-window-preserve-size ()
"Tell Emacs to preserve the current height/width of the ERC sidebar window.
Note that preserve status needs to be reset when the window is
manually resized, so `erc-status-sidebar-mode' adds this function
to the `window-configuration-change-hook'."
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(when (and (eq (selected-window) (let (erc-status-sidebar--singular-p)
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
(erc-status-sidebar-get-window)))
(fboundp 'window-preserve-size))
(unless (eq (window-total-width) (window-min-size nil t))
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
(apply #'window-preserve-size (selected-window) t t nil))))
(define-derived-mode erc-status-sidebar-mode special-mode "ERC Sidebar"
"Major mode for ERC status sidebar."
Add preset styles to erc-status-sidebar * lisp/erc/erc-networks.el (erc-networks--rename-server-buffer): Store `erc-networks--id' in process object's plist. * lisp/erc/erc-status-sidebar.el (erc-status-sidebar): Change group parent from `convenience' to `erc'. (erc-status-sidebar-channel-format): Mention in doc string that it depends on new option `erc-status-sidebar-style'. (erc-status-sidebar-highlight-active-buffer): New option to control whether the current window's target is highlighted in the status bar. (erc-status-sidebar-style): New option to determine whether servers and queries also appear in the sidebar. (erc-status-sidebar-click-display-action, erc-status-sidebar-singular): New options. (erc-status-sidebar-get-window): Consider `erc-status-sidebar-singular'. (erc-status-sidebar-open): Fix toggle functionality that somehow fell through the cracks after the adoption of the package into ERC proper. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): New module named `bufbar' instead of `sidebar', which is more easily confusable with `speedbar'. The preferred name, `status-sidebar' was unavailable because its minor-mode would have been `erc-status-sidebar-mode', which is already taken by the major mode used for status-bar buffers themselves. (erc-status-sidebar-toggle): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar--trimpat, erc-status-sidebar--prechan): Add helper vars for new sorting function, allowing it to honor the existing interface, which only expects one argument. (erc-status-sidebar-prefer-target-as-name): New function for determining buffer name, preferring targets for target buffers. (erc-status-sidebar-get-channame): Use internal API to help determine name of buffer in sidebar. (erc-status-sidebar-prefer-target-as-name, erc-status-sidebar--show-disconnected, erc-status-sidebar-all-target-buffers, erc-status-sidebar-default-allsort): Add new naming and sorting functions and associated helper functions and variables. (erc-status-sidebar--active-marker, erc-status-sidebar--set-active-line): New variable and function for highlighting the active target in the status bar. (erc-status-sidebar-default-insert, erc-status-sidebar-pad-hierarchy): New functions for visiting various stages of buffer modification when rendering sidebar. (erc-status-sidebar-refresh): Consider presets and new options when rendering sidebar. (erc-status-sidebar-kill): Disable `erc-bufbar-mode' when active. (erc-status-sidebar-click): Appeal to option `erc-status-sidebar-display-action' for `pop-to-buffer' action. (erc-status-sidebar-scroll-up, erc-status-sidebar-scroll-down, erc-status-sidebar-recenter): Add commands to scroll and recenter sidebar from a target buffer's window. (erc-status-sidebar-set-window-preserve-size): Ignore `erc-status-sidebar-singular'. (erc-status-sidebar-mode): Make non-interactive to avoid confusion when folks run "M-x erc-status-sidebar-mode" expecting a module toggle. * test/lisp/erc/erc-scenarios-status-sidebar.el: New file. * test/lisp/erc/resources/base/gapless-connect/foonet.eld: Fix wrong manifest for channel and extend PASS timeout. (Bug#63595)
2023-05-04 00:01:11 -07:00
;; Users invoking M-x erc-status-sidebar-mode most likely expect to
;; summon the module's minor-mode, `erc-bufbar-mode'.
:interactive nil
;; Don't scroll the buffer horizontally, if a channel name is
;; obscured then the window can be resized.
(setq-local auto-hscroll-mode nil)
(setq cursor-type nil
buffer-read-only t
mode-line-format erc-status-sidebar-mode-line-format
header-line-format erc-status-sidebar-header-line-format)
(erc-status-sidebar-set-window-preserve-size)
(add-hook 'window-configuration-change-hook
#'erc-status-sidebar-set-window-preserve-size nil t)
Simplify multi-frame behavior in erc-bufbar-mode * lisp/erc/erc-status-sidebar.el (erc-status-sidebar-singular, erc-status-sidebar--singular-p): Replace option new in ERC 5.6 with the latter, an internal flag. (erc-status-sidebar-get-window): Use new name for option turned ordinary variable `erc-status-sidebar--singular-p'. (erc-status-sidebar-close): Add comment. (erc-status-sidebar--open): New function containing the old body of `erc-status-sidebar-open'. (erc-bufbar-mode, erc-bufbar-enable, erc-bufbar-disable): Update variable names. Close sidebar window on all frames when disabling, and don't set mode variable to nil when enabling. These may have made some practical sense but were illogical. For example, it's confusing to leave `erc-status-sidebar--open' in `erc--setup-buffer-hook' while reporting the mode as being disabled. (erc-status-sidebar-open): Move to slightly later in same file, after defining `erc-bufbar-mode'. When `erc-bufbar-mode' is active, always create a sidebar if needed, even when another frame is already displaying one. (erc-status-toggle-sidebar): When `erc-bufbar-mode' is disabled, revert to pre-5.6 behavior. When the module is enabled, adopt new behavior of ensuring the current frame shows a sidebar, even if another frame already has one. (erc-status-sidebar-refresh): Save and restore `window-start' in all windows showing a sidebar buffer after refreshing. Update option and variable names. (erc-status-sidebar-refresh-triggers): Add doc string, noting that the variable is set locally when the option `erc-status-sidebar-highlight-active-buffer' is non-nil. (erc-status-sidebar--highlight-refresh-triggers): New variable containing additional triggers enabled when the option `erc-status-highlight-active-buffer' is non-nil. (erc-status-sidebar--refresh-unless-input): New function to run `erc-status-sidebar-refresh' unless input is pending or the selected window's buffer is a minibuffer. (erc-status-sidebar--post-refresh): Call `erc-status-sidebar-refresh' wrapper `erc-status-sidebar--refresh-unless-input' instead. (erc-status-sidebar-set-window-preserve-size): Update var name to `erc-status-sidebar--singular-p'. (erc-status-sidebar-mode): Run `erc-status-sidebar--post-refresh' on `window-selection-change-functions' globally when highlighting active buffers. (bug#63595)
2023-07-23 23:09:42 -07:00
(when erc-status-sidebar-highlight-active-buffer
(setq-local erc-status-sidebar-refresh-triggers
`(,@erc-status-sidebar--highlight-refresh-triggers
,@erc-status-sidebar-refresh-triggers)))
(dolist (hk erc-status-sidebar-refresh-triggers)
(add-hook hk #'erc-status-sidebar--post-refresh))
;; `change-major-mode-hook' is run *before* the
;; erc-status-sidebar-mode initialization code, so it won't undo the
;; add-hook's we did in the previous expressions.
(add-hook 'change-major-mode-hook #'erc-status-sidebar-mode--unhook nil t)
lisp/erc: Use lexical-binding Also remove various redundant `:group` arguments. * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare` after the docstring. * lisp/erc/erc-capab.el: Use lexical-binding. (erc-capab-identify-activate): Simplify with `member`. * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition, which refers to it. (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`. * lisp/erc/erc-imenu.el: Use lexical-binding. (erc-create-imenu-index): Remove unused var `prev-pos`. * lisp/erc/erc-match.el: Use lexical-binding. (erc-match-message): Remove unused var `old-pt`. (erc-match-message): Strength-reduce `eval` to `symbol-value`. * lisp/erc/erc-page.el: Use lexical-binding. (erc-page): Move Custom group before `erg-page-mode` which refers to it. * lisp/erc/erc-replace.el: Use lexical-binding. (erc-replace-insert): Use `functionp`. * lisp/erc/erc-status-sidebar.el: Use lexical-binding. (erc-status-sidebar-open): Remove unused var `sidebar-window`. * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons. (erc-fill-column): Declare variable. * lisp/erc/erc-autoaway.el: Use lexical-binding. * lisp/erc/erc-ezbounce.el: Use lexical-binding. * lisp/erc/erc-fill.el: Use lexical-binding. * lisp/erc/erc-goodies.el: Use lexical-binding. * lisp/erc/erc-ibuffer.el: Use lexical-binding. * lisp/erc/erc-identd.el: Use lexical-binding. * lisp/erc/erc-join.el: Use lexical-binding. * lisp/erc/erc-lang.el: Use lexical-binding. * lisp/erc/erc-log.el: Use lexical-binding. * lisp/erc/erc-menu.el: Use lexical-binding. * lisp/erc/erc-netsplit.el: Use lexical-binding. * lisp/erc/erc-networks.el: Use lexical-binding. * lisp/erc/erc-pcomplete.el: Use lexical-binding. * lisp/erc/erc-ring.el: Use lexical-binding. * lisp/erc/erc-speedbar.el: Use lexical-binding. * lisp/erc/erc-spelling.el: Use lexical-binding. * lisp/erc/erc-truncate.el: Use lexical-binding. * lisp/erc/erc-xdcc.el: Use lexical-binding.
2021-03-18 23:14:33 -04:00
(add-hook 'kill-buffer-hook #'erc-status-sidebar-mode--unhook nil t))
(provide 'erc-status-sidebar)
;;; erc-status-sidebar.el ends here
;; Local Variables:
;; generated-autoload-file: "erc-loaddefs.el"
;; End: