*** empty log message ***
[bpt/emacs.git] / lisp / view.el
index f761013..61c1ddf 100644 (file)
@@ -447,21 +447,24 @@ Entry to view-mode runs the normal hook `view-mode-hook'."
                (if (buffer-file-name)
                    (file-name-nondirectory (buffer-file-name))
                  (buffer-name))))
+  (force-mode-line-update)
   (run-hooks 'view-mode-hook))
 
 (defun view-mode-disable ()
   "Turn off View mode."
   (remove-hook 'change-major-mode-hook 'view-mode-disable t)
   (and view-overlay (delete-overlay view-overlay))
+  (force-mode-line-update)
   (setq view-mode nil
-       Helper-return-blurb view-old-Helper-return-blurb
-       buffer-read-only view-old-buffer-read-only))
+       Helper-return-blurb view-old-Helper-return-blurb)
+  (if buffer-read-only
+      (setq buffer-read-only view-old-buffer-read-only)))
 
 ;;;###autoload
 (defun view-mode-enter (&optional return-to exit-action) "\
 Enter View mode and set up exit from view mode depending on optional arguments.
 If RETURN-TO is non-nil it is added as an element to the buffer local alist
-view-return-to-alist.
+`view-return-to-alist'.
 Save EXIT-ACTION in buffer local variable `view-exit-action'.
 It should be either nil or a function that takes a buffer as argument.
 This function will be called by `view-mode-exit'.
@@ -493,7 +496,7 @@ This function runs the normal hook `view-mode-hook'."
 Type \\[help-command] for help, \\[describe-mode] for commands, \\[View-quit] to quit."))))
 
 (defun view-mode-exit (&optional return-to-alist exit-action all-win)
-  "Exit view-mode in various ways, depending on optional arguments.
+  "Exit View mode in various ways, depending on optional arguments.
 RETURN-TO-ALIST, EXIT-ACTION and ALL-WIN determine what to do after exit.
 EXIT-ACTION is nil or a function that is called with current buffer as
 argument.
@@ -560,7 +563,11 @@ corresponding OLD-WINDOW is a live window, then select OLD-WINDOW."
                  (if view-remove-frame-by-deleting
                      (delete-frame frame)
                    (iconify-frame frame))))))
-         (setq view-return-to-alist (delete (car alist) view-return-to-alist))
+         ;; Altering view-return-to-alist causes trouble when
+         ;; the user deiconifies the frame, then types q again.
+         ;; If we leave view-return-to-alist unchanged, that
+         ;; iconifies the frame again, as expected.
+;;;      (setq view-return-to-alist (delete (car alist) view-return-to-alist))
          (setq alist (cdr alist)))
        (if (window-live-p old-window)  ; still existing window
            (select-window old-window))
@@ -578,7 +585,8 @@ corresponding OLD-WINDOW is a live window, then select OLD-WINDOW."
 (defun View-exit-and-edit ()
   "Exit View mode and make the current buffer editable."
   (interactive)
-  (let ((view-old-buffer-read-only nil))
+  (let ((view-old-buffer-read-only nil)
+       (view-no-disable-on-exit nil))
     (view-mode-exit)))
 
 (defun View-leave ()
@@ -722,21 +730,21 @@ Also set the mark at the position where point was."
        (let ((buf (current-buffer))
             (bufname (buffer-name))
             (file (buffer-file-name)))
-        (when (and view-try-extend-at-buffer-end
-                   file
-                   (not (verify-visited-file-modtime buf))
-                   (file-exists-p file)
-                   (or (not (buffer-modified-p buf))
-                       (progn
-                         (setq file (file-name-nondirectory file))
-                         (yes-or-no-p
-                          (format
-                           "File %s changed on disk.  Discard your edits%s? "
-                           file
-                           (if (string= bufname file) ""
-                             (concat " in " bufname)))))))
-          (revert-buffer t t t)
-          (pos-visible-in-window-p (point-max))))))
+        (or (not view-try-extend-at-buffer-end)
+            (null file)
+            (verify-visited-file-modtime buf)
+            (not (file-exists-p file))
+            (when (buffer-modified-p buf)
+              (setq file (file-name-nondirectory file))
+              (not (yes-or-no-p
+                    (format
+                     "File %s changed on disk.  Discard your edits%s? "
+                     file
+                     (if (string= bufname file) ""
+                       (concat " in " bufname))))))
+            (progn
+              (revert-buffer t t t)
+              (pos-visible-in-window-p (point-max)))))))
 
 (defun view-end-message ()
   ;; Tell that we are at end of buffer.
@@ -824,7 +832,7 @@ If you don't specify a prefix argument, it uses the number of lines set by
 \\[View-scroll-page-backward-set-page-size].
 If LINES is more than a window-full, only the last window-full is shown."
   (interactive "P")
-  (let ((view-mode-auto-exit nil)
+  (let ((view-scroll-auto-exit nil)
        (view-try-extend-at-buffer-end t))
     (view-scroll-lines lines nil view-page-size nil)))