]> git.eshelyaron.com Git - emacs.git/commitdiff
Add helper to determine local channels in ERC
authorF. Jason Park <jp@neverwas.me>
Mon, 16 Aug 2021 12:01:16 +0000 (05:01 -0700)
committerF. Jason Park <jp@neverwas.me>
Thu, 30 Jun 2022 22:03:26 +0000 (15:03 -0700)
* 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.

lisp/erc/erc.el
test/lisp/erc/erc-tests.el

index 4c54ef2ef9ce08e79059022a7fe956adbe2cf715..d4cf28a86d9d414291113ce705c80ab81d5d023b 100644 (file)
@@ -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
index cffb61f7084b8098b60d7a573b25e53375a3fb8e..4026ebaf33537d392e3e2aceaf24e2c8828f32dd 100644 (file)
       (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