diff options
author | stardiviner <numbchild@gmail.com> | 2018-02-10 08:25:53 +0800 |
---|---|---|
committer | stardiviner <numbchild@gmail.com> | 2018-02-10 08:25:53 +0800 |
commit | 8b50e6cf5add8857abdb1c1c5175a73fcea70d33 (patch) | |
tree | a01a69f6a4052bddb2019ecb4cdd502c2a5bdfcc | |
parent | f643a75bd13c9c8d04452512b0452489a999c112 (diff) | |
download | org-mode-8b50e6cf5add8857abdb1c1c5175a73fcea70d33.tar.gz |
* ob-smiles.el (supporting SMILES in Org-mode Babel): Add.
Copied version.
-rw-r--r-- | contrib/lisp/ob-smiles.el | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/contrib/lisp/ob-smiles.el b/contrib/lisp/ob-smiles.el new file mode 100644 index 0000000..ef2ab15 --- /dev/null +++ b/contrib/lisp/ob-smiles.el @@ -0,0 +1,54 @@ +;;; ob-smiles.el --- Org-mode Babel support for SMILES. +;;; -*- coding: utf-8 -*- + +;; Keywords: org babel SMILES +;; Version: 0.0.1 +;; Package-Requires: ((smiles-mode "0.0.1") (org "8")) + +;;; Commentary: + +;;; I copy code from: +;;; http://kitchingroup.cheme.cmu.edu/blog/2016/03/26/A-molecule-link-for-org-mode + +;; Author: John Kitchin [jkitchin@andrew.cmu.edu] +;; Maintainer: stardiviner [numbchild@gmail.com] + +;;; Code: + +;; Org-mode Babel +(defun org-babel-execute:smiles (body params) + "Execute SMILES babel `BODY' with `PARAMS'." + (shell-command-to-string + (format "obabel -:\"%s\" -osvg 2> /dev/null" body))) + +;; Org-mode link +(defun molecule-jump (name) + "Jump to molecule `NAME' definition." + (org-mark-ring-push) + (org-open-link-from-string (format "[[%s]]" path))) + +(defun molecule-export (path desc backend) + "Export molecule to HTML format on `PATH' with `DESC' and `BACKEND'." + (let ((name (save-window-excursion + (molecule-jump path) + (org-element-property :name (org-element-context))))) + (cond + ((eq 'html backend) + (format "<a href=\"#%s\">%s</a>" name name))))) + +(org-add-link-type + "molecule" + 'molecule-jump + 'molecule-export) + +;; org-mode element +(org-element-map (org-element-parse-buffer) + 'src-block + (lambda (src) + (when (string= "smiles" (org-element-property :language src)) + (org-element-property :name src)))) + + +(provide 'ob-smiles) + +;;; ob-smiles.el ends here |