Emacs以批处理模式htmlize?

时间:2010-08-28 15:36:17

标签: emacs clojure

我喜欢在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模式或我最喜欢的配色方案。

有没有人能找到第二个版本的方法来提供与第一个版本相同的结果? 在评估(htmli ....)位之前,它们似乎都加载了我的.emacs文件。

此外,有没有办法将命令发送到已经运行的emacs?从而节省了启动时间?

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

我还不能给你一个理想的答案(我将对此进行一些研究),但我已经读过,当在批处理模式下调用时,Emacs会忽略特定于显示的命令,如font-lock着色。这使得执行任何使用显示属性(如htmlize)的脚本在批处理模式下都会出现问题。

我实际上非常有兴趣在某些时候修改htmlize以允许将颜色主题传递给它而不是使用当前主题;在我的Emacs会话中看起来不错的东西看起来不一定会很好地导出到HTML。例如,我倾向于使用blipp-blopp来进行htmlize,但我在编码时使用午夜,comidia或木炭。我猜测如果htmlize可以直接接受颜色主题规范,它可能会避免检查当前的字体锁属性,然后可以从批处理模式工作。

抱歉,我无法提供更多帮助。

答案 2 :(得分:4)

使用第一个使用-nw工作吗?这应该会阻止X窗口被打开,但是仍然应该有足够的emacs存在的'GUI'部分来初始化faces系统。它仍然没有-batch那么优雅(如果从非终端进程运行它会失败,例如crontab)但它会减少刺激性。

答案 3 :(得分:1)

以下Elisp代码告诉Htmlize发出CSS类名而不是原始样式。

(setq org-export-htmlize-output-type 'css)

然后,您可以将CSS添加到HTML文件中,以获得您想要的任何颜色。这适用于批处理模式下的Emacs。

答案 4 :(得分:1)

有一个例子在--batch模式

中使用htmlize

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