From: Tassilo Horn <tassilo@member.fsf.org>
To: emacs-devel@gnu.org
Cc: Richard Stallman <rms@gnu.org>
Subject: Re: doc-view compilation warnings
Date: Wed, 24 Oct 2007 17:24:14 +0200 [thread overview]
Message-ID: <87y7dsh6xt.fsf@baldur.tsdh.de> (raw)
In-Reply-To: <877ilckafs.fsf@baldur.tsdh.de> (Tassilo Horn's message of "Wed, 24 Oct 2007 13:40:23 +0200")
[-- Attachment #1: Type: text/plain, Size: 1303 bytes --]
Stefan told me the patch is ok now, except that I should call
`suppress-keymap' first in the keymap definition, not last.
So here's an updated patch:
--8<---------------cut here---------------start------------->8---
2007-10-24 Tassilo Horn <tassilo@member.fsf.org>
* progmodes/ps-mode.el (ps-mode-map): Change bindinc C-c C-c to
C-c C-l and remove binding C-c v.
* doc-view.el (doc-view-mode): Remove text/image switching code.
Use plain defun.
(doc-view-minor-mode): New minor mode.
(doc-view-minor-mode-map): New keymap.
(doc-view-mode-text-map): Remove keymap.
(doc-view-mode-map): New binding K to kill the converter process.
(doc-view-current-display): Remove variable.
(doc-view-buffer-message): Mention new binding K.
(doc-view-display-maybe): Remove function.
(doc-view-pdf/ps->png): Timer calls d-v-display instead
d-v-display-maybe.
(doc-view-mode-map): Use image-mode scrolling for mouse-wheel.
(doc-view-ps->pdf): Resort args to make ps2pdf happy.
(doc-view-current-cache-dir): Better cache dir naming.
(doc-view-remove-if): New function.
(doc-view-search-next-match, doc-view-search-previous-match): Use
it.
* files.el (auto-mode-alist): Change entries: pdf/dvi ->
doc-view-mode, ps -> ps-mode.
--8<---------------cut here---------------end--------------->8---
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: doc-view.patch --]
[-- Type: text/x-patch, Size: 16606 bytes --]
Index: lisp/progmodes/ps-mode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/ps-mode.el,v
retrieving revision 1.21
diff -u -r1.21 ps-mode.el
--- lisp/progmodes/ps-mode.el 26 Jul 2007 05:27:29 -0000 1.21
+++ lisp/progmodes/ps-mode.el 24 Oct 2007 15:11:41 -0000
@@ -408,7 +408,6 @@
(unless ps-mode-map
(setq ps-mode-map (make-sparse-keymap))
- (define-key ps-mode-map "\C-cv" 'ps-mode-show-version)
(define-key ps-mode-map "\C-c\C-v" 'ps-run-boundingbox)
(define-key ps-mode-map "\C-c\C-u" 'ps-mode-uncomment-region)
(define-key ps-mode-map "\C-c\C-t" 'ps-mode-epsf-rich)
@@ -419,7 +418,7 @@
(define-key ps-mode-map "\C-c\C-o" 'ps-mode-comment-out-region)
(define-key ps-mode-map "\C-c\C-k" 'ps-run-kill)
(define-key ps-mode-map "\C-c\C-j" 'ps-mode-other-newline)
- (define-key ps-mode-map "\C-c\C-c" 'ps-run-clear)
+ (define-key ps-mode-map "\C-c\C-l" 'ps-run-clear)
(define-key ps-mode-map "\C-c\C-b" 'ps-run-buffer)
(define-key ps-mode-map ">" 'ps-mode-r-gt)
(define-key ps-mode-map "]" 'ps-mode-r-angle)
@@ -530,7 +529,10 @@
t))
(set (make-local-variable 'comment-start) "%")
;; NOTE: `\' has a special meaning in strings only
- (set (make-local-variable 'comment-start-skip) "%+[ \t]*"))
+ (set (make-local-variable 'comment-start-skip) "%+[ \t]*")
+ ;; enable doc-view-minor-mode => C-c C-c starts viewing the current ps file
+ ;; with doc-view-mode.
+ (doc-view-minor-mode 1))
(defun ps-mode-show-version ()
"Show current version of PostScript mode."
Index: lisp/files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.936
diff -u -r1.936 files.el
--- lisp/files.el 21 Oct 2007 10:48:28 -0000 1.936
+++ lisp/files.el 24 Oct 2007 15:11:47 -0000
@@ -2060,7 +2060,8 @@
("\\.\\(diffs?\\|patch\\|rej\\)\\'" . diff-mode)
("\\.\\(dif\\|pat\\)\\'" . diff-mode) ; for MSDOG
("\\.[eE]?[pP][sS]\\'" . ps-mode)
- ("\\.\\(?:PDF\\|DVI\\|pdf\\|dvi\\)" . doc-view-mode)
+ ("\\.[Dd][Vv][Ii]\\'" . doc-view-mode)
+ ("\\.[Pp][Dd][Ff]\\'" . doc-view-mode)
("configure\\.\\(ac\\|in\\)\\'" . autoconf-mode)
("BROWSE\\'" . ebrowse-tree-mode)
("\\.ebrowse\\'" . ebrowse-tree-mode)
Index: lisp/doc-view.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/doc-view.el,v
retrieving revision 1.11
diff -u -r1.11 doc-view.el
--- lisp/doc-view.el 19 Oct 2007 16:03:09 -0000 1.11
+++ lisp/doc-view.el 24 Oct 2007 15:11:47 -0000
@@ -102,7 +102,6 @@
(require 'dired)
(require 'image-mode)
-(eval-when-compile (require 'cl))
;;;; Customization Options
@@ -202,13 +201,14 @@
(defvar doc-view-current-info nil
"Only used internally.")
-(defvar doc-view-current-display nil
+(defvar doc-view-previous-major-mode nil
"Only used internally.")
;;;; DocView Keymaps
(defvar doc-view-mode-map
(let ((map (make-sparse-keymap)))
+ (suppress-keymap map)
;; Navigation in the document
(define-key map (kbd "n") 'doc-view-next-page)
(define-key map (kbd "p") 'doc-view-previous-page)
@@ -224,6 +224,7 @@
;; Killing/burying the buffer (and the process)
(define-key map (kbd "q") 'bury-buffer)
(define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
+ (define-key map (kbd "K") 'doc-view-kill-proc)
;; Slicing the image
(define-key map (kbd "s s") 'doc-view-set-slice)
(define-key map (kbd "s m") 'doc-view-set-slice-using-mouse)
@@ -242,24 +243,17 @@
(define-key map (kbd "C-t") 'doc-view-show-tooltip)
;; Toggle between text and image display or editing
(define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
- (define-key map (kbd "C-c C-e") 'doc-view-edit-doc)
;; Reconvert the current document
(define-key map (kbd "g") 'doc-view-reconvert-doc)
- (suppress-keymap map)
map)
"Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
-(defvar doc-view-mode-text-map
+(defvar doc-view-minor-mode-map
(let ((map (make-sparse-keymap)))
;; Toggle between text and image display or editing
(define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
- (define-key map (kbd "C-c C-e") 'doc-view-edit-doc)
- ;; Killing/burying the buffer (and the process)
- (define-key map (kbd "q") 'bury-buffer)
- (define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
- (define-key map (kbd "C-x k") 'doc-view-kill-proc-and-buffer)
map)
- "Keymap used by `doc-view-mode' when displaying a document as text.")
+ "Keymap used by `doc-minor-view-mode'.")
;;;; Navigation Commands
@@ -339,11 +333,14 @@
(error (doc-view-previous-page)
(goto-char (point-max)))))
+;;;; Utility Functions
+
(defun doc-view-kill-proc ()
"Kill the current converter process."
(interactive)
(when doc-view-current-converter-process
- (kill-process doc-view-current-converter-process))
+ (kill-process doc-view-current-converter-process)
+ (setq doc-view-current-converter-process nil))
(when doc-view-current-timer
(cancel-timer doc-view-current-timer)
(setq doc-view-current-timer nil))
@@ -356,6 +353,28 @@
(when (eq major-mode 'doc-view-mode)
(kill-buffer (current-buffer))))
+(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
+ (setq doc-view-current-cache-dir
+ (file-name-as-directory
+ (concat (file-name-as-directory doc-view-cache-directory)
+ (let ((doc doc-view-current-doc))
+ (concat (file-name-nondirectory doc)
+ "-"
+ (with-temp-buffer
+ (insert-file-contents-literally doc)
+ (md5 (current-buffer))))))))))
+
+(defun doc-view-remove-if (predicate list)
+ "Return LIST with all items removed that satisfy PREDICATE."
+ (let (new-list)
+ (dolist (item list (nreverse new-list))
+ (when (not (funcall predicate item))
+ (setq new-list (cons item new-list))))))
+
;;;; Conversion Functions
(defun doc-view-reconvert-doc (&rest args)
@@ -368,21 +387,7 @@
;; Clear the old cached files
(when (file-exists-p (doc-view-current-cache-dir))
(dired-delete-file (doc-view-current-cache-dir) 'always))
- (doc-view-kill-proc-and-buffer)
- (find-file doc)))
-
-(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
- (setq doc-view-current-cache-dir
- (file-name-as-directory
- (concat (file-name-as-directory doc-view-cache-directory)
- (let ((doc doc-view-current-doc))
- (with-temp-buffer
- (insert-file-contents-literally doc)
- (md5 (current-buffer)))))))))
+ (doc-view-mode)))
(defun doc-view-dvi->pdf-sentinel (proc event)
"If DVI->PDF conversion was successful, convert the PDF to PNG now."
@@ -439,7 +444,7 @@
(when doc-view-conversion-refresh-interval
(setq doc-view-current-timer
(run-at-time "1 secs" doc-view-conversion-refresh-interval
- 'doc-view-display-maybe
+ 'doc-view-display
doc-view-current-doc))))
(defun doc-view-pdf->txt-sentinel (proc event)
@@ -482,10 +487,11 @@
(setq doc-view-current-converter-process
(start-process "ps->pdf" doc-view-conversion-buffer
doc-view-ps2pdf-program
- ps pdf
;; Avoid security problems when rendering files from
;; untrusted sources.
- "-dSAFER")
+ "-dSAFER"
+ ;; in-file and out-file
+ ps pdf)
mode-line-process (list (format ":%s" doc-view-current-converter-process)))
(set-process-sentinel doc-view-current-converter-process
'doc-view-ps->pdf-sentinel)
@@ -499,7 +505,7 @@
(clear-image-cache)
(let ((png-file (concat (doc-view-current-cache-dir)
"page-%d.png")))
- (make-directory doc-view-current-cache-dir t)
+ (make-directory (doc-view-current-cache-dir) t)
(if (not (string= (file-name-extension doc-view-current-doc) "dvi"))
;; Convert to PNG images.
(doc-view-pdf/ps->png doc-view-current-doc png-file)
@@ -576,11 +582,6 @@
nil
(string< a b))))
-(defun doc-view-display-maybe (doc)
- "Call `doc-view-display' iff we're in the image display."
- (when (eq doc-view-current-display 'image)
- (doc-view-display doc)))
-
(defun doc-view-display (doc)
"Start viewing the document DOC."
(set-buffer (get-file-buffer doc))
@@ -603,58 +604,39 @@
For now these keys are useful:
`q' : Bury this buffer. Conversion will go on in background.
-`k' : Kill the conversion process and this buffer.\n")
+`k' : Kill the conversion process and this buffer.
+`K' : Kill the conversion process.\n")
(set-buffer-modified-p nil))
(defun doc-view-show-tooltip ()
(interactive)
(tooltip-show doc-view-current-info))
-;;;;; Toggle between text and image display
+;;;;; Toggle between editing and viewing
(defun doc-view-toggle-display ()
- "Start or stop displaying a document file as a set of images.
-This command toggles between showing the text of the document
-file and showing the document as a set of images."
+ "Toggle between editing a document as text or viewing it."
(interactive)
- (if (get-text-property (point-min) 'display)
- ;; Switch to text display
- (let ((inhibit-read-only t))
+ (if (eq major-mode 'doc-view-mode)
+ ;; Switch to editing mode
+ (progn
+ (doc-view-kill-proc)
+ (setq buffer-read-only nil)
(erase-buffer)
- (insert-file-contents doc-view-current-doc)
- (use-local-map doc-view-mode-text-map)
- (setq mode-name "DocView[text]"
- doc-view-current-display 'text)
- (if (called-interactively-p)
- (message "Repeat this command to go back to displaying the file as images")))
- ;; Switch to image display
- (let ((inhibit-read-only t))
- (erase-buffer)
- (doc-view-buffer-message)
- (setq doc-view-current-page (or doc-view-current-page 1))
- (if (file-exists-p (doc-view-current-cache-dir))
- (progn
- (message "DocView: using cached files!")
- (doc-view-display doc-view-current-doc))
- (doc-view-convert-current-doc))
- (use-local-map doc-view-mode-map)
- (setq mode-name (format "DocView")
- doc-view-current-display 'image)
- (if (called-interactively-p)
- (message "Repeat this command to go back to displaying the file as text"))))
- (set-buffer-modified-p nil))
-
-;;;;; Leave doc-view-mode and open the file for edit
-
-(defun doc-view-edit-doc ()
- "Leave `doc-view-mode' and open the current doc with an appropriate editing mode."
- (interactive)
- (let ((filename doc-view-current-doc)
- (auto-mode-alist (append '(("\\.[eE]?[pP][sS]\\'" . ps-mode)
- ("\\.\\(pdf\\|PDF\\|dvi\\|DVI\\)$" . fundamental-mode))
- auto-mode-alist)))
- (kill-buffer (current-buffer))
- (find-file filename)))
+ (insert-file-contents buffer-file-name)
+ ;; Switch to the previously used major mode or fall back to fundamental
+ ;; mode.
+ (if doc-view-previous-major-mode
+ (funcall doc-view-previous-major-mode)
+ (fundamental-mode))
+ (doc-view-minor-mode 1)
+ (set-buffer-modified-p nil))
+ ;; Switch to doc-view-mode
+ (when (and (buffer-modified-p)
+ (y-or-n-p "The buffer has been modified. Save the changes? "))
+ (save-buffer))
+ (erase-buffer)
+ (doc-view-mode)))
;;;; Searching
@@ -742,8 +724,9 @@
(defun doc-view-search-next-match (arg)
"Go to the ARGth next matching page."
(interactive "p")
- (let* ((next-pages (remove-if (lambda (i) (<= (car i) doc-view-current-page))
- doc-view-current-search-matches))
+ (let* ((next-pages (doc-view-remove-if
+ (lambda (i) (<= (car i) doc-view-current-page))
+ doc-view-current-search-matches))
(page (car (nth (1- arg) next-pages))))
(if page
(doc-view-goto-page page)
@@ -755,8 +738,9 @@
(defun doc-view-search-previous-match (arg)
"Go to the ARGth previous matching page."
(interactive "p")
- (let* ((prev-pages (remove-if (lambda (i) (>= (car i) doc-view-current-page))
- doc-view-current-search-matches))
+ (let* ((prev-pages (doc-view-remove-if
+ (lambda (i) (>= (car i) doc-view-current-page))
+ doc-view-current-search-matches))
(page (car (nth (1- arg) (nreverse prev-pages)))))
(if page
(doc-view-goto-page page)
@@ -770,37 +754,69 @@
(put 'doc-view-mode 'mode-class 'special)
;;;###autoload
-(define-derived-mode doc-view-mode nil "DocView"
+(defun doc-view-mode ()
"Major mode in DocView buffers.
You can use \\<doc-view-mode-map>\\[doc-view-toggle-display] to
-toggle between display as a set of images and display as text."
- :group 'doc-view
- (make-local-variable 'doc-view-current-files)
- (make-local-variable 'doc-view-current-doc)
- (make-local-variable 'doc-view-current-image)
- (make-local-variable 'doc-view-current-page)
- (make-local-variable 'doc-view-current-converter-process)
- (make-local-variable 'doc-view-current-timer)
- (make-local-variable 'doc-view-current-slice)
- (make-local-variable 'doc-view-current-cache-dir)
- (make-local-variable 'doc-view-current-info)
- (make-local-variable 'doc-view-current-search-matches)
- (setq doc-view-current-doc (buffer-file-name))
+toggle between displaying the document or editing it as text."
+ (interactive)
+ (let* ((prev-major-mode (if (eq major-mode 'doc-view-mode)
+ doc-view-previous-major-mode
+ major-mode)))
+ (kill-all-local-variables)
+ (make-local-variable 'doc-view-current-files)
+ (make-local-variable 'doc-view-current-image)
+ (make-local-variable 'doc-view-current-page)
+ (make-local-variable 'doc-view-current-converter-process)
+ (make-local-variable 'doc-view-current-timer)
+ (make-local-variable 'doc-view-current-slice)
+ (make-local-variable 'doc-view-current-cache-dir)
+ (make-local-variable 'doc-view-current-info)
+ (make-local-variable 'doc-view-current-search-matches)
+ (set (make-local-variable 'doc-view-current-doc) buffer-file-name)
+ (set (make-local-variable 'doc-view-previous-major-mode) prev-major-mode))
(insert-file-contents doc-view-current-doc)
- (use-local-map doc-view-mode-text-map)
- (setq mode-name "DocView[text]"
- doc-view-current-display 'text
+ (use-local-map doc-view-mode-map)
+ (setq mode-name "DocView"
buffer-read-only t
- revert-buffer-function 'doc-view-reconvert-doc)
+ revert-buffer-function 'doc-view-reconvert-doc
+ major-mode 'doc-view-mode)
;; Switch to image display if possible
(if (and (display-images-p)
- (image-type-available-p 'png)
- (not (get-text-property (point-min) 'display)))
- (doc-view-toggle-display))
- (message
- "%s"
- (substitute-command-keys
- "Type \\[doc-view-toggle-display] to toggle between image and text display.")))
+ (image-type-available-p 'png))
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (doc-view-buffer-message)
+ (setq doc-view-current-page (or doc-view-current-page 1))
+ (if (file-exists-p (doc-view-current-cache-dir))
+ (progn
+ (message "DocView: using cached files!")
+ (doc-view-display doc-view-current-doc))
+ (doc-view-convert-current-doc))
+ (use-local-map doc-view-mode-map)
+ (message
+ "%s"
+ (substitute-command-keys
+ (concat "Type \\[doc-view-toggle-display] to toggle between "
+ "editing or viewing the document."))))
+ (message
+ "%s"
+ (substitute-command-keys
+ (concat "No image (png) support available. Type \\[doc-view-toggle-display] "
+ "to switch to an editing mode.")))))
+
+;;;###autoload
+(define-minor-mode doc-view-minor-mode
+ "Toggle Doc view minor mode.
+With arg, turn Doc view minor mode on if arg is positive, off otherwise.
+See the command `doc-view-mode' for more information on this mode."
+ nil " DocView" doc-view-minor-mode-map
+ :group 'doc-view
+ (when doc-view-minor-mode
+ (add-hook 'change-major-mode-hook (lambda () (doc-view-minor-mode -1)) nil t)
+ (message
+ "%s"
+ (substitute-command-keys
+ "Type \\[doc-view-toggle-display] to toggle between editing or viewing the document."))))
(defun doc-view-clear-cache ()
"Delete the whole cache (`doc-view-cache-directory')."
[-- Attachment #3: Type: text/plain, Size: 14 bytes --]
Bye,
Tassilo
[-- Attachment #4: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
next prev parent reply other threads:[~2007-10-24 15:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-21 2:38 doc-view compilation warnings Miles Bader
2007-10-21 8:55 ` Tassilo Horn
2007-10-22 9:00 ` Richard Stallman
2007-10-23 13:32 ` Tassilo Horn
2007-10-23 14:30 ` Dan Nicolaescu
2007-10-23 15:54 ` Tassilo Horn
2007-10-23 16:07 ` Dan Nicolaescu
2007-10-23 17:50 ` Tassilo Horn
2007-10-23 18:35 ` Dan Nicolaescu
2007-10-23 18:41 ` Tassilo Horn
2007-10-23 19:00 ` Stefan Monnier
2007-10-23 20:00 ` Tassilo Horn
2007-10-23 21:53 ` Stefan Monnier
2007-10-24 7:59 ` Tassilo Horn
2007-10-24 11:40 ` Tassilo Horn
2007-10-24 15:24 ` Tassilo Horn [this message]
2007-10-26 10:52 ` doc-view.patch waiting for installation (was: doc-view compilation warnings) Tassilo Horn
2007-10-29 1:52 ` doc-view.patch waiting for installation Glenn Morris
2007-10-29 9:36 ` Tassilo Horn
2007-10-30 6:33 ` Glenn Morris
2007-10-30 18:07 ` Case folding for auto-mode-alist (was: doc-view.patch waiting for installation) Reiner Steib
2007-10-30 19:00 ` Case folding for auto-mode-alist Stefan Monnier
2007-10-31 7:47 ` Richard Stallman
2007-10-31 15:19 ` Stefan Monnier
2007-10-31 15:30 ` David Kastrup
2007-10-31 16:17 ` Stefan Monnier
2007-10-24 13:55 ` doc-view compilation warnings Stefan Monnier
2007-10-24 14:32 ` Tassilo Horn
2007-10-24 8:33 ` Richard Stallman
2007-10-24 8:32 ` Richard Stallman
2007-10-24 8:32 ` Richard Stallman
2007-10-24 8:32 ` Richard Stallman
2007-10-24 2:49 ` Richard Stallman
2007-10-24 2:49 ` Richard Stallman
2007-10-24 8:11 ` Tassilo Horn
2007-10-24 8:19 ` David Kastrup
2007-10-25 2:10 ` Richard Stallman
2007-10-25 8:09 ` Tassilo Horn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y7dsh6xt.fsf@baldur.tsdh.de \
--to=tassilo@member.fsf.org \
--cc=emacs-devel@gnu.org \
--cc=rms@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).