我喜欢在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?从而节省了启动时间?
答案 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
模式
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)))