]> code.delx.au - gnu-emacs/commitdiff
Improve viewing plain text contents of document
authorTassilo Horn <tsdh@gnu.org>
Wed, 22 Oct 2014 13:30:16 +0000 (15:30 +0200)
committerTassilo Horn <tsdh@gnu.org>
Wed, 22 Oct 2014 13:30:16 +0000 (15:30 +0200)
* 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.

doc/emacs/ChangeLog
doc/emacs/misc.texi
lisp/ChangeLog
lisp/doc-view.el

index e19b0cf648538fcca51548c185d1167aeeb16639..901eaac42c38bebd200355c30f81881cc6146571 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-22  Tassilo Horn  <tsdh@gnu.org>
+
+       * misc.texi (Document View): Adapt to latest doc-view changes wrt
+       viewing the document's plain text contents.
+
 2014-10-20  Glenn Morris  <rgm@gnu.org>
 
        * Merge in all changes up to 24.4 release.
index af4d21fe1801173b8143f497b187144002beaa99..af5ced77b5298c6871b2a9593fdc8dfc990ebdfc 100644 (file)
@@ -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}.
index fb516323ee0e76c9491d5c1cd2a77d4859245f73..3fa382e531b670cbdc6ca5c8cd388a79d933b35c 100644 (file)
@@ -1,3 +1,14 @@
+2014-10-22  Tassilo Horn  <tsdh@gnu.org>
+
+       * 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  <monnier@iro.umontreal.ca>
 
        * subr.el (read-key): Fix clicks on the mode-line.
index 9458cace74ec9d59e606dc16388b2457d6759b13..37cb2787ccac7578dd60ba83f75b811558064f3d 100644 (file)
@@ -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))