Fix and extend format-spec (bug#41758)
* lisp/format-spec.el: Use lexical-binding. Remove dependence on subr-x.el. (format-spec-make): Clarify docstring. (format-spec--parse-modifiers): Rename to... (format-spec--parse-flags): ...this and simplify. In particular, don't bother parsing :space-pad which is redundant and unused. (format-spec--pad): Remove, replacing with... (format-spec--do-flags): ...this new helper function which performs more of format-spec's supported text manipulation. (format-spec): Autoload. Allow optional argument to take on special values 'ignore' and 'delete' for more control over what happens when a replacement for a format specification isn't provided. Bring back proper support for a precision modifier similar to that of 'format'. * lisp/battery.el (battery-format): Rewrite in terms of format-spec. (battery-echo-area-format, battery-mode-line-format): Mention support of format-spec syntax in docstrings. * doc/lispref/strings.texi (Custom Format Strings): * etc/NEWS: Document and announce these changes. * lisp/dired-aux.el (dired-do-compress-to): * lisp/erc/erc-match.el (erc-log-matches): * lisp/erc/erc.el (erc-update-mode-line-buffer): * lisp/gnus/gnus-sieve.el (gnus-sieve-update): * lisp/gnus/gssapi.el (open-gssapi-stream): * lisp/gnus/mail-source.el (mail-source-fetch-file) (mail-source-fetch-directory, mail-source-fetch-pop) (mail-source-fetch-imap): * lisp/gnus/message.el (message-insert-formatted-citation-line): * lisp/image-dired.el: * lisp/net/eww.el: * lisp/net/imap.el (imap-kerberos4-open, imap-gssapi-open) (imap-shell-open): * lisp/net/network-stream.el (network-stream-open-shell): * lisp/obsolete/tls.el (open-tls-stream): * lisp/textmodes/tex-mode.el: Remove extraneous loads and autoloads of format-spec now that it is autoloaded and simplify its uses where possible. * test/lisp/battery-tests.el (battery-format): Test new format-spec support. * test/lisp/format-spec-tests.el (test-format-spec): Rename to... (format-spec) ...this, extending test cases. (test-format-unknown): Rename to... (format-spec-unknown): ...this, extending test cases. (test-format-modifiers): Rename to... (format-spec-flags): ...this. (format-spec-make, format-spec-parse-flags, format-spec-do-flags) (format-spec-do-flags-truncate, format-spec-do-flags-pad) (format-spec-do-flags-chop, format-spec-do-flags-case): New tests.
This commit is contained in:
parent
97d1f672ac
commit
0185d76e74
19 changed files with 407 additions and 290 deletions
|
@ -555,16 +555,15 @@ See `erc-log-match-format'."
|
|||
(and (eq erc-log-matches-flag 'away)
|
||||
(erc-away-time)))
|
||||
match-buffer-name)
|
||||
(let ((line (format-spec erc-log-match-format
|
||||
(format-spec-make
|
||||
?n nick
|
||||
?t (format-time-string
|
||||
(or (and (boundp 'erc-timestamp-format)
|
||||
erc-timestamp-format)
|
||||
"[%Y-%m-%d %H:%M] "))
|
||||
?c (or (erc-default-target) "")
|
||||
?m message
|
||||
?u nickuserhost))))
|
||||
(let ((line (format-spec
|
||||
erc-log-match-format
|
||||
`((?n . ,nick)
|
||||
(?t . ,(format-time-string
|
||||
(or (bound-and-true-p erc-timestamp-format)
|
||||
"[%Y-%m-%d %H:%M] ")))
|
||||
(?c . ,(or (erc-default-target) ""))
|
||||
(?m . ,message)
|
||||
(?u . ,nickuserhost)))))
|
||||
(with-current-buffer (erc-log-matches-make-buffer match-buffer-name)
|
||||
(let ((inhibit-read-only t))
|
||||
(goto-char (point-max))
|
||||
|
|
|
@ -6391,17 +6391,16 @@ if `erc-away' is non-nil."
|
|||
(defun erc-update-mode-line-buffer (buffer)
|
||||
"Update the mode line in a single ERC buffer BUFFER."
|
||||
(with-current-buffer buffer
|
||||
(let ((spec (format-spec-make
|
||||
?a (erc-format-away-status)
|
||||
?l (erc-format-lag-time)
|
||||
?m (erc-format-channel-modes)
|
||||
?n (or (erc-current-nick) "")
|
||||
?N (erc-format-network)
|
||||
?o (or (erc-controls-strip erc-channel-topic) "")
|
||||
?p (erc-port-to-string erc-session-port)
|
||||
?s (erc-format-target-and/or-server)
|
||||
?S (erc-format-target-and/or-network)
|
||||
?t (erc-format-target)))
|
||||
(let ((spec `((?a . ,(erc-format-away-status))
|
||||
(?l . ,(erc-format-lag-time))
|
||||
(?m . ,(erc-format-channel-modes))
|
||||
(?n . ,(or (erc-current-nick) ""))
|
||||
(?N . ,(erc-format-network))
|
||||
(?o . ,(or (erc-controls-strip erc-channel-topic) ""))
|
||||
(?p . ,(erc-port-to-string erc-session-port))
|
||||
(?s . ,(erc-format-target-and/or-server))
|
||||
(?S . ,(erc-format-target-and/or-network))
|
||||
(?t . ,(erc-format-target))))
|
||||
(process-status (cond ((and (erc-server-process-alive)
|
||||
(not erc-server-connected))
|
||||
":connecting")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue