Mercurial > emacs
comparison lisp/doc-view.el @ 101909:b62aecf6b1db
(doc-view-scroll-up-or-next-page)
(doc-view-scroll-down-or-previous-page, doc-view-goto-page): Reset
the old hscroll value after switching pages.
author | Tassilo Horn <tassilo@member.fsf.org> |
---|---|
date | Mon, 09 Feb 2009 15:33:47 +0000 |
parents | 0974e3e4aca7 |
children | 07bc423d78f1 |
comparison
equal
deleted
inserted
replaced
101908:2f90d8471cb7 | 101909:b62aecf6b1db |
---|---|
344 (defmacro doc-view-current-slice () `(image-mode-window-get 'slice)) | 344 (defmacro doc-view-current-slice () `(image-mode-window-get 'slice)) |
345 | 345 |
346 (defun doc-view-goto-page (page) | 346 (defun doc-view-goto-page (page) |
347 "View the page given by PAGE." | 347 "View the page given by PAGE." |
348 (interactive "nPage: ") | 348 (interactive "nPage: ") |
349 (let ((len (length doc-view-current-files))) | 349 (let ((len (length doc-view-current-files)) |
350 (hscroll (window-hscroll))) | |
350 (if (< page 1) | 351 (if (< page 1) |
351 (setq page 1) | 352 (setq page 1) |
352 (when (and (> page len) | 353 (when (and (> page len) |
353 ;; As long as the converter is running, we don't know | 354 ;; As long as the converter is running, we don't know |
354 ;; how many pages will be available. | 355 ;; how many pages will be available. |
377 ;; that's not right if the pages are not generated sequentially | 378 ;; that's not right if the pages are not generated sequentially |
378 ;; or if the page isn't in doc-view-current-files yet. | 379 ;; or if the page isn't in doc-view-current-files yet. |
379 (let ((file (expand-file-name (format "page-%d.png" page) | 380 (let ((file (expand-file-name (format "page-%d.png" page) |
380 (doc-view-current-cache-dir)))) | 381 (doc-view-current-cache-dir)))) |
381 (doc-view-insert-image file :pointer 'arrow) | 382 (doc-view-insert-image file :pointer 'arrow) |
383 (set-window-hscroll (selected-window) hscroll) | |
382 (when (and (not (file-exists-p file)) | 384 (when (and (not (file-exists-p file)) |
383 doc-view-current-converter-processes) | 385 doc-view-current-converter-processes) |
384 ;; The PNG file hasn't been generated yet. | 386 ;; The PNG file hasn't been generated yet. |
385 (doc-view-pdf->png-1 doc-view-buffer-file-name file page | 387 (doc-view-pdf->png-1 doc-view-buffer-file-name file page |
386 (lexical-let ((page page) | 388 (lexical-let ((page page) |
416 (doc-view-goto-page (length doc-view-current-files))) | 418 (doc-view-goto-page (length doc-view-current-files))) |
417 | 419 |
418 (defun doc-view-scroll-up-or-next-page () | 420 (defun doc-view-scroll-up-or-next-page () |
419 "Scroll page up if possible, else goto next page." | 421 "Scroll page up if possible, else goto next page." |
420 (interactive) | 422 (interactive) |
421 (when (= (window-vscroll) (image-scroll-up nil)) | 423 (let ((hscroll (window-hscroll)) |
422 (let ((cur-page (doc-view-current-page))) | 424 (cur-page (doc-view-current-page))) |
425 (when (= (window-vscroll) (image-scroll-up nil)) | |
423 (doc-view-next-page) | 426 (doc-view-next-page) |
424 (when (/= cur-page (doc-view-current-page)) | 427 (when (/= cur-page (doc-view-current-page)) |
425 (image-bob) | 428 (image-bob) |
426 (image-bol 1))))) | 429 (image-bol 1)) |
430 (set-window-hscroll (selected-window) hscroll)))) | |
427 | 431 |
428 (defun doc-view-scroll-down-or-previous-page () | 432 (defun doc-view-scroll-down-or-previous-page () |
429 "Scroll page down if possible, else goto previous page." | 433 "Scroll page down if possible, else goto previous page." |
430 (interactive) | 434 (interactive) |
431 (when (= (window-vscroll) (image-scroll-down nil)) | 435 (let ((hscroll (window-hscroll)) |
432 (let ((cur-page (doc-view-current-page))) | 436 (cur-page (doc-view-current-page))) |
437 (when (= (window-vscroll) (image-scroll-down nil)) | |
433 (doc-view-previous-page) | 438 (doc-view-previous-page) |
434 (when (/= cur-page (doc-view-current-page)) | 439 (when (/= cur-page (doc-view-current-page)) |
435 (image-eob) | 440 (image-eob) |
436 (image-bol 1))))) | 441 (image-bol 1)) |
442 (set-window-hscroll (selected-window) hscroll)))) | |
437 | 443 |
438 ;;;; Utility Functions | 444 ;;;; Utility Functions |
439 | 445 |
440 (defun doc-view-kill-proc () | 446 (defun doc-view-kill-proc () |
441 "Kill the current converter process(es)." | 447 "Kill the current converter process(es)." |
1102 (let* ((prev-major-mode (if (eq major-mode 'doc-view-mode) | 1108 (let* ((prev-major-mode (if (eq major-mode 'doc-view-mode) |
1103 doc-view-previous-major-mode | 1109 doc-view-previous-major-mode |
1104 major-mode))) | 1110 major-mode))) |
1105 (kill-all-local-variables) | 1111 (kill-all-local-variables) |
1106 (set (make-local-variable 'doc-view-previous-major-mode) prev-major-mode)) | 1112 (set (make-local-variable 'doc-view-previous-major-mode) prev-major-mode)) |
1107 | 1113 |
1108 ;; Figure out the document type. | 1114 ;; Figure out the document type. |
1109 (let ((name-types | 1115 (let ((name-types |
1110 (when buffer-file-name | 1116 (when buffer-file-name |
1111 (cdr (assoc (file-name-extension buffer-file-name) | 1117 (cdr (assoc (file-name-extension buffer-file-name) |
1112 '(("dvi" dvi) | 1118 '(("dvi" dvi) |
1126 (when (and name-types content-types) | 1132 (when (and name-types content-types) |
1127 (error "Conflicting types: name says %s but content says %s" | 1133 (error "Conflicting types: name says %s but content says %s" |
1128 name-types content-types)) | 1134 name-types content-types)) |
1129 name-types content-types | 1135 name-types content-types |
1130 (error "Cannot determine the document type"))))) | 1136 (error "Cannot determine the document type"))))) |
1131 | 1137 |
1132 (doc-view-make-safe-dir doc-view-cache-directory) | 1138 (doc-view-make-safe-dir doc-view-cache-directory) |
1133 ;; Handle compressed files, remote files, files inside archives | 1139 ;; Handle compressed files, remote files, files inside archives |
1134 (set (make-local-variable 'doc-view-buffer-file-name) | 1140 (set (make-local-variable 'doc-view-buffer-file-name) |
1135 (cond | 1141 (cond |
1136 (jka-compr-really-do-compress | 1142 (jka-compr-really-do-compress |
1148 (file-name-nondirectory buffer-file-name) | 1154 (file-name-nondirectory buffer-file-name) |
1149 doc-view-cache-directory)) | 1155 doc-view-cache-directory)) |
1150 (t buffer-file-name))) | 1156 (t buffer-file-name))) |
1151 (when (not (string= doc-view-buffer-file-name buffer-file-name)) | 1157 (when (not (string= doc-view-buffer-file-name buffer-file-name)) |
1152 (write-region nil nil doc-view-buffer-file-name)) | 1158 (write-region nil nil doc-view-buffer-file-name)) |
1153 | 1159 |
1154 (add-hook 'change-major-mode-hook | 1160 (add-hook 'change-major-mode-hook |
1155 (lambda () | 1161 (lambda () |
1156 (doc-view-kill-proc) | 1162 (doc-view-kill-proc) |
1157 (remove-overlays (point-min) (point-max) 'doc-view t)) | 1163 (remove-overlays (point-min) (point-max) 'doc-view t)) |
1158 nil t) | 1164 nil t) |
1159 (add-hook 'clone-indirect-buffer-hook 'doc-view-clone-buffer-hook nil t) | 1165 (add-hook 'clone-indirect-buffer-hook 'doc-view-clone-buffer-hook nil t) |
1160 (add-hook 'kill-buffer-hook 'doc-view-kill-proc nil t) | 1166 (add-hook 'kill-buffer-hook 'doc-view-kill-proc nil t) |
1161 | 1167 |
1162 (remove-overlays (point-min) (point-max) 'doc-view t) ;Just in case. | 1168 (remove-overlays (point-min) (point-max) 'doc-view t) ;Just in case. |
1163 ;; Keep track of display info ([vh]scroll, page number, overlay, | 1169 ;; Keep track of display info ([vh]scroll, page number, overlay, |
1164 ;; ...) for each window in which this document is shown. | 1170 ;; ...) for each window in which this document is shown. |
1165 (add-hook 'image-mode-new-window-functions | 1171 (add-hook 'image-mode-new-window-functions |
1166 'doc-view-new-window-function nil t) | 1172 'doc-view-new-window-function nil t) |
1167 (image-mode-setup-winprops) | 1173 (image-mode-setup-winprops) |
1168 | 1174 |
1169 (set (make-local-variable 'mode-line-position) | 1175 (set (make-local-variable 'mode-line-position) |
1170 '(" P" (:eval (number-to-string (doc-view-current-page))) | 1176 '(" P" (:eval (number-to-string (doc-view-current-page))) |
1171 "/" (:eval (number-to-string (length doc-view-current-files))))) | 1177 "/" (:eval (number-to-string (length doc-view-current-files))))) |
1172 ;; Don't scroll unless the user specifically asked for it. | 1178 ;; Don't scroll unless the user specifically asked for it. |
1173 (set (make-local-variable 'auto-hscroll-mode) nil) | 1179 (set (make-local-variable 'auto-hscroll-mode) nil) |