72 lines
2.1 KiB
EmacsLisp
72 lines
2.1 KiB
EmacsLisp
|
|
(require 'evil)
|
||
|
|
(require 'scribble)
|
||
|
|
(require 'comint)
|
||
|
|
|
||
|
|
(defun insert-lozenge ()
|
||
|
|
"inserts the lozenge character for use with Pollen"
|
||
|
|
;; enables function through M-x
|
||
|
|
(interactive)
|
||
|
|
;; insert the proper character
|
||
|
|
(insert (make-char
|
||
|
|
'mule-unicode-2500-33ff 34 42)))
|
||
|
|
|
||
|
|
(defcustom scribble-target-format "pdf"
|
||
|
|
"Options to build scribble document"
|
||
|
|
:type 'string
|
||
|
|
:group 'scribble-mode)
|
||
|
|
|
||
|
|
(defun scribble-build ()
|
||
|
|
"Build scribble document"
|
||
|
|
(interactive)
|
||
|
|
(setq scribble-build-options
|
||
|
|
(if (string= scribble-target-format "pdf")
|
||
|
|
"--pdf"
|
||
|
|
"--html"))
|
||
|
|
(let* ((tmp-buf (current-buffer))
|
||
|
|
(file-name (buffer-file-name))
|
||
|
|
(cmd (concat "scribble "
|
||
|
|
scribble-build-options
|
||
|
|
" " file-name))
|
||
|
|
(buf-name "*scribble compilation *"))
|
||
|
|
(if (fboundp 'compilation-start)
|
||
|
|
(compilation-start cmd nil #'(lambda (mode-name)
|
||
|
|
buf-name))
|
||
|
|
(compile-internal cmd "no more errors" buf-name))))
|
||
|
|
|
||
|
|
(defun scribble-set-target-format ()
|
||
|
|
(interactive)
|
||
|
|
(let ((fmt (read-string
|
||
|
|
"Output format:")))
|
||
|
|
(if (or (string= fmt "pdf")
|
||
|
|
(string= fmt "html"))
|
||
|
|
(setq scribble-target-format fmt)
|
||
|
|
(message "Unsupported format %s\n" fmt))))
|
||
|
|
|
||
|
|
(defun scribble-view ()
|
||
|
|
(interactive)
|
||
|
|
(let* ((file-name (concat (file-name-base (buffer-file-name))
|
||
|
|
"." scribble-target-format))
|
||
|
|
(cmd "open")
|
||
|
|
(tmp-buf (current-buffer)))
|
||
|
|
(apply 'make-comint cmd cmd nil (list file-name))
|
||
|
|
(switch-to-buffer tmp-buf)
|
||
|
|
(switch-to-buffer-other-window (concat "*" cmd "*"))))
|
||
|
|
|
||
|
|
(define-minor-mode evil-scribble-mode
|
||
|
|
"Buffer local minor mode for evil-scribble "
|
||
|
|
:init-value nil
|
||
|
|
:lighter "EvilScribble"
|
||
|
|
:keymap (make-sparse-keymap)
|
||
|
|
:group 'evil-scribble)
|
||
|
|
|
||
|
|
(mapc #'(lambda (state)
|
||
|
|
(evil-define-key state evil-scribble-mode-map
|
||
|
|
(kbd "M-b") 'scribble-build
|
||
|
|
(kbd "M-f") 'scribble-set-target-format
|
||
|
|
(kbd "M-v") 'scribble-view))
|
||
|
|
'(normal insert))
|
||
|
|
|
||
|
|
(global-set-key "\M-\\" 'insert-lozenge)
|
||
|
|
|
||
|
|
(provide 'evil-scribble)
|