Nikola

From WikEmacs
Revision as of 13:50, 21 February 2017 by Elvince (talk | contribs) (nikola.el)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Nikola is a static site generator, written in Python. It natively supports RestructuredText or Markdown, and it is also possible to write with orgmode thanks to a plugin.

Nikola.el

Nikola.el is a wrapper around Nikola commands, allowing to create posts, run or publish your site from emacs.

To write with org-mode, we still need org2nikola (see below).

Install nikola's org plugin

Once you have setup your Nikola site, install the plugin with

    nikola plugin -i orgmode
and add this in your config.py:
   # Add the orgmode compiler to your COMPILERS dict.
   COMPILERS["orgmode"] = ('.org',)
   # Add org files to your POSTS, PAGES
   POSTS = POSTS + (("posts/*.org", "posts", "post.tmpl"),)
   PAGES = PAGES + (("stories/*.org", "posts", "post.tmpl"),)

Blog from orgmode

Now add Nikola's header in a comment block at the top of your new post:

   #+BEGIN_COMMENT 
   .. title: a title
   .. slug: a-title
   .. date: 2014-08-07 10:57:15 UTC-04:00 
   .. tags: one, two
   .. link: 
   .. description: 
   .. type: text 
   #+END_COMMENT

You can now write a blog post using orgmode and Nikola.

Leverage the work with org2nikola

org2nikola (github) is a little package (much inspired by org2blog) that allows to post a subtree from within your org file.

Install it with packages.el (via MELPA), put the cursor in the subtree you want to publish and call M-x org2nikola-export-subtree. It is the only command currently available. A drawback is that it publishes the post as html with a ".wp" extension, not in the org format (which is good for people coming from wordpress).

Other utilities are in development. The command M-x nikola-post-subtree will ask for missing properties and publish the post, keeping the org format. You also have M-x nikola-set-post-properties to interactively set the required properties (title, description, date, tags).