简体   繁体   中英

Color printing in emacs without X11

I'm using ps-print-buffer-with-faces to print out code with colored syntax highlighting (in emacs).

This works fine if I call ps-print-buffer-with-faces interactively (using Mx for example). I've also got it working from a bash script so that I can print in color from the command line. No problem.

However, I want to be able to perform this from cron, or possibly from a Makefile (ie without X11)

I've tried using the emacs -nw option and it complains that stdin is not from a tty and will not continue.

When I use the emacs --batch option, it appears that it is working, but the resulting postscript file has no colors at all.

Does anyone know how I can get ps-print-buffer-with-faces to obtain colors without X11?

This really bring back some memories -- I wrote a package like that back in the 1990:s, unfortunately, I have lost the source code (this was long before I started using a version control system).

The key to using font-lock in batch mode is to fool it into believing that it's in interactive mode, by setting noninteractive to nil.

I just threw together the following, is saves a postscript file named ORIGINAL_BASENAME.ps. You can easily modify this to print to the printer directly, by not passing the file name parameter.

#!/usr/bin/emacs --script
(defun ps-batch-print (files)
  (dolist (source files)
    (unless (file-exists-p source)
      (user-error "File not found: %s" source))
    (find-file source)
    (let ((noninteractive nil))
      (font-lock-mode 1))
    (ps-print-buffer-with-faces (concat (file-name-nondirectory
                                         (file-name-sans-extension source))
                                        ".ps"))))

(ps-batch-print command-line-args-left)

As always, Emacs packages print tons of messages irrelevant when in batch mode. You can get rid of them by redirecting stderr using 2> /dev/null , if you are using a UNIX-like system.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM