* etc/ERC-NEWS: Mention that date stamps no longer optionally affect
the mode line. Also mention but discourage new variable
'erc-stamp-prepend-date-stamps-p'.
* lisp/erc/erc-stamp.el (erc-stamp-prepend-date-stamps-p): New
variable, an escape hatch to allow date stamps to once again be
prepended to messages.
(erc-insert-timestamp-left-and-right): Don't insert stamps as
independent messages when legacy support flag
`erc-stamp-prepend-date-stamps-p' is non-nil.
* lisp/erc/erc-track.el (erc-track--skipped-msgs): New internal
variable.
(erc-track-modified-channels): In previous versions, a date stamp
attached to a message for an IRC command in `erc-track-exclude-types'
would have no effect on the mode line. That they were able to
otherwise was probably a bug. Regardless, this distinction was lost
for the worse after date stamps became independent messages with
c68dc7786fc "Manage some text props for ERC insertion-hook members".
To sidestep this regression, the `track' module will ignore date
stamps completely from now on. Thanks to Corwin Brust for spotting
this.
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--left/display-margin-mode): Remove redundant
binding.
(erc-scenarios-stamp--legacy-date-stamps): New test. (Bug#60936)
knowledge to rig up a suitable analog with minimal effort. That said,
the road to removal is long.
+** The 'track' module always ignores date stamps.
+Users of the stamp module who leave 'erc-insert-timestamp-function'
+set to its default of 'erc-insert-timestamp-left-and-right' will find
+that date stamps no longer affect the mode line, even for IRC commands
+not included in 'erc-track-exclude-types'.
+
** Option 'erc-warn-about-blank-lines' is more informative.
Enabled by default, this option now produces more useful feedback
whenever ERC rejects prompt input containing whitespace-only lines.
these areas without inflicting collateral damage. It may also be
worth noting that as consequence of these changes, the internally
managed variable 'erc-timestamp-last-inserted-left' no longer records
-the final trailing newline in 'erc-timestamp-format-left'.
+the final trailing newline in 'erc-timestamp-format-left'. If you
+must, see variable 'erc-stamp-prepend-date-stamps-p' for a temporary
+escape hatch.
*** The role of a module's Custom group is now more clearly defined.
Associating built-in modules with Custom groups and provided library
(let (erc-timestamp-format erc-away-timestamp-format)
(erc-add-timestamp)))))
+(defvar erc-stamp-prepend-date-stamps-p nil
+ "When non-nil, date stamps are not independent messages.
+Users should think twice about enabling this escape hatch. It
+will likely degraded the user experience by causing post-5.5
+features, like `fill-wrap', dynamic invisibility, etc., to
+malfunction. Basic support for the default configuration may
+expire earlier than normally expected.")
+(make-obsolete-variable 'erc-stamp-prepend-date-stamps-p
+ "unsupported legacy behavior" "30.1")
+
(defun erc-insert-timestamp-left-and-right (string)
"Insert a stamp on either side when it changes.
When the deprecated option `erc-timestamp-format-right' is nil,
Additionally, ensure every date stamp is identifiable as such so
that internal modules can easily distinguish between other
left-sided stamps and date stamps inserted by this function."
- (unless erc-stamp--date-format-end
+ (unless (or erc-stamp--date-format-end erc-stamp-prepend-date-stamps-p)
(add-hook 'erc-insert-pre-hook #'erc-stamp--lr-date-on-pre-modify -95 t)
(add-hook 'erc-send-pre-functions #'erc-stamp--lr-date-on-pre-modify -95 t)
(let ((erc--insert-marker (point-min-marker))
(if erc-timestamp-format-right
(erc-format-timestamp ct erc-timestamp-format-right)
string))))
+ ;; Maybe insert legacy date stamp.
+ (when-let ((erc-stamp-prepend-date-stamps-p)
+ (ts-left (erc-format-timestamp ct erc-timestamp-format-left))
+ ((not (string= ts-left erc-timestamp-last-inserted-left))))
+ (goto-char (point-min))
+ (erc-put-text-property 0 (length ts-left) 'field 'erc-timestamp ts-left)
+ (insert (setq erc-timestamp-last-inserted-left ts-left)))
;; insert right timestamp
(let ((erc-timestamp-only-if-changed-flag t)
(erc-timestamp-last-inserted erc-timestamp-last-inserted-right))
choice))
choice))))
+(defvar erc-track--skipped-msgs '(datestamp)
+ "Values of `erc-msg' text prop to ignore.")
+
(defun erc-track-modified-channels ()
"Hook function for `erc-insert-post-hook'.
Check if the current buffer should be added to the mode line as a
;; FIXME either use `erc--server-buffer-p' or
;; explain why that's unwise.
(erc-server-or-unjoined-channel-buffer-p)))
- (not (erc-message-type-member
- (or (erc-find-parsed-property)
- (point-min))
- erc-track-exclude-types)))
+ (not (let ((parsed (erc-find-parsed-property)))
+ (or (erc-message-type-member (or parsed (point-min))
+ erc-track-exclude-types)
+ ;; Skip certain non-server-sent messages.
+ (and (not parsed)
+ (erc--check-msg-prop 'erc-msg
+ erc-track--skipped-msgs))))))
;; If the active buffer is not visible (not shown in a
;; window), and not to be excluded, determine the kinds of
;; faces used in the current message, and unless the user
(erc-stamp--current-time 704591940)
(erc-stamp--tz t)
(erc-server-flood-penalty 0.1)
- (erc-timestamp-only-if-changed-flag nil)
(erc-insert-timestamp-function #'erc-insert-timestamp-left)
(erc-modules (cons 'fill-wrap erc-modules))
(erc-timestamp-only-if-changed-flag nil)
(should (looking-back "CEIMRUabefhiklmnoqstuv\n"))
(should (looking-at (rx "[")))))))))
+(ert-deftest erc-scenarios-stamp--legacy-date-stamps ()
+ (with-suppressed-warnings ((obsolete erc-stamp-prepend-date-stamps-p))
+ (erc-scenarios-common-with-cleanup
+ ((erc-scenarios-common-dialog "base/reconnect")
+ (erc-stamp-prepend-date-stamps-p t)
+ (dumb-server (erc-d-run "localhost" t 'unexpected-disconnect))
+ (port (process-contact dumb-server :service))
+ (erc-server-flood-penalty 0.1)
+ (expect (erc-d-t-make-expecter)))
+
+ (ert-info ("Connect")
+ (with-current-buffer (erc :server "127.0.0.1"
+ :port port
+ :full-name "tester"
+ :nick "tester")
+ (funcall expect 5 "Opening connection")
+ (goto-char (1- (match-beginning 0)))
+ (should (eq 'erc-timestamp (field-at-pos (point))))
+ (should (eq 'unknown (erc--get-inserted-msg-prop 'erc-msg)))
+ ;; Force redraw of date stamp.
+ (setq erc-timestamp-last-inserted-left nil)
+
+ (funcall expect 5 "This server is in debug mode")
+ (while (and (zerop (forward-line -1))
+ (not (eq 'erc-timestamp (field-at-pos (point))))))
+ (should (erc--get-inserted-msg-prop 'erc-cmd)))))))
+
;;; erc-scenarios-stamp.el ends here