1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-28 10:56:36 +00:00

* lisp/doc-view.el: Minor naming convention tweaks.

(desktop-buffer-mode-handlers): Don't add to it repeatedly.
This commit is contained in:
Stefan Monnier 2013-05-26 21:08:43 -04:00
parent 4fd996b389
commit 416f18027e
2 changed files with 142 additions and 142 deletions

View File

@ -1,5 +1,8 @@
2013-05-27 Stefan Monnier <monnier@iro.umontreal.ca>
* doc-view.el: Minor naming convention tweaks.
(desktop-buffer-mode-handlers): Don't add to it repeatedly.
* image-mode.el (image-mode-reapply-winprops): Call image-mode-winprops
even if there's no `display' property yet (bug#14435).

View File

@ -305,9 +305,8 @@ of the page moves to the previous page."
;;;; Internal Variables
(defvar doc-view-current-converter-processes nil
(defvar-local doc-view--current-converter-processes nil
"Only used internally.")
(make-variable-buffer-local 'doc-view-current-converter-processes)
(defun doc-view-new-window-function (winprops)
;; (message "New window %s for buf %s" (car winprops) (current-buffer))
@ -330,7 +329,7 @@ of the page moves to the previous page."
(image-mode-window-put 'overlay ol winprops)
(when (and (windowp (car winprops))
(stringp (overlay-get ol 'display))
(null doc-view-current-converter-processes))
(null doc-view--current-converter-processes))
;; We're not displaying an image yet, so let's do so. This happens when
;; the buffer is displayed for the first time.
;; Don't do it if there's a conversion is running, since in that case, it
@ -338,29 +337,25 @@ of the page moves to the previous page."
(with-selected-window (car winprops)
(doc-view-goto-page 1)))))
(defvar doc-view-current-files nil
"Only used internally.")
(make-variable-buffer-local 'doc-view-current-files)
(defvar doc-view-current-timer nil
"Only used internally.")
(make-variable-buffer-local 'doc-view-current-timer)
(defvar doc-view-current-cache-dir nil
"Only used internally.")
(make-variable-buffer-local 'doc-view-current-cache-dir)
(defvar doc-view-current-search-matches nil
"Only used internally.")
(make-variable-buffer-local 'doc-view-current-search-matches)
(defvar doc-view-pending-cache-flush nil
(defvar-local doc-view--current-files nil
"Only used internally.")
(defvar doc-view-previous-major-mode nil
(defvar-local doc-view--current-timer nil
"Only used internally.")
(defvar doc-view-buffer-file-name nil
(defvar-local doc-view--current-cache-dir nil
"Only used internally.")
(defvar-local doc-view--current-search-matches nil
"Only used internally.")
(defvar doc-view--pending-cache-flush nil
"Only used internally.")
(defvar doc-view--previous-major-mode nil
"Only used internally.")
(defvar doc-view--buffer-file-name nil
"Only used internally.
The file name used for conversion. Normally it's the same as
`buffer-file-name', but for remote files, compressed files and
@ -488,7 +483,7 @@ Typically \"page-%s.png\".")
(defmacro doc-view-current-slice () `(image-mode-window-get 'slice))
(defun doc-view-last-page-number ()
(length doc-view-current-files))
(length doc-view--current-files))
(defun doc-view-goto-page (page)
"View the page given by PAGE."
@ -499,7 +494,7 @@ Typically \"page-%s.png\".")
(when (and (> page len)
;; As long as the converter is running, we don't know
;; how many pages will be available.
(null doc-view-current-converter-processes))
(null doc-view--current-converter-processes))
(setq page len)))
(setf (doc-view-current-page) page
(doc-view-current-info)
@ -507,31 +502,31 @@ Typically \"page-%s.png\".")
(propertize
(format "Page %d of %d." page len) 'face 'bold)
;; Tell user if converting isn't finished yet
(if doc-view-current-converter-processes
(if doc-view--current-converter-processes
" (still converting...)\n"
"\n")
;; Display context infos if this page matches the last search
(when (and doc-view-current-search-matches
(assq page doc-view-current-search-matches))
(when (and doc-view--current-search-matches
(assq page doc-view--current-search-matches))
(concat (propertize "Search matches:\n" 'face 'bold)
(let ((contexts ""))
(dolist (m (cdr (assq page
doc-view-current-search-matches)))
doc-view--current-search-matches)))
(setq contexts (concat contexts " - \"" m "\"\n")))
contexts)))))
;; Update the buffer
;; We used to find the file name from doc-view-current-files but
;; We used to find the file name from doc-view--current-files but
;; that's not right if the pages are not generated sequentially
;; or if the page isn't in doc-view-current-files yet.
;; or if the page isn't in doc-view--current-files yet.
(let ((file (expand-file-name
(format doc-view--image-file-pattern page)
(doc-view-current-cache-dir))))
(doc-view--current-cache-dir))))
(doc-view-insert-image file :pointer 'arrow)
(when (and (not (file-exists-p file))
doc-view-current-converter-processes)
doc-view--current-converter-processes)
;; The PNG file hasn't been generated yet.
(funcall doc-view-single-page-converter-function
doc-view-buffer-file-name file page
doc-view--buffer-file-name file page
(let ((win (selected-window)))
(lambda ()
(and (eq (current-buffer) (window-buffer win))
@ -636,13 +631,13 @@ at the top edge of the page moves to the previous page."
(defun doc-view-kill-proc ()
"Kill the current converter process(es)."
(interactive)
(while (consp doc-view-current-converter-processes)
(while (consp doc-view--current-converter-processes)
(ignore-errors ;; Some entries might not be processes, and maybe
;; some are dead already?
(kill-process (pop doc-view-current-converter-processes))))
(when doc-view-current-timer
(cancel-timer doc-view-current-timer)
(setq doc-view-current-timer nil))
(kill-process (pop doc-view--current-converter-processes))))
(when doc-view--current-timer
(cancel-timer doc-view--current-timer)
(setq doc-view--current-timer nil))
(setq mode-line-process nil))
(defun doc-view-kill-proc-and-buffer ()
@ -682,21 +677,21 @@ at the top edge of the page moves to the previous page."
(format "Unable to use temporary directory %s: %s"
dir (mapconcat 'identity (cdr error) " "))))))))
(defun doc-view-current-cache-dir ()
(defun doc-view--current-cache-dir ()
"Return the directory where the png files of the current doc should be saved.
It's a subdirectory of `doc-view-cache-directory'."
(if doc-view-current-cache-dir
doc-view-current-cache-dir
(if doc-view--current-cache-dir
doc-view--current-cache-dir
;; Try and make sure doc-view-cache-directory exists and is safe.
(doc-view-make-safe-dir doc-view-cache-directory)
;; Now compute the subdirectory to use.
(setq doc-view-current-cache-dir
(setq doc-view--current-cache-dir
(file-name-as-directory
(expand-file-name
(concat (subst-char-in-string ?% ?_ ;; bug#13679
(file-name-nondirectory doc-view-buffer-file-name))
(file-name-nondirectory doc-view--buffer-file-name))
"-"
(let ((file doc-view-buffer-file-name))
(let ((file doc-view--buffer-file-name))
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-file-contents-literally file)
@ -846,8 +841,8 @@ Should be invoked when the cached images aren't up-to-date."
(interactive)
(doc-view-kill-proc)
;; Clear the old cached files
(when (file-exists-p (doc-view-current-cache-dir))
(delete-directory (doc-view-current-cache-dir) 'recursive))
(when (file-exists-p (doc-view--current-cache-dir))
(delete-directory (doc-view--current-cache-dir) 'recursive))
(kill-local-variable 'doc-view-last-page-number)
(doc-view-initiate-display))
@ -861,11 +856,11 @@ Should be invoked when the cached images aren't up-to-date."
event))
(when (buffer-live-p (process-get proc 'buffer))
(with-current-buffer (process-get proc 'buffer)
(setq doc-view-current-converter-processes
(delq proc doc-view-current-converter-processes))
(setq doc-view--current-converter-processes
(delq proc doc-view--current-converter-processes))
(setq mode-line-process
(if doc-view-current-converter-processes
(format ":%s" (car doc-view-current-converter-processes))))
(if doc-view--current-converter-processes
(format ":%s" (car doc-view--current-converter-processes))))
(funcall (process-get proc 'callback))))))
(defun doc-view-start-process (name program args callback)
@ -876,7 +871,7 @@ Should be invoked when the cached images aren't up-to-date."
(expand-file-name "~/")))
(proc (apply 'start-process name doc-view-conversion-buffer
program args)))
(push proc doc-view-current-converter-processes)
(push proc doc-view--current-converter-processes)
(setq mode-line-process (list (format ":%s" proc)))
(set-process-sentinel proc 'doc-view-sentinel)
(process-put proc 'buffer (current-buffer))
@ -939,7 +934,7 @@ If PAGE is nil, convert the whole document."
The converted PDF is put into the current cache directory, and it
is named like ODF with the extension turned to pdf."
(doc-view-start-process "odf->pdf" doc-view-odf->pdf-converter-program
(list "-f" "pdf" "-o" (doc-view-current-cache-dir) odf)
(list "-f" "pdf" "-o" (doc-view--current-cache-dir) odf)
callback))
(defun doc-view-odf->pdf-converter-soffice (odf callback)
@ -957,7 +952,7 @@ is named like ODF with the extension turned to pdf."
(concat "-env:UserInstallation=file://"
tmp-user-install-dir)
"--headless" "--convert-to" "pdf"
"--outdir" (doc-view-current-cache-dir) odf)
"--outdir" (doc-view--current-cache-dir) odf)
(lambda ()
(delete-directory tmp-user-install-dir t)
(funcall callback)))))
@ -977,16 +972,16 @@ is named like ODF with the extension turned to pdf."
;; serves as a witness that the conversion is complete.
(write-region (prin1-to-string resolution) nil
(expand-file-name "resolution.el"
(doc-view-current-cache-dir))
(doc-view--current-cache-dir))
nil 'silently)
(when doc-view-current-timer
(cancel-timer doc-view-current-timer)
(setq doc-view-current-timer nil))
(when doc-view--current-timer
(cancel-timer doc-view--current-timer)
(setq doc-view--current-timer nil))
(doc-view-display (current-buffer) 'force))))
;; Update the displayed pages as soon as they're done generating.
(when doc-view-conversion-refresh-interval
(setq doc-view-current-timer
(setq doc-view--current-timer
(run-at-time "1 secs" doc-view-conversion-refresh-interval
'doc-view-display
(current-buffer)))))
@ -1031,20 +1026,20 @@ Start by converting PAGES, and then the rest."
(defun doc-view-current-cache-doc-pdf ()
"Return the name of the doc.pdf in the current cache dir.
This file exists only if the current document isn't a PDF or PS file already."
(expand-file-name "doc.pdf" (doc-view-current-cache-dir)))
(expand-file-name "doc.pdf" (doc-view--current-cache-dir)))
(defun doc-view-doc->txt (txt callback)
"Convert the current document to text and call CALLBACK when done."
(make-directory (doc-view-current-cache-dir) t)
(make-directory (doc-view--current-cache-dir) t)
(pcase doc-view-doc-type
(`pdf
;; Doc is a PDF, so convert it to TXT
(doc-view-pdf->txt doc-view-buffer-file-name txt callback))
(doc-view-pdf->txt doc-view--buffer-file-name txt callback))
(`ps
;; Doc is a PS, so convert it to PDF (which will be converted to
;; TXT thereafter).
(let ((pdf (doc-view-current-cache-doc-pdf)))
(doc-view-ps->pdf doc-view-buffer-file-name pdf
(doc-view-ps->pdf doc-view--buffer-file-name pdf
(lambda () (doc-view-pdf->txt pdf txt callback)))))
(`dvi
;; Doc is a DVI. This means that a doc.pdf already exists in its
@ -1077,39 +1072,39 @@ Start by converting PAGES, and then the rest."
pages))
(defun doc-view-convert-current-doc ()
"Convert `doc-view-buffer-file-name' to a set of png files, one file per page.
"Convert `doc-view--buffer-file-name' to a set of png files, one file per page.
Those files are saved in the directory given by the function
`doc-view-current-cache-dir'."
`doc-view--current-cache-dir'."
;; Let stale files still display while we recompute the new ones, so only
;; flush the cache when the conversion is over. One of the reasons why it
;; is important to keep displaying the stale page is so that revert-buffer
;; preserves the horizontal/vertical scroll settings (which are otherwise
;; resets during the redisplay).
(setq doc-view-pending-cache-flush t)
;; reset during the redisplay).
(setq doc-view--pending-cache-flush t)
(let ((png-file (expand-file-name
(format doc-view--image-file-pattern "%d")
(doc-view-current-cache-dir))))
(make-directory (doc-view-current-cache-dir) t)
(doc-view--current-cache-dir))))
(make-directory (doc-view--current-cache-dir) t)
(pcase doc-view-doc-type
(`dvi
;; DVI files have to be converted to PDF before Ghostscript can process
;; it.
(let ((pdf (doc-view-current-cache-doc-pdf)))
(doc-view-dvi->pdf doc-view-buffer-file-name pdf
(doc-view-dvi->pdf doc-view--buffer-file-name pdf
(lambda () (doc-view-pdf/ps->png pdf png-file)))))
(`odf
;; ODF files have to be converted to PDF before Ghostscript can
;; process it.
(let ((pdf (doc-view-current-cache-doc-pdf))
(opdf (expand-file-name
(concat (file-name-base doc-view-buffer-file-name)
(concat (file-name-base doc-view--buffer-file-name)
".pdf")
doc-view-current-cache-dir))
doc-view--current-cache-dir))
(png-file png-file))
;; The unoconv tool only supports an output directory, but no
;; file name. It's named like the input file with the
;; extension replaced by pdf.
(funcall doc-view-odf->pdf-converter-function doc-view-buffer-file-name
(funcall doc-view-odf->pdf-converter-function doc-view--buffer-file-name
(lambda ()
;; Rename to doc.pdf
(rename-file opdf pdf)
@ -1117,10 +1112,10 @@ Those files are saved in the directory given by the function
((or `pdf `djvu)
(let ((pages (doc-view-active-pages)))
;; Convert doc to bitmap images starting with the active pages.
(doc-view-document->bitmap doc-view-buffer-file-name png-file pages)))
(doc-view-document->bitmap doc-view--buffer-file-name png-file pages)))
(_
;; Convert to PNG images.
(doc-view-pdf/ps->png doc-view-buffer-file-name png-file)))))
(doc-view-pdf/ps->png doc-view--buffer-file-name png-file)))))
;;;; Slicing
@ -1171,7 +1166,7 @@ dragging it to its bottom-right corner. See also
(doc (let ((cache-doc (doc-view-current-cache-doc-pdf)))
(if (file-exists-p cache-doc)
cache-doc
doc-view-buffer-file-name)))
doc-view--buffer-file-name)))
(o (shell-command-to-string
(concat doc-view-ghostscript-program
" -dSAFER -dBATCH -dNOPAUSE -q -sDEVICE=bbox "
@ -1255,9 +1250,9 @@ After calling this function whole pages will be visible again."
(defun doc-view-insert-image (file &rest args)
"Insert the given png FILE.
ARGS is a list of image descriptors."
(when doc-view-pending-cache-flush
(when doc-view--pending-cache-flush
(clear-image-cache)
(setq doc-view-pending-cache-flush nil))
(setq doc-view--pending-cache-flush nil))
(let ((ol (doc-view-current-overlay)))
;; Only insert the image if the buffer is visible.
(when (window-live-p (overlay-get ol 'window))
@ -1291,7 +1286,7 @@ ARGS is a list of image descriptors."
(list (cons 'slice slice) image)
image))
;; We're trying to display a page that doesn't exist.
(doc-view-current-converter-processes
(doc-view--current-converter-processes
;; Maybe the page doesn't exist *yet*.
"Cannot display this page (yet)!")
(t
@ -1314,7 +1309,7 @@ ARGS is a list of image descriptors."
(defun doc-view-sort (a b)
"Return non-nil if A should be sorted before B.
Predicate for sorting `doc-view-current-files'."
Predicate for sorting `doc-view--current-files'."
(or (< (length a) (length b))
(and (= (length a) (length b))
(string< a b))))
@ -1324,24 +1319,24 @@ Predicate for sorting `doc-view-current-files'."
If FORCE is non-nil, start viewing even if the document does not
have the page we want to view."
(with-current-buffer buffer
(let ((prev-pages doc-view-current-files))
(setq doc-view-current-files
(sort (directory-files (doc-view-current-cache-dir) t
(let ((prev-pages doc-view--current-files))
(setq doc-view--current-files
(sort (directory-files (doc-view--current-cache-dir) t
(format doc-view--image-file-pattern
"[0-9]+")
t)
'doc-view-sort))
(unless (eq (length prev-pages) (length doc-view-current-files))
(unless (eq (length prev-pages) (length doc-view--current-files))
(force-mode-line-update))
(dolist (win (or (get-buffer-window-list buffer nil t)
(list t)))
(let* ((page (doc-view-current-page win))
(pagefile (expand-file-name
(format doc-view--image-file-pattern page)
(doc-view-current-cache-dir))))
(doc-view--current-cache-dir))))
(when (or force
(and (not (member pagefile prev-pages))
(member pagefile doc-view-current-files)))
(member pagefile doc-view--current-files)))
(if (windowp win)
(with-selected-window win
(cl-assert (eq (current-buffer) buffer) t)
@ -1376,9 +1371,9 @@ For now these keys are useful:
(defun doc-view-open-text ()
"Open a buffer with the current doc's contents as text."
(interactive)
(if doc-view-current-converter-processes
(if doc-view--current-converter-processes
(message "DocView: please wait till conversion finished.")
(let ((txt (expand-file-name "doc.txt" (doc-view-current-cache-dir))))
(let ((txt (expand-file-name "doc.txt" (doc-view--current-cache-dir))))
(if (file-readable-p txt)
(let ((name (concat "Text contents of "
(file-name-nondirectory buffer-file-name)))
@ -1468,25 +1463,25 @@ till now do that first.
If BACKWARD is non-nil, jump to the previous match."
(interactive "P")
(if (and (not new-query)
doc-view-current-search-matches)
doc-view--current-search-matches)
(if backward
(doc-view-search-previous-match 1)
(doc-view-search-next-match 1))
;; New search, so forget the old results.
(setq doc-view-current-search-matches nil)
(setq doc-view--current-search-matches nil)
(let ((txt (expand-file-name "doc.txt"
(doc-view-current-cache-dir))))
(doc-view--current-cache-dir))))
(if (file-readable-p txt)
(progn
(setq doc-view-current-search-matches
(setq doc-view--current-search-matches
(doc-view-search-internal
(read-from-minibuffer "Regexp: ")
txt))
(message "DocView: search yielded %d matches."
(doc-view-search-no-of-matches
doc-view-current-search-matches)))
doc-view--current-search-matches)))
;; We must convert to TXT first!
(if doc-view-current-converter-processes
(if doc-view--current-converter-processes
(message "DocView: please wait till conversion finished.")
(doc-view-doc->txt txt (lambda () (doc-view-search nil))))))))
@ -1495,28 +1490,28 @@ If BACKWARD is non-nil, jump to the previous match."
(interactive "p")
(let* ((next-pages (doc-view-remove-if
(lambda (i) (<= (car i) (doc-view-current-page)))
doc-view-current-search-matches))
doc-view--current-search-matches))
(page (car (nth (1- arg) next-pages))))
(if page
(doc-view-goto-page page)
(when (and
doc-view-current-search-matches
doc-view--current-search-matches
(y-or-n-p "No more matches after current page. Wrap to first match? "))
(doc-view-goto-page (caar doc-view-current-search-matches))))))
(doc-view-goto-page (caar doc-view--current-search-matches))))))
(defun doc-view-search-previous-match (arg)
"Go to the ARGth previous matching page."
(interactive "p")
(let* ((prev-pages (doc-view-remove-if
(lambda (i) (>= (car i) (doc-view-current-page)))
doc-view-current-search-matches))
doc-view--current-search-matches))
(page (car (nth (1- arg) (nreverse prev-pages)))))
(if page
(doc-view-goto-page page)
(when (and
doc-view-current-search-matches
doc-view--current-search-matches
(y-or-n-p "No more matches before current page. Wrap to last match? "))
(doc-view-goto-page (caar (last doc-view-current-search-matches)))))))
(doc-view-goto-page (caar (last doc-view--current-search-matches)))))))
;;;; User interface commands and the mode
@ -1524,13 +1519,13 @@ If BACKWARD is non-nil, jump to the previous match."
(defun doc-view-already-converted-p ()
"Return non-nil if the current doc was already converted."
(and (file-exists-p (doc-view-current-cache-dir))
(and (file-exists-p (doc-view--current-cache-dir))
;; Check that the resolution info is there, otherwise it means
;; the conversion is incomplete.
(file-readable-p (expand-file-name "resolution.el"
(doc-view-current-cache-dir)))
(doc-view--current-cache-dir)))
(> (length (directory-files
(doc-view-current-cache-dir)
(doc-view--current-cache-dir)
nil (format doc-view--image-file-pattern "[0-9]+")))
0)))
@ -1544,8 +1539,9 @@ If BACKWARD is non-nil, jump to the previous match."
(progn
(message "DocView: using cached files!")
;; Load the saved resolution.
(let* ((res-file (expand-file-name "resolution.el"
(doc-view-current-cache-dir)))
(let* ((res-file
(expand-file-name "resolution.el"
(doc-view--current-cache-dir)))
(res
(with-temp-buffer
(when (file-readable-p res-file)
@ -1563,7 +1559,7 @@ If BACKWARD is non-nil, jump to the previous match."
(message
"%s"
(concat "No PNG support is available, or some conversion utility for "
(file-name-extension doc-view-buffer-file-name)
(file-name-extension doc-view--buffer-file-name)
" files is missing."))
(when (and (executable-find doc-view-pdftotext-program)
(y-or-n-p
@ -1622,13 +1618,14 @@ If BACKWARD is non-nil, jump to the previous match."
((looking-at "%PDF") '(pdf))
((looking-at "\367\002") '(dvi))
((looking-at "AT&TFORM") '(djvu))))))
(setq-local doc-view-doc-type
(car (or (doc-view-intersection name-types content-types)
(when (and name-types content-types)
(error "Conflicting types: name says %s but content says %s"
name-types content-types))
name-types content-types
(error "Cannot determine the document type"))))))
(setq-local
doc-view-doc-type
(car (or (doc-view-intersection name-types content-types)
(when (and name-types content-types)
(error "Conflicting types: name says %s but content says %s"
name-types content-types))
name-types content-types
(error "Cannot determine the document type"))))))
(defun doc-view-set-up-single-converter ()
"Find the right single-page converter for the current document type"
@ -1658,9 +1655,8 @@ If BACKWARD is non-nil, jump to the previous match."
(doc-view-goto-page page)
(when slice (apply 'doc-view-set-slice slice)))))
(setq desktop-buffer-mode-handlers
(cons '(doc-view-mode . doc-view-restore-desktop-buffer)
desktop-buffer-mode-handlers))
(add-to-list 'desktop-buffer-mode-handlers
'(doc-view-mode . doc-view-restore-desktop-buffer))
;;;###autoload
(defun doc-view-mode ()
@ -1681,11 +1677,11 @@ toggle between displaying the document or editing it as text.
(doc-view-fallback-mode)
(let* ((prev-major-mode (if (derived-mode-p 'doc-view-mode)
doc-view-previous-major-mode
doc-view--previous-major-mode
(unless (eq major-mode 'fundamental-mode)
major-mode))))
(kill-all-local-variables)
(setq-local doc-view-previous-major-mode prev-major-mode))
(setq-local doc-view--previous-major-mode prev-major-mode))
(dolist (var doc-view-saved-settings)
(set (make-local-variable (car var)) (cdr var)))
@ -1697,29 +1693,30 @@ toggle between displaying the document or editing it as text.
(doc-view-make-safe-dir doc-view-cache-directory)
;; Handle compressed files, remote files, files inside archives
(setq-local doc-view-buffer-file-name
(cond
(jka-compr-really-do-compress
;; FIXME: there's a risk of name conflicts here.
(expand-file-name
(file-name-nondirectory
(file-name-sans-extension buffer-file-name))
doc-view-cache-directory))
;; Is the file readable by local processes?
;; We used to use `file-remote-p' but it's unclear what it's
;; supposed to return nil for things like local files accessed via
;; `su' or via file://...
((let ((file-name-handler-alist nil))
(not (and buffer-file-name (file-readable-p buffer-file-name))))
;; FIXME: there's a risk of name conflicts here.
(expand-file-name
(if buffer-file-name
(file-name-nondirectory buffer-file-name)
(buffer-name))
doc-view-cache-directory))
(t buffer-file-name)))
(when (not (string= doc-view-buffer-file-name buffer-file-name))
(write-region nil nil doc-view-buffer-file-name))
(setq-local doc-view--buffer-file-name
(cond
(jka-compr-really-do-compress
;; FIXME: there's a risk of name conflicts here.
(expand-file-name
(file-name-nondirectory
(file-name-sans-extension buffer-file-name))
doc-view-cache-directory))
;; Is the file readable by local processes?
;; We used to use `file-remote-p' but it's unclear what it's
;; supposed to return nil for things like local files accessed
;; via `su' or via file://...
((let ((file-name-handler-alist nil))
(not (and buffer-file-name
(file-readable-p buffer-file-name))))
;; FIXME: there's a risk of name conflicts here.
(expand-file-name
(if buffer-file-name
(file-name-nondirectory buffer-file-name)
(buffer-name))
doc-view-cache-directory))
(t buffer-file-name)))
(when (not (string= doc-view--buffer-file-name buffer-file-name))
(write-region nil nil doc-view--buffer-file-name))
(add-hook 'change-major-mode-hook
(lambda ()
@ -1770,8 +1767,8 @@ toggle between displaying the document or editing it as text.
'(doc-view-resolution
image-mode-winprops-alist)))))
(remove-overlays (point-min) (point-max) 'doc-view t)
(if doc-view-previous-major-mode
(funcall doc-view-previous-major-mode)
(if doc-view--previous-major-mode
(funcall doc-view--previous-major-mode)
(let ((auto-mode-alist
(rassq-delete-all
'doc-view-mode-maybe