bug#72241: 31.0.50; [PATCH] Use a dedicated buffer for `doc-view-open-text'
Here is an updated version of this patch. WDYT? From 6e32534012cafeda1d7e67aab23a8206bc887c9f Mon Sep 17 00:00:00 2001 From: Manuel Giraud <manuel@ledu-giraud.fr> Date: Sun, 21 Jul 2024 18:52:52 +0200 Subject: [PATCH] Use a dedicated buffer for `doc-view-open-text' * lisp/doc-view.el (doc-view-open-text): Create a new "text contents" buffer and switch to it. (doc-view-toggle-display): Switch back to the document buffer and kill the "text contents" one. * etc/NEWS: Mention the change.
This commit is contained in:
parent
2f5af5cab3
commit
210b98bc99
2 changed files with 31 additions and 36 deletions
7
etc/NEWS
7
etc/NEWS
|
@ -149,6 +149,13 @@ This affects calls to 'warn', 'lwarn', 'display-warning', and
|
|||
In most cases, having it enabled leads to a large amount of false
|
||||
positives.
|
||||
|
||||
** DocView
|
||||
|
||||
---
|
||||
*** Dedicated buffer for plain text contents.
|
||||
When switching to the plain text contents with 'doc-view-open-text',
|
||||
DocView now creates a dedicated buffer to display it. 'C-c C-c' gets you
|
||||
back to real DocView buffer if it still exists.
|
||||
|
||||
* New Modes and Packages in Emacs 31.1
|
||||
|
||||
|
|
|
@ -1768,34 +1768,25 @@ For now these keys are useful:
|
|||
(let ((txt (expand-file-name "doc.txt" (doc-view--current-cache-dir)))
|
||||
(page (doc-view-current-page)))
|
||||
(if (file-readable-p txt)
|
||||
(let ((inhibit-read-only t)
|
||||
(buffer-undo-list t)
|
||||
(dv-bfn doc-view--buffer-file-name))
|
||||
(erase-buffer)
|
||||
;; FIXME: Replacing the buffer's PDF content with its txt rendering
|
||||
;; is pretty risky. We should probably use *another*
|
||||
;; buffer instead, so there's much less risk of
|
||||
;; overwriting the PDF file with some text rendering.
|
||||
(set-buffer-multibyte t)
|
||||
(insert-file-contents txt)
|
||||
(doc-view--text-view-mode)
|
||||
(setq-local doc-view--buffer-file-name dv-bfn)
|
||||
(set-buffer-modified-p nil)
|
||||
(doc-view-minor-mode)
|
||||
(goto-char (point-min))
|
||||
;; Put point at the start of the page the user was
|
||||
;; reading. Pages are separated by Control-L characters.
|
||||
(re-search-forward page-delimiter nil t (1- page))
|
||||
(add-hook 'write-file-functions
|
||||
(lambda ()
|
||||
;; FIXME: If the user changes major mode and then
|
||||
;; saves the buffer, the PDF file will be clobbered
|
||||
;; with its txt rendering!
|
||||
(when (eq major-mode 'doc-view--text-view-mode)
|
||||
(error "Cannot save text contents of document %s"
|
||||
buffer-file-name)))
|
||||
nil t))
|
||||
(doc-view-doc->txt txt 'doc-view-open-text)))))
|
||||
(let ((dv-bfn doc-view--buffer-file-name)
|
||||
(dv-text-buffer-name (format "%s/text" (buffer-name))))
|
||||
;; Prepare the text buffer
|
||||
(with-current-buffer (get-buffer-create dv-text-buffer-name)
|
||||
(let ((inhibit-read-only t)
|
||||
(buffer-undo-list t))
|
||||
(erase-buffer)
|
||||
(set-buffer-multibyte t)
|
||||
(insert-file-contents txt)
|
||||
(doc-view--text-view-mode)
|
||||
(setq-local doc-view--buffer-file-name dv-bfn)
|
||||
(set-buffer-modified-p nil)
|
||||
(doc-view-minor-mode)
|
||||
(goto-char (point-min))
|
||||
;; Put point at the start of the page the user was
|
||||
;; reading. Pages are separated by Control-L characters.
|
||||
(re-search-forward page-delimiter nil t (1- page))))
|
||||
(switch-to-buffer (get-buffer dv-text-buffer-name)))
|
||||
(doc-view-doc->txt txt 'doc-view-open-text)))))
|
||||
|
||||
;;;;; Toggle between editing and viewing
|
||||
|
||||
|
@ -1816,14 +1807,11 @@ For now these keys are useful:
|
|||
(doc-view-fallback-mode)
|
||||
(doc-view-minor-mode 1))
|
||||
((eq major-mode 'doc-view--text-view-mode)
|
||||
(let ((buffer-undo-list t))
|
||||
;; We're currently viewing the document's text contents, so switch
|
||||
;; back to .
|
||||
(setq buffer-read-only nil)
|
||||
(insert-file-contents doc-view--buffer-file-name nil nil nil t)
|
||||
(doc-view-fallback-mode)
|
||||
(doc-view-minor-mode 1)
|
||||
(set-buffer-modified-p nil)))
|
||||
;; We're currently viewing the document's text contents, switch to
|
||||
;; the buffer visiting the real document and kill myself.
|
||||
(let ((dv-buffer (find-buffer-visiting doc-view--buffer-file-name)))
|
||||
(kill-buffer)
|
||||
(switch-to-buffer dv-buffer)))
|
||||
(t
|
||||
;; Switch to doc-view-mode
|
||||
(when (and (buffer-modified-p)
|
||||
|
|
Loading…
Add table
Reference in a new issue