annotate lisp/dos-w32.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 280c8ae2476d
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
1 ;; dos-w32.el --- Functions shared among MS-DOS and W32 (NT/95) platforms
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
74439
ddcbd2c1b70d Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 72052
diff changeset
3 ;; Copyright (C) 1996, 2001, 2002, 2003, 2004, 2005,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105994
diff changeset
4 ;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
21059
cbd9e55a6cdc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 19970
diff changeset
6 ;; Maintainer: Geoff Voelker <voelker@cs.washington.edu>
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: internal
110015
280c8ae2476d Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
8 ;; Package: emacs
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; (at your option) any later version.
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; Parts of this code are duplicated functions taken from dos-fns.el
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; and winnt.el.
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;; Code:
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; Use ";" instead of ":" as a path separator (from files.el).
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 (setq path-separator ";")
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
22256
9f422336200e (minibuffer-history-case-insensitive-variables):
Richard M. Stallman <rms@gnu.org>
parents: 21567
diff changeset
35 (setq minibuffer-history-case-insensitive-variables
9f422336200e (minibuffer-history-case-insensitive-variables):
Richard M. Stallman <rms@gnu.org>
parents: 21567
diff changeset
36 (cons 'file-name-history minibuffer-history-case-insensitive-variables))
9f422336200e (minibuffer-history-case-insensitive-variables):
Richard M. Stallman <rms@gnu.org>
parents: 21567
diff changeset
37
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; Set the null device (for compile.el).
22607
3c91c17a1a0f (null-device): Renamed from grep-null-device.
Andrew Innes <andrewi@gnu.org>
parents: 22256
diff changeset
39 (setq null-device "NUL")
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; For distinguishing file types based upon suffixes.
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 (defvar file-name-buffer-file-type-alist
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 '(
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ("[:/].*config.sys$" . nil) ; config.sys text
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
45 ("\\.\\(obj\\|exe\\|com\\|lib\\|sys\\|bin\\|ico\\|pif\\|class\\)$" . t)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ; MS-Dos stuff
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
47 ("\\.\\(dll\\|drv\\|386\\|vxd\\|fon\\|fnt\\|fot\\|ttf\\|grp\\)$" . t)
19690
ceed5706d45e (file-name-buffer-file-type-alist): Add more
Geoff Voelker <voelker@cs.washington.edu>
parents: 19656
diff changeset
48 ; Windows stuff
26798
89a8ac5aa753 (file-name-buffer-file-type-alist): Add `$' at end of
Gerd Moellmann <gerd@gnu.org>
parents: 25482
diff changeset
49 ("\\.\\(bmp\\|wav\\|avi\\|mpg\\|jpg\\|tif\\|mov\\|au\\)$" . t)
19690
ceed5706d45e (file-name-buffer-file-type-alist): Add more
Geoff Voelker <voelker@cs.washington.edu>
parents: 19656
diff changeset
50 ; known binary data files
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ("\\.\\(arc\\|zip\\|pak\\|lzh\\|zoo\\)$" . t)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ; Packers
19690
ceed5706d45e (file-name-buffer-file-type-alist): Add more
Geoff Voelker <voelker@cs.washington.edu>
parents: 19656
diff changeset
53 ("\\.\\(a\\|o\\|tar\\|z\\|gz\\|taz\\|jar\\)$" . t)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ; Unix stuff
46300
7fb1d661f610 *** empty log message ***
Pavel Janík <Pavel@Janik.cz>
parents: 46188
diff changeset
55 ("\\.sx[dmicw]$" . t) ; OpenOffice.org
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
56 ("\\.tp[ulpw]$" . t) ; borland Pascal stuff
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
57 ("[:/]tags$" . nil) ; emacs TAGS file
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 )
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 "*Alist for distinguishing text files from binary files.
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 Each element has the form (REGEXP . TYPE), where REGEXP is matched
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 against the file name, and TYPE is nil for text, t for binary.")
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
63 ;; Return the pair matching filename on file-name-buffer-file-type-alist,
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
64 ;; or nil otherwise.
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
65 (defun find-buffer-file-type-match (filename)
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
66 (let ((alist file-name-buffer-file-type-alist)
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
67 (found nil))
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
68 (let ((case-fold-search t))
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
69 (setq filename (file-name-sans-versions filename))
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
70 (while (and (not found) alist)
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
71 (if (string-match (car (car alist)) filename)
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
72 (setq found (car alist)))
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
73 (setq alist (cdr alist)))
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
74 found)))
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
75
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
76 ;; Don't check for untranslated file systems here.
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 (defun find-buffer-file-type (filename)
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
78 (let ((match (find-buffer-file-type-match filename))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
79 (code))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
80 (if (not match)
104662
790bd85e4cb0 * mail/feedmail.el: Use CL macros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101245
diff changeset
81 (default-value 'buffer-file-type)
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
82 (setq code (cdr match))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
83 (cond ((memq code '(nil t)) code)
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
84 ((and (symbolp code) (fboundp code))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
85 (funcall code filename))))))
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
86
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
87 (setq-default buffer-file-coding-system 'undecided-dos)
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
88
18912
d6d9a466fad2 (find-buffer-file-type-coding-system,
Geoff Voelker <voelker@cs.washington.edu>
parents: 18872
diff changeset
89 (defun find-buffer-file-type-coding-system (command)
72052
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
90 "Choose a coding system for a file operation in COMMAND.
77775
52935906feab (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 77105
diff changeset
91 COMMAND is a list that specifies the operation, an I/O primitive, as its
72052
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
92 CAR, and the arguments that might be given to that operation as its CDR.
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
93 If operation is `insert-file-contents', the coding system is chosen based
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
94 upon the filename (the CAR of the arguments beyond the operation), the contents
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
95 of `untranslated-filesystem-list' and `file-name-buffer-file-type-alist',
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
96 and whether the file exists:
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
97
18872
8c7bcffd7327 (find-buffer-file-type-coding-system):
Geoff Voelker <voelker@cs.washington.edu>
parents: 18863
diff changeset
98 If it matches in `untranslated-filesystem-list':
34110
a47622945cee (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 32983
diff changeset
99 If the file exists: `undecided'
a47622945cee (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 32983
diff changeset
100 If the file does not exist: `undecided-unix'
18872
8c7bcffd7327 (find-buffer-file-type-coding-system):
Geoff Voelker <voelker@cs.washington.edu>
parents: 18863
diff changeset
101 If it matches in `file-name-buffer-file-type-alist':
8c7bcffd7327 (find-buffer-file-type-coding-system):
Geoff Voelker <voelker@cs.washington.edu>
parents: 18863
diff changeset
102 If the match is t (for binary): `no-conversion'
8c7bcffd7327 (find-buffer-file-type-coding-system):
Geoff Voelker <voelker@cs.washington.edu>
parents: 18863
diff changeset
103 If the match is nil (for dos-text): `undecided-dos'
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
104 Otherwise:
18872
8c7bcffd7327 (find-buffer-file-type-coding-system):
Geoff Voelker <voelker@cs.washington.edu>
parents: 18863
diff changeset
105 If the file exists: `undecided'
104664
50fdf250e26b * mh-e/mh-comp.el (mh-send-letter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104662
diff changeset
106 If the file does not exist default value of `buffer-file-coding-system'
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
107
77775
52935906feab (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 77105
diff changeset
108 Note that the CAR of arguments to `insert-file-contents' operation could
52935906feab (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 77105
diff changeset
109 be a cons cell of the form \(FILENAME . BUFFER\), where BUFFER is a buffer
52935906feab (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 77105
diff changeset
110 into which the file's contents were already read, but not yet decoded.
52935906feab (find-buffer-file-type-coding-system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 77105
diff changeset
111
72052
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
112 If operation is `write-region', the coding system is chosen based upon
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
113 the value of `buffer-file-coding-system' and `buffer-file-type'. If
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
114 `buffer-file-coding-system' is non-nil, its value is used. If it is
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
115 nil and `buffer-file-type' is t, the coding system is `no-conversion'.
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
116 Otherwise, it is `undecided-dos'.
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
117
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
118 The two most common situations are when DOS and Unix files are read
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
119 and written, and their names do not match in
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
120 `untranslated-filesystem-list' and `file-name-buffer-file-type-alist'.
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
121 In these cases, the coding system initially will be `undecided'. As
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
122 the file is read in the DOS case, the coding system will be changed to
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
123 `undecided-dos' as CR/LFs are detected. As the file is read in the
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
124 Unix case, the coding system will be changed to `undecided-unix' as
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
125 LFs are detected. In both cases, `buffer-file-coding-system' will be
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
126 set to the appropriate coding system, and the value of
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
127 `buffer-file-coding-system' will be used when writing the file."
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
128
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
129 (let ((op (nth 0 command))
18863
62090ffa4583 (find-buffer-file-type-coding-system):
Richard M. Stallman <rms@gnu.org>
parents: 18858
diff changeset
130 (binary nil) (text nil)
101245
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
131 (undecided nil) (undecided-unix nil)
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
132 target target-buf)
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
133 (cond ((eq op 'insert-file-contents)
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
134 (setq target (nth 1 command))
72052
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
135 ;; If TARGET is a cons cell, it has the form (FILENAME . BUFFER),
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
136 ;; where BUFFER is a buffer into which the file was already read,
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
137 ;; but its contents were not yet decoded. (This form of the
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
138 ;; arguments is used, e.g., in arc-mode.el.) This function
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
139 ;; doesn't care about the contents, it only looks at the file's
d317c5ea9079 (find-buffer-file-type-coding-system): Support calls where `(nth 1 command)'
Eli Zaretskii <eliz@gnu.org>
parents: 71428
diff changeset
140 ;; name, which is the CAR of the cons cell.
101245
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
141 (when (consp target)
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
142 (setq target-buf
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
143 (and (bufferp (cdr target))
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
144 (buffer-name (cdr target))))
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
145 (setq target (car target)))
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
146 ;; First check for a file name that indicates
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
147 ;; it is truly binary.
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
148 (setq binary (find-buffer-file-type target))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
149 (cond (binary)
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
150 ;; Next check for files that MUST use DOS eol conversion.
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
151 ((find-buffer-file-type-match target)
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
152 (setq text t))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
153 ;; For any other existing file, decide based on contents.
101245
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
154 ((or
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
155 (file-exists-p target)
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
156 ;; If TARGET does not exist as a file, replace its
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
157 ;; base name with TARGET-BUF and try again. This
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
158 ;; is for jka-compr's sake, which strips the
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
159 ;; compression (.gz etc.) extension from the
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
160 ;; FILENAME, but leaves it in the BUFFER's name.
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
161 (and (stringp target-buf)
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
162 (file-exists-p
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
163 (expand-file-name target-buf
5b95a230db1f (find-buffer-file-type-coding-system): If `(car target)' does not exist as a
Eli Zaretskii <eliz@gnu.org>
parents: 100908
diff changeset
164 (file-name-directory target)))))
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
165 (setq undecided t))
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
166 ;; Next check for a non-DOS file system.
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
167 ((untranslated-file-p target)
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
168 (setq undecided-unix t)))
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
169 (cond (binary '(no-conversion . no-conversion))
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
170 (text '(undecided-dos . undecided-dos))
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
171 (undecided-unix '(undecided-unix . undecided-unix))
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
172 (undecided '(undecided . undecided))
104664
50fdf250e26b * mh-e/mh-comp.el (mh-send-letter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104662
diff changeset
173 (t (cons (default-value 'buffer-file-coding-system)
50fdf250e26b * mh-e/mh-comp.el (mh-send-letter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104662
diff changeset
174 (default-value 'buffer-file-coding-system)))))
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
175 ((eq op 'write-region)
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
176 (if buffer-file-coding-system
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
177 (cons buffer-file-coding-system
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
178 buffer-file-coding-system)
19656
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
179 ;; Normally this is used only in a non-file-visiting
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
180 ;; buffer, because normally buffer-file-coding-system is non-nil
98e7893f8679 (find-buffer-file-type): Don't check for untranslated file systems here.
Richard M. Stallman <rms@gnu.org>
parents: 19400
diff changeset
181 ;; in a file-visiting buffer.
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
182 (if buffer-file-type
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
183 '(no-conversion . no-conversion)
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
184 '(undecided-dos . undecided-dos)))))))
18858
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
185
ad717015a2de (find-buffer-file-type-coding-system)
Richard M. Stallman <rms@gnu.org>
parents: 17901
diff changeset
186 (modify-coding-system-alist 'file "" 'find-buffer-file-type-coding-system)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
188 (defun find-file-binary (filename)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 "Visit file FILENAME and treat it as binary."
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 (interactive "FFind file binary: ")
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (let ((file-name-buffer-file-type-alist '(("" . t))))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 (find-file filename)))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
194 (defun find-file-text (filename)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 "Visit file FILENAME and treat it as a text file."
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (interactive "FFind file text: ")
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (let ((file-name-buffer-file-type-alist '(("" . nil))))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (find-file filename)))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
200 (defun find-file-not-found-set-buffer-file-coding-system ()
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104664
diff changeset
201 (with-current-buffer (current-buffer)
32983
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
202 (let ((coding buffer-file-coding-system))
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
203 ;; buffer-file-coding-system is already set by
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
204 ;; find-operation-coding-system, which was called from
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
205 ;; insert-file-contents. All that's left is to change
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
206 ;; the EOL conversion, if required by the user.
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
207 (when (and (null coding-system-for-read)
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
208 (or inhibit-eol-conversion
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
209 (untranslated-file-p (buffer-file-name))))
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
210 (setq coding (coding-system-change-eol-conversion coding 0))
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
211 (setq buffer-file-coding-system coding))
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
212 (setq buffer-file-type (eq buffer-file-coding-system 'no-conversion)))))
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
214 ;;; To set the default coding system on new files.
71428
4dc3f74ad23f (top level): Use find-file-not-found-functions instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
215 (add-hook 'find-file-not-found-functions
19400
95183e63d1dd Set default coding system to undecided-dos.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18912
diff changeset
216 'find-file-not-found-set-buffer-file-coding-system)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
95241
54b3c5554f6f Spelling fix.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
218 ;;; To accommodate filesystems that do not require CR/LF translation.
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (defvar untranslated-filesystem-list nil
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
220 "List of filesystems that require no CR/LF translation when reading
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 and writing files. Each filesystem in the list is a string naming
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 the directory prefix corresponding to the filesystem.")
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (defun untranslated-canonical-name (filename)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 "Return FILENAME in a canonicalized form for use with the functions
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 dealing with untranslated filesystems."
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 46300
diff changeset
227 (if (memq system-type '(ms-dos windows-nt cygwin))
16889
8de32e992e4d Change uses of win32 to w32.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16591
diff changeset
228 ;; The canonical form for DOS/W32 is with A-Z downcased and all
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 ;; directory separators changed to directory-sep-char.
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (let ((name nil))
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
231 (setq name (mapconcat
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
232 '(lambda (char)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (if (and (<= ?A char) (<= char ?Z))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (char-to-string (+ (- char ?A) ?a))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (char-to-string char)))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 filename nil))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 ;; Use expand-file-name to canonicalize directory separators, except
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;; with bare drive letters (which would have the cwd appended).
24913
76764b2157af (untranslated-canonical-name): Avoid expanding
Andrew Innes <andrewi@gnu.org>
parents: 24658
diff changeset
239 ;; Avoid expanding names that could trigger ange-ftp to prompt
76764b2157af (untranslated-canonical-name): Avoid expanding
Andrew Innes <andrewi@gnu.org>
parents: 24658
diff changeset
240 ;; for passwords, though.
76764b2157af (untranslated-canonical-name): Avoid expanding
Andrew Innes <andrewi@gnu.org>
parents: 24658
diff changeset
241 (if (or (string-match "^.:$" name)
76764b2157af (untranslated-canonical-name): Avoid expanding
Andrew Innes <andrewi@gnu.org>
parents: 24658
diff changeset
242 (string-match "^/[^/:]+:" name))
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 name
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (expand-file-name name)))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 filename))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (defun untranslated-file-p (filename)
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
248 "Return t if FILENAME is on a filesystem that does not require
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 CR/LF translation, and nil otherwise."
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (let ((fs (untranslated-canonical-name filename))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 (ufs-list untranslated-filesystem-list)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (found nil))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (while (and (not found) ufs-list)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (if (string-match (concat "^" (car ufs-list)) fs)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (setq found t)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (setq ufs-list (cdr ufs-list))))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 found))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (defun add-untranslated-filesystem (filesystem)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 "Add FILESYSTEM to the list of filesystems that do not require
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 CR/LF translation. FILESYSTEM is a string containing the directory
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
262 prefix corresponding to the filesystem. For example, for a Unix
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 filesystem mounted on drive Z:, FILESYSTEM could be \"Z:\"."
32983
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
264 ;; We use "D", not "f", to avoid confusing the user: "f" prompts
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
265 ;; with a directory, but RET returns the current buffer's file, not
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
266 ;; its directory.
a7eb5c4fe0ba (find-file-not-found-set-buffer-file-coding-system):
Eli Zaretskii <eliz@gnu.org>
parents: 26798
diff changeset
267 (interactive "DUntranslated file system: ")
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 (let ((fs (untranslated-canonical-name filesystem)))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (if (member fs untranslated-filesystem-list)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 untranslated-filesystem-list
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (setq untranslated-filesystem-list
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 (cons fs untranslated-filesystem-list)))))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (defun remove-untranslated-filesystem (filesystem)
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
275 "Remove FILESYSTEM from the list of filesystems that do not require
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 CR/LF translation. FILESYSTEM is a string containing the directory
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
277 prefix corresponding to the filesystem. For example, for a Unix
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 filesystem mounted on drive Z:, FILESYSTEM could be \"Z:\"."
17901
6ea4d90cc76b (add-untranslated-filesystem)
Richard M. Stallman <rms@gnu.org>
parents: 16889
diff changeset
279 (interactive "fUntranslated file system: ")
46188
7864bcf48126 (file-name-buffer-file-type-alist): Add knowledge of .sx[dmicw] file
Francesco Potortì <pot@gnu.org>
parents: 38001
diff changeset
280 (setq untranslated-filesystem-list
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (delete (untranslated-canonical-name filesystem)
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 untranslated-filesystem-list)))
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
284 ;;; Support for printing under DOS/Windows, see lpr.el and ps-print.el.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
285
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
286 (defvar direct-print-region-use-command-dot-com t
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
287 "*Control whether command.com is used to print on Windows 9x.")
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
288
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
289 ;; Function to actually send data to the printer port.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
290 ;; Supports writing directly, and using various programs.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
291 (defun direct-print-region-helper (printer
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
292 start end
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
293 lpr-prog
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
294 delete-text buf display
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
295 rest)
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
296 (let* (;; Ignore case when matching known external program names.
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
297 (case-fold-search t)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
298 ;; Convert / to \ in printer name, for sake of external programs.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
299 (printer
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
300 (if (stringp printer)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
301 (subst-char-in-string ?/ ?\\ printer)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
302 printer))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
303 ;; Find a directory that is local, to work-around Windows bug.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
304 (safe-dir
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
305 (let ((safe-dirs (list "c:/" (getenv "windir") (getenv "TMPDIR"))))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
306 (while (not (file-attributes (car safe-dirs)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
307 (setq safe-dirs (cdr safe-dirs)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
308 (car safe-dirs)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
309 (tempfile
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
310 (subst-char-in-string
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
311 ?/ ?\\
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
312 (make-temp-name
25482
f1d437596538 (direct-print-region-helper): Use temporary-file-directory.
Eli Zaretskii <eliz@gnu.org>
parents: 24913
diff changeset
313 (expand-file-name "EP" temporary-file-directory))))
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
314 ;; capture output for diagnosis
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
315 (errbuf (list (get-buffer-create " *print-region-helper*") t)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
316 ;; It seems that we must be careful about the directory name that
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
317 ;; gets added to the printer port name by write-region when using
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
318 ;; the standard "PRN" or "LPTx" ports, because the write can fail if
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
319 ;; the directory is on a network drive. The same is true when
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
320 ;; asking command.com to copy the file.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
321 ;; No action is needed for UNC printer names, which is just as well
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
322 ;; because `expand-file-name' doesn't support UNC names on MS-DOS.
24213
3c29f6165eca (direct-print-region-helper): Check for printer
Geoff Voelker <voelker@cs.washington.edu>
parents: 24092
diff changeset
323 (if (and (stringp printer) (not (string-match "^\\\\" printer)))
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
324 (setq printer
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
325 (subst-char-in-string ?/ ?\\ (expand-file-name printer safe-dir))))
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
326 ;; Handle known programs specially where necessary.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
327 (unwind-protect
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
328 (cond
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
329 ;; nprint.exe is the standard print command on Netware
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
330 ((string-match "^nprint\\(\\.exe\\)?$" (file-name-nondirectory lpr-prog))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
331 (write-region start end tempfile nil 0)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
332 (call-process lpr-prog nil errbuf nil
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
333 tempfile (concat "P=" printer)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
334 ;; print.exe is a standard command on NT
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
335 ((string-match "^print\\(\\.exe\\)?$" (file-name-nondirectory lpr-prog))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
336 ;; Be careful not to invoke print.exe on MS-DOS or Windows 9x
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
337 ;; though, because it is a TSR program there (hangs Emacs).
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
338 (or (and (eq system-type 'windows-nt)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
339 (null (getenv "winbootdir")))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
340 (error "Printing via print.exe is not supported on MS-DOS or Windows 9x"))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
341 ;; It seems that print.exe always appends a form-feed so we
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
342 ;; should make sure to omit the last FF in the data.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
343 (if (and (> end start)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
344 (char-equal (char-before end) ?\C-l))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
345 (setq end (1- end)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
346 ;; cancel out annotate function for non-PS case
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
347 (let ((write-region-annotate-functions nil))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
348 (write-region start end tempfile nil 0))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
349 (call-process lpr-prog nil errbuf nil
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
350 (concat "/D:" printer) tempfile))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
351 ;; support lpr and similar programs for convenience, but
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
352 ;; supply an explicit filename because the NT version of lpr
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
353 ;; can't read from stdin.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
354 ((> (length lpr-prog) 0)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
355 (write-region start end tempfile nil 0)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
356 (setq rest (append rest (list tempfile)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
357 (apply 'call-process lpr-prog nil errbuf nil rest))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
358 ;; Run command.com to access printer port on Windows 9x, unless
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
359 ;; we are supposed to append to an existing (non-empty) file,
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
360 ;; to work around a bug in Windows 9x that prevents Win32
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
361 ;; programs from accessing LPT ports reliably.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
362 ((and (eq system-type 'windows-nt)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
363 (getenv "winbootdir")
24658
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
364 ;; Allow cop-out so command.com isn't invoked
7de5cc79a8b4 (file-name-buffer-file-type-alist): Remove various
Andrew Innes <andrewi@gnu.org>
parents: 24515
diff changeset
365 direct-print-region-use-command-dot-com
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
366 ;; file-attributes fails on LPT ports on Windows 9x but
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
367 ;; not on NT, so handle both cases for safety.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
368 (eq (or (nth 7 (file-attributes printer)) 0) 0))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
369 (write-region start end tempfile nil 0)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
370 (let ((w32-quote-process-args nil))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
371 (call-process "command.com" nil errbuf nil "/c"
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
372 (format "copy /b %s %s" tempfile printer))))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
373 ;; write directly to the printer port
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
374 (t
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
375 (write-region start end printer t 0)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
376 ;; ensure we remove the tempfile if created
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
377 (if (file-exists-p tempfile)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
378 (delete-file tempfile)))))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
379
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
380 (defvar printer-name)
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
381
86289
8a7ed478f7bc * international/titdic-cnv.el (dos-8+3-filename):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86277
diff changeset
382 (declare-function default-printer-name "w32fns.c")
8a7ed478f7bc * international/titdic-cnv.el (dos-8+3-filename):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86277
diff changeset
383
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
384 (defun direct-print-region-function (start end
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
385 &optional lpr-prog
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
386 delete-text buf display
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
387 &rest rest)
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
388 "DOS/Windows-specific function to print the region on a printer.
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
389 Writes the region to the device or file which is a value of
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
390 `printer-name' \(which see\), unless the value of `lpr-command'
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
391 indicates a specific program should be invoked."
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
392
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
393 ;; DOS printers need the lines to end with CR-LF pairs, so make
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
394 ;; sure it always happens that way, unless the buffer is binary.
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
395 (let* ((coding coding-system-for-write)
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
396 (coding-base
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
397 (if (null coding) 'undecided (coding-system-base coding)))
23802
4052a2875390 (direct-print-region-function): Try to ensure that
Geoff Voelker <voelker@cs.washington.edu>
parents: 23682
diff changeset
398 (eol-type (coding-system-eol-type coding-base))
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
399 ;; Make each print-out eject the final page, but don't waste
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
400 ;; paper if the file ends with a form-feed already.
23802
4052a2875390 (direct-print-region-function): Try to ensure that
Geoff Voelker <voelker@cs.washington.edu>
parents: 23682
diff changeset
401 (write-region-annotate-functions
4052a2875390 (direct-print-region-function): Try to ensure that
Geoff Voelker <voelker@cs.washington.edu>
parents: 23682
diff changeset
402 (cons
4052a2875390 (direct-print-region-function): Try to ensure that
Geoff Voelker <voelker@cs.washington.edu>
parents: 23682
diff changeset
403 (lambda (start end)
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
404 (if (not (char-equal (char-before end) ?\C-l))
23802
4052a2875390 (direct-print-region-function): Try to ensure that
Geoff Voelker <voelker@cs.washington.edu>
parents: 23682
diff changeset
405 `((,end . "\f"))))
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
406 write-region-annotate-functions))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
407 (printer (or (and (boundp 'dos-printer)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
408 (stringp (symbol-value 'dos-printer))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
409 (symbol-value 'dos-printer))
53740
19655fe347ec Added support for the `default-printer-name' function.
Jason Rumney <jasonr@gnu.org>
parents: 52401
diff changeset
410 printer-name
19655fe347ec Added support for the `default-printer-name' function.
Jason Rumney <jasonr@gnu.org>
parents: 52401
diff changeset
411 (default-printer-name))))
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
412 (or (eq coding-system-for-write 'no-conversion)
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
413 (setq coding-system-for-write
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
414 (aref eol-type 1))) ; force conversion to DOS EOLs
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
415 (direct-print-region-helper printer start end lpr-prog
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
416 delete-text buf display rest)))
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
417
85512
589532be95ec * w32-fns.el (w32-quote-process-args):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78236
diff changeset
418 (defvar print-region-function)
589532be95ec * w32-fns.el (w32-quote-process-args):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78236
diff changeset
419 (defvar lpr-headers-switches)
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
420 (setq print-region-function 'direct-print-region-function)
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
421
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
422 ;; Set this to nil if you have a port of the `pr' program
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
423 ;; (e.g., from GNU Textutils), or if you have an `lpr'
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
424 ;; program (see above) that can print page headers.
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
425 ;; If `lpr-headers-switches' is non-nil (the default) and
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
426 ;; `print-region-function' is set to `dos-print-region-function',
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
427 ;; then requests to print page headers will be silently
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
428 ;; ignored, and `print-buffer' and `print-region' produce
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
429 ;; the same output as `lpr-buffer' and `lpr-region', accordingly.
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
430 (setq lpr-headers-switches "(page headers are not supported)")
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
431
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
432 (defvar ps-printer-name)
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
433
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
434 (defun direct-ps-print-region-function (start end
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
435 &optional lpr-prog
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
436 delete-text buf display
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
437 &rest rest)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
438 "DOS/Windows-specific function to print the region on a PostScript printer.
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
439 Writes the region to the device or file which is a value of
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
440 `ps-printer-name' \(which see\), unless the value of `ps-lpr-command'
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
441 indicates a specific program should be invoked."
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
442
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
443 (let ((printer (or (and (boundp 'dos-ps-printer)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
444 (stringp (symbol-value 'dos-ps-printer))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
445 (symbol-value 'dos-ps-printer))
53740
19655fe347ec Added support for the `default-printer-name' function.
Jason Rumney <jasonr@gnu.org>
parents: 52401
diff changeset
446 ps-printer-name
19655fe347ec Added support for the `default-printer-name' function.
Jason Rumney <jasonr@gnu.org>
parents: 52401
diff changeset
447 (default-printer-name))))
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
448 (direct-print-region-helper printer start end lpr-prog
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
449 delete-text buf display rest)))
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
450
85512
589532be95ec * w32-fns.el (w32-quote-process-args):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78236
diff changeset
451 (defvar ps-print-region-function)
24092
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
452 (setq ps-print-region-function 'direct-ps-print-region-function)
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
453
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
454 ;(setq ps-lpr-command "gs")
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
455
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
456 ;(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-sDEVICE=epson" "-r240x60"
d98712ec1252 (find-buffer-file-type-coding-system): Use
Andrew Innes <andrewi@gnu.org>
parents: 23802
diff changeset
457 ; "-sOutputFile=LPT1"))
22678
e3fe83134880 (direct-print-region-function): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 22607
diff changeset
458
16591
afb15f49a0c9 Use new file name dos-w32.el
Geoff Voelker <voelker@cs.washington.edu>
parents: 16234
diff changeset
459 (provide 'dos-w32)
16026
9e883e873c01 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
461 ;; arch-tag: dcfefdd2-362f-4fbc-9141-9634f5f4d6a7
16591
afb15f49a0c9 Use new file name dos-w32.el
Geoff Voelker <voelker@cs.washington.edu>
parents: 16234
diff changeset
462 ;;; dos-w32.el ends here