This reverts commit
99d74dcd45938e2686d93eb5649800e14a88cd84 but keeps
the test file test/lisp/erc/erc-scenarios-match.el. It also
implements a partial alternative solution by undoing the reordering of
insert hooks owned by the `stamp' and `match' modules. The initial
reordering stems from
d880a08f "Cement ordering of essential hook
members in ERC" and was intended to address the problem of timestamps
not being hidden in matched "fool" messages. However, a more
comprehensive solution is being pursued as part of bug#64301. The
following changes differ from those in a pure revert.
* erc/ERC-NEWS: Fix erroneous claim about relative hook ordering
pre-5.6.
* lisp/erc/erc-match.el (erc-match-mode, erc-match-enable): Lower hook
depth of `erc-match-message' in `erc-insert-modify-hook' from 60 to
50.
(erc-text-matched-hook): Retain cleaned-up portion of revised doc
string instead of reverting completely.
* lisp/erc/erc-stamp.el (erc-stamp-mode, erc-stamp-enable): Raise
depth of `erc-add-timestamp' in `erc-insert-modify-hook' and
`erc-send-modify-hook' from 50 to 60.
* test/lisp/erc/erc-scenarios-match.el
(erc-scenarios-match--stamp-left-current-nick
erc-scenarios-match--stamp-left-fools-invisible): Temporarily disable
the latter and fix expected hook ordering.
* test/lisp/erc/erc-tests.el (erc--essential-hook-ordering): Fix
expected order of default insert hooks. (Bug#60936)
depth," to secure the positions of a few key members of
'erc-insert-modify-hook' and 'erc-send-modify-hook'. So far, this
includes the functions 'erc-button-add-buttons', 'erc-fill',
-'erc-add-timestamp', and 'erc-match-message', which now appear in that
+'erc-match-message', and 'erc-add-timestamp', which now appear in that
order, when present, at depths beginning at 20 and ending below 80.
Of most interest to module authors is the new relative positioning of
the first two, 'erc-button-add-buttons' and 'erc-fill', which have
`erc-current-nick-highlight-type'. For all these highlighting types,
you can decide whether the entire message or only the sending nick is
highlighted."
- ((add-hook 'erc-insert-modify-hook #'erc-match-message 60)
+ ((add-hook 'erc-insert-modify-hook #'erc-match-message 50)
(add-hook 'erc-mode-hook #'erc-match--modify-invisibility-spec)
(unless erc--updating-modules-p
(erc-buffer-do #'erc-match--modify-invisibility-spec))
ERC calls members with the arguments (MATCH-TYPE NUH MESSAGE),
where MATCH-TYPE is one of the symbols `current-nick', `keyword',
`pal', `dangerous-host', `fool', and NUH is an `erc-response'
-sender, like bob!~bob@example.org. Users should keep in mind
-that MESSAGE may not include decorations, such as white space or
-time stamps, preceding the same text as inserted in the narrowed
-buffer."
+sender, like bob!~bob@example.org."
:options '(erc-log-matches erc-hide-fools erc-beep-on-match)
:type 'hook)
(erc-list-match fools-end msg))))
(defun erc-match-message ()
- "Add faces to matching text in inserted message."
- ;; Exclude leading whitespace, stamps, etc.
- (let ((omin (point-min))
- (beg (or (and (not (get-text-property (point-min) 'erc-command))
- (next-single-property-change (point-min) 'erc-command))
- (point-min))))
- ;; FIXME when ERC no longer supports 28, use `with-restriction'
- ;; with `:label' here instead of passing `omin'.
- (save-restriction
- (narrow-to-region beg (point-max))
- (erc-match--message omin))))
-
-(defun erc-match--message (unrestricted-point-min)
+ "Mark certain keywords in a region.
+Use this defun with `erc-insert-modify-hook'."
;; This needs some refactoring.
(goto-char (point-min))
(let* ((to-match-nick-dep '("pal" "fool" "dangerous-host"))
'font-lock-face match-face)))
;; Else twiddle your thumbs.
(t nil))
- ;; FIXME use `without-restriction' after dropping 28.
- (save-restriction
- (narrow-to-region unrestricted-point-min (point-max))
- (run-hook-with-args
- 'erc-text-matched-hook (intern match-type)
- (or nickuserhost
- (concat "Server:" (erc-get-parsed-vector-type vector)))
- message)))))
+ (run-hook-with-args
+ 'erc-text-matched-hook
+ (intern match-type)
+ (or nickuserhost
+ (concat "Server:" (erc-get-parsed-vector-type vector)))
+ message))))
(if nickuserhost
(append to-match-nick-dep to-match-nick-indep)
to-match-nick-indep)))))
(define-erc-module stamp timestamp
"This mode timestamps messages in the channel buffers."
((add-hook 'erc-mode-hook #'erc-munge-invisibility-spec)
- (add-hook 'erc-insert-modify-hook #'erc-add-timestamp 50)
- (add-hook 'erc-send-modify-hook #'erc-add-timestamp 50)
+ (add-hook 'erc-insert-modify-hook #'erc-add-timestamp 60)
+ (add-hook 'erc-send-modify-hook #'erc-add-timestamp 60)
(add-hook 'erc-mode-hook #'erc-stamp--recover-on-reconnect)
(add-hook 'erc--pre-clear-functions #'erc-stamp--reset-on-clear)
(unless erc--updating-modules-p
:port port
:full-name "tester"
:nick "tester")
- (should (memq 'erc-match-message
- (memq 'erc-add-timestamp erc-insert-modify-hook)))
+ ;; Module `timestamp' follows `match' in insertion hooks.
+ (should (memq 'erc-add-timestamp
+ (memq 'erc-match-message erc-insert-modify-hook)))
;; The "match type" is `current-nick'.
(funcall expect 5 "tester")
(should (eq (get-text-property (1- (point)) 'font-lock-face)
;; some non-nil invisibility property spans the entire message.
(ert-deftest erc-scenarios-match--stamp-left-fools-invisible ()
:tags '(:expensive-test)
+ (ert-skip "WIP: fix included in bug#64301")
(erc-scenarios-common-with-cleanup
((erc-scenarios-common-dialog "join/legacy")
(dumb-server (erc-d-run "localhost" t 'foonet))
:full-name "tester"
:password "changeme"
:nick "tester")
- (should (memq 'erc-match-message
- (memq 'erc-add-timestamp erc-insert-modify-hook)))
+ ;; Module `timestamp' follows `match' in insertion hooks.
+ (should (memq 'erc-add-timestamp
+ (memq 'erc-match-message erc-insert-modify-hook)))
(funcall expect 5 "This server is in debug mode")))
(ert-info ("Ensure lines featuring \"bob\" are invisible")
'( :erc-insert-modify-hook (erc-controls-highlight ; 0
erc-button-add-buttons ; 30
erc-fill ; 40
- erc-add-timestamp ; 50
- erc-match-message) ; 60
+ erc-match-message ; 50
+ erc-add-timestamp) ; 60
:erc-send-modify-hook ( erc-controls-highlight ; 0
erc-button-add-buttons ; 30