diff options
author | F. Jason Park <jp@neverwas.me> | 2021-08-16 05:01:16 -0700 |
---|---|---|
committer | F. Jason Park <jp@neverwas.me> | 2022-06-30 15:03:26 -0700 |
commit | 1c24af0fcb8a8326fe5cdc75672bf4099b191a00 (patch) | |
tree | e6015d2a97e73b22f9208b406f34543a1dcfb287 | |
parent | 4e312c07f7a6998a818901e46341356316d248e0 (diff) | |
download | emacs-1c24af0fcb8a8326fe5cdc75672bf4099b191a00.tar.gz |
Add helper to determine local channels in ERC
* lisp/erc/erc.el (erc--valid-local-channel-p): Add internal helper to
determine whether an IRC channel is local according to its network's
CHANTYPES ISUPPORT parameter.
* test/lisp/erc/erc-tests.el (erc--valid-local-channel-p): Add test
for this helper.
-rw-r--r-- | lisp/erc/erc.el | 8 | ||||
-rw-r--r-- | test/lisp/erc/erc-tests.el | 12 |
2 files changed, 20 insertions, 0 deletions
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 4c54ef2ef9c..d4cf28a86d9 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -3251,6 +3251,14 @@ For a list of user commands (/join /part, ...): (concat " " password) ""))))) +(defun erc--valid-local-channel-p (channel) + "Non-nil when channel is server-local on a network that allows them." + (and-let* (((eq ?& (aref channel 0))) + (chan-types (erc--get-isupport-entry 'CHANTYPES 'single)) + ((if (>= emacs-major-version 28) + (string-search "&" chan-types) + (string-match-p "&" chan-types)))))) + (defun erc-cmd-JOIN (channel &optional key) "Join the channel given in CHANNEL, optionally with KEY. If CHANNEL is specified as \"-invite\", join the channel to which you diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el index cffb61f7084..4026ebaf335 100644 --- a/test/lisp/erc/erc-tests.el +++ b/test/lisp/erc/erc-tests.el @@ -466,6 +466,18 @@ (should (equal (erc-downcase "Tilde~") "tilde~" )) (should (equal (erc-downcase "\\O/") "|o/" ))))) +(ert-deftest erc--valid-local-channel-p () + (ert-info ("Local channels not supported") + (let ((erc--isupport-params (make-hash-table))) + (puthash 'CHANTYPES '("#") erc--isupport-params) + (should-not (erc--valid-local-channel-p "#chan")) + (should-not (erc--valid-local-channel-p "&local")))) + (ert-info ("Local channels supported") + (let ((erc--isupport-params (make-hash-table))) + (puthash 'CHANTYPES '("&#") erc--isupport-params) + (should-not (erc--valid-local-channel-p "#chan")) + (should (erc--valid-local-channel-p "&local"))))) + (ert-deftest erc-ring-previous-command-base-case () (ert-info ("Create ring when nonexistent and do nothing") (let (erc-input-ring |