blog-admin icon indicating copy to clipboard operation
blog-admin copied to clipboard

Write blog in emacs with hexo/org-page/nikola

[[https://travis-ci.org/CodeFalling/blog-admin][https://travis-ci.org/CodeFalling/blog-admin.svg]] [[https://github.com/syl20bnr/spacemacs][https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]]

  • blog-admin https://github.com/CodeFalling/blog-admin/issues Write blog in emacs with hexo, org-page or nikola.
  • Preview [[https://cloud.githubusercontent.com/assets/5436704/12700452/1aa686ea-c81e-11e5-92c6-5cd5e810ba35.gif]]
  • Install ** Melpa ** Manual
  1. ~git clone https://github.com/CodeFalling/blog-admin /path/to/blog-admin -b master~
  2. ~(add-to-load-path "/path/to/blog-admin")~
  3. ~(require 'blog-admin)~
  4. You may have to install s f ctable as depends ** Spacemacs If you use a private spacemacs layer, just add ~blog-admin~ in your ~package.el~ then add below code into your ~private-layer-name/init-blog-admin~

If you use a standalone ~.spacemacs~ file, just add ~blog-admin~ in your ~dotspacemacs-additional-packages~, then add below code into ~dotspacemacs/user-config()~

If installing from github(not melpa) #+BEGIN_SRC emacs-lisp (blog-admin :location (recipe :fetcher github :repo "codefalling/blog-admin")) #+END_SRC in your layer's packages, then

#+BEGIN_SRC emacs-lisp (use-package blog-admin :init (progn ;; your config (setq blog-admin-backend-type 'hexo) (setq blog-admin-backend-path "~/codefalling.com") (setq blog-admin-backend-new-post-in-drafts t) (setq blog-admin-backend-new-post-with-same-name-dir t) )) #+END_SRC

  • Usage
  • ~(require 'blog-admin)~ first
  • ~M-x blog-admin-start~ to start this.
  • ~d~ to delete current post
  • ~w~ to write new post
  • ~s~ to switch between draft and categories

** Open post after create new post #+BEGIN_SRC emacs-lisp (add-hook 'blog-admin-backend-after-new-post-hook 'find-file) #+END_SRC

  • hexo ** orgmode & markdown Both ~orgmode~ or ~markdown~ works well.You can even use them at the same time.But this plugin do nothing about render.If you want to make orgmode work with hexo,you'd better use [[https://github.com/CodeFalling/hexo-renderer-org][hexo-renderer-org]]. ** configure #+BEGIN_SRC emacs-lisp (setq blog-admin-backend-path "~/blog") (setq blog-admin-backend-type 'hexo) (setq blog-admin-backend-new-post-in-drafts t) ;; create new post in drafts by default (setq blog-admin-backend-new-post-with-same-name-dir t) ;; create same-name directory with new post (setq blog-admin-backend-hexo-config-file "my_config.yml") ;; default assumes _config.yml #+END_SRC

  • org-page

[[https://github.com/kelvinh/org-page][org-page]] is pure emacs static blog generator.

** configure #+BEGIN_SRC emacs-lisp (setq blog-admin-backend-type 'org-page) (setq blog-admin-backend-path "~/code/blog") (setq blog-admin-backend-new-post-in-drafts t) (setq blog-admin-backend-new-post-with-same-name-dir t) (setq blog-admin-backend-org-page-drafts "_drafts") ;; directory to save draft (setq blog-admin-backend-org-page-config-file "/path/to/org-page/config.el") ;; if nil init.el is used #+END_SRC

  • nikola [[https://getnikola.com/][Nikola]] is Python based static blog generator that supports org-mode posts with a bunch of other formats.

To be able to use blog-admin on your Nikola site, you will need to install the [[https://plugins.getnikola.com/#tags][tags plugin]] and Nikola >= 7.7.9.

** configure #+BEGIN_SRC emacs-lisp (setq blog-admin-backend-type 'nikola) (setq blog-admin-backend-path "~/code/blog") (setq blog-admin-backend-new-post-in-drafts t) (setq blog-admin-backend-nikola-executable "~/.venvs/nikola/bin/nikola") ;; path to nikola executable (setq blog-admin-backend-nikola-config-file "my_conf.py") ;; conf.py is default #+END_SRC

  • Thanks
  1. I stole idea that operating posts in table from [[https://github.com/yoshinari-nomura/org-octopress][org-octopress]].
  2. The table build on a awesome library: [[https://github.com/kiwanami/emacs-ctable][emacs-ctable]].
  3. Thanks for [[https://github.com/magnars/s.el][s]] and [[https://github.com/rejeep/f.el][f]] who provide a modern API for emacs.