Emacs Lisp: Print, Output
Emacs lisp has several ways to print. You can print to the Messages Buffer, or insert output directly into a buffer.
message
-
(message FORMAT_STRING &rest ARGS)
Print a Format String to the Messages Buffer .
(message "Name is: %s" "Joe")
insert
-
(insert &rest ARGS)
Instert string to current buffer, at cursor position.
(insert "something")
print
-
(print OBJECT &optional TARGET)
Print lisp object in lisp syntax. Output can be read back by function
read
. Optional arg for a target buffer, or other functions.When writing a elisp script that does batch processing, it's best to print to your own buffer, because the Messages Buffer scrolls off.
(setq xbuff (generate-new-buffer "*my output*")) (print "something" xbuff) (switch-to-buffer xbuff )
[see Buffer Functions]
prin1
-
(prin1 OBJECT &optional TARGET)
Like print, but does not add newline at end.
princ
-
(princ OBJECT &optional TARGET)
Print without newline nor string delimiters. For easy human reading.
Temporarily Set a A Specific Buffer for Output
with-output-to-temp-buffer
-
(with-output-to-temp-buffer BUFNAME &rest BODY)
Bind ‘standard-output’ to buffer BUFNAME, eval BODY, then show that buffer.
This construct makes buffer BUFNAME empty before running BODY. It does not make the buffer current for BODY. Instead it binds ‘standard-output’ to that buffer, so that output generated with ‘prin1’ and similar functions in BODY goes into the buffer.
(setq xbuff (generate-new-buffer "*my output*")) (with-output-to-temp-buffer xbuff ;; this is inserted in current buffer (insert "xyz") ;; this is printed in buffer xbuff (print "abc")) (switch-to-buffer xbuff )