Skip to content

Instantly share code, notes, and snippets.

@buzztaiki
Last active December 21, 2015 01:49
Show Gist options
  • Select an option

  • Save buzztaiki/6230781 to your computer and use it in GitHub Desktop.

Select an option

Save buzztaiki/6230781 to your computer and use it in GitHub Desktop.
rstをそれっぽくプレビューするやつ
;;; -*- 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