Emacs在批处理模式下如何进行htmlize操作?

8

我喜欢使用Emacs中的htmlize-file将Clojure源文件转换为HTML。

我希望能够从Linux命令行或者从Clojure本身以编程方式使用它。

我尝试过:

$ emacs --eval "(htmlize-file \"/home/john/file.clj\" ) (kill-emacs)"

并且

$ emacs -batch --eval "(htmlize-file \"/home/john/file.clj\" )"

两种方法都可以使用,但需要注意以下几点。
第一种方法打开了一个X窗口,看起来有点不太优雅,但它确实做到了与缓冲区中完全相同的高亮显示,这正是我想要的。
第二种方法可以批量处理,但它只会将字符串变成斜体,我猜测它没有加载clojure-mode或我喜欢的颜色方案。
有人能找到让第二种方法给出与第一种相同结果的方法吗? 它们似乎都在eval(htmli....)之前加载了我的.emacs文件。
此外,有没有办法将命令发送到已经运行的emacs?从而节省启动时间?
5个回答

5

emacsclient -e "(htmlize-file \"/home/john/file.clj\" )" -a ""

可以使用这个命令将Clojure文件转换为HTML格式。其中,/home/john/file.clj是要转换的文件路径。


我也想接受这个答案,因为它回答了相关问题!我至少可以给它点赞。谢谢。 - John Lawrence Aspden

5

使用带有-nw的第一个选项是否有效?这应该可以防止打开X窗口,但仍应存在足够的emacs“GUI”部分来初始化面部系统。它仍不像-batch那样优雅(如果从非终端进程(例如crontab)运行,则会失败),但它会更少烦人。


4
我还无法给您一个完美的答案(我需要进行一些调查),但是我已经了解到当Emacs在批处理模式下调用时,会忽略像字体颜色这样的特定于显示的命令。这使得任何使用显示属性(如htmlize)的脚本在批处理模式下执行都会有问题。
实际上,我对修改htmlize以允许传递颜色主题而不是使用当前主题非常感兴趣;在我的Emacs会话中看起来很好的东西未必导出为HTML后也会好看。例如,我倾向于在htmlize中使用blipp-blopp,但在编码时我使用midnight、comidia或charcoal。我猜测如果htmlize可以直接接受颜色主题规范,它可能就能避免检查当前字体锁定属性,并且可以从批处理模式下工作。
抱歉我不能提供更多帮助。

好的,上面的东西都可以工作。感谢您的辛苦! - John Lawrence Aspden

2
以下Elisp代码告诉Htmlize发出CSS类名而不是原始样式。
(setq org-export-htmlize-output-type 'css)

然后,您可以在HTML文件中添加CSS以获得所需的任何颜色。这适用于Emacs批处理模式。


根据 ox-html.el 中的文档,这是推荐的方法。 - Michaël
这个变量已经改为org-html-htmlize-output-type - Michaël

1

这里有一个使用htmlize的例子,是在--batch模式下。

http://sebastien.kirche.free.fr/emacs_stuff/elisp/my-htmlize.el

;; Make sure the the htmlize library is in load-path.
;; You might want to load ~/.emacs

;; USAGE:
;;     emacs -batch -l my-htmlize.el INFILE > OUTFILE


;; Example:
(custom-set-faces 
 '(default                      ((t (:foreground "#ffffff" :background "black"))))
 '(font-lock-builtin-face       ((t (:foreground "#ff0000"))))
 '(font-lock-comment-face       ((t (:bold t :foreground "#333300"))))
 '(font-lock-constant-face      ((t (:foreground "magenta"))))
 '(font-lock-function-name-face ((t (:bold t :foreground "Blue"))))
 '(font-lock-keyword-face       ((t (:foreground "yellow3"))))
 '(font-lock-string-face        ((t (:foreground "light blue"))))
 '(font-lock-type-face      ((t (:foreground "green"))))
 '(font-lock-variable-name-face ((t (:foreground "cyan" :bold t))))
 '(font-lock-warning-face       ((t (:foreground "red" :weight bold)))))

(setq htmlize-use-rgb-map 'force)
(require 'htmlize)

(find-file (pop command-line-args-left))
(font-lock-fontify-buffer)
(with-current-buffer (htmlize-buffer)
  (princ (buffer-string)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接