emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r99431: (doc-view-new-window-function


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r99431: (doc-view-new-window-function): Be a bit more defensive.
Date: Mon, 01 Feb 2010 13:25:47 -0500
User-agent: Bazaar (2.0.2)

------------------------------------------------------------
revno: 99431
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Mon 2010-02-01 13:25:47 -0500
message:
  (doc-view-new-window-function): Be a bit more defensive.
  (doc-view-revert-buffer): New command.
  (doc-view-mode-map): Use it.
modified:
  lisp/ChangeLog
  lisp/doc-view.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-02-01 04:58:35 +0000
+++ b/lisp/ChangeLog    2010-02-01 18:25:47 +0000
@@ -1,3 +1,9 @@
+2010-02-01  Stefan Monnier  <address@hidden>
+
+       * doc-view.el (doc-view-new-window-function): Be a bit more defensive.
+       (doc-view-revert-buffer): New command.
+       (doc-view-mode-map): Use it.
+
 2010-02-01  Dan Nicolaescu  <address@hidden>
 
        * vc-bzr.el (vc-bzr-dir-extra-headers): Add a header when a

=== modified file 'lisp/doc-view.el'
--- a/lisp/doc-view.el  2010-01-13 08:35:10 +0000
+++ b/lisp/doc-view.el  2010-02-01 18:25:47 +0000
@@ -235,8 +235,15 @@
 
 (defun doc-view-new-window-function (winprops)
   (let ((ol (image-mode-window-get 'overlay winprops)))
+    (when (and ol (not (overlay-buffer ol)))
+      ;; I've seen `ol' be a dead overlay.  I do not yet know how this
+      ;; happened, so maybe the bug is elsewhere, but in the mean time,
+      ;; this seems like a safe approach.
+      (setq ol nil))
     (if ol
-        (setq ol (copy-overlay ol))
+        (progn
+          (assert (eq (overlay-buffer ol) (current-buffer)))
+          (setq ol (copy-overlay ol)))
       (assert (not (get-char-property (point-min) 'display)))
       (setq ol (make-overlay (point-min) (point-max) nil t))
       (overlay-put ol 'doc-view t))
@@ -323,12 +330,21 @@
     (define-key map (kbd "C-c C-c")   'doc-view-toggle-display)
     ;; Open a new buffer with doc's text contents
     (define-key map (kbd "C-c C-t")   'doc-view-open-text)
-    ;; Reconvert the current document
-    (define-key map (kbd "g")         'revert-buffer)
-    (define-key map (kbd "r")         'revert-buffer)
+    ;; Reconvert the current document.  Don't just use revert-buffer
+    ;; because that resets the scale factor, the page number, ...
+    (define-key map (kbd "g")         'doc-view-revert-buffer)
+    (define-key map (kbd "r")         'doc-view-revert-buffer)
     map)
   "Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
 
+(defun doc-view-revert-buffer (&optional ignore-auto noconfirm)
+  "Like `revert-buffer', but preserves the buffer's current modes."
+  ;; FIXME: this should probably be moved to files.el and used for
+  ;; most/all "g" bindings to revert-buffer.
+  (interactive (list (not current-prefix-arg)))
+  (revert-buffer ignore-auto noconfirm 'preserve-modes))
+
+
 (easy-menu-define doc-view-menu doc-view-mode-map
   "Menu for Doc View mode."
   '("DocView"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]