annotate lisp/w3/url.el @ 82:6a378aca36af r20-0b91

Import from CVS: tag r20-0b91
author cvs
date Mon, 13 Aug 2007 09:07:36 +0200
parents 9ee227acff29
children 364816949b59
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1 ;;; url.el --- Uniform Resource Locator retrieval tool
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2 ;; Author: wmperry
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
3 ;; Created: 1997/01/19 01:12:24
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
4 ;; Version: 1.46
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
5 ;; Keywords: comm, data, processes, hypermedia
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
6
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
7 ;;; LCD Archive Entry:
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
8 ;;; url|William M. Perry|wmperry@cs.indiana.edu|
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
9 ;;; Functions for retrieving/manipulating URLs|
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
10 ;;; 1997/01/19 01:12:24|1.46|Location Undetermined
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
11 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
12
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
13 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
14 ;;; Copyright (c) 1993-1996 by William M. Perry (wmperry@cs.indiana.edu)
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
15 ;;; Copyright (c) 1996, 1997 Free Software Foundation, Inc.
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
16 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
17 ;;; This file is not part of GNU Emacs, but the same permissions apply.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
18 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
19 ;;; GNU Emacs is free software; you can redistribute it and/or modify
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
20 ;;; it under the terms of the GNU General Public License as published by
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
21 ;;; the Free Software Foundation; either version 2, or (at your option)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
22 ;;; any later version.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
23 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
24 ;;; GNU Emacs is distributed in the hope that it will be useful,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
25 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
26 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
27 ;;; GNU General Public License for more details.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
28 ;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
29 ;;; You should have received a copy of the GNU General Public License
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
30 ;;; along with GNU Emacs; see the file COPYING. If not, write to the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
31 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
32 ;;; Boston, MA 02111-1307, USA.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
33 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
34
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
35
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
36 (require 'cl)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
37 (require 'url-vars)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
38 (require 'url-parse)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
39 (require 'mm)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
40 (require 'mule-sysdp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
41 (or (featurep 'efs)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
42 (featurep 'efs-auto)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
43 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
44 (require 'ange-ftp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
45 (error nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
46
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
47 (require 'w3-sysdp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
48
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
49 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
50 ;;; Functions that might not exist in old versions of emacs
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
51 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
52 (defun url-save-error (errobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
53 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
54 (set-buffer (get-buffer-create " *url-error*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
55 (erase-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
56 (display-error errobj (get-buffer-create " *url-error*")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
57
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
58 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
59 ((fboundp 'display-warning)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
60 (fset 'url-warn 'display-warning))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
61 ((fboundp 'w3-warn)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
62 (fset 'url-warn 'w3-warn))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
63 ((fboundp 'warn)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
64 (defun url-warn (class message &optional level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
65 (warn "(%s/%s) %s" class (or level 'warning) message)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
66 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
67 (defun url-warn (class message &optional level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
68 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
69 (set-buffer (get-buffer-create "*W3-WARNINGS*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
70 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
71 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
72 (insert (format "(%s/%s) %s\n" class (or level 'warning) message)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
73 (display-buffer (current-buffer))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
74
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
75
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
76 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
77 ;;; Autoload all the URL loaders
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
78 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
79 (autoload 'url-file "url-file")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
80 (autoload 'url-ftp "url-file")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
81 (autoload 'url-gopher "url-gopher")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
82 (autoload 'url-irc "url-irc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
83 (autoload 'url-http "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
84 (autoload 'url-nfs "url-nfs")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
85 (autoload 'url-mailserver "url-mail")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
86 (autoload 'url-mailto "url-mail")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
87 (autoload 'url-info "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
88 (autoload 'url-shttp "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
89 (autoload 'url-https "url-http")
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
90 (autoload 'url-data "url-misc")
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
91 (autoload 'url-finger "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
92 (autoload 'url-rlogin "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
93 (autoload 'url-telnet "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
94 (autoload 'url-tn3270 "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
95 (autoload 'url-proxy "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
96 (autoload 'url-x-exec "url-misc")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
97 (autoload 'url-news "url-news")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
98 (autoload 'url-nntp "url-news")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
99 (autoload 'url-decode-pgp/pem "url-pgp")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
100 (autoload 'url-wais "url-wais")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
101
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
102 (autoload 'url-open-stream "url-gw")
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
103 (autoload 'url-mime-response-p "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
104 (autoload 'url-parse-mime-headers "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
105 (autoload 'url-handle-refresh-header "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
106 (autoload 'url-create-mime-request "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
107 (autoload 'url-create-message-id "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
108 (autoload 'url-create-multipart-request "url-http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
109 (autoload 'url-parse-viewer-types "url-http")
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
110
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
111 (autoload 'url-get-authentication "url-auth")
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
112 (autoload 'url-register-auth-scheme "url-auth")
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
113 (autoload 'url-cookie-write-file "url-cookie")
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
114 (autoload 'url-cookie-retrieve "url-cookie")
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
115 (autoload 'url-cookie-generate-header-lines "url-cookie")
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
116 (autoload 'url-cookie-handle-set-cookie "url-cookie")
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
117
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
118 (require 'md5)
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
119 (require 'base64)
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
120
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
121 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
122 ;;; File-name-handler-alist functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
123 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
124 (defun url-setup-file-name-handlers ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
125 ;; Setup file-name handlers.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
126 '(cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
127 ((not (boundp 'file-name-handler-alist))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
128 nil) ; Don't load if no alist
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
129 ((rassq 'url-file-handler file-name-handler-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
130 nil) ; Don't load twice
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
131 ((and (string-match "XEmacs\\|Lucid" emacs-version)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
132 (< url-emacs-minor-version 11)) ; Don't load in lemacs 19.10
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
133 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
134 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
135 (setq file-name-handler-alist
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
136 (let ((new-handler (cons
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
137 (concat "^/*"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
138 (substring url-nonrelative-link1 nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
139 'url-file-handler)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
140 (if file-name-handler-alist
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
141 (append (list new-handler) file-name-handler-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
142 (list new-handler)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
143
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
144 (defun url-file-handler (operation &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
145 ;; Function called from the file-name-handler-alist routines. OPERATION
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
146 ;; is what needs to be done ('file-exists-p, etc). args are the arguments
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
147 ;; that would have been passed to OPERATION."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
148 (let ((fn (get operation 'url-file-handlers))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
149 (url (car args))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
150 (myargs (cdr args)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
151 (if (= (string-to-char url) ?/)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
152 (setq url (substring url 1 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
153 (if fn (apply fn url myargs)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
154 (let (file-name-handler-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
155 (apply operation url myargs)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
156
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
157 (defun url-file-handler-identity (&rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
158 (car args))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
159
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
160 (defun url-file-handler-null (&rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
161 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
162
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
163 (put 'file-directory-p 'url-file-handlers 'url-file-handler-null)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
164 (put 'substitute-in-file-name 'url-file-handlers 'url-file-handler-identity)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
165 (put 'file-writable-p 'url-file-handlers 'url-file-handler-null)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
166 (put 'file-truename 'url-file-handlers 'url-file-handler-identity)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
167 (put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
168 (put 'expand-file-name 'url-file-handlers 'url-expand-file-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
169 (put 'directory-files 'url-file-handlers 'url-directory-files)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
170 (put 'file-directory-p 'url-file-handlers 'url-file-directory-p)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
171 (put 'file-writable-p 'url-file-handlers 'url-file-writable-p)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
172 (put 'file-readable-p 'url-file-handlers 'url-file-exists)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
173 (put 'file-executable-p 'url-file-handlers 'null)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
174 (put 'file-symlink-p 'url-file-handlers 'null)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
175 (put 'file-exists-p 'url-file-handlers 'url-file-exists)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
176 (put 'copy-file 'url-file-handlers 'url-copy-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
177 (put 'file-attributes 'url-file-handlers 'url-file-attributes)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
178 (put 'file-name-all-completions 'url-file-handlers
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
179 'url-file-name-all-completions)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
180 (put 'file-name-completion 'url-file-handlers 'url-file-name-completion)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
181 (put 'file-local-copy 'url-file-handlers 'url-file-local-copy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
182
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
183
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
184 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
185 ;;; Utility functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
186 ;;; -----------------
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
187 ;;; Various functions used around the url code.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
188 ;;; Some of these qualify as hacks, but hey, this is elisp.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
189 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
190
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
191 (if (fboundp 'mm-string-to-tokens)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
192 (fset 'url-string-to-tokens 'mm-string-to-tokens)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
193 (defun url-string-to-tokens (str &optional delim)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
194 "Return a list of words from the string STR"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
195 (setq delim (or delim ? ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
196 (let (results y)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
197 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
198 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
199 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
200 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
201 ((and (= x delim) y) (setq results (cons y results) y nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
202 ((/= x delim) (setq y (concat y (char-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
203 (t nil)))) str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
204 (nreverse (cons y results)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
205
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
206 (defun url-days-between (date1 date2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
207 ;; Return the number of days between date1 and date2.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
208 (- (url-day-number date1) (url-day-number date2)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
209
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
210 (defun url-day-number (date)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
211 (let ((dat (mapcar (function (lambda (s) (and s (string-to-int s)) ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
212 (timezone-parse-date date))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
213 (timezone-absolute-from-gregorian
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
214 (nth 1 dat) (nth 2 dat) (car dat))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
215
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
216 (defun url-seconds-since-epoch (date)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
217 ;; Returns a number that says how many seconds have
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
218 ;; lapsed between Jan 1 12:00:00 1970 and DATE."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
219 (let* ((tdate (mapcar (function (lambda (ti) (and ti (string-to-int ti))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
220 (timezone-parse-date date)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
221 (ttime (mapcar (function (lambda (ti) (and ti (string-to-int ti))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
222 (timezone-parse-time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
223 (aref (timezone-parse-date date) 3))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
224 (edate (mapcar (function (lambda (ti) (and ti (string-to-int ti))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
225 (timezone-parse-date "Jan 1 12:00:00 1970")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
226 (tday (- (timezone-absolute-from-gregorian
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
227 (nth 1 tdate) (nth 2 tdate) (nth 0 tdate))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
228 (timezone-absolute-from-gregorian
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
229 (nth 1 edate) (nth 2 edate) (nth 0 edate)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
230 (+ (nth 2 ttime)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
231 (* (nth 1 ttime) 60)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
232 (* (nth 0 ttime) 60 60)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
233 (* tday 60 60 24))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
234
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
235 (defun url-match (s x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
236 ;; Return regexp match x in s.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
237 (substring s (match-beginning x) (match-end x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
238
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
239 (defun url-split (str del)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
240 ;; Split the string STR, with DEL (a regular expression) as the delimiter.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
241 ;; Returns an assoc list that you can use with completing-read."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
242 (let (x y)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
243 (while (string-match del str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
244 (setq y (substring str 0 (match-beginning 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
245 str (substring str (match-end 0) nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
246 (if (not (string-match "^[ \t]+$" y))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
247 (setq x (cons (list y y) x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
248 (if (not (equal str ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
249 (setq x (cons (list str str) x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
250 x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
251
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
252 (defun url-replace-regexp (regexp to-string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
253 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
254 (while (re-search-forward regexp nil t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
255 (replace-match to-string t nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
256
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
257 (defun url-clear-tmp-buffer ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
258 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
259 (if buffer-read-only (toggle-read-only))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
260 (erase-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
261
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
262 (defun url-maybe-relative (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
263 (url-retrieve (url-expand-file-name url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
264
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
265 (defun url-buffer-is-hypertext (&optional buff)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
266 "Return t if a buffer contains HTML, as near as we can guess."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
267 (setq buff (or buff (current-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
268 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
269 (set-buffer buff)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
270 (let ((case-fold-search t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
271 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
272 (re-search-forward
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
273 "<\\(TITLE\\|HEAD\\|BASE\\|H[0-9]\\|ISINDEX\\|P\\)>" nil t))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
274
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
275 (defun url-percentage (x y)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
276 (if (fboundp 'float)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
277 (round (* 100 (/ x (float y))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
278 (/ (* x 100) y)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
279
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
280 (defun url-after-change-function (&rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
281 ;; The nitty gritty details of messaging the HTTP/1.0 status messages
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
282 ;; in the minibuffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
283 (or url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
284 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
285 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
286 (skip-chars-forward " \t\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
287 (if (not (looking-at "HTTP/[0-9]\.[0-9]"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
288 (setq url-current-content-length 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
289 (setq url-current-isindex
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
290 (and (re-search-forward "$\r*$" nil t) (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
291 (if (re-search-forward
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
292 "^content-type:[ \t]*\\([^\r\n]+\\)\r*$"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
293 url-current-isindex t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
294 (setq url-current-mime-type (downcase
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
295 (url-eat-trailing-space
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
296 (buffer-substring
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
297 (match-beginning 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
298 (match-end 1))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
299 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
300 (if (re-search-forward "^content-length:\\([^\r\n]+\\)\r*$"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
301 url-current-isindex t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
302 (setq url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
303 (string-to-int (buffer-substring (match-beginning 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
304 (match-end 1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
305 (setq url-current-content-length nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
306 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
307 (let ((current-length (max (point-max)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
308 (if url-current-isindex
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
309 (- (point-max) url-current-isindex)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
310 (point-max)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
311 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
312 ((and url-current-content-length (> url-current-content-length 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
313 url-current-mime-type)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
314 (url-lazy-message "Reading [%s]... %d of %d bytes (%d%%)"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
315 url-current-mime-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
316 current-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
317 url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
318 (url-percentage current-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
319 url-current-content-length)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
320 ((and url-current-content-length (> url-current-content-length 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
321 (url-lazy-message "Reading... %d of %d bytes (%d%%)"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
322 current-length url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
323 (url-percentage current-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
324 url-current-content-length)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
325 ((and (/= 1 current-length) url-current-mime-type)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
326 (url-lazy-message "Reading [%s]... %d bytes"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
327 url-current-mime-type current-length))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
328 ((/= 1 current-length)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
329 (url-lazy-message "Reading... %d bytes." current-length))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
330 (t (url-lazy-message "Waiting for response...")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
331
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
332 (defun url-insert-entities-in-string (string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
333 "Convert HTML markup-start characters to entity references in STRING.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
334 Also replaces the \" character, so that the result may be safely used as
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
335 an attribute value in a tag. Returns a new string with the result of the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
336 conversion. Replaces these characters as follows:
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
337 & ==> &amp;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
338 < ==> &lt;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
339 > ==> &gt;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
340 \" ==> &quot;"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
341 (if (string-match "[&<>\"]" string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
342 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
343 (set-buffer (get-buffer-create " *entity*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
344 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
345 (buffer-disable-undo (current-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
346 (insert string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
347 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
348 (while (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
349 (skip-chars-forward "^&<>\"")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
350 (not (eobp)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
351 (insert (cdr (assq (char-after (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
352 '((?\" . "&quot;")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
353 (?& . "&amp;")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
354 (?< . "&lt;")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
355 (?> . "&gt;")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
356 (delete-char 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
357 (buffer-string))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
358 string))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
359
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
360 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
361 ;;; Information information
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
362 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
363 (defvar url-process-lookup-table nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
364
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
365 (defun url-process-get (proc prop &optional default)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
366 "Get a value associated to PROC as property PROP
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
367 in plist stored in `url-process-lookup-table'"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
368 (or (plist-get (cdr-safe (assq proc url-process-lookup-table)) prop)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
369 default))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
370
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
371 (defun url-process-put (proc prop val)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
372 "Associate to PROC as property PROP the value VAL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
373 in plist stored in `url-process-lookup-table'"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
374 (let ((node (assq proc url-process-lookup-table)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
375 (if (not node)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
376 (setq url-process-lookup-table (cons (cons proc (list prop val))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
377 url-process-lookup-table))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
378 (setcdr node (plist-put (cdr node) prop val)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
379
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
380 (defun url-gc-process-lookup-table ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
381 (let (new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
382 (while url-process-lookup-table
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
383 (if (not (memq (process-status (caar url-process-lookup-table))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
384 '(stop closed nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
385 (setq new (cons (car url-process-lookup-table) new)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
386 (setq url-process-lookup-table (cdr url-process-lookup-table)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
387 (setq url-process-lookup-table new)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
388
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
389 (defun url-process-list ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
390 (url-gc-process-lookup-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
391 (let ((processes (process-list))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
392 (retval nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
393 (while processes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
394 (if (url-process-get (car processes) 'url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
395 (setq retval (cons (car processes) retval)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
396 (setq processes (cdr processes)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
397 retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
398
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
399 (defun url-list-processes ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
400 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
401 (let ((processes (url-process-list))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
402 proc total-len len type url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
403 (url-status-buf (get-buffer-create "URL Status Display")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
404 (set-buffer url-status-buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
405 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
406 (display-buffer url-status-buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
407 (insert
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
408 (eval-when-compile (format "%-40s %-20s %-15s" "URL" "Size" "Type")) "\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
409 (eval-when-compile (make-string 77 ?-)) "\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
410 (while processes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
411 (setq proc (car processes)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
412 processes (cdr processes))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
413 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
414 (set-buffer (process-buffer proc))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
415 (setq total-len url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
416 len (max (point-max)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
417 (if url-current-isindex
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
418 (- (point-max) url-current-isindex)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
419 (point-max)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
420 type url-current-mime-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
421 url (url-process-get proc 'url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
422 (set-buffer url-status-buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
423 (insert
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
424 (format "%-40s%s%-20s %-15s\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
425 (url-process-get proc 'url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
426 (if (> (length url) 40)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
427 (format "\n%-40s " " ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
428 " ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
429 (if total-len
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
430 (format "%d of %d" len total-len)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
431 (format "%d" len))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
432 (or type "unknown")))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
433
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
434
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
435 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
436 ;;; file-name-handler stuff calls this
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
437 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
438
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
439 (defun url-have-visited-url (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
440 "Return non-nil iff the user has visited URL before.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
441 The return value is a cons of the url and the date last accessed as a string"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
442 (cl-gethash url url-global-history-hash-table))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
443
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
444 (defun url-directory-files (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
445 "Return a list of files on a server."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
446 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
447
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
448 (defun url-file-writable-p (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
449 "Return t iff a url is writable by this user"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
450 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
451
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
452 (defun url-copy-file (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
453 "Copy a url to the specified filename."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
454 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
455
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
456 (defun url-file-directly-accessible-p (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
457 "Returns t iff the specified URL is directly accessible
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
458 on your filesystem. (nfs, local file, etc)."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
459 (let* ((urlobj (if (vectorp url) url (url-generic-parse-url url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
460 (type (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
461 (and (member type '("file" "ftp"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
462 (not (url-host urlobj)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
463
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
464 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
465 (defun url-file-attributes (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
466 "Return a list of attributes of URL.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
467 Value is nil if specified file cannot be opened.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
468 Otherwise, list elements are:
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
469 0. t for directory, string (name linked to) for symbolic link, or nil.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
470 1. Number of links to file.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
471 2. File uid.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
472 3. File gid.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
473 4. Last access time, as a list of two integers.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
474 First integer has high-order 16 bits of time, second has low 16 bits.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
475 5. Last modification time, likewise.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
476 6. Last status change time, likewise.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
477 7. Size in bytes. (-1, if number is out of range).
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
478 8. File modes, as a string of ten letters or dashes as in ls -l.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
479 If URL is on an http server, this will return the content-type if possible.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
480 9. t iff file's gid would change if file were deleted and recreated.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
481 10. inode number.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
482 11. Device number.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
483
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
484 If file does not exist, returns nil."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
485 (and url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
486 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
487 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
488 (url-automatic-caching nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
489 (data nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
490 (exists nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
491 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
492 ((equal type "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
493 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
494 ((not url-be-anal-about-file-attributes)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
495 (setq data (list
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
496 (url-file-directory-p url) ; Directory
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
497 1 ; number of links to it
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
498 0 ; UID
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
499 0 ; GID
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
500 (cons 0 0) ; Last access time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
501 (cons 0 0) ; Last mod. time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
502 (cons 0 0) ; Last status time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
503 -1 ; file size
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
504 (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
505 (url-file-extension (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
506 nil ; gid would change
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
507 0 ; inode number
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
508 0 ; device number
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
509 )))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
510 (t ; HTTP/1.0, use HEAD
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
511 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
512 (url-request-data nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
513 (url-working-buffer " *url-temp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
514 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
515 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
516 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
517 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
518 (setq data (and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
519 (setq exists
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
520 (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
521 (assoc "status"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
522 url-current-mime-headers)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
523 (>= exists 200)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
524 (< exists 300)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
525 (list
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
526 (url-file-directory-p url) ; Directory
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
527 1 ; links to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
528 0 ; UID
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
529 0 ; GID
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
530 (cons 0 0) ; Last access time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
531 (cons 0 0) ; Last mod. time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
532 (cons 0 0) ; Last status time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
533 (or ; Size in bytes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
534 (cdr (assoc "content-length"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
535 url-current-mime-headers))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
536 -1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
537 (or
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
538 (cdr (assoc "content-type"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
539 url-current-mime-headers))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
540 (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
541 (url-file-extension
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
542 (url-filename urlobj)))) ; content-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
543 nil ; gid would change
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
544 0 ; inode number
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
545 0 ; device number
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
546 ))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
547 (error nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
548 (and (not data)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
549 (setq data (list (url-file-directory-p url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
550 1 0 0 (cons 0 0) (cons 0 0) (cons 0 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
551 -1 (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
552 (url-file-extension
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
553 url-current-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
554 nil 0 0)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
555 (kill-buffer " *url-temp*"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
556 ((member type '("ftp" "file"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
557 (let ((fname (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
558 (concat "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
559 (if (url-user urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
560 (concat (url-user urlobj) "@")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
561 "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
562 (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
563 (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
564 (url-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
565 (setq data (or (file-attributes fname) (make-list 12 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
566 (setcar (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr data))))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
567 (mm-extension-to-mime (url-file-extension fname)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
568 (t nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
569 data)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
570
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
571 (defun url-file-name-all-completions (file dirname &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
572 "Return a list of all completions of file name FILE in directory DIR.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
573 These are all file names in directory DIR which begin with FILE."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
574 ;; need to rewrite
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
575 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
576
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
577 (defun url-file-name-completion (file dirname &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
578 "Complete file name FILE in directory DIR.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
579 Returns the longest string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
580 common to all filenames in DIR that start with FILE.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
581 If there is only one and FILE matches it exactly, returns t.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
582 Returns nil if DIR contains no name starting with FILE."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
583 (apply 'url-file-name-all-completions file dirname args))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
584
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
585 (defun url-file-local-copy (file &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
586 "Copy the file FILE into a temporary file on this machine.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
587 Returns the name of the local copy, or nil, if FILE is directly
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
588 accessible."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
589 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
590
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
591 (defun url-insert-file-contents (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
592 "Insert the contents of the URL in this buffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
593 (interactive "sURL: ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
594 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
595 (let ((old-asynch url-be-asynchronous))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
596 (setq-default url-be-asynchronous nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
597 (let ((buf (current-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
598 (url-working-buffer (cdr (url-retrieve url))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
599 (setq-default url-be-asynchronous old-asynch)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
600 (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
601 (insert-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
602 (setq buffer-file-name url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
603 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
604 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
605 (set-buffer-modified-p nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
606 (kill-buffer url-working-buffer)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
607
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
608 (defun url-file-directory-p (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
609 "Return t iff a url points to a directory"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
610 (equal (substring url -1 nil) "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
611
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
612 (defun url-file-exists (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
613 "Return t iff a file exists."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
614 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
615 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
616 (exists nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
617 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
618 ((equal type "http") ; use head
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
619 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
620 (url-request-data nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
621 (url-working-buffer " *url-temp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
622 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
623 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
624 (setq exists (or (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
625 (assoc "status" url-current-mime-headers)) 500))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
626 (kill-buffer " *url-temp*")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
627 (setq exists (and (>= exists 200) (< exists 300))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
628 ((member type '("ftp" "file")) ; file-attributes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
629 (let ((fname (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
630 (concat "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
631 (if (url-user urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
632 (concat (url-user urlobj) "@")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
633 "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
634 (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
635 (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
636 (url-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
637 (setq exists (file-exists-p fname))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
638 (t nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
639 exists))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
640
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
641 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
642 (defun url-normalize-url (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
643 "Return a 'normalized' version of URL. This strips out default port
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
644 numbers, etc."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
645 (let (type data grok retval)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
646 (setq data (url-generic-parse-url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
647 type (url-type data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
648 (if (member type '("www" "about" "mailto" "mailserver" "info"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
649 (setq retval url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
650 (setq retval (url-recreate-url data)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
651 retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
652
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
653 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
654 (defun url-buffer-visiting (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
655 "Return the name of a buffer (if any) that is visiting URL."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
656 (setq url (url-normalize-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
657 (let ((bufs (buffer-list))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
658 (found nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
659 (if (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
660 (string-match "\\(.*\\)#" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
661 (error nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
662 (setq url (url-match url 1)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
663 (while (and bufs (not found))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
664 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
665 (set-buffer (car bufs))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
666 (setq found (if (and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
667 (not (string-match " \\*URL-?[0-9]*\\*" (buffer-name (car bufs))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
668 (memq major-mode '(url-mode w3-mode))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
669 (equal (url-view-url t) url)) (car bufs) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
670 bufs (cdr bufs))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
671 found))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
672
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
673 (defun url-file-size (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
674 "Return the size of a file in bytes, or -1 if can't be determined."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
675 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
676 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
677 (size -1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
678 (data nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
679 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
680 ((equal type "http") ; use head
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
681 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
682 (url-request-data nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
683 (url-working-buffer " *url-temp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
684 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
685 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
686 (setq size (or (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
687 (assoc "content-length" url-current-mime-headers))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
688 -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
689 (kill-buffer " *url-temp*"))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
690 ((member type '("ftp" "file")) ; file-attributes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
691 (let ((fname (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
692 (concat "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
693 (if (url-user urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
694 (concat (url-user urlobj) "@")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
695 "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
696 (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
697 (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
698 (url-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
699 (setq data (file-attributes fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
700 size (nth 7 data))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
701 (t nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
702 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
703 ((stringp size) (string-to-int size))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
704 ((integerp size) size)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
705 ((null size) -1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
706 (t -1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
707
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
708 (defun url-generate-new-buffer-name (start)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
709 "Create a new buffer name based on START."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
710 (let ((x 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
711 name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
712 (if (not (get-buffer start))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
713 start
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
714 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
715 (setq name (format "%s<%d>" start x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
716 (while (get-buffer name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
717 (setq x (1+ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
718 name (format "%s<%d>" start x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
719 name))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
720
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
721 (defun url-generate-unique-filename (&optional fmt)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
722 "Generate a unique filename in url-temporary-directory"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
723 (if (not fmt)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
724 (let ((base (format "url-tmp.%d" (user-real-uid)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
725 (fname "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
726 (x 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
727 (setq fname (format "%s%d" base x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
728 (while (file-exists-p (expand-file-name fname url-temporary-directory))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
729 (setq x (1+ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
730 fname (concat base (int-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
731 (expand-file-name fname url-temporary-directory))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
732 (let ((base (concat "url" (int-to-string (user-real-uid))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
733 (fname "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
734 (x 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
735 (setq fname (format fmt (concat base (int-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
736 (while (file-exists-p (expand-file-name fname url-temporary-directory))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
737 (setq x (1+ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
738 fname (format fmt (concat base (int-to-string x)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
739 (expand-file-name fname url-temporary-directory))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
740
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
741 (defun url-lazy-message (&rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
742 "Just like `message', but is a no-op if called more than once a second.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
743 Will not do anything if url-show-status is nil."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
744 (if (or (null url-show-status)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
745 (= url-lazy-message-time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
746 (setq url-lazy-message-time (nth 1 (current-time)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
747 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
748 (apply 'message args)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
749
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
750
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
751 (defun url-kill-process (proc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
752 "Kill the process PROC - knows about all the various gateway types,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
753 and acts accordingly."
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
754 (delete-process proc))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
755
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
756 (defun url-accept-process-output (proc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
757 "Allow any pending output from subprocesses to be read by Emacs.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
758 It is read into the process' buffers or given to their filter functions.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
759 Where possible, this will not exit until some output is received from PROC,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
760 or 1 second has elapsed."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
761 (accept-process-output proc 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
762
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
763 (defun url-process-status (proc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
764 "Return the process status of a url buffer"
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
765 (process-status proc))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
766
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
767
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
768 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
769 ;;; Miscellaneous functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
770 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
771 (defun url-setup-privacy-info ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
772 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
773 (setq url-system-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
774 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
775 ((or (eq url-privacy-level 'paranoid)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
776 (and (listp url-privacy-level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
777 (memq 'os url-privacy-level)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
778 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
779 ((eq system-type 'Apple-Macintosh) "Macintosh")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
780 ((eq system-type 'next-mach) "NeXT")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
781 ((eq system-type 'windows-nt) "Windows-NT; 32bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
782 ((eq system-type 'ms-windows) "Windows; 16bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
783 ((eq system-type 'ms-dos) "MS-DOS; 32bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
784 ((and (eq system-type 'vax-vms) (device-type))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
785 "VMS; X11")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
786 ((eq system-type 'vax-vms) "VMS; TTY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
787 ((eq (device-type) 'x) "X11")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
788 ((eq (device-type) 'ns) "NeXTStep")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
789 ((eq (device-type) 'pm) "OS/2")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
790 ((eq (device-type) 'win32) "Windows; 32bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
791 ((eq (device-type) 'tty) "(Unix?); TTY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
792 (t "UnkownPlatform")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
793
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
794 ;; Set up the entity definition for PGP and PEM authentication
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
795 (setq url-pgp/pem-entity (or url-pgp/pem-entity
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
796 user-mail-address
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
797 (format "%s@%s" (user-real-login-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
798 (system-name))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
799
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
800 (setq url-personal-mail-address (or url-personal-mail-address
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
801 url-pgp/pem-entity
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
802 user-mail-address))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
803
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
804 (if (or (memq url-privacy-level '(paranoid high))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
805 (and (listp url-privacy-level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
806 (memq 'email url-privacy-level)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
807 (setq url-personal-mail-address nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
808
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
809 (if (or (eq url-privacy-level 'paranoid)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
810 (and (listp url-privacy-level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
811 (memq 'os url-privacy-level)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
812 (setq url-os-type nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
813 (let ((vers (emacs-version)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
814 (if (string-match "(\\([^, )]+\\))$" vers)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
815 (setq url-os-type (url-match vers 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
816 (setq url-os-type (symbol-name system-type))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
817
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
818 (defun url-handle-no-scheme (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
819 (let ((temp url-registered-protocols)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
820 (found nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
821 (while (and temp (not found))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
822 (if (and (not (member (car (car temp)) '("auto" "www")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
823 (string-match (concat "^" (car (car temp)) "\\.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
824 url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
825 (setq found t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
826 (setq temp (cdr temp))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
827 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
828 (found ; Found something like ftp.spry.com
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
829 (url-retrieve (concat (car (car temp)) "://" url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
830 ((string-match "^www\\." url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
831 (url-retrieve (concat "http://" url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
832 ((string-match "\\(\\.[^\\.]+\\)\\(\\.[^\\.]+\\)" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
833 ;; Ok, we have at least two dots in the filename, just stick http on it
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
834 (url-retrieve (concat "http://" url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
835 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
836 (url-retrieve (concat "http://www." url ".com"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
837
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
838 (defun url-setup-save-timer ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
839 "Reset the history list timer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
840 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
841 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
842 ((featurep 'itimer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
843 (if (get-itimer "url-history-saver")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
844 (delete-itimer (get-itimer "url-history-saver")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
845 (start-itimer "url-history-saver" 'url-write-global-history
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
846 url-global-history-save-interval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
847 url-global-history-save-interval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
848 ((fboundp 'run-at-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
849 (run-at-time url-global-history-save-interval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
850 url-global-history-save-interval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
851 'url-write-global-history))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
852 (t nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
853
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
854 (defvar url-download-minor-mode nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
855
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
856 (defun url-download-minor-mode (on)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
857 (setq url-download-minor-mode (if on
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
858 (1+ (or url-download-minor-mode 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
859 (1- (or url-download-minor-mode 1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
860 (if (<= url-download-minor-mode 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
861 (setq url-download-minor-mode nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
862
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
863 (defun url-do-setup ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
864 "Do setup - this is to avoid conflict with user settings when URL is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
865 dumped with emacs."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
866 (if url-setup-done
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
867 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
868
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
869 (add-minor-mode 'url-download-minor-mode " Webbing" nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
870
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
871 ;; Make OS/2 happy
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
872 (setq tcp-binary-process-input-services
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
873 (append '("http" "80")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
874 tcp-binary-process-input-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
875
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
876 ;; Register all the protocols we can handle
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
877 (url-register-protocol 'file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
878 (url-register-protocol 'ftp nil nil "21")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
879 (url-register-protocol 'gopher nil nil "70")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
880 (url-register-protocol 'http nil nil "80")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
881 (url-register-protocol 'https nil nil "443")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
882 (url-register-protocol 'nfs nil nil "2049")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
883 (url-register-protocol 'info nil 'url-identity-expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
884 (url-register-protocol 'mailserver nil 'url-identity-expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
885 (url-register-protocol 'finger nil 'url-identity-expander "79")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
886 (url-register-protocol 'mailto nil 'url-identity-expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
887 (url-register-protocol 'news nil 'url-identity-expander "119")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
888 (url-register-protocol 'nntp nil 'url-identity-expander "119")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
889 (url-register-protocol 'irc nil 'url-identity-expander "6667")
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
890 (url-register-protocol 'data nil 'url-identity-expander)
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
891 (url-register-protocol 'rlogin)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
892 (url-register-protocol 'shttp nil nil "80")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
893 (url-register-protocol 'telnet)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
894 (url-register-protocol 'tn3270)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
895 (url-register-protocol 'wais)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
896 (url-register-protocol 'x-exec)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
897 (url-register-protocol 'proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
898 (url-register-protocol 'auto 'url-handle-no-scheme)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
899
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
900 ;; Register all the authentication schemes we can handle
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
901 (url-register-auth-scheme "basic" nil 4)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
902 (url-register-auth-scheme "digest" nil 7)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
903
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
904 ;; Filename handler stuff for emacsen that support it
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
905 (url-setup-file-name-handlers)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
906
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
907 (setq url-cookie-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
908 (or url-cookie-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
909 (expand-file-name "~/.w3cookies")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
910
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
911 (setq url-global-history-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
912 (or url-global-history-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
913 (and (memq system-type '(ms-dos ms-windows))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
914 (expand-file-name "~/mosaic.hst"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
915 (and (memq system-type '(axp-vms vax-vms))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
916 (expand-file-name "~/mosaic.global-history"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
917 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
918 (expand-file-name "~/.mosaic-global-history")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
919 (error nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
920
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
921 ;; Parse the global history file if it exists, so that it can be used
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
922 ;; for URL completion, etc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
923 (if (and url-global-history-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
924 (file-exists-p url-global-history-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
925 (url-parse-global-history))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
926
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
927 ;; Setup save timer
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
928 (and url-global-history-save-interval (url-setup-save-timer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
929
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
930 (if (and url-cookie-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
931 (file-exists-p url-cookie-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
932 (url-cookie-parse-file url-cookie-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
933
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
934 ;; Read in proxy gateways
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
935 (let ((noproxy (and (not (assoc "no_proxy" url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
936 (or (getenv "NO_PROXY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
937 (getenv "no_PROXY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
938 (getenv "no_proxy")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
939 (if noproxy
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
940 (setq url-proxy-services
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
941 (cons (cons "no_proxy"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
942 (concat "\\("
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
943 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
944 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
945 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
946 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
947 ((= x ?,) "\\|")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
948 ((= x ? ) "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
949 ((= x ?.) (regexp-quote "."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
950 ((= x ?*) ".*")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
951 ((= x ??) ".")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
952 (t (char-to-string x)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
953 noproxy "") "\\)"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
954 url-proxy-services))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
955
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
956 ;; Set the url-use-transparent with decent defaults
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
957 (if (not (eq (device-type) 'tty))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
958 (setq url-use-transparent nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
959 (and url-use-transparent (require 'transparent))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
960
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
961 ;; Set the password entry funtion based on user defaults or guess
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
962 ;; based on which remote-file-access package they are using.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
963 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
964 (url-passwd-entry-func nil) ; Already been set
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
965 ((boundp 'read-passwd) ; Use secure password if available
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
966 (setq url-passwd-entry-func 'read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
967 ((or (featurep 'efs) ; Using EFS
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
968 (featurep 'efs-auto)) ; or autoloading efs
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
969 (if (not (fboundp 'read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
970 (autoload 'read-passwd "passwd" "Read in a password" nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
971 (setq url-passwd-entry-func 'read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
972 ((or (featurep 'ange-ftp) ; Using ange-ftp
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
973 (and (boundp 'file-name-handler-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
974 (not (string-match "Lucid" (emacs-version)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
975 (setq url-passwd-entry-func 'ange-ftp-read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
976 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
977 (url-warn 'security
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
978 "Can't determine how to read passwords, winging it.")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
979
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
980 ;; Set up the news service if they haven't done so
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
981 (setq url-news-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
982 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
983 (url-news-server url-news-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
984 ((and (boundp 'gnus-default-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
985 (not (equal "" gnus-default-nntp-server)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
986 gnus-default-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
987 ((and (boundp 'gnus-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
988 (not (null gnus-nntp-server))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
989 (not (equal "" gnus-nntp-server)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
990 gnus-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
991 ((and (boundp 'nntp-server-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
992 (not (null nntp-server-name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
993 (not (equal "" nntp-server-name)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
994 nntp-server-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
995 ((getenv "NNTPSERVER") (getenv "NNTPSERVER"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
996 (t "news")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
997
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
998 ;; Set up the MIME accept string if they haven't got it hardcoded yet
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
999 (or url-mime-accept-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1000 (setq url-mime-accept-string (url-parse-viewer-types)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1001 (or url-mime-encoding-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1002 (setq url-mime-encoding-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1003 (mapconcat 'car
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1004 mm-content-transfer-encodings
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1005 ", ")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1006
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1007 (url-setup-privacy-info)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1008 (run-hooks 'url-load-hook)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1009 (setq url-setup-done t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1010
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1011 (defun url-cache-file-writable-p (file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1012 "Follows the documentation of file-writable-p, unlike file-writable-p."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1013 (and (file-writable-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1014 (if (file-exists-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1015 (not (file-directory-p file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1016 (file-directory-p (file-name-directory file)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1017
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1018 (defun url-prepare-cache-for-file (file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1019 "Makes it possible to cache data in FILE.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1020 Creates any necessary parent directories, deleting any non-directory files
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1021 that would stop this. Returns nil if parent directories can not be
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1022 created. If FILE already exists as a non-directory, it changes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1023 permissions of FILE or deletes FILE to make it possible to write a new
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1024 version of FILE. Returns nil if this can not be done. Returns nil if
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1025 FILE already exists as a directory. Otherwise, returns t, indicating that
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1026 FILE can be created or overwritten."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1027
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1028 ;; COMMENT: We don't delete directories because that requires
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1029 ;; recursively deleting the directories's contents, which might
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1030 ;; eliminate a substantial portion of the cache.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1031
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1032 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1033 ((url-cache-file-writable-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1034 t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1035 ((file-directory-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1036 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1037 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1038 (catch 'upcff-tag
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1039 (let ((dir (file-name-directory file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1040 dir-parent dir-last-component)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1041 (if (string-equal dir file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1042 ;; *** Should I have a warning here?
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1043 ;; FILE must match a pattern like /foo/bar/, indicating it is a
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1044 ;; name only suitable for a directory. So presume we won't be
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1045 ;; able to overwrite FILE and return nil.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1046 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1047
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1048 ;; Make sure the containing directory exists, or throw a failure
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1049 ;; if we can't create it.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1050 (if (file-directory-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1051 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1052 (or (fboundp 'make-directory)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1053 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1054 (make-directory dir t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1055 ;; make-directory silently fails if there is an obstacle, so
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1056 ;; we must verify its results.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1057 (if (file-directory-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1058 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1059 ;; Look at prefixes of the path to find the obstacle that is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1060 ;; stopping us from making the directory. Unfortunately, there
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1061 ;; is no portable function in Emacs to find the parent directory
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1062 ;; of a *directory*. So this code may not work on VMS.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1063 (while (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1064 (if (eq ?/ (aref dir (1- (length dir))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1065 (setq dir (substring dir 0 -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1066 ;; Maybe we're on VMS where the syntax is different.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1067 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1068 (setq dir-parent (file-name-directory dir))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1069 (not (file-directory-p dir-parent)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1070 (setq dir dir-parent))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1071 ;; We have found the longest path prefix that exists as a
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1072 ;; directory. Deal with any obstacles in this directory.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1073 (if (file-exists-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1074 (condition-case nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1075 (delete-file dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1076 (error (throw 'upcff-tag nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1077 (if (file-exists-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1078 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1079 ;; Try making the directory again.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1080 (setq dir (file-name-directory file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1081 (make-directory dir t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1082 (or (file-directory-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1083 (throw 'upcff-tag nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1084
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1085 ;; The containing directory exists. Let's see if there is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1086 ;; something in the way in this directory.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1087 (if (url-cache-file-writable-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1088 (throw 'upcff-tag t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1089 (condition-case nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1090 (delete-file file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1091 (error (throw 'upcff-tag nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1092
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1093 ;; The return value, if we get this far.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1094 (url-cache-file-writable-p file))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1095
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1096 (defun url-store-in-cache (&optional buff)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1097 "Store buffer BUFF in the cache"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1098 (if (or (not (get-buffer buff))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1099 (member url-current-type '("www" "about" "https" "shttp"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1100 "news" "mailto"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1101 (and (member url-current-type '("file" "ftp" nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1102 (not url-current-server))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1103 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1104 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1105 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1106 (and buff (set-buffer buff))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1107 (let* ((fname (url-create-cached-filename (url-view-url t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1108 (fname-hdr (concat (if (memq system-type '(ms-windows ms-dos os2))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1109 (url-file-extension fname t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1110 fname) ".hdr"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1111 (info (mapcar (function (lambda (var)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1112 (cons (symbol-name var)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1113 (symbol-value var))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1114 '( url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1115 url-current-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1116 url-current-isindex
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1117 url-current-mime-encoding
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1118 url-current-mime-headers
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1119 url-current-mime-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1120 url-current-port
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1121 url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1122 url-current-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1123 url-current-user
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1124 ))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1125 (cond ((and (url-prepare-cache-for-file fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1126 (url-prepare-cache-for-file fname-hdr))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1127 (write-region (point-min) (point-max) fname nil 5)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1128 (set-buffer (get-buffer-create " *cache-tmp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1129 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1130 (insert "(setq ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1131 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1132 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1133 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1134 (insert (car x) " "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1135 (cond ((null (setq x (cdr x))) "nil")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1136 ((stringp x) (prin1-to-string x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1137 ((listp x) (concat "'" (prin1-to-string x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1138 ((numberp x) (int-to-string x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1139 (t "'???")) "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1140 info)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1141 (insert ")\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1142 (write-region (point-min) (point-max) fname-hdr nil 5)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1143
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1144
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1145 (defun url-is-cached (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1146 "Return non-nil if the URL is cached."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1147 (let* ((fname (url-create-cached-filename url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1148 (attribs (file-attributes fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1149 (and fname ; got a filename
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1150 (file-exists-p fname) ; file exists
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1151 (not (eq (nth 0 attribs) t)) ; Its not a directory
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1152 (nth 5 attribs)))) ; Can get last mod-time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1153
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1154 (defun url-create-cached-filename-using-md5 (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1155 (if url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1156 (expand-file-name (md5 url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1157 (concat url-temporary-directory "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1158 (user-real-login-name)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1159
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1160 (defun url-create-cached-filename (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1161 "Return a filename in the local cache for URL"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1162 (if url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1163 (let* ((url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1164 (urlobj (if (vectorp url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1165 url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1166 (url-generic-parse-url url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1167 (protocol (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1168 (hostname (url-host urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1169 (host-components
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1170 (cons
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1171 (user-real-login-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1172 (cons (or protocol "file")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1173 (nreverse
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1174 (delq nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1175 (mm-string-to-tokens
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1176 (or hostname "localhost") ?.))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1177 (fname (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1178 (if (and fname (/= (length fname) 0) (= (aref fname 0) ?/))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1179 (setq fname (substring fname 1 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1180 (if fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1181 (let ((slash nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1182 (setq fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1183 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1184 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1185 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1186 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1187 ((and (= ?/ x) slash)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1188 (setq slash nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1189 "%2F")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1190 ((= ?/ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1191 (setq slash t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1192 "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1193 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1194 (setq slash nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1195 (char-to-string x))))) fname ""))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1196
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1197 (if (and fname (memq system-type '(ms-windows ms-dos windows-nt))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1198 (string-match "\\([A-Za-z]\\):[/\\]" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1199 (setq fname (concat (url-match fname 1) "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1200 (substring fname (match-end 0)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1201
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1202 (setq fname (and fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1203 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1204 (function (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1205 (if (= x ?~) "" (char-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1206 fname ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1207 fname (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1208 ((null fname) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1209 ((or (string= "" fname) (string= "/" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1210 url-directory-index-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1211 ((= (string-to-char fname) ?/)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1212 (if (string= (substring fname -1 nil) "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1213 (concat fname url-directory-index-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1214 (substring fname 1 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1215 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1216 (if (string= (substring fname -1 nil) "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1217 (concat fname url-directory-index-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1218 fname))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1219
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1220 ;; Honor hideous 8.3 filename limitations on dos and windows
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1221 ;; we don't have to worry about this in Windows NT/95 (or OS/2?)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1222 (if (and fname (memq system-type '(ms-windows ms-dos)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1223 (let ((base (url-file-extension fname t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1224 (ext (url-file-extension fname nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1225 (setq fname (concat (substring base 0 (min 8 (length base)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1226 (substring ext 0 (min 4 (length ext)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1227 (setq host-components
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1228 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1229 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1230 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1231 (if (> (length x) 8)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1232 (concat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1233 (substring x 0 8) "."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1234 (substring x 8 (min (length x) 11)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1235 x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1236 host-components))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1237
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1238 (and fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1239 (expand-file-name fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1240 (expand-file-name
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1241 (mapconcat 'identity host-components "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1242 url-temporary-directory))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1243
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1244 (defun url-extract-from-cache (fnam)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1245 "Extract FNAM from the local disk cache"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1246 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1247 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1248 (setq url-current-mime-viewer nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1249 (insert-file-contents-literally fnam)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1250 (load (concat (if (memq system-type '(ms-windows ms-dos os2))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1251 (url-file-extension fnam t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1252 fnam) ".hdr") t t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1253
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1254 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1255 (defun url-get-url-at-point (&optional pt)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1256 "Get the URL closest to point, but don't change your
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1257 position. Has a preference for looking backward when not
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1258 directly on a symbol."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1259 ;; Not at all perfect - point must be right in the name.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1260 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1261 (if pt (goto-char pt))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1262 (let ((filename-chars "%.?@a-zA-Z0-9---()_/:~=&") start url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1263 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1264 ;; first see if you're just past a filename
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1265 (if (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1266 (if (looking-at "[] \t\n[{}()]") ; whitespace or some parens
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1267 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1268 (skip-chars-backward " \n\t\r({[]})")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1269 (if (not (bobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1270 (backward-char 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1271 (if (string-match (concat "[" filename-chars "]")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1272 (char-to-string (following-char)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1273 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1274 (skip-chars-backward filename-chars)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1275 (setq start (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1276 (skip-chars-forward filename-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1277 (setq start (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1278 (setq url (if (fboundp 'buffer-substring-no-properties)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1279 (buffer-substring-no-properties start (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1280 (buffer-substring start (point)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1281 (if (string-match "^URL:" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1282 (setq url (substring url 4 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1283 (if (string-match "\\.$" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1284 (setq url (substring url 0 -1)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1285 (if (not (string-match url-nonrelative-link url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1286 (setq url nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1287 url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1288
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1289 (defun url-eat-trailing-space (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1290 ;; Remove spaces/tabs at the end of a string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1291 (let ((y (1- (length x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1292 (skip-chars (list ? ?\t ?\n)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1293 (while (and (>= y 0) (memq (aref x y) skip-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1294 (setq y (1- y)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1295 (substring x 0 (1+ y))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1296
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1297 (defun url-strip-leading-spaces (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1298 ;; Remove spaces at the front of a string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1299 (let ((y (1- (length x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1300 (z 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1301 (skip-chars (list ? ?\t ?\n)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1302 (while (and (<= z y) (memq (aref x z) skip-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1303 (setq z (1+ z)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1304 (substring x z nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1305
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1306 (defun url-convert-newlines-to-spaces (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1307 "Convert newlines and carriage returns embedded in a string into spaces,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1308 and swallow following whitespace.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1309 The argument is not side-effected, but may be returned by this function."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1310 (if (string-match "[\n\r]+\\s-*" x) ; [\\n\\r\\t ]
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1311 (concat (substring x 0 (match-beginning 0)) " "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1312 (url-convert-newlines-to-spaces
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1313 (substring x (match-end 0))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1314 x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1315
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1316 ;; Test cases
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1317 ;; (url-convert-newlines-to-spaces "foo bar") ; nothing happens
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1318 ;; (url-convert-newlines-to-spaces "foo\n \t bar") ; whitespace converted
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1319 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1320 ;; This implementation doesn't mangle the match-data, is fast, and doesn't
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1321 ;; create garbage, but it leaves whitespace.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1322 ;; (defun url-convert-newlines-to-spaces (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1323 ;; "Convert newlines and carriage returns embedded in a string into spaces.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1324 ;; The string is side-effected, then returned."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1325 ;; (let ((i 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1326 ;; (limit (length x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1327 ;; (while (< i limit)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1328 ;; (if (or (= ?\n (aref x i))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1329 ;; (= ?\r (aref x i)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1330 ;; (aset x i ? ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1331 ;; (setq i (1+ i)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1332 ;; x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1333
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1334 (defun url-expand-file-name (url &optional default)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1335 "Convert URL to a fully specified URL, and canonicalize it.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1336 Second arg DEFAULT is a URL to start with if URL is relative.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1337 If DEFAULT is nil or missing, the current buffer's URL is used.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1338 Path components that are `.' are removed, and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1339 path components followed by `..' are removed, along with the `..' itself."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1340 (if url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1341 (setq url (mapconcat (function (lambda (x)
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
1342 (if (memq x '(?\n ?\r))
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
1343 ""
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
1344 (char-to-string x))))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1345 (url-strip-leading-spaces
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1346 (url-eat-trailing-space url)) "")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1347 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1348 ((null url) nil) ; Something hosed! Be graceful
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1349 ((string-match "^#" url) ; Offset link, use it raw
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1350 url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1351 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1352 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1353 (inhibit-file-name-handlers t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1354 (defobj (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1355 ((vectorp default) default)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1356 (default (url-generic-parse-url default))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1357 (url-current-object url-current-object)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1358 (t (url-generic-parse-url (url-view-url t)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1359 (expander (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1360 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1361 (assoc (or (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1362 (url-type defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1363 url-registered-protocols)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1364 (if (string-match "^//" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1365 (setq urlobj (url-generic-parse-url (concat (url-type defobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1366 url))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1367 (if (fboundp expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1368 (funcall expander urlobj defobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1369 (message "Unknown URL scheme: %s" (or (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1370 (url-type defobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1371 (url-identity-expander urlobj defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1372 (url-recreate-url urlobj)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1373
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1374 (defun url-default-expander (urlobj defobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1375 ;; The default expansion routine - urlobj is modified by side effect!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1376 (url-set-type urlobj (or (url-type urlobj) (url-type defobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1377 (url-set-port urlobj (or (url-port urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1378 (and (string= (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1379 (url-type defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1380 (url-port defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1381 (if (not (string= "file" (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1382 (url-set-host urlobj (or (url-host urlobj) (url-host defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1383 (if (string= "ftp" (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1384 (url-set-user urlobj (or (url-user urlobj) (url-user defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1385 (if (string= (url-filename urlobj) "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1386 (url-set-filename urlobj "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1387 (if (string-match "^/" (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1388 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1389 (url-set-filename urlobj
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1390 (url-remove-relative-links
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1391 (concat (url-basepath (url-filename defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1392 (url-filename urlobj))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1393
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1394 (defun url-identity-expander (urlobj defobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1395 (url-set-type urlobj (or (url-type urlobj) (url-type defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1396
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1397 (defconst url-unreserved-chars
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1398 '(
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1399 ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1400 ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1401 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1402 ?$ ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\) ?,)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1403 "A list of characters that are _NOT_ reserve in the URL spec.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1404 This is taken from draft-fielding-url-syntax-02.txt - check your local
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1405 internet drafts directory for a copy.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1406
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1407 (defun url-hexify-string (str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1408 "Escape characters in a string"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1409 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1410 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1411 (lambda (char)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1412 (if (not (memq char url-unreserved-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1413 (if (< char 16)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1414 (upcase (format "%%0%x" char))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1415 (upcase (format "%%%x" char)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1416 (char-to-string char))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1417 (mule-decode-string str) ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1418
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1419 (defun url-make-sequence (start end)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1420 "Make a sequence (list) of numbers from START to END"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1421 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1422 ((= start end) '())
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1423 ((> start end) '())
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1424 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1425 (let ((sqnc '()))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1426 (while (<= start end)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1427 (setq sqnc (cons end sqnc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1428 end (1- end)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1429 sqnc))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1430
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1431 (defun url-file-extension (fname &optional x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1432 "Return the filename extension of FNAME. If optional variable X is t,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1433 then return the basename of the file with the extension stripped off."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1434 (if (and fname (string-match "\\.[^./]+$" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1435 (if x (substring fname 0 (match-beginning 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1436 (substring fname (match-beginning 0) nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1437 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1438 ;; If fname has no extension, and x then return fname itself instead of
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1439 ;; nothing. When caching it allows the correct .hdr file to be produced
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1440 ;; for filenames without extension.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1441 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1442 (if x
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1443 fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1444 "")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1445
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1446 (defun url-basepath (file &optional x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1447 "Return the base pathname of FILE, or the actual filename if X is true"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1448 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1449 ((null file) "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1450 (x (file-name-nondirectory file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1451 (t (file-name-directory file))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1452
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1453 (defun url-parse-query-string (query &optional downcase)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1454 (let (retval pairs cur key val)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1455 (setq pairs (split-string query "&"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1456 (while pairs
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1457 (setq cur (car pairs)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1458 pairs (cdr pairs))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1459 (if (not (string-match "=" cur))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1460 nil ; Grace
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1461 (setq key (url-unhex-string (substring cur 0 (match-beginning 0)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1462 val (url-unhex-string (substring cur (match-end 0) nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1463 (if downcase
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1464 (setq key (downcase key)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1465 (setq cur (assoc key retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1466 (if cur
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1467 (setcdr cur (cons val (cdr cur)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1468 (setq retval (cons (list key val) retval)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1469 retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1470
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1471 (defun url-unhex (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1472 (if (> x ?9)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1473 (if (>= x ?a)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1474 (+ 10 (- x ?a))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1475 (+ 10 (- x ?A)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1476 (- x ?0)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1477
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1478 (defun url-unhex-string (str &optional allow-newlines)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1479 "Remove %XXX embedded spaces, etc in a url.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1480 If optional second argument ALLOW-NEWLINES is non-nil, then allow the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1481 decoding of carriage returns and line feeds in the string, which is normally
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1482 forbidden in URL encoding."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1483 (setq str (or str ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1484 (let ((tmp "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1485 (case-fold-search t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1486 (while (string-match "%[0-9a-f][0-9a-f]" str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1487 (let* ((start (match-beginning 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1488 (ch1 (url-unhex (elt str (+ start 1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1489 (code (+ (* 16 ch1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1490 (url-unhex (elt str (+ start 2))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1491 (setq tmp (concat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1492 tmp (substring str 0 start)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1493 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1494 (allow-newlines
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1495 (char-to-string code))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1496 ((or (= code ?\n) (= code ?\r))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1497 " ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1498 (t (char-to-string code))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1499 str (substring str (match-end 0)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1500 (setq tmp (concat tmp str))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1501 tmp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1502
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1503 (defun url-clean-text ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1504 "Clean up a buffer, removing any excess garbage from a gateway mechanism,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1505 and decoding any MIME content-transfer-encoding used."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1506 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1507 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1508 (url-replace-regexp "Connection closed by.*" "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1509 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1510 (url-replace-regexp "Process WWW.*" ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1511
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1512 (defun url-remove-compressed-extensions (filename)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1513 (while (assoc (url-file-extension filename) url-uncompressor-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1514 (setq filename (url-file-extension filename t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1515 filename)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1516
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1517 (defun url-uncompress ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1518 "Do any necessary uncompression on `url-working-buffer'"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1519 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1520 (if (not url-inhibit-uncompression)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1521 (let* ((extn (url-file-extension url-current-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1522 (decoder nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1523 (code-1 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1524 (assoc "content-transfer-encoding"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1525 url-current-mime-headers)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1526 (code-2 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1527 (assoc "content-encoding" url-current-mime-headers)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1528 (code-3 (and (not code-1) (not code-2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1529 (cdr-safe (assoc extn url-uncompressor-alist))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1530 (done nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1531 (default-process-coding-system
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1532 (cons mule-no-coding-system mule-no-coding-system)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1533 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1534 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1535 (lambda (code)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1536 (setq decoder (and (not (member code done))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1537 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1538 (assoc code mm-content-transfer-encodings)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1539 done (cons code done))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1540 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1541 ((null decoder) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1542 ((stringp decoder)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1543 (message "Decoding...")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1544 (call-process-region (point-min) (point-max) decoder t t nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1545 (message "Decoding... done."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1546 ((listp decoder)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1547 (apply 'call-process-region (point-min) (point-max)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1548 (car decoder) t t nil (cdr decoder)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1549 ((and (symbolp decoder) (fboundp decoder))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1550 (message "Decoding...")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1551 (funcall decoder (point-min) (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1552 (message "Decoding... done."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1553 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1554 (error "Bad entry for %s in `mm-content-transfer-encodings'"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1555 code)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1556 (list code-1 code-2 code-3))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1557 (set-buffer-modified-p nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1558
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1559 (defun url-filter (proc string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1560 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1561 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1562 (insert string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1563 (if (string-match "\nConnection closed by" string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1564 (progn (set-process-filter proc nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1565 (url-sentinel proc string))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1566 string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1567
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1568 (defun url-default-callback (buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1569 (url-download-minor-mode nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1570 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1571 ((save-excursion (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1572 (and url-current-callback-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1573 (fboundp url-current-callback-func)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1574 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1575 (save-window-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1576 (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1577 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1578 ((listp url-current-callback-data)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1579 (apply url-current-callback-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1580 url-current-callback-data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1581 (url-current-callback-data
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1582 (funcall url-current-callback-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1583 url-current-callback-data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1584 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1585 (funcall url-current-callback-func))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1586 ((fboundp 'w3-sentinel)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1587 (set-variable 'w3-working-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1588 (w3-sentinel))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1589 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1590 (message "Retrieval for %s complete." buf))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1591
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1592 (defun url-sentinel (proc string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1593 (let* ((buf (process-buffer proc))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1594 (url-working-buffer (and buf (get-buffer buf)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1595 status)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1596 (if (not url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1597 (url-warn 'url (format "Process %s completed with no buffer!" proc))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1598 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1599 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1600 (remove-hook 'after-change-functions 'url-after-change-function)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1601 (if url-be-asynchronous
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1602 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1603 (widen)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1604 (url-clean-text)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1605 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1606 ((and (null proc) (not url-working-buffer)) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1607 ((url-mime-response-p)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1608 (setq status (url-parse-mime-headers))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1609 (if (not url-current-mime-type)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1610 (setq url-current-mime-type (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1611 (url-file-extension
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1612 url-current-file)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1613 (if (member status '(401 301 302 303 204))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1614 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1615 (funcall url-default-retrieval-proc (buffer-name url-working-buffer))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1616
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1617 (defun url-remove-relative-links (name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1618 ;; Strip . and .. from pathnames
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1619 (let ((new (if (not (string-match "^/" name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1620 (concat "/" name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1621 name)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1622 (while (string-match "/\\(\\./\\)" new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1623 (setq new (concat (substring new 0 (match-beginning 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1624 (substring new (match-end 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1625 (while (string-match "/\\([^/]*/\\.\\./\\)" new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1626 (setq new (concat (substring new 0 (match-beginning 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1627 (substring new (match-end 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1628 (while (string-match "^/\\.\\.\\(/\\)" new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1629 (setq new (substring new (match-beginning 1) nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1630 new))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1631
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1632 (defun url-truncate-url-for-viewing (url &optional width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1633 "Return a shortened version of URL that is WIDTH characters or less wide.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1634 WIDTH defaults to the current frame width."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1635 (let* ((fr-width (or width (frame-width)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1636 (str-width (length url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1637 (tail (file-name-nondirectory url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1638 (fname nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1639 (modified 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1640 (urlobj nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1641 ;; The first thing that can go are the search strings
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1642 (if (and (>= str-width fr-width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1643 (string-match "?" url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1644 (setq url (concat (substring url 0 (match-beginning 0)) "?...")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1645 str-width (length url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1646 tail (file-name-nondirectory url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1647 (if (< str-width fr-width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1648 nil ; Hey, we are done!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1649 (setq urlobj (url-generic-parse-url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1650 fname (url-filename urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1651 fr-width (- fr-width 4))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1652 (while (and (>= str-width fr-width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1653 (string-match "/" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1654 (setq fname (substring fname (match-end 0) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1655 modified (1+ modified))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1656 (url-set-filename urlobj fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1657 (setq url (url-recreate-url urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1658 str-width (length url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1659 (if (> modified 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1660 (setq fname (concat "/.../" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1661 (setq fname (concat "/" fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1662 (url-set-filename urlobj fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1663 (setq url (url-recreate-url urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1664 url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1665
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1666 (defun url-view-url (&optional no-show)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1667 "View the current document's URL. Optional argument NO-SHOW means
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1668 just return the URL, don't show it in the minibuffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1669 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1670 (let ((url ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1671 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1672 ((equal url-current-type "gopher")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1673 (setq url (format "%s://%s%s/%s"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1674 url-current-type url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1675 (if (or (null url-current-port)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1676 (string= "70" url-current-port)) ""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1677 (concat ":" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1678 url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1679 ((equal url-current-type "news")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1680 (setq url (concat "news:"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1681 (if (not (equal url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1682 url-news-server))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1683 (concat "//" url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1684 (if (or (null url-current-port)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1685 (string= "119" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1686 ""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1687 (concat ":" url-current-port)) "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1688 url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1689 ((equal url-current-type "about")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1690 (setq url (concat "about:" url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1691 ((member url-current-type '("http" "shttp" "https"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1692 (setq url (format "%s://%s%s/%s" url-current-type url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1693 (if (or (null url-current-port)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1694 (string= "80" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1695 ""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1696 (concat ":" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1697 (if (and url-current-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1698 (= ?/ (string-to-char url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1699 (substring url-current-file 1 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1700 url-current-file))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1701 ((equal url-current-type "ftp")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1702 (setq url (format "%s://%s%s/%s" url-current-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1703 (if (and url-current-user
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1704 (not (string= "anonymous" url-current-user)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1705 (concat url-current-user "@") "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1706 url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1707 (if (and url-current-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1708 (= ?/ (string-to-char url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1709 (substring url-current-file 1 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1710 url-current-file))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1711 ((and (member url-current-type '("file" nil)) url-current-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1712 (setq url (format "file:%s" url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1713 ((equal url-current-type "www")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1714 (setq url (format "www:/%s/%s" url-current-server url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1715 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1716 (setq url nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1717 (if (not no-show) (message "%s" url) url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1718
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1719 (defun url-parse-Netscape-history (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1720 ;; Parse a Netscape/X style global history list.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1721 (let (pos ; Position holder
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1722 url ; The URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1723 time) ; Last time accessed
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1724 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1725 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1726 (skip-chars-forward "\n \t") ; Skip past the tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1727 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1728 :test 'equal))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1729 ;; Here we will go to the end of the line and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1730 ;; skip back over a token, since we might run
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1731 ;; into spaces in URLs, depending on how much
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1732 ;; smarter netscape is than the old XMosaic :)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1733 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1734 (setq pos (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1735 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1736 (skip-chars-backward "^ \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1737 (skip-chars-backward " \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1738 (setq url (buffer-substring pos (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1739 pos (1+ (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1740 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1741 (setq time (buffer-substring pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1742 (skip-chars-forward "\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1743 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1744 (cl-puthash url time url-global-history-hash-table))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1745
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1746 (defun url-parse-Mosaic-history-v1 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1747 ;; Parse an NCSA Mosaic/X style global history list
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1748 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1749 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1750 (skip-chars-forward "\n \t") ; Skip past the tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1751 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1752 (skip-chars-forward "\n \t") ; Skip past the second tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1753 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1754 :test 'equal))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1755 (let (pos ; Temporary position holder
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1756 bol ; Beginning-of-line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1757 url ; URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1758 time ; Time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1759 last-end ; Last ending point
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1760 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1761 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1762 (setq bol (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1763 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1764 (setq pos (point)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1765 last-end (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1766 (skip-chars-backward "^ \t" bol) ; Skip over year
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1767 (skip-chars-backward " \t" bol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1768 (skip-chars-backward "^ \t" bol) ; Skip over time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1769 (skip-chars-backward " \t" bol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1770 (skip-chars-backward "^ \t" bol) ; Skip over day #
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1771 (skip-chars-backward " \t" bol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1772 (skip-chars-backward "^ \t" bol) ; Skip over month
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1773 (skip-chars-backward " \t" bol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1774 (skip-chars-backward "^ \t" bol) ; Skip over day abbrev.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1775 (if (bolp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1776 nil ; Malformed entry!!! Ack! Bailout!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1777 (setq time (buffer-substring pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1778 (skip-chars-backward " \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1779 (setq pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1780 (beginning-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1781 (setq url (buffer-substring (point) pos))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1782 (goto-char (min (1+ last-end) (point-max))) ; Goto next line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1783 (if (/= (length url) 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1784 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1785 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1786 (cl-puthash url time url-global-history-hash-table))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1787
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1788 (defun url-parse-Mosaic-history-v2 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1789 ;; Parse an NCSA Mosaic/X style global history list (version 2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1790 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1791 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1792 (skip-chars-forward "\n \t") ; Skip past the tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1793 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1794 (skip-chars-forward "\n \t") ; Skip past the second tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1795 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1796 :test 'equal))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1797 (let (pos ; Temporary position holder
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1798 bol ; Beginning-of-line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1799 url ; URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1800 time ; Time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1801 last-end ; Last ending point
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1802 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1803 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1804 (setq bol (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1805 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1806 (setq pos (point)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1807 last-end (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1808 (skip-chars-backward "^ \t" bol) ; Skip over time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1809 (if (bolp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1810 nil ; Malformed entry!!! Ack! Bailout!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1811 (setq time (buffer-substring pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1812 (skip-chars-backward " \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1813 (setq pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1814 (beginning-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1815 (setq url (buffer-substring (point) pos))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1816 (goto-char (min (1+ last-end) (point-max))) ; Goto next line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1817 (if (/= (length url) 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1818 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1819 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1820 (cl-puthash url time url-global-history-hash-table))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1821
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1822 (defun url-parse-Emacs-history (&optional fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1823 ;; Parse out the Emacs-w3 global history file for completion, etc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1824 (or fname (setq fname (expand-file-name url-global-history-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1825 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1826 ((not (file-exists-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1827 (message "%s does not exist." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1828 ((not (file-readable-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1829 (message "%s is unreadable." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1830 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1831 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1832 (load fname nil t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1833 (error (message "Could not load %s" fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1834 (if (boundp 'url-global-history-completion-list)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1835 ;; Hey! Automatic conversion of old format!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1836 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1837 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1838 :test 'equal)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1839 url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1840 (mapcar (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1841 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1842 (cl-puthash (car x) (cdr x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1843 url-global-history-hash-table)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1844 (symbol-value 'url-global-history-completion-list)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1845
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1846 (defun url-parse-global-history (&optional fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1847 ;; Parse out the mosaic global history file for completions, etc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1848 (or fname (setq fname (expand-file-name url-global-history-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1849 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1850 ((not (file-exists-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1851 (message "%s does not exist." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1852 ((not (file-readable-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1853 (message "%s is unreadable." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1854 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1855 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1856 (set-buffer (get-buffer-create " *url-tmp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1857 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1858 (insert-file-contents-literally fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1859 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1860 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1861 ((looking-at "(setq") (url-parse-Emacs-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1862 ((looking-at "ncsa-mosaic-.*-1$") (url-parse-Mosaic-history-v1 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1863 ((looking-at "ncsa-mosaic-.*-2$") (url-parse-Mosaic-history-v2 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1864 ((or (looking-at "MCOM-") (looking-at "netscape"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1865 (url-parse-Netscape-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1866 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1867 (url-warn 'url (format "Cannot deduce type of history file: %s"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1868 fname))))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1869
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1870 (defun url-write-Emacs-history (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1871 ;; Write an Emacs-w3 style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1872 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1873 (let ((count 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1874 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1875 (lambda (key value)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1876 (setq count (1+ count))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1877 (insert "(cl-puthash \"" key "\""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1878 (if (not (stringp value)) " '" "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1879 (prin1-to-string value)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1880 " url-global-history-hash-table)\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1881 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1882 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1883 (insert (format
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1884 "(setq url-global-history-hash-table (make-hash-table :size %d :test 'equal))\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1885 (/ count 4)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1886 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1887 (insert "\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1888 (write-file fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1889
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1890 (defun url-write-Netscape-history (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1891 ;; Write a Netscape-style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1892 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1893 (let ((last-valid-time "785305714")) ; Picked out of thin air,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1894 ; in case first in assoc list
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1895 ; doesn't have a valid time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1896 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1897 (insert "MCOM-Global-history-file-1\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1898 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1899 (lambda (url time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1900 (if (or (not (stringp time)) (string-match " \t" time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1901 (setq time last-valid-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1902 (setq last-valid-time time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1903 (insert url " " time "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1904 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1905 (write-file fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1906
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1907 (defun url-write-Mosaic-history-v1 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1908 ;; Write a Mosaic/X-style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1909 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1910 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1911 (insert "ncsa-mosaic-history-format-1\nGlobal\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1912 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1913 (lambda (url time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1914 (if (listp time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1915 (setq time (current-time-string time)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1916 (if (or (not (stringp time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1917 (not (string-match " " time)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1918 (setq time (current-time-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1919 (insert url " " time "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1920 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1921 (write-file fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1922
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1923 (defun url-write-Mosaic-history-v2 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1924 ;; Write a Mosaic/X-style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1925 (let ((last-valid-time "827250806"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1926 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1927 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1928 (insert "ncsa-mosaic-history-format-2\nGlobal\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1929 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1930 (lambda (url time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1931 (if (listp time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1932 (setq time last-valid-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1933 (setq last-valid-time time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1934 (if (not (stringp time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1935 (setq time last-valid-time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1936 (insert url " " time "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1937 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1938 (write-file fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1939
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1940 (defun url-write-global-history (&optional fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1941 "Write the global history file into `url-global-history-file'.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1942 The type of data written is determined by what is in the file to begin
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1943 with. If the type of storage cannot be determined, then prompt the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1944 user for what type to save as."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1945 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1946 (or fname (setq fname (expand-file-name url-global-history-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1947 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1948 ((not url-history-changed-since-last-save) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1949 ((not (file-writable-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1950 (message "%s is unwritable." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1951 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1952 (let ((make-backup-files nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1953 (version-control nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1954 (require-final-newline t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1955 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1956 (set-buffer (get-buffer-create " *url-tmp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1957 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1958 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1959 (insert-file-contents-literally fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1960 (error nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1961 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1962 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1963 ((looking-at "ncsa-mosaic-.*-1$") (url-write-Mosaic-history-v1 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1964 ((looking-at "ncsa-mosaic-.*-2$") (url-write-Mosaic-history-v2 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1965 ((looking-at "MCOM-") (url-write-Netscape-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1966 ((looking-at "netscape") (url-write-Netscape-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1967 ((looking-at "(setq") (url-write-Emacs-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1968 (t (url-write-Emacs-history fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1969 (kill-buffer (current-buffer))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1970 (setq url-history-changed-since-last-save nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1971
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1972
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1973 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1974 ;;; The main URL fetching interface
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1975 ;;; -------------------------------
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1976 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1977
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1978 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1979 (defun url-popup-info (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1980 "Retrieve the HTTP/1.0 headers and display them in a temp buffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1981 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1982 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1983 data)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1984 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1985 ((string= type "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1986 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1987 (url-automatic-caching nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1988 (url-inhibit-mime-parsing t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1989 (url-working-buffer " *popup*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1990 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1991 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1992 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1993 (setq url-be-asynchronous nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1994 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1995 (subst-char-in-region (point-min) (point-max) ?\r ? )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1996 (buffer-string))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1997 ((or (string= type "file") (string= type "ftp"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1998 (setq data (url-file-attributes url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1999 (set-buffer (get-buffer-create
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2000 (url-generate-new-buffer-name "*Header Info*")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2001 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2002 (if data
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2003 (concat (if (stringp (nth 0 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2004 (concat " Linked to: " (nth 0 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2005 (concat " Directory: " (if (nth 0 data) "Yes" "No")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2006 "\n Links: " (int-to-string (nth 1 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2007 "\n File UID: " (int-to-string (nth 2 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2008 "\n File GID: " (int-to-string (nth 3 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2009 "\n Last Access: " (current-time-string (nth 4 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2010 "\nLast Modified: " (current-time-string (nth 5 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2011 "\n Last Changed: " (current-time-string (nth 6 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2012 "\n Size (bytes): " (int-to-string (nth 7 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2013 "\n File Type: " (or (nth 8 data) "text/plain"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2014 (concat "No info found for " url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2015 ((and (string= type "news") (string-match "@" url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2016 (let ((art (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2017 (if (not (string= (substring art -1 nil) ">"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2018 (setq art (concat "<" art ">")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2019 (url-get-headers-from-article-id art)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2020 (t (concat "Don't know how to find information on " url)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2021
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2022 (defun url-decode-text ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2023 ;; Decode text transmitted by NNTP.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2024 ;; 0. Delete status line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2025 ;; 1. Delete `^M' at end of line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2026 ;; 2. Delete `.' at end of buffer (end of text mark).
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2027 ;; 3. Delete `.' at beginning of line."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2028 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2029 (set-buffer nntp-server-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2030 ;; Insert newline at end of buffer.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2031 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2032 (if (not (bolp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2033 (insert "\n"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2034 ;; Delete status line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2035 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2036 (delete-region (point) (progn (forward-line 1) (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2037 ;; Delete `^M' at end of line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2038 ;; (replace-regexp "\r$" "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2039 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2040 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2041 (if (= (preceding-char) ?\r)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2042 (delete-char -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2043 (forward-line 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2044 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2045 ;; Delete `.' at end of buffer (end of text mark).
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2046 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2047 (forward-line -1) ;(beginning-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2048 (if (looking-at "^\\.$")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2049 (delete-region (point) (progn (forward-line 1) (point))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2050 ;; Replace `..' at beginning of line with `.'.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2051 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2052 ;; (replace-regexp "^\\.\\." ".")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2053 (while (search-forward "\n.." nil t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2054 (delete-char -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2055 ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2056
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2057 (defun url-get-headers-from-article-id (art)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2058 ;; Return the HEAD of ART (a usenet news article)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2059 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2060 ((string-match "flee" nntp-version)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2061 (nntp/command "HEAD" art)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2062 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2063 (set-buffer nntp-server-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2064 (while (progn (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2065 (not (re-search-forward "^.\r*$" nil t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2066 (url-accept-process-output nntp/connection))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2067 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2068 (nntp-send-command "^\\.\r$" "HEAD" art)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2069 (url-decode-text)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2070 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2071 (set-buffer nntp-server-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2072 (buffer-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2073
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2074 (defvar url-external-retrieval-program "www"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2075 "*Name of the external executable to run to retrieve URLs.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2076
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2077 (defvar url-external-retrieval-args '("-source")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2078 "*A list of arguments to pass to `url-external-retrieval-program' to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2079 retrieve a URL by its HTML source.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2080
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2081 (defun url-retrieve-externally (url &optional no-cache)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2082 (let ((url-working-buffer (if (and url-multiple-p
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2083 (string-equal url-working-buffer
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2084 url-default-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2085 (url-get-working-buffer-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2086 url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2087 (if (get-buffer-create url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2088 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2089 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2090 (set-buffer-modified-p nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2091 (kill-buffer url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2092 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2093 (let* ((args (append url-external-retrieval-args (list url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2094 (urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2095 (type (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2096 (if (or (member type '("www" "about" "mailto" "mailserver"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2097 (url-file-directly-accessible-p urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2098 (url-retrieve-internally url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2099 (url-lazy-message "Retrieving %s..." url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2100 (apply 'call-process url-external-retrieval-program
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2101 nil t nil args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2102 (url-lazy-message "Retrieving %s... done" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2103 (if (and type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2104 (setq url-current-server (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2105 url-current-type (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2106 url-current-port (url-port urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2107 url-current-file (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2108 (if (member url-current-file '("/" ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2109 (setq url-current-mime-type "text/html"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2110
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2111 (defun url-get-normalized-date (&optional specified-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2112 ;; Return a 'real' date string that most HTTP servers can understand.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2113 (require 'timezone)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2114 (let* ((raw (if specified-time (current-time-string specified-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2115 (current-time-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2116 (gmt (timezone-make-date-arpa-standard raw
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2117 (nth 1 (current-time-zone))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2118 "GMT"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2119 (parsed (timezone-parse-date gmt))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2120 (day (cdr-safe (assoc (substring raw 0 3) weekday-alist)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2121 (year nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2122 (month (car
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2123 (rassoc
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2124 (string-to-int (aref parsed 1)) monthabbrev-alist)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2125 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2126 (setq day (or (car-safe (rassoc day weekday-alist))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2127 (substring raw 0 3))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2128 year (aref parsed 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2129 ;; This is needed for plexus servers, or the server will hang trying to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2130 ;; parse the if-modified-since header. Hopefully, I can take this out
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2131 ;; soon.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2132 (if (and year (> (length year) 2))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2133 (setq year (substring year -2 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2134
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2135 (concat day ", " (aref parsed 2) "-" month "-" year " "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2136 (aref parsed 3) " " (or (aref parsed 4)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2137 (concat "[" (nth 1 (current-time-zone))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2138 "]")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2139
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2140 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2141 (defun url-cache-expired (url mod)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2142 "Return t iff a cached file has expired."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2143 (if (not (string-match url-nonrelative-link url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2144 t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2145 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2146 (type (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2147 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2148 (url-standalone-mode
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2149 (not (file-exists-p (url-create-cached-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2150 ((string= type "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2151 (if (not url-standalone-mode) t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2152 (not (file-exists-p (url-create-cached-filename urlobj)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2153 ((not (fboundp 'current-time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2154 t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2155 ((member type '("file" "ftp"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2156 (if (or (equal mod '(0 0)) (not mod))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2157 (return t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2158 (or (> (nth 0 mod) (nth 0 (current-time)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2159 (> (nth 1 mod) (nth 1 (current-time))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2160 (t nil)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2161
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2162 (defun url-get-working-buffer-name ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2163 "Get a working buffer name such as ` *URL-<i>*' without a live process and empty"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2164 (let ((num 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2165 name buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2166 (while (progn (setq name (format " *URL-%d*" num))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2167 (setq buf (get-buffer name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2168 (and buf (or (get-buffer-process buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2169 (save-excursion (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2170 (> (point-max) 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2171 (setq num (1+ num)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2172 name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2173
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2174 (defun url-default-find-proxy-for-url (urlobj host)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2175 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2176 ((or (and (assoc "no_proxy" url-proxy-services)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2177 (string-match
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2178 (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2179 (assoc "no_proxy" url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2180 host))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2181 (equal "www" (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2182 "DIRECT")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2183 ((cdr (assoc (url-type urlobj) url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2184 (concat "PROXY " (cdr (assoc (url-type urlobj) url-proxy-services))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2185 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2186 ;; Should check for socks
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2187 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2188 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2189 "DIRECT")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2190
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2191 (defvar url-proxy-locator 'url-default-find-proxy-for-url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2192
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2193 (defun url-find-proxy-for-url (url host)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2194 (let ((proxies (split-string (funcall url-proxy-locator url host) " *; *"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2195 (proxy nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2196 (case-fold-search t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2197 ;; Not sure how I should handle gracefully degrading from one proxy to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2198 ;; another, so for now just deal with the first one
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2199 ;; (while proxies
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2200 (setq proxy (pop proxies))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2201 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2202 ((string-match "^direct" proxy) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2203 ((string-match "^proxy +" proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2204 (concat "http://" (substring proxy (match-end 0)) "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2205 ((string-match "^socks +" proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2206 (concat "socks://" (substring proxy (match-end 0))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2207 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2208 (url-warn 'url (format "Unknown proxy directive: %s" proxy) 'critical)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2209 nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2210
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2211 (defun url-retrieve-internally (url &optional no-cache)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2212 (let ((url-working-buffer (if (and url-multiple-p
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2213 (string-equal
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2214 (if (bufferp url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2215 (buffer-name url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2216 url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2217 url-default-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2218 (url-get-working-buffer-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2219 url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2220 (if (get-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2221 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2222 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2223 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2224 (setq url-current-can-be-cached (not no-cache))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2225 (set-buffer-modified-p nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2226 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2227 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2228 (url-using-proxy (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2229 (url-find-proxy-for-url urlobj
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2230 (url-host urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2231 nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2232 (handler nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2233 (original-url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2234 (cached nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2235 (tmp url-current-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2236 (if url-using-proxy (setq type "proxy"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2237 (setq cached (url-is-cached url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2238 cached (and cached (not (url-cache-expired url cached)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2239 handler (if cached 'url-extract-from-cache
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2240 (car-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2241 (cdr-safe (assoc (or type "auto")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2242 url-registered-protocols))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2243 url (if cached (url-create-cached-filename url) url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2244 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2245 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2246 (setq url-current-can-be-cached (not no-cache)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2247 ; (if url-be-asynchronous
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2248 ; (url-download-minor-mode t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2249 (if (and handler (fboundp handler))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2250 (funcall handler url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2251 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2252 (setq url-current-file tmp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2253 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2254 (insert "<title> Link Error! </title>\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2255 "<h1> An error has occurred... </h1>\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2256 (format "The link type `<code>%s</code>'" type)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2257 " is unrecognized or unsupported at this time.<p>\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2258 "If you feel this is an error, please "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2259 "<a href=\"mailto://" url-bug-address "\">send me mail.</a>"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2260 "<p><address>William Perry</address><br>"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2261 "<address>" url-bug-address "</address>")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2262 (setq url-current-file "error.html"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2263 (if (and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2264 (not url-be-asynchronous)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2265 (get-buffer url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2266 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2267 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2268
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2269 (url-clean-text)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2270 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2271 ((equal type "wais") nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2272 ((and url-be-asynchronous (not cached) (member type '("http" "proxy")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2273 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2274 (url-be-asynchronous
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2275 (funcall url-default-retrieval-proc (buffer-name)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2276 ((not (get-buffer url-working-buffer)) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2277 ((and (not url-inhibit-mime-parsing)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2278 (or cached (url-mime-response-p t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2279 (or cached (url-parse-mime-headers nil t))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2280 (if (and (or (not url-be-asynchronous)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2281 (not (equal type "http")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2282 (not url-current-mime-type))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2283 (if (url-buffer-is-hypertext)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2284 (setq url-current-mime-type "text/html")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2285 (setq url-current-mime-type (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2286 (url-file-extension
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2287 url-current-file)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2288 (if (and url-automatic-caching url-current-can-be-cached
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2289 (not url-be-asynchronous))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2290 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2291 (url-store-in-cache url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2292 (if (not url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2293 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2294 :test 'equal)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2295 (if (not (string-match "^about:" original-url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2296 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2297 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2298 (cl-puthash original-url (current-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2299 url-global-history-hash-table)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2300 (cons cached url-working-buffer))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2301
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2302 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2303 (defun url-retrieve (url &optional no-cache expected-md5)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2304 "Retrieve a document over the World Wide Web.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2305 The document should be specified by its fully specified
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2306 Uniform Resource Locator. No parsing is done, just return the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2307 document as the server sent it. The document is left in the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2308 buffer specified by url-working-buffer. url-working-buffer is killed
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2309 immediately before starting the transfer, so that no buffer-local
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2310 variables interfere with the retrieval. HTTP/1.0 redirection will
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2311 be honored before this function exits."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2312 (url-do-setup)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2313 (if (and (fboundp 'set-text-properties)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2314 (subrp (symbol-function 'set-text-properties)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2315 (set-text-properties 0 (length url) nil url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2316 (if (and url (string-match "^url:" url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2317 (setq url (substring url (match-end 0) nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2318 (let ((status (url-retrieve-internally url no-cache)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2319 (if (and expected-md5 url-check-md5s)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2320 (let ((cur-md5 (md5 (current-buffer))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2321 (if (not (string= cur-md5 expected-md5))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2322 (and (not (funcall url-confirmation-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2323 "MD5s do not match, use anyway? "))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2324 (error "MD5 error.")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2325 status))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2326
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2327 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2328 ;;; How to register a protocol
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2329 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2330 (defun url-register-protocol (protocol &optional retrieve expander defport)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2331 "Register a protocol with the URL retrieval package.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2332 PROTOCOL is the type of protocol being registers (http, nntp, etc),
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2333 and is the first chunk of the URL. ie: http:// URLs will be
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2334 handled by the protocol registered as 'http'. PROTOCOL can
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2335 be either a symbol or a string - it is converted to a string,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2336 and lowercased before being registered.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2337 RETRIEVE (optional) is the function to be called with a url as its
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2338 only argument. If this argument is omitted, then this looks
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2339 for a function called 'url-PROTOCOL'. A warning is shown if
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2340 the function is undefined, but the protocol is still
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2341 registered.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2342 EXPANDER (optional) is the function to call to expand a relative link
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2343 of type PROTOCOL. If omitted, this defaults to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2344 `url-default-expander'
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2345
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2346 Any proxy information is read in from environment variables at this
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2347 time, so this function should only be called after dumping emacs."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2348 (let* ((protocol (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2349 ((stringp protocol) (downcase protocol))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2350 ((symbolp protocol) (downcase (symbol-name protocol)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2351 (t nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2352
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2353 (retrieve (or retrieve (intern (concat "url-" protocol))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2354 (expander (or expander 'url-default-expander))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2355 (cur-protocol (assoc protocol url-registered-protocols))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2356 (urlobj nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2357 (cur-proxy (assoc protocol url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2358 (env-proxy (or (getenv (concat protocol "_proxy"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2359 (getenv (concat protocol "_PROXY"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2360 (getenv (upcase (concat protocol "_PROXY"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2361
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2362 (if (not protocol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2363 (error "Invalid data to url-register-protocol."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2364
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2365 (if (not (fboundp retrieve))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2366 (message "Warning: %s registered, but no function found." protocol))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2367
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2368 ;; Store the default port, if none previously specified and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2369 ;; defport given
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2370 (if (and defport (not (assoc protocol url-default-ports)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2371 (setq url-default-ports (cons (cons protocol defport)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2372 url-default-ports)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2373
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2374 ;; Store the appropriate information for later
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2375 (if cur-protocol
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2376 (setcdr cur-protocol (cons retrieve expander))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2377 (setq url-registered-protocols (cons (cons protocol
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2378 (cons retrieve expander))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2379 url-registered-protocols)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2380
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2381 ;; Store any proxying information - this will not overwrite an old
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2382 ;; entry, so that people can still set this information in their
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2383 ;; .emacs file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2384 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2385 (cur-proxy nil) ; Keep their old settings
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2386 ((null env-proxy) nil) ; No proxy setup
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2387 ;; First check if its something like hostname:port
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2388 ((string-match "^\\([^:]+\\):\\([0-9]+\\)$" env-proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2389 (setq urlobj (url-generic-parse-url nil)) ; Get a blank object
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2390 (url-set-type urlobj "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2391 (url-set-host urlobj (url-match env-proxy 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2392 (url-set-port urlobj (url-match env-proxy 2)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2393 ;; Then check if its a fully specified URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2394 ((string-match url-nonrelative-link env-proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2395 (setq urlobj (url-generic-parse-url env-proxy))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2396 (url-set-type urlobj "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2397 (url-set-target urlobj nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2398 ;; Finally, fall back on the assumption that its just a hostname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2399 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2400 (setq urlobj (url-generic-parse-url nil)) ; Get a blank object
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2401 (url-set-type urlobj "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2402 (url-set-host urlobj env-proxy)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2403
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2404 (if (and (not cur-proxy) urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2405 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2406 (setq url-proxy-services
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2407 (cons (cons protocol (concat (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2408 (url-port urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2409 url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2410 (message "Using a proxy for %s..." protocol)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2411
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2412 (provide 'url)