Last active
December 21, 2015 01:49
-
-
Save buzztaiki/6230781 to your computer and use it in GitHub Desktop.
rstをそれっぽくプレビューするやつ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;;; -*- lexical-binding: t -*- | |
| ;;; Usage: | |
| ;; (add-hook 'rst-mode-hook 'rst-preview:turn-on) | |
| (require 'deferred) | |
| (require 'concurrent) | |
| (require 'shr) | |
| (defvar rst-preview:rst2html-command "rst2html") | |
| (defvar rst-preview:render-buffer-name "*rst2html:render*") | |
| (defvar rst-preview:semaphore (cc:semaphore-create 1)) | |
| (defun rst-preview (&optional buffer) | |
| (interactive "b") | |
| (setq buffer (or buffer (current-buffer))) | |
| (let ((file (make-temp-file "rst-preview-"))) | |
| (with-temp-file file (insert-buffer buffer)) | |
| (deferred:try | |
| (deferred:$ | |
| (cc:semaphore-acquire rst-preview:semaphore) | |
| (deferred:process-bufferc it | |
| rst-preview:rst2html-command file) | |
| (deferred:nextc it 'rst-preview:render-and-kill)) | |
| :finally | |
| (lambda (x) | |
| (ignore-errors (delete-file file)) | |
| (cc:semaphore-release rst-preview:semaphore))))) | |
| (defun rst-preview:render-and-kill (htmlbuf) | |
| (unwind-protect | |
| (with-current-buffer (get-buffer-create rst-preview:render-buffer-name) | |
| (erase-buffer) | |
| (shr-insert-document | |
| (with-current-buffer htmlbuf | |
| (libxml-parse-html-region (point-min) (point-max)))) | |
| (display-buffer (current-buffer))) | |
| (kill-buffer htmlbuf))) | |
| (defun rst-preview:turn-on () | |
| (interactive) | |
| (add-hook 'after-save-hook 'rst-preview nil t)) | |
| (provide 'rst-preview) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment