]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow setting `erc-split-line-length' to zero
authorF. Jason Park <jp@neverwas.me>
Wed, 3 Jan 2024 10:00:45 +0000 (02:00 -0800)
committerF. Jason Park <jp@neverwas.me>
Sun, 7 Jan 2024 23:11:26 +0000 (15:11 -0800)
* etc/ERC-NEWS: Mention that `erc-flood-protect' no longer affects
line splitting.
* lisp/erc/erc-backend.el (erc-split-line-length): Mention ways for
modules to suppress line splitting entirely.
(erc--split-line): Exit loop instead of asserting progress has been
made.
* lisp/erc/erc.el (erc--split-lines): Don't split input when
option `erc-split-line-length' is zero.
* test/lisp/erc/erc-tests.el (erc--split-line): Assert behavior when
`erc-split-line-length' is 0.  (Bug#62947)

etc/ERC-NEWS
lisp/erc/erc-backend.el
lisp/erc/erc.el
test/lisp/erc/erc-tests.el

index c51b6f05458e174734e775ceb9459dd06df461e0..6cfa704d995d403377777cc5034a7470ea7f8068 100644 (file)
@@ -560,6 +560,11 @@ third-party code, the key takeaway is that more 'font-lock-face'
 properties encountered in the wild may be combinations of faces rather
 than lone ones.
 
+*** 'erc-flood-protect' no longer influences input splitting.
+This variable's role has been narrowed to rate limiting only.  ERC
+used to suppress protocol line-splitting when its value was nil, but
+that's now handled by setting 'erc-split-line-length' to zero.
+
 *** 'erc-pre-send-functions' visits prompt input post-split.
 ERC now adjusts input lines to fall within allowed length limits
 before showing hook members the result.  For compatibility,
index 4162df00595ff19100d0c22e03e874aa27c6fd10..95207e56fd1d9a9a9de7515e4d40f1aa85d5ab1f 100644 (file)
@@ -433,7 +433,11 @@ and optionally alter the attempts tally."
 
 (defcustom erc-split-line-length 440
   "The maximum length of a single message.
-If a message exceeds this size, it is broken into multiple ones.
+ERC normally splits chat input submitted at its prompt into
+multiple messages when the initial size exceeds this value in
+bytes.  Modules can tell ERC to forgo splitting entirely by
+setting this to zero locally or, preferably, by binding it around
+a remapped `erc-send-current-line' command.
 
 IRC allows for lines up to 512 bytes.  Two of them are CR LF.
 And a typical message looks like this:
@@ -596,7 +600,8 @@ escape hatch for inhibiting their transmission.")
                 (if (= (car cmp) (point-min))
                     (goto-char (nth 1 cmp))
                   (goto-char (car cmp)))))
-            (cl-assert (/= (point-min) (point)))
+            (when (= (point-min) (point))
+              (goto-char (point-max)))
             (push (buffer-substring-no-properties (point-min) (point)) out)
             (delete-region (point-min) (point)))
           (or (nreverse out) (list "")))
index b73e80cedde4c618de2e2b1cdee89422abe07c83..d0c43134f9d36f8d8923412b82b9898505198b3d 100644 (file)
@@ -7821,7 +7821,7 @@ When all lines are empty, remove all but the first."
   "Partition non-command input into lines of protocol-compliant length."
   ;; Prior to ERC 5.6, line splitting used to be predicated on
   ;; `erc-flood-protect' being non-nil.
-  (unless (erc--input-split-cmdp state)
+  (unless (or (zerop erc-split-line-length) (erc--input-split-cmdp state))
     (setf (erc--input-split-lines state)
           (mapcan #'erc--split-line (erc--input-split-lines state)))))
 
index 2cd47ec3f89cdaa9aaaacd674133a71b23d8c6df..a9aa255718d672124012aebcbfcd26b864e8598b 100644 (file)
     (should-not erc-debug-irc-protocol)))
 
 (ert-deftest erc--split-line ()
+  (let ((erc-split-line-length 0))
+    (should (equal (erc--split-line "") '("")))
+    (should (equal (erc--split-line " ") '(" ")))
+    (should (equal (erc--split-line "1") '("1")))
+    (should (equal (erc--split-line " 1") '(" 1")))
+    (should (equal (erc--split-line "1 ") '("1 ")))
+    (should (equal (erc--split-line "abc") '("abc"))))
+
   (let ((erc-default-recipients '("#chan"))
         (erc-split-line-length 10))
     (should (equal (erc--split-line "") '("")))