Tags: patch Severity: wishlist (This bug could just as well be titled "Make ERC look more like standalone clients," although that's perhaps a bit clickbaity.) Hi, Newcomers to ERC are occasionally dumbfounded by the absence of a certain pair of IRC essentials, namely, a "window list" and a "nicknames list." But what even existing users may not know is that ERC already has both; they just don't quite work the way folks coming from other clients might expect. This patch aims to address that as if it were a problem. What's being proposed here is the addition of two new modules built entirely on functionality already offered by their host libraries, erc-status-sidebar.el and erc-speedbar.el. What's different is these additions flirt with something somewhat verboten in ERC, and that's changing existing defaults for non-security reasons (in this case, chiefly for unifying UX [1]). Beyond that, these changes also hard-wire potentially offensive choices into some of these defaults while trying in earnest to ensure old behavior remains accessible. For example, one module assumes no one with a non-nil `erc-header-line-format' has any use for modes and topics in a side window. Other baked in preferences include the nixing of all throwback icons [2] and the showing of disconnected buffers in a muted face. The list goes on but is open for discussion, as always. Another consideration here is of course naming [3]. I've gone ahead and dubbed the speedbar module 'nickbar' as a bit of an homage to its roots. `nicklist' wasn't available because a popular module of that name was once part of ERC, and people still use it today. For status-sidebar, I went with `bufbar', in part for consistency but also because the would-be canonical "status-sidebar" is already taken by the side window's buffer for its major mode. We might also consider going with the slightly pedestrian `buflist', which is already used by at least one other IRC client for referring to this feature. Lastly, I'd like to stress that these modules (thankfully) won't be loaded by default, which means you'll need to add `bufbar' and `nickbar' to `erc-modules' when trying them out. Note that this patch set currently depends on bug#63569 [3], whose changes need applying beforehand. Thanks! [1] My justifications for taking such liberties are at best anecdotal, based mostly on personal impressions of prevailing usage patterns and the perceived motivations behind them. A few examples: a. The relative newness of erc-status-sidebar.el, its lack of an associated module, and its absence from ERC's Custom menu all point to its defaults being somewhat more free for the changing. The speedbar integration likewise lacks a module, and its graphical-only nature means its set of users currently excludes anyone using ERC from a terminal. (Less expected fallout from the proposed churn, IOW.) b. Both libraries provide an always-open side window (or, in speedbar's case, frame), which imposes a specific layout on the user, something that's relatively rare in Emacs outside of IDE-style modes. Compare this to something like ibuffer for listing buffers or a hypothetical /NAMES buffer, which, if based on `tabulated-list-mode', would make for a more familiar means of reviewing channel members. The point here is that devoted users likely aren't messing with erc-status-sidebar or erc-speedbar in droves, preferring more Emacsy alternatives instead. c. Newcomers can't be bothered with an overly involved setup if it requires carefully exploring options before trying. But they're perfectly willing to copy/paste gobs of configuration or even mindlessly follow a minutes long Customize itinerary, so long as the promise of emerging with something resembling their present idea of what makes an IRC client remains within reach. By introducing these modules "preconfigured," I'm positing that these preconceived notions typically include a reactive window list and/or nick list. That said, my hope is that these users will eventually gravitate toward the more Emacs-native way of doing things, at which point these modules will have served their primary purpose (of acting as bait). [2] My reason for 86'ing the icons outright in the speedbar's new "window mode" is consistency. I figure anyone who wants the vanilla experience wants it in full and thus also wants a separate frame. That said, I suppose we could add a knob for tweaking this (or any of the other hard-coded choices mentioned), but IMO doing that unprovoked just contributes to "options sprawl." [3] FWIW, all module names in contention flout our supposed policy of preferring those that align with host libraries and the features they `provide'. In GNU Emacs 30.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.37, cairo version 1.17.6) of 2023-05-13 built on localhost Repository revision: 867b104010760c4b7cd700078884cc774a01860a Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12014000 System Description: Fedora Linux 37 (Workstation Edition) Configured using: 'configure --enable-check-lisp-object-type --enable-checking=yes,glyphs 'CFLAGS=-O0 -g3' PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util text-property-search time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils erc auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map format-spec cl-loaddefs cl-lib erc-backend erc-networks byte-opt gv bytecomp byte-compile erc-common erc-compat erc-loaddefs rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 64236 9476) (symbols 48 8573 0) (strings 32 23246 1709) (string-bytes 1 674076) (vectors 16 15015) (vector-slots 8 207266 8159) (floats 8 24 33) (intervals 56 229 0) (buffers 976 10))