From: Tassilo Horn Date: Wed, 22 Oct 2014 13:30:16 +0000 (+0200) Subject: Improve viewing plain text contents of document X-Git-Tag: emacs-25.0.90~2635^2~675 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=36749d80256f49ac10860405b95fe319012c3b91;p=emacs.git Improve viewing plain text contents of document * doc/emacs/misc.texi (Document View): Adapt to latest doc-view changes wrt viewing the document's plain text contents. * lisp/doc-view.el (doc-view-open-text): View the document's plain text in the current buffer instead of a new one. (doc-view-toggle-display): Handle the case where the current buffer contains the plain text contents of the document. (doc-view-initiate-display): Don't switch to fallback mode if the user wants to view the doc's plain text. (doc-view-set-doc-type): Use assoc-string instead of assoc-ignore-case. --- diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index e19b0cf6485..901eaac42c3 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2014-10-22 Tassilo Horn + + * misc.texi (Document View): Adapt to latest doc-view changes wrt + viewing the document's plain text contents. + 2014-10-20 Glenn Morris * Merge in all changes up to 24.4 release. diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index af4d21fe180..af5ced77b52 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -266,9 +266,10 @@ Exit the summary buffer and return to the group buffer. OpenDocument, and Microsoft Office documents. It provides features such as slicing, zooming, and searching inside documents. It works by converting the document to a set of images using the @command{gs} -(GhostScript) command and other external tools @footnote{@code{gs} is -a hard requirement. For DVI files, @code{dvipdf} or @code{dvipdfm} is -needed. For OpenDocument and Microsoft Office documents, the +(GhostScript) or @command{mudraw}/@command{pdfdraw} (MuPDF) commands +and other external tools @footnote{For PostScript files, GhostScript +is a hard requirement. For DVI files, @code{dvipdf} or @code{dvipdfm} +is needed. For OpenDocument and Microsoft Office documents, the @code{unoconv} tool is needed.}, and displaying those images. @findex doc-view-toggle-display @@ -287,6 +288,17 @@ mode or DocView minor mode, repeating @kbd{C-c C-c} (@code{doc-view-toggle-display}) toggles between DocView and the underlying file contents. +@findex doc-view-open-text + When you visit a file which would normally be handled by DocView +mode but some requirement is not met (e.g., you operate in a terminal +frame or emacs has no PNG support), you are queried if you want to +view the document's contents as plain text. If you confirm, the +buffer is put in text mode and DocView minor mode is activated. Thus, +by typing @kbd{C-c C-c} you switch to the fallback mode. With another +@kbd{C-c C-c} you return to DocView mode. The plain text contents can +also be displayed from within DocView mode by typing @kbd{C-c C-t} +(@code{doc-view-open-text}). + You can explicitly enable DocView mode with the command @code{M-x doc-view-mode}. You can toggle DocView minor mode with @code{M-x doc-view-minor-mode}. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fb516323ee0..3fa382e531b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2014-10-22 Tassilo Horn + + * doc-view.el (doc-view-open-text): View the document's plain text + in the current buffer instead of a new one. + (doc-view-toggle-display): Handle the case where the current + buffer contains the plain text contents of the document. + (doc-view-initiate-display): Don't switch to fallback mode if the + user wants to view the doc's plain text. + (doc-view-set-doc-type): Use assoc-string instead of + assoc-ignore-case. + 2014-10-21 Stefan Monnier * subr.el (read-key): Fix clicks on the mode-line. diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 9458cace74e..37cb2787cca 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -1392,19 +1392,28 @@ For now these keys are useful: (tooltip-show (doc-view-current-info))) (defun doc-view-open-text () - "Open a buffer with the current doc's contents as text." + "Display the current doc's contents as text." (interactive) (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))) - (bname (or buffer-file-name (buffer-name)))) + (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 bname))) - (dir (or (file-name-directory bname) default-directory))) - (with-current-buffer (find-file txt) - (rename-buffer name) - (setq default-directory dir))) + (let ((inhibit-read-only t) + (buffer-undo-list t) + (dv-bfn doc-view--buffer-file-name)) + (erase-buffer) + (set-buffer-multibyte t) + (insert-file-contents txt) + (text-mode) + (setq-local doc-view--buffer-file-name dv-bfn) + (set-buffer-modified-p nil) + (doc-view-minor-mode) + (add-hook 'write-file-functions + (lambda () + (when (eq major-mode 'text-mode) + (error "Cannot save text contents of document %s" + buffer-file-name))) + nil t)) (doc-view-doc->txt txt 'doc-view-open-text))))) ;;;;; Toggle between editing and viewing @@ -1416,20 +1425,30 @@ For now these keys are useful: (defun doc-view-toggle-display () "Toggle between editing a document as text or viewing it." (interactive) - (if (eq major-mode 'doc-view-mode) - ;; Switch to editing mode - (progn - (doc-view-kill-proc) - (setq buffer-read-only nil) - ;; Switch to the previously used major mode or fall back to - ;; normal mode. - (doc-view-fallback-mode) - (doc-view-minor-mode 1)) + (cond + ((eq major-mode 'doc-view-mode) + ;; Switch to editing mode + (doc-view-kill-proc) + (setq buffer-read-only nil) + ;; Switch to the previously used major mode or fall back to + ;; normal mode. + (doc-view-fallback-mode) + (doc-view-minor-mode 1)) + ((eq major-mode 'text-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))) + (t ;; Switch to doc-view-mode (when (and (buffer-modified-p) (y-or-n-p "The buffer has been modified. Save the changes? ")) (save-buffer)) - (doc-view-mode))) + (doc-view-mode)))) ;;;; Searching @@ -1585,11 +1604,11 @@ If BACKWARD is non-nil, jump to the previous match." (concat "No PNG support is available, or some conversion utility for " (file-name-extension doc-view--buffer-file-name) " files is missing.")) - (when (and (executable-find doc-view-pdftotext-program) - (y-or-n-p - "Unable to render file. View extracted text instead? ")) - (doc-view-open-text)) - (doc-view-toggle-display))) + (if (and (executable-find doc-view-pdftotext-program) + (y-or-n-p + "Unable to render file. View extracted text instead? ")) + (doc-view-open-text) + (doc-view-toggle-display)))) (defvar bookmark-make-record-function) @@ -1616,7 +1635,7 @@ If BACKWARD is non-nil, jump to the previous match." "Figure out the current document type (`doc-view-doc-type')." (let ((name-types (when buffer-file-name - (cdr (assoc-ignore-case + (cdr (assoc-string (file-name-extension buffer-file-name) '( ;; DVI @@ -1634,7 +1653,8 @@ If BACKWARD is non-nil, jump to the previous match." ;; Microsoft Office formats (also handled by the odf ;; conversion chain). ("doc" odf) ("docx" odf) ("xls" odf) ("xlsx" odf) - ("ppt" odf) ("pps" odf) ("pptx" odf)))))) + ("ppt" odf) ("pps" odf) ("pptx" odf)) + t)))) (content-types (save-excursion (goto-char (point-min))