dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

pdf-dev.el (3008B)


      1 ;;; pdf-dev.el --- Mother's little development helper  -*- lexical-binding: t; -*-
      2 
      3 ;; Copyright (C) 2015  Andreas Politz
      4 
      5 ;; Author: Andreas Politz <politza@hochschule-trier.de>
      6 ;; Keywords:
      7 
      8 ;; This program is free software; you can redistribute it and/or modify
      9 ;; it under the terms of the GNU General Public License as published by
     10 ;; the Free Software Foundation, either version 3 of the License, or
     11 ;; (at your option) any later version.
     12 
     13 ;; This program is distributed in the hope that it will be useful,
     14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 ;; GNU General Public License for more details.
     17 
     18 ;; You should have received a copy of the GNU General Public License
     19 ;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
     20 
     21 ;;; Commentary:
     22 ;;
     23 ;; This file is only meant for developers.  The entry point is
     24 ;; pdf-dev-minor-mode, which see.
     25 
     26 ;;; Code:
     27 
     28 (defvar pdf-dev-root-directory
     29   (file-name-directory
     30    (directory-file-name
     31     (file-name-directory load-file-name))))
     32 
     33 (defun pdf-dev-reload ()
     34   "Reload Lisp files from source."
     35   (interactive)
     36   (let ((default-directory (expand-file-name
     37                             "lisp"
     38                             pdf-dev-root-directory))
     39         loaded)
     40     (dolist (file (directory-files default-directory nil "\\`pdf-\\w*\\.el\\'"))
     41       (push file loaded)
     42       (load-file file))
     43     (message "Loaded %s" (mapconcat 'identity loaded " "))))
     44 
     45 (define-minor-mode pdf-dev-minor-mode
     46   "Make developing pdf-tools easier.
     47 
     48 It does the following:
     49 
     50 Quits the server and sets `pdf-info-epdfinfo-program' to
     51 ../server/epdfinfo.
     52 
     53 Installs a `compilation-finish-functions' which will restart
     54 epdfinfo after a successful recompilation.
     55 
     56 Sets up `load-path' and reloads all PDF Tools Lisp files."
     57   :group 'pdf-dev
     58   (let ((lisp-dir (expand-file-name "lisp" pdf-dev-root-directory)))
     59     (setq load-path (remove lisp-dir load-path))
     60     (cond
     61      (pdf-dev-minor-mode
     62       (add-hook 'compilation-finish-functions 'pdf-dev-compilation-finished)
     63       (add-to-list 'load-path lisp-dir)
     64       (setq pdf-info-epdfinfo-program
     65             (expand-file-name
     66              "epdfinfo"
     67              (expand-file-name "server" pdf-dev-root-directory)))
     68       (pdf-info-quit)
     69       (pdf-dev-reload))
     70      (t
     71       (remove-hook 'compilation-finish-functions 'pdf-dev-compilation-finished)))))
     72 
     73 (defun pdf-dev-compilation-finished (buffer status)
     74   "Restart the epdfinfo server.
     75 
     76 BUFFER is the PDF buffer and STATUS is the compilation status of
     77 building epdfinfo."
     78   (with-current-buffer buffer
     79     (when (and (equal status "finished\n")
     80                (file-equal-p
     81                 (expand-file-name "server" pdf-dev-root-directory)
     82                 default-directory))
     83       (message "Restarting epdfinfo server")
     84       (pdf-info-quit)
     85       (let ((pdf-info-restart-process-p t))
     86         (pdf-info-process-assert-running)))))
     87 
     88 (provide 'pdf-dev)
     89 ;;; pdf-dev.el ends here