Emacs Lisp: Print, Output

By Xah Lee. Date: . Last updated: .

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")

[see Emacs Lisp: Text Editing Functions]

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 )

Reference

Lisp Basics


Lisp Basics

Basics

Lisp Data Structure

Function

Lisp Symbol

Lisp Misc

Working with Elisp