(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'.
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.
(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))
(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 ()
(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.
\\[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)))