;;; doc-view.el --- View PDF/PostScript/DVI files in Emacs -*- lexical-binding: t -*-
-;; Copyright (C) 2007-2013 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
;;
;; Author: Tassilo Horn <tsdh@gnu.org>
;; Maintainer: Tassilo Horn <tsdh@gnu.org>
If nil, the document is re-rendered every time the scaling factor is modified.
This only has an effect if the image libraries linked with Emacs support
scaling."
+ :version "24.4"
:type 'boolean)
(defcustom doc-view-image-width 850
(define-key map "+" 'doc-view-enlarge)
(define-key map "=" 'doc-view-enlarge)
(define-key map "-" 'doc-view-shrink)
- (define-key map [remap text-scale-adjust] 'doc-view-enlarge)
- (define-key map (kbd "C-x C--") 'doc-view-shrink)
- (define-key map (kbd "C-x C-0") 'doc-view-reset-zoom-level)
+ (define-key map "0" 'doc-view-scale-reset)
+ (define-key map [remap text-scale-adjust] 'doc-view-scale-adjust)
;; Fit the image to the window
(define-key map "W" 'doc-view-fit-width-to-window)
(define-key map "H" 'doc-view-fit-height-to-window)
;; how many pages will be available.
(null doc-view--current-converter-processes))
(setq page len)))
+ (force-mode-line-update) ;To update `current-page'.
(setf (doc-view-current-page) page
(doc-view-current-info)
(concat
(interactive (list doc-view-shrink-factor))
(doc-view-enlarge (/ 1.0 factor)))
-(defun doc-view-reset-zoom-level ()
+(defun doc-view-scale-reset ()
"Reset the document size/zoom level to the initial one."
(interactive)
(if (and doc-view-scale-internally
(kill-local-variable 'doc-view-resolution)
(doc-view-reconvert-doc)))
+(defun doc-view-scale-adjust (factor)
+ "Adjust the scale of the DocView page images by FACTOR.
+FACTOR defaults to `doc-view-shrink-factor'.
+
+The actual adjustment made depends on the final component of the
+key-binding used to invoke the command, with all modifiers removed:
+
+ +, = Increase the image scale by FACTOR
+ - Decrease the image scale by FACTOR
+ 0 Reset the image scale to the initial scale"
+ (interactive (list doc-view-shrink-factor))
+ (let ((ev last-command-event)
+ (echo-keystrokes nil))
+ (pcase (event-basic-type ev)
+ ((or ?+ ?=) (doc-view-enlarge factor))
+ (?- (doc-view-shrink factor))
+ (?0 (doc-view-scale-reset)))))
+
(defun doc-view-fit-width-to-window ()
"Fit the image width to the window width."
(interactive)
`((page . ,(doc-view-current-page))
(handler . doc-view-bookmark-jump))))
-
;;;###autoload
(defun doc-view-bookmark-jump (bmk)
;; This implements the `handler' function interface for record type
;; returned by `doc-view-bookmark-make-record', which see.
- (prog1 (bookmark-default-handler bmk)
- (let ((page (bookmark-prop-get bmk 'page)))
- (when (not (eq major-mode 'doc-view-mode))
- (doc-view-toggle-display))
- (with-selected-window
- (or (get-buffer-window (current-buffer) 0)
- (selected-window))
- (doc-view-goto-page page)))))
-
+ (let ((page (bookmark-prop-get bmk 'page))
+ (show-fn-sym (make-symbol "doc-view-bookmark-after-jump-hook")))
+ (fset show-fn-sym
+ (lambda ()
+ (remove-hook 'bookmark-after-jump-hook show-fn-sym)
+ (when (not (eq major-mode 'doc-view-mode))
+ (doc-view-toggle-display))
+ (with-selected-window
+ (or (get-buffer-window (current-buffer) 0)
+ (selected-window))
+ (doc-view-goto-page page))))
+ (add-hook 'bookmark-after-jump-hook show-fn-sym)
+ (bookmark-default-handler bmk)))
(provide 'doc-view)