Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 23 additions & 42 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,76 +1,57 @@
'use strict';
var renderer = require('./lib/renderer');
var assign = require('object-assign');
var read_info = require('./lib/read-info');
var emacs = require('./lib/emacs');
let renderer = require('./lib/renderer');
let assign = require('object-assign');
let read_info = require('./lib/read-info');
let emacs = require('./lib/emacs');

var fs = require('fs');
var path = require('path');

// for detect if we use `hexo s'
var server_mode = false;
var emacs_server_start = false;
let fs = require('fs');
let path = require('path');

// Init option
hexo.config.org = assign({
emacs: 'emacs',
emacsclient: 'emacsclient', // user should not setup this if renderer work correctly
common: '#+OPTIONS: toc:nil num:nil\n#+BIND: org-html-postamble nil',
export_cfg: "(progn (package-initialize)(require 'org) (require 'org-clock) (require 'ox))", // FIXME: why not remove this ?
cachedir: './hexo-org-cache/',
clean_cache: false, // enable this to make 'hexo clean' also clean the cache
theme: '',
user_config: '',
htmlize: false,
line_number: false,
daemonize: true, // set false to disable use emacs server
debug: false
daemonize: true, // set true to use existing server
debug: false,
server_file: "~/.emacs.d/server/server"
}, hexo.config.org);

hexo.on('ready', function() {
// detect if current is execute for server, we have different method to handle emacs server exit.
// some people may use 'hexo generate --watch' or 'hexo generate -w', which we also need to keep emacs server exist
server_mode = process.argv.indexOf('server') > 0 || process.argv.indexOf('s') > 0 || process.argv.indexOf('--watch') > 0 || process.argv.indexOf('-w') > 0;

// detect if we are going to clear all cache file (the 'cachedir/emacs.d' will not remove )
if(process.argv.indexOf('clean') > 0 ) {
var dir = hexo.config.org.cachedir;
let dir = hexo.config.org.cachedir;
if (fs.existsSync(dir) && hexo.config.org.clean_cache) {
var files = fs.readdirSync(dir);
let files = fs.readdirSync(dir);
files.forEach(function (filename) {
var fullname = path.join(dir, filename);
var stats = fs.statSync(fullname);
let fullname = path.join(dir, filename);
let stats = fs.statSync(fullname);
if (!stats.isDirectory())
fs.unlink(fullname);
});
}
}

// start emacs server only on:
// hexo s
// hexo server
// hexo render
// hexo generator
// hexo g
if (server_mode || process.argv.indexOf('render') > 0 || process.argv.indexOf('generate') > 0 || process.argv.indexOf('g') > 0) {
// start emacs server
emacs.server.start(hexo);
emacs_server_start = true;
}

emacs.server
.check(hexo)
.then(emacs.server.load_config)
.catch(err => {
console.error(err);
process.exit(1);
});
});

// When time to exit hexo, kill emacs process
hexo.on('exit', function(err) {
// If use `hexo server`, the hexo will first enter `.on(exit)` event then start the server.
// that's why we skip emacs.server.stop() when first etner here with server mode.
if (server_mode) {
server_mode = false;
return;
}
if (emacs_server_start)
emacs.server.stop(hexo);
hexo.on('exit', err => {
if(err) console.error(err);
});

hexo.extend.renderer.register('org', 'html', renderer.bind(hexo), false);
hexo.extend.filter.register('before_post_render', read_info);
hexo.extend.renderer.register('org', 'html', renderer.bind(hexo), false);
Loading