mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-29 07:58:28 +00:00
Ignore date stamps completely in erc-track
* 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
c68dc7786f
"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)
This commit is contained in:
parent
a491a3d835
commit
a4ba236e56
10
etc/ERC-NEWS
10
etc/ERC-NEWS
@ -228,6 +228,12 @@ with a legitimate use for this option likely also possesses the
|
||||
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.
|
||||
@ -348,7 +354,9 @@ leading portion of message bodies as well as special casing to act on
|
||||
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
|
||||
|
@ -689,6 +689,16 @@ printed just after each line's text (no alignment)."
|
||||
(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,
|
||||
@ -703,7 +713,7 @@ requirements related to `erc-legacy-invisible-bounds-p'.
|
||||
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))
|
||||
@ -719,6 +729,13 @@ left-sided stamps and date stamps inserted by this function."
|
||||
(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))
|
||||
|
@ -785,6 +785,9 @@ that face with highest priority in NEW-FACES is also a member of
|
||||
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
|
||||
@ -798,10 +801,13 @@ the current buffer is in `erc-mode'."
|
||||
;; 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
|
||||
|
@ -50,7 +50,6 @@
|
||||
(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)
|
||||
@ -87,4 +86,31 @@
|
||||
(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
|
||||
|
Loading…
Reference in New Issue
Block a user