【问题标题】:Color printing in emacs without X11在没有 X11 的 emacs 中进行彩色打印
【发布时间】:2014-12-31 16:45:11
【问题描述】:

我正在使用 ps-print-buffer-with-faces 打印带有彩色语法突出显示的代码(在 emacs 中)。

如果我以交互方式调用 ps-print-buffer-with-faces(例如使用 M-x),这会很好。我还使用 bash 脚本让它工作,这样我就可以从命令行进行彩色打印。没问题。

但是,我希望能够从 cron 或可能从 Makefile 执行此操作(即没有 X11)

我尝试使用 emacs -nw 选项,但它抱怨 stdin 不是来自 tty 并且不会继续。

当我使用 emacs --batch 选项时,它似乎正在工作,但生成的 postscript 文件根本没有颜色。

有谁知道我如何在没有 X11 的情况下获得 ps-print-buffer-with-faces 来获得颜色?

【问题讨论】:

  • 只是一个想法:你可以在调用 emacs --batch 之前在 Makefile 中设置 TERM 环境变量吗?
  • 是的,我确实尝试过。这是我必须做的才能让它从我的 bash 脚本中工作,它确实允许我做颜色。但是当我从 cron 运行它时(即使设置了 TERM)它也不起作用。不过还是谢谢。

标签: emacs syntax-highlighting batch-processing x11


【解决方案1】:

这真的让我想起了一些回忆——我在 1990 年代写了一个这样的包,不幸的是,我丢失了源代码(这是在我开始使用版本控制系统之前很久)。

在批处理模式下使用 font-lock 的关键是通过将noninteractive 设置为 nil 来欺骗它相信它处于交互模式。

我只是将以下内容放在一起,保存了一个名为 ORIGINAL_BASENAME.ps 的后记文件。通过不传递文件名参数,您可以轻松地将其修改为直接打印到打印机。

#!/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)

与往常一样,Emacs 包在批处理模式下会打印大量无关紧要的消息。如果您使用的是类 UNIX 系统,则可以通过使用 2> /dev/null 重定向 stderr 来摆脱它们。

【讨论】:

  • 我按照你的建议设置它,然后回显它是否是交互式的,当我在批处理模式下运行它时它仍然认为它是非交互式的。所以,这是正确的想法,但却是“欺骗”它的错误方法。您可能会指出我的任何其他想法或文档,以欺骗 emacs 认为它​​被交互式调用?
  • @jrel,你试过我的脚本了吗,没用吗? (我发之前试过了,成功生成了postscript文件。)你能贴出你试过的代码吗?
  • 我首先尝试在现有代码中单独使用您的“技巧”(将 noninteractive 设置为 nil),但没有成功。我尝试剪切和粘贴您的代码目录,它工作得很好(如您所说)。因此,我将按原样集成您的代码并进行设置。非常感谢您的帮助。
  • 所以在将您的代码集成到我的系统后,我现在看到了问题所在。您的代码适用于语法前景色,但不适用于背景色。我要突出显示的代码具有非白色背景(和黑色前景)的文本,以便突出显示特定行。如果我切换前/后背景颜色,它们就会出现。所以你的把戏对我有用,但不是一个完整的解决方案。但感谢您提供有用的答案。
  • @jrel,我很高兴你设法让它工作,或者至少离解决方案更近了一步。一个问题,从交互式 Emacs 打印时,您是否也遇到过同样的问题?我只是好奇,因为我看不到我的代码如何改变 ps-print 的行为。
猜你喜欢
  • 1970-01-01
  • 2018-04-17
  • 2013-09-10
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 2012-02-18
  • 2011-09-05
  • 1970-01-01
相关资源
最近更新 更多