Hexo renderer plugin for emacs org-mode.
Switch to your hexo blog directory and run:
npm install https://github.com/MephistoMMM/hexo-renderer-org --save
Then restart your hexo server.
Now, hexo-renderer-org won’t start a new emacs server process in daemonize mode. It will use the activing one by connecting the exist emacs server socket file. You can use this codes to config the address of emacs server socket file.
org:
server_file: "~/.emacs.d/server/server" # <----- this is default value
You can configure this plugin in _config.yml
according to the backend you want to use.
If highlight.js is enough for you, here’s the minimal config:
org:
emacs: 'emacs'
emacsclient: 'emacsclient'
If you want to use emacs’s htmlize to syntax highlight your code block, you can use this config instead:
org:
emacs: 'emacs'
emacsclient: 'emacsclient'
htmlize: true # <--- for htmlize user, this MUST set true
theme: 'leuven'
Some options may not uesed on above example, here’s the doc:
config | description | default value |
---|---|---|
emacs | executable file of emacs | emacs |
emacsclient | executable file of emacsclient | emacsclient |
common | common org content you’ll use | #+OPTIONS: toc:nil num:nil\n#+BIND: org-html-postamble nil |
cachedir | where cache file located | ./hexo-org-cache/ |
clean_cache | set true to clean cache by ‘hexo clean’ | false |
theme | emacs’s theme you want to use | |
htmlize | use emacs’s htmlize to syntax highlight | false |
line_number | Enable line-number globally on src-block | false |
debug | Show more debug message | false |
daemonize | Enable/Disable use emacs server | true |
server_file | socket file of emacs server | ~/.emacs.d/server/server |
Create source/_posts/foobar.org
with followin content:
#+TITLE: Hello World
#+DATE: <2017-03-05 Sun 08:52>
#+LAYOUT: post
#+CATEGORIES: org-mode
#+TAGS: hexo, org-mode
Welcome to [[https://github.com/coldnew/hexo-renderer-org][coldnew/hexo-renderer-org]]!
#+HTML: <!-- more -->
You also can add some code block:
#+BEGIN_SRC js
console.log("hi");
#+END_SRC
org-mode has it’s own way to describe the front-matter.
Front-matter | org-mode | value |
---|---|---|
layout | #+LAYOUT | post/page |
title | #+TITLE | string |
date | #+DATE | <2017-04-15 Sat 12:30>, use M-x org-time-stamp to insert |
updated | #+UPDATED | <2017-04-15 Sat 12:30>, use M-x org-time-stamp to insert |
comments | #+COMMENTS | yes/no |
tags | #+TAGS | tag1, tag2, tag3 |
categories | #+CATEGORIES | string |
To insert date in org-mode, the default keybinding is C-c .
, you can also use C-u C-c .
instead.
For more tutorials, please see:
This renderer ONLY support org-mode 9.x
syntax, be careful there’s some conflict with org-mode 9.x and 8.x.
If you really want to use org-mode 8.x, here’s the guide.
Place #+HTML: <!-- more -->
in where you would like to add a Read more
.
If the emacs theme you want to use is not installed by default, you can setup the _config.yml
For example, if we want to use moe-theme for your code block, we need to edit _config.yml
like this:
org:
# skip ...
theme: 'moe-dark'
user_config: './emacs/init.el'
Then add following code to your ./emacs/init.el
.
;; install moe-theme and use it
(package-install 'moe-theme)
(require 'moe-theme)
If you want to make hexo clean
work with hexo-renderer-org, you can setup your _config.yml
.
org:
# skip ...
clean_cache: true
Note that the emacs-lisp cache in cachedir will be kept after hexo clean
, you can manually remove it if you want to re-fetch all emacs-lisp plugin.
You can add following to your _config.yml
to make line-number display on your src-block globally:
org:
# Make src-block has line-number (this won't make effect on example-block)
line_number: true
Or use org-mode’s standard method to add line-number manually:
#+BEGIN_SRC js -n
console.log("This is line 1")
#+END_SRC
If you still want to use CodeFalling/hexo-renderer-org method, which start emacs process to render post instead of using emacs daemon, you can switch to emacs process by setting _config.xml
org:
# disable use emacs server by set 'false'
daemonize: false
Yes, first you need to install org-download to your emacs.
Then add following to .dir-locals.el
at the top of your hexo project:
((nil .
((eval .
(progn
;; make drag-and-drop image save in the same name folder as org file
;; ex: `aa-bb-cc.org' then save image test.png to `aa-bb-cc/test.png'
(defun my-org-download-method (link)
(let ((filename
(file-name-nondirectory
(car (url-path-and-query
(url-generic-parse-url link)))))
(dirname (file-name-sans-extension buffer-file-name) ))
;; if directory not exist, create it
(unless (file-exists-p dirname)
(make-directory dirname))
;; return the path to save the download files
(expand-file-name filename dirname)))
;; only modify `org-download-method' in this project
(setq-local org-download-method 'my-org-download-method)
)))))