[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 529e46f128 13/25: Add eventual replacement for erc-default-recipi
From: |
F. Jason Park |
Subject: |
master 529e46f128 13/25: Add eventual replacement for erc-default-recipients |
Date: |
Thu, 30 Jun 2022 18:29:53 -0400 (EDT) |
branch: master
commit 529e46f1287ddb6fc16779a3f14016d0c305037c
Author: F. Jason Park <jp@neverwas.me>
Commit: F. Jason Park <jp@neverwas.me>
Add eventual replacement for erc-default-recipients
* lisp/erc/erc.el (erc--target, erc--target-channel,
erc--target-channel-local): Add new structs to hold info on a buffer's
target; stored in a local variable of the same name.
(erc--target-from-string): Add standalone constructor for
`erc--target'.
(erc--default-target): Add temporary internal getter to ease
transition to `erc--target' everywhere.
(erc-open): Create above items in non-server buffers.
* lisp/erc/erc-backend.el (erc-server-NICK): Recreate `erc--target'
when necessary.
---
lisp/erc/erc-backend.el | 4 ++--
lisp/erc/erc.el | 40 ++++++++++++++++++++++++++++++++++++++++
test/lisp/erc/erc-tests.el | 12 ++++++++++++
3 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 3534a937b8..bb423eadc0 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -1427,8 +1427,8 @@ add things to `%s' instead."
(erc-buffer-filter
(lambda ()
(when (equal (erc-default-target) nick)
- (setq erc-default-recipients
- (cons nn (cdr erc-default-recipients)))
+ (setq erc-default-recipients (cons nn (cdr erc-default-recipients))
+ erc--target (erc--target-from-string nn))
(rename-buffer nn t) ; bug#12002
(erc-update-mode-line)
(cl-pushnew (current-buffer) bufs))))
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index d4cf28a86d..078a446a1c 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -1391,6 +1391,45 @@ if ARG is omitted or nil.
(put ',enable 'definition-name ',name)
(put ',disable 'definition-name ',name))))
+;; The rationale for favoring inheritance here (nicer dispatch) is
+;; kinda flimsy since there aren't yet any actual methods.
+
+(cl-defstruct erc--target
+ (string "" :type string :documentation "Received name of target.")
+ (symbol nil :type symbol :documentation "Case-mapped name as symbol."))
+
+;; These should probably take on a `joined' field to track joinedness,
+;; which should be toggled by `erc-server-JOIN', `erc-server-PART',
+;; etc. Functions like `erc--current-buffer-joined-p' (bug#48598) may
+;; find it useful.
+
+(cl-defstruct (erc--target-channel (:include erc--target)))
+
+(cl-defstruct (erc--target-channel-local (:include erc--target-channel)))
+
+;; At some point, it may make sense to add a query type with an
+;; account field, which may help support reassociation across
+;; reconnects and nick changes (likely requires v3 extensions).
+
+(defun erc--target-from-string (string)
+ "Construct an `erc--target' variant from STRING."
+ (funcall (if (erc-channel-p string)
+ (if (erc--valid-local-channel-p string)
+ #'make-erc--target-channel-local
+ #'make-erc--target-channel)
+ #'make-erc--target)
+ :string string :symbol (intern (erc-downcase string))))
+
+(defvar-local erc--target nil
+ "Info about a buffer's target, if any.")
+
+;; Temporary internal getter to ease transition to `erc--target'
+;; everywhere. Will be replaced by updated `erc-default-target'.
+(defun erc--default-target ()
+ "Return target string or nil."
+ (when erc--target
+ (erc--target-string erc--target)))
+
(defun erc-once-with-server-event (event f)
"Run function F the next time EVENT occurs in the `current-buffer'.
@@ -2091,6 +2130,7 @@ Returns the buffer for the given server or channel."
(set-marker erc-insert-marker (point))
;; stack of default recipients
(setq erc-default-recipients tgt-list)
+ (setq erc--target (and channel (erc--target-from-string channel)))
(setq erc-server-current-nick nil)
;; Initialize erc-server-users and erc-channel-users
(if connect
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el
index 4026ebaf33..5b04bff617 100644
--- a/test/lisp/erc/erc-tests.el
+++ b/test/lisp/erc/erc-tests.el
@@ -478,6 +478,18 @@
(should-not (erc--valid-local-channel-p "#chan"))
(should (erc--valid-local-channel-p "&local")))))
+(ert-deftest erc--target-from-string ()
+ (should (equal (erc--target-from-string "#chan")
+ #s(erc--target-channel "#chan" \#chan)))
+
+ (should (equal (erc--target-from-string "Bob")
+ #s(erc--target "Bob" bob)))
+
+ (let ((erc--isupport-params (make-hash-table)))
+ (puthash 'CHANTYPES '("&#") erc--isupport-params)
+ (should (equal (erc--target-from-string "&Bitlbee")
+ #s(erc--target-channel-local "&Bitlbee" &bitlbee)))))
+
(ert-deftest erc-ring-previous-command-base-case ()
(ert-info ("Create ring when nonexistent and do nothing")
(let (erc-input-ring
- master de53d18a4d 07/25: Don't set erc-server-announced-name unless known, (continued)
- master de53d18a4d 07/25: Don't set erc-server-announced-name unless known, F. Jason Park, 2022/06/30
- master 873499ce06 06/25: Allow exemption from flood penalty in erc-backend, F. Jason Park, 2022/06/30
- master ecafe1cbb5 10/25: Recognize ASCII and strict CASEMAPPINGs in ERC, F. Jason Park, 2022/06/30
- master 752e860db4 16/25: Address long-standing ERC buffer-naming issues, F. Jason Park, 2022/06/30
- master 85c2f3bc3e 25/25: Update ERC's Info doc with network-ID related changes, F. Jason Park, 2022/06/30
- master 54414ec846 02/25: Initialize erc-server-filter-data in erc-backend, F. Jason Park, 2022/06/30
- master 4e312c07f7 11/25: Make ERC respect spaces in server passwords, F. Jason Park, 2022/06/30
- master 485b84cb7c 08/25: Require erc-networks in erc.el, F. Jason Park, 2022/06/30
- master c356f86b51 09/25: Update ISUPPORT handling in ERC, F. Jason Park, 2022/06/30
- master 1c24af0fcb 12/25: Add helper to determine local channels in ERC, F. Jason Park, 2022/06/30
- master 529e46f128 13/25: Add eventual replacement for erc-default-recipients,
F. Jason Park <=
- master 1767b0bd7e 19/25: Don't call erc-auto-query twice on PRIVMSG, F. Jason Park, 2022/06/30
- master 7c47d6c52d 18/25: Register erc-kill-buffer-function locally, F. Jason Park, 2022/06/30
- master 10237840d0 24/25: Optionally prevent sending multiline input in ERC, F. Jason Park, 2022/06/30
- master 9be08ceb31 15/25: Add ERC test server and related resources, F. Jason Park, 2022/06/30
- master 922ad23840 17/25: Add user-oriented test scenarios for ERC, F. Jason Park, 2022/06/30
- master e958a2b726 14/25: Discourage ill-defined use of buffer targets in ERC, F. Jason Park, 2022/06/30
- master 959fbcf34b 20/25: Favor network identities in erc-join, F. Jason Park, 2022/06/30
- master a9d89d083a 22/25: Fix regression in erc-send-input-line, F. Jason Park, 2022/06/30
- master 0590224343 21/25: Standardize auth-source queries in ERC, F. Jason Park, 2022/06/30
- master f46547294d 23/25: Improve ERC's handling of multiline prompt input, F. Jason Park, 2022/06/30