From 1058b9202f9b530062bd5268c81a111976db61f2 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Fri, 19 Nov 2021 19:07:24 -0800 Subject: NOT A PATCH F. Jason Park (1): Add command to refill ERC buffers lisp/erc/erc-fill.el | 121 ++++++++++ .../erc/erc-fill-resources/static-60.buffer | 24 ++ .../erc/erc-fill-resources/static-72.buffer | 20 ++ .../erc/erc-fill-resources/variable-60.buffer | 18 ++ .../erc/erc-fill-resources/variable-72.buffer | 18 ++ test/lisp/erc/erc-fill-tests.el | 206 ++++++++++++++++++ 6 files changed, 407 insertions(+) create mode 100644 test/lisp/erc/erc-fill-resources/static-60.buffer create mode 100644 test/lisp/erc/erc-fill-resources/static-72.buffer create mode 100644 test/lisp/erc/erc-fill-resources/variable-60.buffer create mode 100644 test/lisp/erc/erc-fill-resources/variable-72.buffer create mode 100644 test/lisp/erc/erc-fill-tests.el Interdiff: diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el index 3bf335d098..49130b9ffc 100644 --- a/lisp/erc/erc-fill.el +++ b/lisp/erc/erc-fill.el @@ -112,30 +112,47 @@ erc-fill-column "The column at which a filled paragraph is broken." :type 'integer) -(defun erc-fill--remove-stamp-right () - (goto-char (point-min)) - (let (changed) - (while - (when-let* ((nextf (next-single-property-change (point) 'field))) - (goto-char (field-end nextf t)) - ;; Sweep up residual phantom field remants - (delete-region nextf (field-end nextf t)) - (setq changed t))) - changed)) - -(defun erc-fill--remove-stamp-left () - "Remove at most one LEFT or one right timestamp, if any." - (goto-char (point-min)) - ;; FIXME actually, it may be a mistake to blow past white space - ;; without checking for intervening intervals that need cleaning up. - (when-let* ((beg (save-excursion (skip-syntax-forward ">-") (point))) - (nextf (when (eq 'erc-timestamp (field-at-pos beg)) - (field-beginning beg t))) - ((eq 'erc-timestamp (get-text-property nextf 'field)))) - (goto-char (field-end nextf t)) - (skip-syntax-forward "-") - (delete-region nextf (point)) - t)) +(defun erc-fill--refill-message (beg end) + "Refill but don't re-stamp region between BEG and END. +Return non-nil if timestamps were removed." + (let (left-changed right-changed) + (narrow-to-region beg end) + ;; Remove at most one left timestamp, if any. + (goto-char (point-min)) + (setq left-changed + ;; FIXME it may be a mistake to blow past leading whitespace + ;; without removing any intervening ws-only field intervals + (when-let* ((beg (save-excursion (skip-syntax-forward ">-") (point))) + (nextf (when (eq 'erc-timestamp (field-at-pos beg)) + (field-beginning beg t))) + ((eq 'erc-timestamp (get-text-property nextf 'field)))) + (goto-char (field-end nextf t)) + (skip-syntax-forward "-") + (delete-region nextf (point)) + t)) + ;; Get everything on one line (if NOSQUEEZE seems warranted, see + ;; note below re ASCII art). + (let ((fill-column (string-width (buffer-string)))) + (fill-region (point-min) (point-max))) + ;; Remove any stamps from right-hand side. + (goto-char (point-min)) + (setq right-changed + (when-let* ((nextf (next-single-property-change (point) 'field))) + (delete-region nextf (1- (point-max))) + t)) + (erc-fill) + ;; Remove trailing whitespace from last line, if any. + (goto-char (point-max)) + (forward-line -1) + (when (re-search-forward "\\s-$" (line-end-position) t) + (delete-region (match-beginning 0) (match-end 0))) + ;; Neuter timestamp caching to force insertion. + (when (or left-changed right-changed) + (when left-changed + (setq erc-timestamp-last-inserted-left nil)) + (when right-changed + (setq erc-timestamp-last-inserted-right nil)) + t))) (defun erc-fill--hack-csf (f) ;; HACK until necessary additions to erc-stamp.el arrive (possibly @@ -162,7 +179,7 @@ erc-fill--refill (inhibit-read-only t) (inhibit-point-motion-hooks t) ;; - left-changed right-changed ct) ; cached current time + ct) ; cached current time (cl-letf (((symbol-function #'erc-restore-text-properties) #'ignore) ((symbol-function #'current-time) (lambda () ct))) (while @@ -188,19 +205,8 @@ erc-fill--refill (end (text-property-not-all beg (point-max) 'cursor-sensor-functions val))) (save-restriction - (narrow-to-region beg end) - (setq left-changed (erc-fill--remove-stamp-left)) - ;; If NOSQUEEZE seems warranted, see note above. - (let ((fill-column (- (point-max) (point-min)))) - (fill-region (point-min) (point-max))) - (setq right-changed (erc-fill--remove-stamp-right)) - (erc-fill) - (when (setq ct (when (or left-changed right-changed) - (erc-fill--hack-csf (car val)))) - (when left-changed - (setq erc-timestamp-last-inserted-left nil)) - (when right-changed - (setq erc-timestamp-last-inserted-right nil)) + (when (setq ct (and (erc-fill--refill-message beg end) + (erc-fill--hack-csf (car val)))) (erc-add-timestamp)) (when reporter (cl-incf (aref (cdr reporter) 2) ; max += d_new - d_old diff --git a/test/lisp/erc/erc-fill-resources/static-60.buffer b/test/lisp/erc/erc-fill-resources/static-60.buffer index b33f11ae96..f8db4bf7f4 100644 --- a/test/lisp/erc/erc-fill-resources/static-60.buffer +++ b/test/lisp/erc/erc-fill-resources/static-60.buffer @@ -2,7 +2,9 @@ [Tue Jan 1 1980] - *** #chan modes: +nt [00:00] + *** Users on #chan: alice @bob robot + tester [00:00] + *** #chan modes: +nt *** #chan was created on 2021-05-04 05:06:19 lorem ipsum This buffer is for @@ -10,9 +12,10 @@ Lisp evaluation. [00:01] tester, welcome! Your name may or may not be highlighted depending - on whether button's been loaded - by an earlier test. ERC needs - help! [00:03] + on whether erc-button's been + enabled by an earlier test. ERC + needs help! [00:03] + ・゜゜・。。・゜゜\_o< QUACK! [Wed Jan 2 1980] tester, welcome! To create a diff --git a/test/lisp/erc/erc-fill-resources/static-72.buffer b/test/lisp/erc/erc-fill-resources/static-72.buffer index 79ed88d112..6523f0887e 100644 --- a/test/lisp/erc/erc-fill-resources/static-72.buffer +++ b/test/lisp/erc/erc-fill-resources/static-72.buffer @@ -2,14 +2,17 @@ [Tue Jan 1 1980] - *** #chan modes: +nt [00:00] + *** Users on #chan: alice @bob robot tester + [00:00] + *** #chan modes: +nt *** #chan was created on 2021-05-04 05:06:19 lorem ipsum This buffer is for text that is not saved, and for Lisp evaluation. [00:01] tester, welcome! Your name may or may not be - highlighted depending on whether button's - been loaded by an earlier test. ERC needs + highlighted depending on whether erc-button's + been enabled by an earlier test. ERC needs help! [00:03] + ・゜゜・。。・゜゜\_o< QUACK! [Wed Jan 2 1980] tester, welcome! To create a file, visit it diff --git a/test/lisp/erc/erc-fill-resources/variable-60.buffer b/test/lisp/erc/erc-fill-resources/variable-60.buffer index 4bf2741af0..38723209bf 100644 --- a/test/lisp/erc/erc-fill-resources/variable-60.buffer +++ b/test/lisp/erc/erc-fill-resources/variable-60.buffer @@ -2,13 +2,15 @@ [Tue Jan 1 1980] -*** #chan modes: +nt [00:00] +*** Users on #chan: alice @bob robot tester [00:00] +*** #chan modes: +nt *** #chan was created on 2021-05-04 05:06:19 lorem ipsum This buffer is for text that is not saved, and for Lisp evaluation. [00:01] tester, welcome! Your name may or may not be - highlighted depending on whether button's been - loaded by an earlier test. ERC needs help! [00:03] + highlighted depending on whether erc-button's been + enabled by an earlier test. ERC needs help! [00:03] + ・゜゜・。。・゜゜\_o< QUACK! [Wed Jan 2 1980] tester, welcome! To create a file, visit it with ? and diff --git a/test/lisp/erc/erc-fill-resources/variable-72.buffer b/test/lisp/erc/erc-fill-resources/variable-72.buffer index de376cc15d..cc2410d7a7 100644 --- a/test/lisp/erc/erc-fill-resources/variable-72.buffer +++ b/test/lisp/erc/erc-fill-resources/variable-72.buffer @@ -2,13 +2,15 @@ [Tue Jan 1 1980] -*** #chan modes: +nt [00:00] +*** Users on #chan: alice @bob robot tester [00:00] +*** #chan modes: +nt *** #chan was created on 2021-05-04 05:06:19 lorem ipsum This buffer is for text that is not saved, and for Lisp evaluation. [00:01] tester, welcome! Your name may or may not be highlighted - depending on whether button's been loaded by an earlier + depending on whether erc-button's been enabled by an earlier test. ERC needs help! [00:03] + ・゜゜・。。・゜゜\_o< QUACK! [Wed Jan 2 1980] tester, welcome! To create a file, visit it with ? and enter text diff --git a/test/lisp/erc/erc-fill-tests.el b/test/lisp/erc/erc-fill-tests.el index a7e3d78d74..a0b695a6c7 100644 --- a/test/lisp/erc/erc-fill-tests.el +++ b/test/lisp/erc/erc-fill-tests.el @@ -67,6 +67,10 @@ erc-fill-tests--populate (cl-letf (((symbol-function 'current-time) (lambda () ct))) (with-current-buffer "foonet" + (erc-fill-tests--insert ":irc.foonet.org 353 tester = #chan :" + "alice @bob robot tester") + (erc-fill-tests--insert ":irc.foonet.org 366 tester #chan :" + "End of /NAMES list.") (erc-fill-tests--insert ":irc.foonet.org 324 tester #chan +nt") (erc-fill-tests--insert ":irc.foonet.org 329 tester #chan 1620104779") @@ -79,7 +83,10 @@ erc-fill-tests--populate (erc-fill-tests--insert ":alice!~u@rz2v467q4rwhy.irc PRIVMSG #chan :tester, welcome!" " Your name may or may not be highlighted depending on whether" - " button's been loaded by an earlier test. ERC needs help!") + " erc-button's been enabled by an earlier test. ERC needs help!") + + (erc-fill-tests--insert + ":robot!~u@rz2v467q4rwhy.irc PRIVMSG #chan :・゜゜・。。・゜゜\\_o< QUACK!") (setq ct (time-convert (cl-incf ts (* 60 60 24)))) (erc-fill-tests--insert @@ -87,14 +94,6 @@ erc-fill-tests--populate " To create a file, visit it with ? and enter text in its buffer."))))) (defun erc-fill-tests--teardown () - ;; XXX when inspecting manually, must reactivate fill and stamp modes. - ;; Otherwise `erc-fill-buffer' won't work. - (dolist (buf '("variable-60.buffer" - "variable-72.buffer" - "static-60.buffer" - "static-72.buffer")) - (when (buffer-live-p buf) - (kill-buffer buf))) (advice-remove 'format-time-string 'ts) (let (erc-kill-server-hook erc-kill-channel-hook) @@ -106,7 +105,8 @@ erc-fill-tests--compare ;; Git didn't allow committing with a trailing space after the ;; prompt, hence this: (equal (substring-no-properties (buffer-string) 0 -1) - (with-current-buffer (find-file-literally (ert-resource-file name)) + (with-temp-buffer + (insert-file-contents (ert-resource-file name)) (buffer-string)))) (defun erc-fill-tests--await-fill () -- 2.31.1