summaryrefslogtreecommitdiff
path: root/elpa/pdf-tools-20200512.1524/pdf-misc.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/pdf-tools-20200512.1524/pdf-misc.el')
-rw-r--r--elpa/pdf-tools-20200512.1524/pdf-misc.el287
1 files changed, 287 insertions, 0 deletions
diff --git a/elpa/pdf-tools-20200512.1524/pdf-misc.el b/elpa/pdf-tools-20200512.1524/pdf-misc.el
new file mode 100644
index 0000000..73468db
--- /dev/null
+++ b/elpa/pdf-tools-20200512.1524/pdf-misc.el
@@ -0,0 +1,287 @@
+;;; pdf-misc.el --- Miscellaneous commands for PDF buffer.
+
+;; Copyright (C) 2013, 2014 Andreas Politz
+
+;; Author: Andreas Politz <politza@fh-trier.de>
+;; Keywords: files, multimedia
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+
+
+(require 'pdf-view)
+(require 'pdf-util)
+(require 'imenu)
+
+
+
+(defvar pdf-misc-minor-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "I") 'pdf-misc-display-metadata)
+ (define-key map (kbd "C-c C-p") 'pdf-misc-print-document)
+ map)
+ "Keymap used in `pdf-misc-minor-mode'.")
+
+;;;###autoload
+(define-minor-mode pdf-misc-minor-mode
+ "FIXME: Not documented."
+ nil nil nil)
+
+;;;###autoload
+(define-minor-mode pdf-misc-size-indication-minor-mode
+ "Provide a working size indication in the mode-line."
+ nil nil nil
+ (pdf-util-assert-pdf-buffer)
+ (cond
+ (pdf-misc-size-indication-minor-mode
+ (unless (assq 'pdf-misc-size-indication-minor-mode
+ mode-line-position)
+ (setq mode-line-position
+ `((pdf-misc-size-indication-minor-mode
+ (:eval (pdf-misc-size-indication)))
+ ,@mode-line-position))))
+ (t
+ (setq mode-line-position
+ (cl-remove 'pdf-misc-size-indication-minor-mode
+ mode-line-position :key 'car-safe)))))
+
+(defun pdf-misc-size-indication ()
+ "Return size indication string for the mode-line."
+ (let ((top (= (window-vscroll nil t) 0))
+ (bot (>= (+ (- (nth 3 (window-inside-pixel-edges))
+ (nth 1 (window-inside-pixel-edges)))
+ (window-vscroll nil t))
+ (cdr (pdf-view-image-size t)))))
+ (cond
+ ((and top bot) " All")
+ (top " Top")
+ (bot " Bot")
+ (t (format
+ " %d%%%%"
+ (ceiling
+ (* 100 (/ (float (window-vscroll nil t))
+ (cdr (pdf-view-image-size t))))))))))
+
+(defvar pdf-misc-menu-bar-minor-mode-map (make-sparse-keymap)
+ "The keymap used in `pdf-misc-menu-bar-minor-mode'.")
+
+(easy-menu-define nil pdf-misc-menu-bar-minor-mode-map
+ "Menu for PDF Tools."
+ `("PDF Tools"
+ ["Go Backward" pdf-history-backward
+ :visible (bound-and-true-p pdf-history-minor-mode)
+ :active (and (bound-and-true-p pdf-history-minor-mode)
+ (not (pdf-history-end-of-history-p)))]
+ ["Go Forward" pdf-history-forward
+ :visible (bound-and-true-p pdf-history-minor-mode)
+ :active (not (pdf-history-end-of-history-p))]
+ ["--" nil
+ :visible (derived-mode-p 'pdf-virtual-view-mode)]
+ ["Next file" pdf-virtual-buffer-forward-file
+ :visible (derived-mode-p 'pdf-virtual-view-mode)
+ :active (pdf-virtual-document-next-file
+ (pdf-view-current-page))]
+ ["Previous file" pdf-virtual-buffer-backward-file
+ :visible (derived-mode-p 'pdf-virtual-view-mode)
+ :active (not (eq 1 (pdf-view-current-page)))]
+ ["--" nil
+ :visible (bound-and-true-p pdf-history-minor-mode)]
+ ["Add text annotation" pdf-annot-mouse-add-text-annotation
+ :visible (bound-and-true-p pdf-annot-minor-mode)
+ :keys "\\[pdf-annot-add-text-annotation]"]
+ ("Add markup annotation"
+ :active (pdf-view-active-region-p)
+ :visible (and (bound-and-true-p pdf-annot-minor-mode)
+ (pdf-info-markup-annotations-p))
+ ["highlight" pdf-annot-add-highlight-markup-annotation]
+ ["squiggly" pdf-annot-add-squiggly-markup-annotation]
+ ["underline" pdf-annot-add-underline-markup-annotation]
+ ["strikeout" pdf-annot-add-strikeout-markup-annotation])
+ ["--" nil :visible (bound-and-true-p pdf-annot-minor-mode)]
+ ["Display Annotations" pdf-annot-list-annotations
+ :help "List all annotations"
+ :visible (bound-and-true-p pdf-annot-minor-mode)]
+ ["Display Attachments" pdf-annot-attachment-dired
+ :help "Display attachments in a dired buffer"
+ :visible (featurep 'pdf-annot)]
+ ["Display Metadata" pdf-misc-display-metadata
+ :help "Display information about the document"
+ :visible (featurep 'pdf-misc)]
+ ["Display Outline" pdf-outline
+ :help "Display documents outline"
+ :visible (featurep 'pdf-outline)]
+ "--"
+ ("Render Options"
+ ["Printed Mode" (lambda ()
+ (interactive)
+ (pdf-view-printer-minor-mode 'toggle))
+ :style toggle
+ :selected pdf-view-printer-minor-mode
+ :help "Display the PDF as it would be printed."]
+ ["Midnight Mode" (lambda ()
+ (interactive)
+ (pdf-view-midnight-minor-mode 'toggle))
+ :style toggle
+ :selected pdf-view-midnight-minor-mode
+ :help "Apply a color-filter appropriate for past midnight reading."])
+ "--"
+ ["Copy region" pdf-view-kill-ring-save
+ :keys "\\[kill-ring-save]"
+ :active (pdf-view-active-region-p)]
+ "--"
+ ["Isearch document" isearch-forward
+ :visible (bound-and-true-p pdf-isearch-minor-mode)]
+ ["Occur document" pdf-occur
+ :visible (featurep 'pdf-occur)]
+ "--"
+ ["Locate TeX source" pdf-sync-backward-search-mouse
+ :visible (and (featurep 'pdf-sync)
+ (equal last-command-event
+ last-nonmenu-event))]
+ ["--" nil :visible (and (featurep 'pdf-sync)
+ (equal last-command-event
+ last-nonmenu-event))]
+ ["Print" pdf-misc-print-document
+ :active (and (pdf-view-buffer-file-name)
+ (file-readable-p (pdf-view-buffer-file-name)))]
+ ["Create image" pdf-view-extract-region-image
+ :help "Create an image of the page or the selected region(s)."]
+ ["Create virtual PDF" pdf-virtual-buffer-create
+ :help "Create a PDF containing all documents in this directory."
+ :visible (bound-and-true-p pdf-virtual-global-minor-mode)]
+ "--"
+ ["Revert buffer" pdf-view-revert-buffer
+ :visible (pdf-info-writable-annotations-p)]
+ "--"
+ ["Customize" pdf-tools-customize]))
+
+;;;###autoload
+(define-minor-mode pdf-misc-menu-bar-minor-mode
+ "Display a PDF Tools menu in the menu-bar."
+ nil nil nil
+ (pdf-util-assert-pdf-buffer))
+
+(defvar pdf-misc-context-menu-minor-mode-map
+ (let ((kmap (make-sparse-keymap)))
+ (define-key kmap [down-mouse-3] 'pdf-misc-popup-context-menu)
+ kmap))
+
+;;;###autoload
+(define-minor-mode pdf-misc-context-menu-minor-mode
+ "Provide a right-click context menu in PDF buffers.
+
+\\{pdf-misc-context-menu-minor-mode-map}"
+ nil nil nil
+ (pdf-util-assert-pdf-buffer))
+
+(defun pdf-misc-popup-context-menu (event)
+ "Popup a context menu at position determined by EVENT."
+ (interactive "@e")
+ (popup-menu
+ (cons 'keymap
+ (cddr (lookup-key pdf-misc-menu-bar-minor-mode-map
+ [menu-bar PDF\ Tools])))))
+
+(defun pdf-misc-display-metadata ()
+ "Display all available metadata in a separate buffer."
+ (interactive)
+ (pdf-util-assert-pdf-buffer)
+ (let* ((buffer (current-buffer))
+ (md (pdf-info-metadata)))
+ (with-current-buffer (get-buffer-create "*PDF-Metadata*")
+ (let* ((inhibit-read-only t)
+ (pad (apply' max (mapcar (lambda (d)
+ (length (symbol-name (car d))))
+ md)))
+ (fmt (format "%%%ds:%%s\n" pad))
+ window)
+ (erase-buffer)
+ (setq header-line-format (buffer-name buffer)
+ buffer-read-only t)
+ (font-lock-mode 1)
+ (font-lock-add-keywords nil
+ '(("^ *\\(\\(?:\\w\\|-\\)+\\):"
+ (1 font-lock-keyword-face))))
+ (dolist (d md)
+ (let ((key (car d))
+ (val (cdr d)))
+ (cl-case key
+ (keywords
+ (setq val (mapconcat 'identity val ", "))))
+ (let ((beg (+ (length (symbol-name key)) (point) 1))
+ (fill-prefix
+ (make-string (1+ pad) ?\s)))
+ (insert (format fmt key val))
+ (fill-region beg (point) )))))
+ (goto-char 1)
+ (display-buffer (current-buffer)))
+ md))
+
+(defgroup pdf-misc nil
+ "Miscellaneous options for PDF documents."
+ :group 'pdf-tools)
+
+(define-obsolete-variable-alias 'pdf-misc-print-programm
+ 'pdf-misc-print-program "1.0")
+(defcustom pdf-misc-print-programm nil
+ "The program used for printing.
+
+It is called with one argument, the PDF file."
+ :group 'pdf-misc
+ :type 'file)
+
+(define-obsolete-variable-alias 'pdf-misc-print-programm-args
+ 'pdf-misc-print-program-args "1.0")
+(defcustom pdf-misc-print-programm-args nil
+ "List of additional arguments passed to `pdf-misc-print-program'."
+ :group 'pdf-misc
+ :type '(repeat string))
+
+(defun pdf-misc-print-programm (&optional interactive-p)
+ (or (and pdf-misc-print-programm
+ (executable-find pdf-misc-print-programm))
+ (when interactive-p
+ (let* ((default (car (delq nil (mapcar
+ 'executable-find
+ '("gtklp" "xpp" "gpr")))))
+ buffer-file-name
+ (program
+ (expand-file-name
+ (read-file-name
+ "Print with: " default nil t nil 'file-executable-p))))
+ (when (and program
+ (executable-find program))
+ (when (y-or-n-p "Save choice using customize ?")
+ (customize-save-variable
+ 'pdf-misc-print-program program))
+ (setq pdf-misc-print-program program))))))
+
+(defun pdf-misc-print-document (filename &optional interactive-p)
+ (interactive
+ (list (pdf-view-buffer-file-name) t))
+ (cl-check-type filename (and string file-readable))
+ (let ((program (pdf-misc-print-program interactive-p))
+ (args (append pdf-misc-print-programm-args (list filename))))
+ (unless program
+ (error "No print program available"))
+ (apply #'start-process "printing" nil program args)
+ (message "Print job started: %s %s"
+ program (mapconcat #'identity args " "))))
+
+
+(provide 'pdf-misc)
+
+;;; pdf-misc.el ends here
Copyright 2019--2024 Marius PETER