feat(lib): doom-print: allow lexical redirection
This commit is contained in:
parent
17119c5df7
commit
703173a6d2
1 changed files with 13 additions and 6 deletions
|
@ -118,6 +118,12 @@ Any of these classes can be called like functions from within `format!' and
|
||||||
|
|
||||||
Accepts `ansi' and `text-properties'. `nil' means don't render styles at all.")
|
Accepts `ansi' and `text-properties'. `nil' means don't render styles at all.")
|
||||||
|
|
||||||
|
(defvar doom-print-stream nil
|
||||||
|
"The default value for `standard-output' for Doom's print API.
|
||||||
|
|
||||||
|
If non-nil, this is used instead of `standard-output' because changes to that
|
||||||
|
variable don't survive translation units.")
|
||||||
|
|
||||||
(defvar doom-print-level 'notice
|
(defvar doom-print-level 'notice
|
||||||
"The current, default logging level.")
|
"The current, default logging level.")
|
||||||
|
|
||||||
|
@ -143,11 +149,11 @@ Accepts `ansi' and `text-properties'. `nil' means don't render styles at all.")
|
||||||
(format nil)
|
(format nil)
|
||||||
(level doom-print-level)
|
(level doom-print-level)
|
||||||
(newline t)
|
(newline t)
|
||||||
(stream standard-output))
|
(stream (or doom-print-stream standard-output)))
|
||||||
"Print OUTPUT to stdout.
|
"Print OUTPUT to stdout.
|
||||||
|
|
||||||
Unlike `message', this:
|
Unlike `message', this:
|
||||||
- Respects the value of `standard-output'.
|
- Respects the value of `standard-output' (if `doom-print-stream' is nil).
|
||||||
- Indents according to `doom-print-indent' (if FORMAT is non-nil).
|
- Indents according to `doom-print-indent' (if FORMAT is non-nil).
|
||||||
- Prints to stdout instead of stderr in batch mode.
|
- Prints to stdout instead of stderr in batch mode.
|
||||||
- Recognizes more terminal escape codes (only in batch mode).
|
- Recognizes more terminal escape codes (only in batch mode).
|
||||||
|
@ -236,7 +242,7 @@ based on the print level of the message. For example:
|
||||||
`(letf! ((,sym ,streamspec)
|
`(letf! ((,sym ,streamspec)
|
||||||
(standard-output (doom-print--redirect-standard-output ,sym t))
|
(standard-output (doom-print--redirect-standard-output ,sym t))
|
||||||
(#'message (doom-print--redirect-message ,sym (if noninteractive 'debug 'notice)))
|
(#'message (doom-print--redirect-message ,sym (if noninteractive 'debug 'notice)))
|
||||||
(doom-print--output-depth (1+ doom-print--output-depth)))
|
(doom-print-stream standard-output))
|
||||||
,@body)))
|
,@body)))
|
||||||
|
|
||||||
|
|
||||||
|
@ -260,8 +266,8 @@ based on the print level of the message. For example:
|
||||||
(get (car spec) 'print-level)))
|
(get (car spec) 'print-level)))
|
||||||
(cadr spec)))))
|
(cadr spec)))))
|
||||||
|
|
||||||
(defun doom-print--redirect-standard-output (streamspec level)
|
(defun doom-print--redirect-standard-output (streamspec level &optional old-stream)
|
||||||
(let ((old standard-output)
|
(let ((old (or old-stream standard-output))
|
||||||
(streams (doom-print--redirect-streams streamspec level)))
|
(streams (doom-print--redirect-streams streamspec level)))
|
||||||
(lambda (ch)
|
(lambda (ch)
|
||||||
(let ((str (char-to-string ch)))
|
(let ((str (char-to-string ch)))
|
||||||
|
@ -273,7 +279,8 @@ based on the print level of the message. For example:
|
||||||
|
|
||||||
(defun doom-print--redirect-message (streamspec level)
|
(defun doom-print--redirect-message (streamspec level)
|
||||||
(let ((old (symbol-function #'message))
|
(let ((old (symbol-function #'message))
|
||||||
(streams (doom-print--redirect-streams streamspec level)))
|
(streams (doom-print--redirect-streams streamspec level))
|
||||||
|
(doom-print--output-depth (1+ doom-print--output-depth)))
|
||||||
(lambda (message &rest args)
|
(lambda (message &rest args)
|
||||||
(when message
|
(when message
|
||||||
(let ((output (apply #'doom-print--format message args)))
|
(let ((output (apply #'doom-print--format message args)))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue