现在使用 hexo github 在github上面写静态博客,刚开始使用markdown,后来因为比较喜欢用 org-mode,所以博文的格式都是 org
格式,使用插件 hexo-renderer-org来进行解析。
之前的环境为 Emacs 25.3.1 (Org mode 8.2.10) 一直没问题,但是因为org版本比较旧,插入链接如果不空格会出现链接一直延伸的问题,今天就更新了emacs26.1。
更新后使用新版的emacs修改之前博客的文章,保存后执行 hexo g
命令出现如下错误:
XXX==Error Here==>/Users/aoenian/ghblog/source/_posts/hello.org:
Trailing garbage following expression:
(node:10083) UnhandledPromiseRejectionWarning: TypeError: Cannot read property ‘parent’ of null
at Function.exports.update (/Users/aoenian/ghblog/node_modules/hexo-renderer-org/node_modules/cheerio/lib/parse.js:55:26)
at module.exports (/Users/aoenian/ghblog/node_modules/hexo-renderer-org/node_modules/cheerio/lib/parse.js:17:11)
at Function.exports.load (/Users/aoenian/ghblog/node_modules/hexo-renderer-org/node_modules/cheerio/lib/static.js:19:14)
at Promise (/Users/aoenian/ghblog/node_modules/hexo-renderer-org/lib/renderer.js:34:21)
at new Promise ()
at render_html (/Users/aoenian/ghblog/node_modules/hexo-renderer-org/lib/renderer.js:32:10)
at convert.then (/Users/aoenian/ghblog/node_modules/hexo-renderer-org/lib/renderer.js:94:16)
at
at process._tickCallback (internal/process/next_tick.js:182:7)
(node:10083) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:10083) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
在项目的 issue
里面查看到有相似的问题,
问题链接
但是没有解决,希望在这里能够找到答案。
如果大家有其他比较简单的方法使用 org-mode
在Github写博客,也希望告知一下
2 个赞
遇到了同样的问题,目前的解决办法是先用md了。。。
我用的org-octpress,先把org导出到html,再用hexo生成,不需要hexo-render-org解析。
我的相关配置
是的,不过它必须要你的 emacs 开启 daemon ,并在 hexo 的配置文件里指定 server 文件地址,我的配置如下:
org:
emacs: 'emacs'
emacsclient: 'emacsclient'
common: "#+SETUPFILE: ~/Dropbox/Blog/head.org"
line_number: true
user_config: "~/Dropbox/Blog/init.el"
debug: false
daemonize: true
server_file: "~/.emacs.d/server/server" # <----- this is default value
@guanghui.qu
@xhcoding
@MephistoMMM
谢谢大家,中间一段时间用pandoc进行格式转换,后面系统重做以后以及为了实现博客的语法高亮,又改回markdown了,后来就没有再测试了。
更新:
为了体验更好一些,最新配置如下:
首先,新增了函数 jk/insert-date
,该函数用于在 .org
文件行首插入当前日期。必须执行这个函数,因为后续函数的执行依赖该函数执行的结果。
(defun jk/insert-date ()
"Insert current date."
(interactive)
(insert "#+DATE: ")
;; (org-time-stamp t)
(insert (format-time-string "%Y/%m/%d %T"))
(insert "\n\n"))
其次,优化了 jk/md-export
函数,如下:
(defun jk/md-export ()
"Create front-matter of GFM-md.
Note that it just adapts to a title including most five words."
(interactive)
(save-buffer) ;; Save current buffer
(setq fname (car (split-string (buffer-name) "\\."))) ;; if current buffer is "hello-world.org", FNAME will be "hello-world"
(setq fdir "../_posts/") ;; Set export dir
(setq fnamed (concat fdir fname ".md")) ;; "hello-world.md"
(setq fnamel (split-string fname "-")) ;; Now, fnamel will be ("hello" "world")
;; Split the fnamel and join them with <space>, now ftitle will be "hello world"
(setq ftitle (concat "---\ntitle: "
(car fnamel) " "
(car (cdr fnamel)) " "
(car (cdr (cdr fnamel))) " "
(car (cdr (cdr (cdr fnamel)))) " "
(car (cdr (cdr (cdr (cdr fnamel))))) "\n"))
(write-region ftitle nil fnamed) ;; Add ftitle to a file named "hello-world.md"
;; Append date like "data: 2019/02/10 10:47:56" to "hello-world.md"
(beginning-of-buffer)
(forward-char 8)
(let (p1 p2)
(setq p1 (point))
(end-of-line)
(setq p2 (point))
(append-to-file "date: " nil fnamed)
(append-to-file p1 p2 fnamed)
(append-to-file "\nupdated: " nil fnamed)
(append-to-file (format-time-string "%Y/%m/%d %T") nil fnamed)
(append-to-file "\n---\n\n" nil fnamed))
(org-gfm-export-as-markdown) ;; Invoke gfm plugin to open a relative .md buffer
(replace-string ".." "") ;; ! Just for hexo-blog's special img-show format...
(append-to-file nil t fnamed) ;; Append the contents of "hello-world.md" to "hello-world.md" again
(kill-this-buffer)
(switch-window-then-maximize)) ;; Kill the "hello-world.md" generate by GFM plugin to keep you stay in current .org file
该函数,会自动格式化输出文件的头文件格式,如假设该当前文件为 xxx/_org/hello-world.org
,执行该函数后,会生成一个 xxx/_posts/hello-world.md
文件,该文件头部如:
---
title: hello world
date: 2018/06/09 12:46:29
updated: 2019/02/10 12:46:52
---
总结: 在要转换的 org
文件下,执行示例步骤
jk/insert-date
jk/md-export
即可,实现完美转换。
Hmm… 我在 windows 上从来未成功运行过 hexo-renderer-org
插件……
我写了个函数 jk/md-export
(很丑但依然温柔 ),它是基于 ox-gfm
插件的,运行它可以实现以下几个功能:
- 在 .org 文件所在目录生成对应的 .md 文件,如 hello-world.org 会生成 hello-world.md 文件
- 在生成 .md 文件中自动插入文件头,使得 hexo 可以识别,如
title: hello world
- 解决图片无法被 hexo 识别的问题,如引用
[[../images/gtd.jpg]]
会转为 ![/images/gtd.jpg]
附一张效果图:
附录:
目前运行良好,配合 magit 和 eshell 可以完全使用 Emacs 完成整个文章发布流程。
1 个赞