annotate lisp/w3/url.el @ 88:821dec489c24 r20-0

Import from CVS: tag r20-0
author cvs
date Mon, 13 Aug 2007 09:09:59 +0200
parents 364816949b59
children 0d2f883870bc
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
88
821dec489c24 Import from CVS: tag r20-0
cvs
parents: 86
diff changeset
3 ;; Created: 1997/01/29 14:32:36
821dec489c24 Import from CVS: tag r20-0
cvs
parents: 86
diff changeset
4 ;; Version: 1.48
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|
88
821dec489c24 Import from CVS: tag r20-0
cvs
parents: 86
diff changeset
10 ;;; 1997/01/29 14:32:36|1.48|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)
88
821dec489c24 Import from CVS: tag r20-0
cvs
parents: 86
diff changeset
600 (set-buffer url-working-buffer)
821dec489c24 Import from CVS: tag r20-0
cvs
parents: 86
diff changeset
601 (url-uncompress)
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
602 (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
603 (insert-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
604 (setq buffer-file-name url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
605 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
606 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
607 (set-buffer-modified-p nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
608 (kill-buffer url-working-buffer)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
609
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
610 (defun url-file-directory-p (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
611 "Return t iff a url points to a directory"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
612 (equal (substring url -1 nil) "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
613
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
614 (defun url-file-exists (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
615 "Return t iff a file exists."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
616 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
617 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
618 (exists nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
619 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
620 ((equal type "http") ; use head
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
621 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
622 (url-request-data nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
623 (url-working-buffer " *url-temp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
624 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
625 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
626 (setq exists (or (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
627 (assoc "status" url-current-mime-headers)) 500))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
628 (kill-buffer " *url-temp*")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
629 (setq exists (and (>= exists 200) (< exists 300))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
630 ((member type '("ftp" "file")) ; file-attributes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
631 (let ((fname (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
632 (concat "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
633 (if (url-user urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
634 (concat (url-user urlobj) "@")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
635 "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
636 (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
637 (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
638 (url-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
639 (setq exists (file-exists-p fname))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
640 (t nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
641 exists))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
642
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
643 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
644 (defun url-normalize-url (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
645 "Return a 'normalized' version of URL. This strips out default port
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
646 numbers, etc."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
647 (let (type data grok retval)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
648 (setq data (url-generic-parse-url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
649 type (url-type data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
650 (if (member type '("www" "about" "mailto" "mailserver" "info"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
651 (setq retval url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
652 (setq retval (url-recreate-url data)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
653 retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
654
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
655 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
656 (defun url-buffer-visiting (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
657 "Return the name of a buffer (if any) that is visiting URL."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
658 (setq url (url-normalize-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
659 (let ((bufs (buffer-list))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
660 (found nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
661 (if (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
662 (string-match "\\(.*\\)#" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
663 (error nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
664 (setq url (url-match url 1)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
665 (while (and bufs (not found))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
666 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
667 (set-buffer (car bufs))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
668 (setq found (if (and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
669 (not (string-match " \\*URL-?[0-9]*\\*" (buffer-name (car bufs))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
670 (memq major-mode '(url-mode w3-mode))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
671 (equal (url-view-url t) url)) (car bufs) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
672 bufs (cdr bufs))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
673 found))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
674
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
675 (defun url-file-size (url &rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
676 "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
677 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
678 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
679 (size -1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
680 (data nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
681 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
682 ((equal type "http") ; use head
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
683 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
684 (url-request-data nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
685 (url-working-buffer " *url-temp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
686 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
687 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
688 (setq size (or (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
689 (assoc "content-length" url-current-mime-headers))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
690 -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
691 (kill-buffer " *url-temp*"))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
692 ((member type '("ftp" "file")) ; file-attributes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
693 (let ((fname (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
694 (concat "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
695 (if (url-user urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
696 (concat (url-user urlobj) "@")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
697 "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
698 (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
699 (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
700 (url-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
701 (setq data (file-attributes fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
702 size (nth 7 data))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
703 (t nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
704 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
705 ((stringp size) (string-to-int size))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
706 ((integerp size) size)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
707 ((null size) -1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
708 (t -1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
709
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
710 (defun url-generate-new-buffer-name (start)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
711 "Create a new buffer name based on START."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
712 (let ((x 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
713 name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
714 (if (not (get-buffer start))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
715 start
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
716 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
717 (setq name (format "%s<%d>" start x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
718 (while (get-buffer name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
719 (setq x (1+ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
720 name (format "%s<%d>" start x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
721 name))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
722
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
723 (defun url-generate-unique-filename (&optional fmt)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
724 "Generate a unique filename in url-temporary-directory"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
725 (if (not fmt)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
726 (let ((base (format "url-tmp.%d" (user-real-uid)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
727 (fname "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
728 (x 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
729 (setq fname (format "%s%d" base x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
730 (while (file-exists-p (expand-file-name fname url-temporary-directory))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
731 (setq x (1+ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
732 fname (concat base (int-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
733 (expand-file-name fname url-temporary-directory))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
734 (let ((base (concat "url" (int-to-string (user-real-uid))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
735 (fname "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
736 (x 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
737 (setq fname (format fmt (concat base (int-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
738 (while (file-exists-p (expand-file-name fname url-temporary-directory))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
739 (setq x (1+ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
740 fname (format fmt (concat base (int-to-string x)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
741 (expand-file-name fname url-temporary-directory))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
742
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
743 (defun url-lazy-message (&rest args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
744 "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
745 Will not do anything if url-show-status is nil."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
746 (if (or (null url-show-status)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
747 (= url-lazy-message-time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
748 (setq url-lazy-message-time (nth 1 (current-time)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
749 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
750 (apply 'message args)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
751
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
752
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
753 (defun url-kill-process (proc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
754 "Kill the process PROC - knows about all the various gateway types,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
755 and acts accordingly."
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
756 (delete-process proc))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
757
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
758 (defun url-accept-process-output (proc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
759 "Allow any pending output from subprocesses to be read by Emacs.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
760 It is read into the process' buffers or given to their filter functions.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
761 Where possible, this will not exit until some output is received from PROC,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
762 or 1 second has elapsed."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
763 (accept-process-output proc 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
764
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
765 (defun url-process-status (proc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
766 "Return the process status of a url buffer"
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
767 (process-status proc))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
768
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
769
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
770 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
771 ;;; Miscellaneous functions
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
772 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
773 (defun url-setup-privacy-info ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
774 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
775 (setq url-system-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
776 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
777 ((or (eq url-privacy-level 'paranoid)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
778 (and (listp url-privacy-level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
779 (memq 'os url-privacy-level)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
780 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
781 ((eq system-type 'Apple-Macintosh) "Macintosh")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
782 ((eq system-type 'next-mach) "NeXT")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
783 ((eq system-type 'windows-nt) "Windows-NT; 32bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
784 ((eq system-type 'ms-windows) "Windows; 16bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
785 ((eq system-type 'ms-dos) "MS-DOS; 32bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
786 ((and (eq system-type 'vax-vms) (device-type))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
787 "VMS; X11")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
788 ((eq system-type 'vax-vms) "VMS; TTY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
789 ((eq (device-type) 'x) "X11")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
790 ((eq (device-type) 'ns) "NeXTStep")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
791 ((eq (device-type) 'pm) "OS/2")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
792 ((eq (device-type) 'win32) "Windows; 32bit")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
793 ((eq (device-type) 'tty) "(Unix?); TTY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
794 (t "UnkownPlatform")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
795
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
796 ;; Set up the entity definition for PGP and PEM authentication
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
797 (setq url-pgp/pem-entity (or url-pgp/pem-entity
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
798 user-mail-address
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
799 (format "%s@%s" (user-real-login-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
800 (system-name))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
801
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
802 (setq url-personal-mail-address (or url-personal-mail-address
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
803 url-pgp/pem-entity
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
804 user-mail-address))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
805
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
806 (if (or (memq url-privacy-level '(paranoid high))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
807 (and (listp url-privacy-level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
808 (memq 'email url-privacy-level)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
809 (setq url-personal-mail-address nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
810
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
811 (if (or (eq url-privacy-level 'paranoid)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
812 (and (listp url-privacy-level)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
813 (memq 'os url-privacy-level)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
814 (setq url-os-type nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
815 (let ((vers (emacs-version)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
816 (if (string-match "(\\([^, )]+\\))$" vers)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
817 (setq url-os-type (url-match vers 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
818 (setq url-os-type (symbol-name system-type))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
819
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
820 (defun url-handle-no-scheme (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
821 (let ((temp url-registered-protocols)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
822 (found nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
823 (while (and temp (not found))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
824 (if (and (not (member (car (car temp)) '("auto" "www")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
825 (string-match (concat "^" (car (car temp)) "\\.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
826 url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
827 (setq found t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
828 (setq temp (cdr temp))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
829 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
830 (found ; Found something like ftp.spry.com
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
831 (url-retrieve (concat (car (car temp)) "://" url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
832 ((string-match "^www\\." url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
833 (url-retrieve (concat "http://" url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
834 ((string-match "\\(\\.[^\\.]+\\)\\(\\.[^\\.]+\\)" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
835 ;; 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
836 (url-retrieve (concat "http://" url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
837 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
838 (url-retrieve (concat "http://www." url ".com"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
839
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
840 (defun url-setup-save-timer ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
841 "Reset the history list timer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
842 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
843 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
844 ((featurep 'itimer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
845 (if (get-itimer "url-history-saver")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
846 (delete-itimer (get-itimer "url-history-saver")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
847 (start-itimer "url-history-saver" 'url-write-global-history
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
848 url-global-history-save-interval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
849 url-global-history-save-interval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
850 ((fboundp 'run-at-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
851 (run-at-time url-global-history-save-interval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
852 url-global-history-save-interval
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
853 'url-write-global-history))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
854 (t 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 (defvar url-download-minor-mode nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
857
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
858 (defun url-download-minor-mode (on)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
859 (setq url-download-minor-mode (if on
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
860 (1+ (or url-download-minor-mode 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
861 (1- (or url-download-minor-mode 1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
862 (if (<= url-download-minor-mode 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
863 (setq url-download-minor-mode nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
864
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
865 (defun url-do-setup ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
866 "Do setup - this is to avoid conflict with user settings when URL is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
867 dumped with emacs."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
868 (if url-setup-done
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
869 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 (add-minor-mode 'url-download-minor-mode " Webbing" nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
872
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
873 ;; Make OS/2 happy
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
874 (setq tcp-binary-process-input-services
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
875 (append '("http" "80")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
876 tcp-binary-process-input-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
877
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
878 ;; Register all the protocols we can handle
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
879 (url-register-protocol 'file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
880 (url-register-protocol 'ftp nil nil "21")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
881 (url-register-protocol 'gopher nil nil "70")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
882 (url-register-protocol 'http nil nil "80")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
883 (url-register-protocol 'https nil nil "443")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
884 (url-register-protocol 'nfs nil nil "2049")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
885 (url-register-protocol 'info nil 'url-identity-expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
886 (url-register-protocol 'mailserver nil 'url-identity-expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
887 (url-register-protocol 'finger nil 'url-identity-expander "79")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
888 (url-register-protocol 'mailto nil 'url-identity-expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
889 (url-register-protocol 'news nil 'url-identity-expander "119")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
890 (url-register-protocol 'nntp nil 'url-identity-expander "119")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
891 (url-register-protocol 'irc nil 'url-identity-expander "6667")
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
892 (url-register-protocol 'data nil 'url-identity-expander)
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
893 (url-register-protocol 'rlogin)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
894 (url-register-protocol 'shttp nil nil "80")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
895 (url-register-protocol 'telnet)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
896 (url-register-protocol 'tn3270)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
897 (url-register-protocol 'wais)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
898 (url-register-protocol 'x-exec)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
899 (url-register-protocol 'proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
900 (url-register-protocol 'auto 'url-handle-no-scheme)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
901
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
902 ;; Register all the authentication schemes we can handle
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
903 (url-register-auth-scheme "basic" nil 4)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
904 (url-register-auth-scheme "digest" nil 7)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
905
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
906 ;; Filename handler stuff for emacsen that support it
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
907 (url-setup-file-name-handlers)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
908
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
909 (setq url-cookie-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
910 (or url-cookie-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
911 (expand-file-name "~/.w3cookies")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
912
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
913 (setq url-global-history-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
914 (or url-global-history-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
915 (and (memq system-type '(ms-dos ms-windows))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
916 (expand-file-name "~/mosaic.hst"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
917 (and (memq system-type '(axp-vms vax-vms))
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 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
920 (expand-file-name "~/.mosaic-global-history")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
921 (error nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
922
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
923 ;; 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
924 ;; for URL completion, etc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
925 (if (and url-global-history-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
926 (file-exists-p url-global-history-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
927 (url-parse-global-history))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
928
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
929 ;; Setup save timer
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
930 (and url-global-history-save-interval (url-setup-save-timer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
931
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
932 (if (and url-cookie-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
933 (file-exists-p url-cookie-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
934 (url-cookie-parse-file url-cookie-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
935
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
936 ;; Read in proxy gateways
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
937 (let ((noproxy (and (not (assoc "no_proxy" url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
938 (or (getenv "NO_PROXY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
939 (getenv "no_PROXY")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
940 (getenv "no_proxy")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
941 (if noproxy
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
942 (setq url-proxy-services
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
943 (cons (cons "no_proxy"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
944 (concat "\\("
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
945 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
946 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
947 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
948 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
949 ((= x ?,) "\\|")
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 ?.) (regexp-quote "."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
952 ((= x ?*) ".*")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
953 ((= x ??) ".")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
954 (t (char-to-string x)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
955 noproxy "") "\\)"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
956 url-proxy-services))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
957
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
958 ;; Set the url-use-transparent with decent defaults
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
959 (if (not (eq (device-type) 'tty))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
960 (setq url-use-transparent nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
961 (and url-use-transparent (require 'transparent))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
962
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
963 ;; Set the password entry funtion based on user defaults or guess
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
964 ;; based on which remote-file-access package they are using.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
965 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
966 (url-passwd-entry-func nil) ; Already been set
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
967 ((boundp 'read-passwd) ; Use secure password if available
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
968 (setq url-passwd-entry-func 'read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
969 ((or (featurep 'efs) ; Using EFS
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
970 (featurep 'efs-auto)) ; or autoloading efs
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
971 (if (not (fboundp 'read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
972 (autoload 'read-passwd "passwd" "Read in a password" nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
973 (setq url-passwd-entry-func 'read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
974 ((or (featurep 'ange-ftp) ; Using ange-ftp
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
975 (and (boundp 'file-name-handler-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
976 (not (string-match "Lucid" (emacs-version)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
977 (setq url-passwd-entry-func 'ange-ftp-read-passwd))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
978 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
979 (url-warn 'security
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
980 "Can't determine how to read passwords, winging it.")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
981
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
982 ;; Set up the news service if they haven't done so
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
983 (setq url-news-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
984 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
985 (url-news-server url-news-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
986 ((and (boundp 'gnus-default-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
987 (not (equal "" gnus-default-nntp-server)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
988 gnus-default-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
989 ((and (boundp 'gnus-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
990 (not (null gnus-nntp-server))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
991 (not (equal "" gnus-nntp-server)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
992 gnus-nntp-server)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
993 ((and (boundp 'nntp-server-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
994 (not (null nntp-server-name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
995 (not (equal "" nntp-server-name)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
996 nntp-server-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
997 ((getenv "NNTPSERVER") (getenv "NNTPSERVER"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
998 (t "news")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
999
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1000 ;; 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
1001 (or url-mime-accept-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1002 (setq url-mime-accept-string (url-parse-viewer-types)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1003 (or url-mime-encoding-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1004 (setq url-mime-encoding-string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1005 (mapconcat 'car
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1006 mm-content-transfer-encodings
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1007 ", ")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1008
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1009 (url-setup-privacy-info)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1010 (run-hooks 'url-load-hook)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1011 (setq url-setup-done t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1012
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1013 (defun url-cache-file-writable-p (file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1014 "Follows the documentation of file-writable-p, unlike file-writable-p."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1015 (and (file-writable-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1016 (if (file-exists-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1017 (not (file-directory-p file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1018 (file-directory-p (file-name-directory file)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1019
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1020 (defun url-prepare-cache-for-file (file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1021 "Makes it possible to cache data in FILE.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1022 Creates any necessary parent directories, deleting any non-directory files
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1023 that would stop this. Returns nil if parent directories can not be
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1024 created. If FILE already exists as a non-directory, it changes
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1025 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
1026 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
1027 FILE already exists as a directory. Otherwise, returns t, indicating that
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1028 FILE can be created or overwritten."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1029
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1030 ;; COMMENT: We don't delete directories because that requires
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1031 ;; recursively deleting the directories's contents, which might
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1032 ;; eliminate a substantial portion of the cache.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1033
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1034 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1035 ((url-cache-file-writable-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1036 t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1037 ((file-directory-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1038 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1039 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1040 (catch 'upcff-tag
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1041 (let ((dir (file-name-directory file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1042 dir-parent dir-last-component)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1043 (if (string-equal dir file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1044 ;; *** Should I have a warning here?
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1045 ;; FILE must match a pattern like /foo/bar/, indicating it is a
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1046 ;; name only suitable for a directory. So presume we won't be
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1047 ;; able to overwrite FILE and return nil.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1048 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1049
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1050 ;; Make sure the containing directory exists, or throw a failure
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1051 ;; if we can't create it.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1052 (if (file-directory-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1053 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1054 (or (fboundp 'make-directory)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1055 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1056 (make-directory dir t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1057 ;; make-directory silently fails if there is an obstacle, so
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1058 ;; we must verify its results.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1059 (if (file-directory-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1060 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1061 ;; Look at prefixes of the path to find the obstacle that is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1062 ;; stopping us from making the directory. Unfortunately, there
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1063 ;; is no portable function in Emacs to find the parent directory
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1064 ;; of a *directory*. So this code may not work on VMS.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1065 (while (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1066 (if (eq ?/ (aref dir (1- (length dir))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1067 (setq dir (substring dir 0 -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1068 ;; Maybe we're on VMS where the syntax is different.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1069 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1070 (setq dir-parent (file-name-directory dir))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1071 (not (file-directory-p dir-parent)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1072 (setq dir dir-parent))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1073 ;; We have found the longest path prefix that exists as a
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1074 ;; directory. Deal with any obstacles in this directory.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1075 (if (file-exists-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1076 (condition-case nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1077 (delete-file dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1078 (error (throw 'upcff-tag nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1079 (if (file-exists-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1080 (throw 'upcff-tag nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1081 ;; Try making the directory again.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1082 (setq dir (file-name-directory file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1083 (make-directory dir t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1084 (or (file-directory-p dir)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1085 (throw 'upcff-tag nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1086
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1087 ;; The containing directory exists. Let's see if there is
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1088 ;; something in the way in this directory.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1089 (if (url-cache-file-writable-p file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1090 (throw 'upcff-tag t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1091 (condition-case nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1092 (delete-file file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1093 (error (throw 'upcff-tag nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1094
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1095 ;; The return value, if we get this far.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1096 (url-cache-file-writable-p file))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1097
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1098 (defun url-store-in-cache (&optional buff)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1099 "Store buffer BUFF in the cache"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1100 (if (or (not (get-buffer buff))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1101 (member url-current-type '("www" "about" "https" "shttp"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1102 "news" "mailto"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1103 (and (member url-current-type '("file" "ftp" nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1104 (not url-current-server))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1105 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1106 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1107 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1108 (and buff (set-buffer buff))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1109 (let* ((fname (url-create-cached-filename (url-view-url t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1110 (fname-hdr (concat (if (memq system-type '(ms-windows ms-dos os2))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1111 (url-file-extension fname t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1112 fname) ".hdr"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1113 (info (mapcar (function (lambda (var)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1114 (cons (symbol-name var)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1115 (symbol-value var))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1116 '( url-current-content-length
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1117 url-current-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1118 url-current-isindex
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1119 url-current-mime-encoding
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1120 url-current-mime-headers
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1121 url-current-mime-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1122 url-current-port
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1123 url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1124 url-current-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1125 url-current-user
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1126 ))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1127 (cond ((and (url-prepare-cache-for-file fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1128 (url-prepare-cache-for-file fname-hdr))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1129 (write-region (point-min) (point-max) fname nil 5)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1130 (set-buffer (get-buffer-create " *cache-tmp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1131 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1132 (insert "(setq ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1133 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1134 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1135 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1136 (insert (car x) " "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1137 (cond ((null (setq x (cdr x))) "nil")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1138 ((stringp x) (prin1-to-string x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1139 ((listp x) (concat "'" (prin1-to-string x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1140 ((numberp x) (int-to-string x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1141 (t "'???")) "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1142 info)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1143 (insert ")\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1144 (write-region (point-min) (point-max) fname-hdr nil 5)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1145
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1146
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1147 (defun url-is-cached (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1148 "Return non-nil if the URL is cached."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1149 (let* ((fname (url-create-cached-filename url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1150 (attribs (file-attributes fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1151 (and fname ; got a filename
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1152 (file-exists-p fname) ; file exists
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1153 (not (eq (nth 0 attribs) t)) ; Its not a directory
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1154 (nth 5 attribs)))) ; Can get last mod-time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1155
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1156 (defun url-create-cached-filename-using-md5 (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1157 (if url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1158 (expand-file-name (md5 url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1159 (concat url-temporary-directory "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1160 (user-real-login-name)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1161
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1162 (defun url-create-cached-filename (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1163 "Return a filename in the local cache for URL"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1164 (if url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1165 (let* ((url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1166 (urlobj (if (vectorp url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1167 url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1168 (url-generic-parse-url url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1169 (protocol (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1170 (hostname (url-host urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1171 (host-components
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1172 (cons
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1173 (user-real-login-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1174 (cons (or protocol "file")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1175 (nreverse
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1176 (delq nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1177 (mm-string-to-tokens
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1178 (or hostname "localhost") ?.))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1179 (fname (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1180 (if (and fname (/= (length fname) 0) (= (aref fname 0) ?/))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1181 (setq fname (substring fname 1 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1182 (if fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1183 (let ((slash nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1184 (setq fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1185 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1186 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1187 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1188 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1189 ((and (= ?/ x) slash)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1190 (setq slash nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1191 "%2F")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1192 ((= ?/ x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1193 (setq slash t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1194 "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1195 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1196 (setq slash nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1197 (char-to-string x))))) fname ""))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1198
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1199 (if (and fname (memq system-type '(ms-windows ms-dos windows-nt))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1200 (string-match "\\([A-Za-z]\\):[/\\]" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1201 (setq fname (concat (url-match fname 1) "/"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1202 (substring fname (match-end 0)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1203
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1204 (setq fname (and fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1205 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1206 (function (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1207 (if (= x ?~) "" (char-to-string x))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1208 fname ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1209 fname (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1210 ((null fname) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1211 ((or (string= "" fname) (string= "/" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1212 url-directory-index-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1213 ((= (string-to-char fname) ?/)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1214 (if (string= (substring fname -1 nil) "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1215 (concat fname url-directory-index-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1216 (substring fname 1 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1217 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1218 (if (string= (substring fname -1 nil) "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1219 (concat fname url-directory-index-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1220 fname))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1221
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1222 ;; Honor hideous 8.3 filename limitations on dos and windows
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1223 ;; 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
1224 (if (and fname (memq system-type '(ms-windows ms-dos)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1225 (let ((base (url-file-extension fname t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1226 (ext (url-file-extension fname nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1227 (setq fname (concat (substring base 0 (min 8 (length base)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1228 (substring ext 0 (min 4 (length ext)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1229 (setq host-components
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1230 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1231 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1232 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1233 (if (> (length x) 8)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1234 (concat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1235 (substring x 0 8) "."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1236 (substring x 8 (min (length x) 11)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1237 x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1238 host-components))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1239
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1240 (and fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1241 (expand-file-name fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1242 (expand-file-name
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1243 (mapconcat 'identity host-components "/")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1244 url-temporary-directory))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1245
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1246 (defun url-extract-from-cache (fnam)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1247 "Extract FNAM from the local disk cache"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1248 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1249 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1250 (setq url-current-mime-viewer nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1251 (insert-file-contents-literally fnam)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1252 (load (concat (if (memq system-type '(ms-windows ms-dos os2))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1253 (url-file-extension fnam t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1254 fnam) ".hdr") t t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1255
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1256 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1257 (defun url-get-url-at-point (&optional pt)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1258 "Get the URL closest to point, but don't change your
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1259 position. Has a preference for looking backward when not
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1260 directly on a symbol."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1261 ;; Not at all perfect - point must be right in the name.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1262 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1263 (if pt (goto-char pt))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1264 (let ((filename-chars "%.?@a-zA-Z0-9---()_/:~=&") start url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1265 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1266 ;; first see if you're just past a filename
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1267 (if (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1268 (if (looking-at "[] \t\n[{}()]") ; whitespace or some parens
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1269 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1270 (skip-chars-backward " \n\t\r({[]})")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1271 (if (not (bobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1272 (backward-char 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1273 (if (string-match (concat "[" filename-chars "]")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1274 (char-to-string (following-char)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1275 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1276 (skip-chars-backward 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 (skip-chars-forward filename-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1279 (setq start (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1280 (setq url (if (fboundp 'buffer-substring-no-properties)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1281 (buffer-substring-no-properties start (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1282 (buffer-substring start (point)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1283 (if (string-match "^URL:" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1284 (setq url (substring url 4 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1285 (if (string-match "\\.$" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1286 (setq url (substring url 0 -1)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1287 (if (not (string-match url-nonrelative-link url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1288 (setq url nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1289 url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1290
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1291 (defun url-eat-trailing-space (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1292 ;; Remove spaces/tabs at the end of a string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1293 (let ((y (1- (length x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1294 (skip-chars (list ? ?\t ?\n)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1295 (while (and (>= y 0) (memq (aref x y) skip-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1296 (setq y (1- y)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1297 (substring x 0 (1+ y))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1298
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1299 (defun url-strip-leading-spaces (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1300 ;; Remove spaces at the front of a string
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1301 (let ((y (1- (length x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1302 (z 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1303 (skip-chars (list ? ?\t ?\n)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1304 (while (and (<= z y) (memq (aref x z) skip-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1305 (setq z (1+ z)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1306 (substring x z nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1307
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1308 (defun url-convert-newlines-to-spaces (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1309 "Convert newlines and carriage returns embedded in a string into spaces,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1310 and swallow following whitespace.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1311 The argument is not side-effected, but may be returned by this function."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1312 (if (string-match "[\n\r]+\\s-*" x) ; [\\n\\r\\t ]
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1313 (concat (substring x 0 (match-beginning 0)) " "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1314 (url-convert-newlines-to-spaces
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1315 (substring x (match-end 0))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1316 x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1317
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1318 ;; Test cases
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1319 ;; (url-convert-newlines-to-spaces "foo bar") ; nothing happens
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1320 ;; (url-convert-newlines-to-spaces "foo\n \t bar") ; whitespace converted
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1321 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1322 ;; This implementation doesn't mangle the match-data, is fast, and doesn't
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1323 ;; create garbage, but it leaves whitespace.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1324 ;; (defun url-convert-newlines-to-spaces (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1325 ;; "Convert newlines and carriage returns embedded in a string into spaces.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1326 ;; The string is side-effected, then returned."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1327 ;; (let ((i 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1328 ;; (limit (length x)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1329 ;; (while (< i limit)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1330 ;; (if (or (= ?\n (aref x i))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1331 ;; (= ?\r (aref x i)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1332 ;; (aset x i ? ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1333 ;; (setq i (1+ i)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1334 ;; x))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1335
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1336 (defun url-expand-file-name (url &optional default)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1337 "Convert URL to a fully specified URL, and canonicalize it.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1338 Second arg DEFAULT is a URL to start with if URL is relative.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1339 If DEFAULT is nil or missing, the current buffer's URL is used.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1340 Path components that are `.' are removed, and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1341 path components followed by `..' are removed, along with the `..' itself."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1342 (if url
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1343 (setq url (mapconcat (function (lambda (x)
86
364816949b59 Import from CVS: tag r20-0b93
cvs
parents: 82
diff changeset
1344 (if (memq x '(? ?\n ?\r))
82
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
1345 ""
6a378aca36af Import from CVS: tag r20-0b91
cvs
parents: 14
diff changeset
1346 (char-to-string x))))
14
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1347 (url-strip-leading-spaces
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1348 (url-eat-trailing-space url)) "")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1349 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1350 ((null url) nil) ; Something hosed! Be graceful
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1351 ((string-match "^#" url) ; Offset link, use it raw
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1352 url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1353 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1354 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1355 (inhibit-file-name-handlers t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1356 (defobj (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1357 ((vectorp default) default)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1358 (default (url-generic-parse-url default))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1359 (url-current-object url-current-object)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1360 (t (url-generic-parse-url (url-view-url t)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1361 (expander (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1362 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1363 (assoc (or (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1364 (url-type defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1365 url-registered-protocols)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1366 (if (string-match "^//" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1367 (setq urlobj (url-generic-parse-url (concat (url-type defobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1368 url))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1369 (if (fboundp expander)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1370 (funcall expander urlobj defobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1371 (message "Unknown URL scheme: %s" (or (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1372 (url-type defobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1373 (url-identity-expander urlobj defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1374 (url-recreate-url urlobj)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1375
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1376 (defun url-default-expander (urlobj defobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1377 ;; The default expansion routine - urlobj is modified by side effect!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1378 (url-set-type urlobj (or (url-type urlobj) (url-type defobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1379 (url-set-port urlobj (or (url-port urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1380 (and (string= (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1381 (url-type defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1382 (url-port defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1383 (if (not (string= "file" (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1384 (url-set-host urlobj (or (url-host urlobj) (url-host defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1385 (if (string= "ftp" (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1386 (url-set-user urlobj (or (url-user urlobj) (url-user defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1387 (if (string= (url-filename urlobj) "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1388 (url-set-filename urlobj "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1389 (if (string-match "^/" (url-filename urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1390 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1391 (url-set-filename urlobj
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1392 (url-remove-relative-links
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1393 (concat (url-basepath (url-filename defobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1394 (url-filename urlobj))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1395
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1396 (defun url-identity-expander (urlobj defobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1397 (url-set-type urlobj (or (url-type urlobj) (url-type defobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1398
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1399 (defconst url-unreserved-chars
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1400 '(
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1401 ?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
1402 ?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
1403 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1404 ?$ ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\) ?,)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1405 "A list of characters that are _NOT_ reserve in the URL spec.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1406 This is taken from draft-fielding-url-syntax-02.txt - check your local
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1407 internet drafts directory for a copy.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1408
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1409 (defun url-hexify-string (str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1410 "Escape characters in a string"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1411 (mapconcat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1412 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1413 (lambda (char)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1414 (if (not (memq char url-unreserved-chars))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1415 (if (< char 16)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1416 (upcase (format "%%0%x" char))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1417 (upcase (format "%%%x" char)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1418 (char-to-string char))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1419 (mule-decode-string str) ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1420
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1421 (defun url-make-sequence (start end)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1422 "Make a sequence (list) of numbers from START to END"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1423 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1424 ((= start end) '())
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1425 ((> start end) '())
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1426 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1427 (let ((sqnc '()))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1428 (while (<= start end)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1429 (setq sqnc (cons end sqnc)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1430 end (1- end)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1431 sqnc))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1432
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1433 (defun url-file-extension (fname &optional x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1434 "Return the filename extension of FNAME. If optional variable X is t,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1435 then return the basename of the file with the extension stripped off."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1436 (if (and fname (string-match "\\.[^./]+$" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1437 (if x (substring fname 0 (match-beginning 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1438 (substring fname (match-beginning 0) nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1439 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1440 ;; If fname has no extension, and x then return fname itself instead of
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1441 ;; nothing. When caching it allows the correct .hdr file to be produced
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1442 ;; for filenames without extension.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1443 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1444 (if x
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1445 fname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1446 "")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1447
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1448 (defun url-basepath (file &optional x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1449 "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
1450 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1451 ((null file) "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1452 (x (file-name-nondirectory file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1453 (t (file-name-directory file))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1454
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1455 (defun url-parse-query-string (query &optional downcase)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1456 (let (retval pairs cur key val)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1457 (setq pairs (split-string query "&"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1458 (while pairs
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1459 (setq cur (car pairs)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1460 pairs (cdr pairs))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1461 (if (not (string-match "=" cur))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1462 nil ; Grace
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1463 (setq key (url-unhex-string (substring cur 0 (match-beginning 0)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1464 val (url-unhex-string (substring cur (match-end 0) nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1465 (if downcase
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1466 (setq key (downcase key)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1467 (setq cur (assoc key retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1468 (if cur
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1469 (setcdr cur (cons val (cdr cur)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1470 (setq retval (cons (list key val) retval)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1471 retval))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1472
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1473 (defun url-unhex (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1474 (if (> x ?9)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1475 (if (>= x ?a)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1476 (+ 10 (- x ?a))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1477 (+ 10 (- x ?A)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1478 (- x ?0)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1479
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1480 (defun url-unhex-string (str &optional allow-newlines)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1481 "Remove %XXX embedded spaces, etc in a url.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1482 If optional second argument ALLOW-NEWLINES is non-nil, then allow the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1483 decoding of carriage returns and line feeds in the string, which is normally
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1484 forbidden in URL encoding."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1485 (setq str (or str ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1486 (let ((tmp "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1487 (case-fold-search t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1488 (while (string-match "%[0-9a-f][0-9a-f]" str)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1489 (let* ((start (match-beginning 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1490 (ch1 (url-unhex (elt str (+ start 1))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1491 (code (+ (* 16 ch1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1492 (url-unhex (elt str (+ start 2))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1493 (setq tmp (concat
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1494 tmp (substring str 0 start)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1495 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1496 (allow-newlines
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1497 (char-to-string code))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1498 ((or (= code ?\n) (= code ?\r))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1499 " ")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1500 (t (char-to-string code))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1501 str (substring str (match-end 0)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1502 (setq tmp (concat tmp str))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1503 tmp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1504
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1505 (defun url-clean-text ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1506 "Clean up a buffer, removing any excess garbage from a gateway mechanism,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1507 and decoding any MIME content-transfer-encoding used."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1508 (set-buffer url-working-buffer)
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 "Connection closed by.*" "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1511 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1512 (url-replace-regexp "Process WWW.*" ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1513
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1514 (defun url-remove-compressed-extensions (filename)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1515 (while (assoc (url-file-extension filename) url-uncompressor-alist)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1516 (setq filename (url-file-extension filename t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1517 filename)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1518
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1519 (defun url-uncompress ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1520 "Do any necessary uncompression on `url-working-buffer'"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1521 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1522 (if (not url-inhibit-uncompression)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1523 (let* ((extn (url-file-extension url-current-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1524 (decoder nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1525 (code-1 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1526 (assoc "content-transfer-encoding"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1527 url-current-mime-headers)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1528 (code-2 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1529 (assoc "content-encoding" url-current-mime-headers)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1530 (code-3 (and (not code-1) (not code-2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1531 (cdr-safe (assoc extn url-uncompressor-alist))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1532 (done nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1533 (default-process-coding-system
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1534 (cons mule-no-coding-system mule-no-coding-system)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1535 (mapcar
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1536 (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1537 (lambda (code)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1538 (setq decoder (and (not (member code done))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1539 (cdr-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1540 (assoc code mm-content-transfer-encodings)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1541 done (cons code done))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1542 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1543 ((null decoder) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1544 ((stringp decoder)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1545 (message "Decoding...")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1546 (call-process-region (point-min) (point-max) decoder t t nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1547 (message "Decoding... done."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1548 ((listp decoder)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1549 (apply 'call-process-region (point-min) (point-max)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1550 (car decoder) t t nil (cdr decoder)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1551 ((and (symbolp decoder) (fboundp decoder))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1552 (message "Decoding...")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1553 (funcall decoder (point-min) (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1554 (message "Decoding... done."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1555 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1556 (error "Bad entry for %s in `mm-content-transfer-encodings'"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1557 code)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1558 (list code-1 code-2 code-3))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1559 (set-buffer-modified-p nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1560
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1561 (defun url-filter (proc string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1562 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1563 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1564 (insert string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1565 (if (string-match "\nConnection closed by" string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1566 (progn (set-process-filter proc nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1567 (url-sentinel proc string))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1568 string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1569
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1570 (defun url-default-callback (buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1571 (url-download-minor-mode nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1572 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1573 ((save-excursion (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1574 (and url-current-callback-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1575 (fboundp url-current-callback-func)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1576 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1577 (save-window-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1578 (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1579 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1580 ((listp url-current-callback-data)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1581 (apply url-current-callback-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1582 url-current-callback-data))
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 (funcall url-current-callback-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1585 url-current-callback-data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1586 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1587 (funcall url-current-callback-func))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1588 ((fboundp 'w3-sentinel)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1589 (set-variable 'w3-working-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1590 (w3-sentinel))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1591 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1592 (message "Retrieval for %s complete." buf))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1593
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1594 (defun url-sentinel (proc string)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1595 (let* ((buf (process-buffer proc))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1596 (url-working-buffer (and buf (get-buffer buf)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1597 status)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1598 (if (not url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1599 (url-warn 'url (format "Process %s completed with no buffer!" proc))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1600 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1601 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1602 (remove-hook 'after-change-functions 'url-after-change-function)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1603 (if url-be-asynchronous
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1604 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1605 (widen)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1606 (url-clean-text)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1607 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1608 ((and (null proc) (not url-working-buffer)) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1609 ((url-mime-response-p)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1610 (setq status (url-parse-mime-headers))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1611 (if (not url-current-mime-type)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1612 (setq url-current-mime-type (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1613 (url-file-extension
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1614 url-current-file)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1615 (if (member status '(401 301 302 303 204))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1616 nil
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1617 (funcall url-default-retrieval-proc (buffer-name url-working-buffer))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1618
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1619 (defun url-remove-relative-links (name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1620 ;; Strip . and .. from pathnames
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1621 (let ((new (if (not (string-match "^/" name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1622 (concat "/" name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1623 name)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1624 (while (string-match "/\\(\\./\\)" new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1625 (setq new (concat (substring new 0 (match-beginning 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1626 (substring new (match-end 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1627 (while (string-match "/\\([^/]*/\\.\\./\\)" new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1628 (setq new (concat (substring new 0 (match-beginning 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1629 (substring new (match-end 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1630 (while (string-match "^/\\.\\.\\(/\\)" new)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1631 (setq new (substring new (match-beginning 1) nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1632 new))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1633
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1634 (defun url-truncate-url-for-viewing (url &optional width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1635 "Return a shortened version of URL that is WIDTH characters or less wide.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1636 WIDTH defaults to the current frame width."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1637 (let* ((fr-width (or width (frame-width)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1638 (str-width (length url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1639 (tail (file-name-nondirectory url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1640 (fname nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1641 (modified 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1642 (urlobj nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1643 ;; The first thing that can go are the search strings
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1644 (if (and (>= str-width fr-width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1645 (string-match "?" url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1646 (setq url (concat (substring url 0 (match-beginning 0)) "?...")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1647 str-width (length url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1648 tail (file-name-nondirectory url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1649 (if (< str-width fr-width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1650 nil ; Hey, we are done!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1651 (setq urlobj (url-generic-parse-url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1652 fname (url-filename urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1653 fr-width (- fr-width 4))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1654 (while (and (>= str-width fr-width)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1655 (string-match "/" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1656 (setq fname (substring fname (match-end 0) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1657 modified (1+ modified))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1658 (url-set-filename urlobj fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1659 (setq url (url-recreate-url urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1660 str-width (length url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1661 (if (> modified 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1662 (setq fname (concat "/.../" fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1663 (setq fname (concat "/" fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1664 (url-set-filename urlobj fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1665 (setq url (url-recreate-url urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1666 url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1667
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1668 (defun url-view-url (&optional no-show)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1669 "View the current document's URL. Optional argument NO-SHOW means
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1670 just return the URL, don't show it in the minibuffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1671 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1672 (let ((url ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1673 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1674 ((equal url-current-type "gopher")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1675 (setq url (format "%s://%s%s/%s"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1676 url-current-type url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1677 (if (or (null url-current-port)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1678 (string= "70" url-current-port)) ""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1679 (concat ":" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1680 url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1681 ((equal url-current-type "news")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1682 (setq url (concat "news:"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1683 (if (not (equal url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1684 url-news-server))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1685 (concat "//" url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1686 (if (or (null url-current-port)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1687 (string= "119" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1688 ""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1689 (concat ":" url-current-port)) "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1690 url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1691 ((equal url-current-type "about")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1692 (setq url (concat "about:" url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1693 ((member url-current-type '("http" "shttp" "https"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1694 (setq url (format "%s://%s%s/%s" url-current-type url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1695 (if (or (null url-current-port)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1696 (string= "80" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1697 ""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1698 (concat ":" url-current-port))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1699 (if (and url-current-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1700 (= ?/ (string-to-char url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1701 (substring url-current-file 1 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1702 url-current-file))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1703 ((equal url-current-type "ftp")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1704 (setq url (format "%s://%s%s/%s" url-current-type
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1705 (if (and url-current-user
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1706 (not (string= "anonymous" url-current-user)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1707 (concat url-current-user "@") "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1708 url-current-server
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1709 (if (and url-current-file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1710 (= ?/ (string-to-char url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1711 (substring url-current-file 1 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1712 url-current-file))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1713 ((and (member url-current-type '("file" nil)) url-current-file)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1714 (setq url (format "file:%s" url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1715 ((equal url-current-type "www")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1716 (setq url (format "www:/%s/%s" url-current-server url-current-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1717 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1718 (setq url nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1719 (if (not no-show) (message "%s" url) url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1720
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1721 (defun url-parse-Netscape-history (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1722 ;; Parse a Netscape/X style global history list.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1723 (let (pos ; Position holder
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1724 url ; The URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1725 time) ; Last time accessed
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1726 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1727 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1728 (skip-chars-forward "\n \t") ; Skip past the tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1729 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1730 :test 'equal))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1731 ;; Here we will go to the end of the line and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1732 ;; skip back over a token, since we might run
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1733 ;; into spaces in URLs, depending on how much
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1734 ;; smarter netscape is than the old XMosaic :)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1735 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1736 (setq pos (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1737 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1738 (skip-chars-backward "^ \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1739 (skip-chars-backward " \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1740 (setq url (buffer-substring pos (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1741 pos (1+ (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 time (buffer-substring pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1744 (skip-chars-forward "\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1745 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1746 (cl-puthash url time url-global-history-hash-table))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1747
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1748 (defun url-parse-Mosaic-history-v1 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1749 ;; Parse an NCSA Mosaic/X style global history list
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1750 (goto-char (point-min))
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 tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1753 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1754 (skip-chars-forward "\n \t") ; Skip past the second tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1755 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1756 :test 'equal))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1757 (let (pos ; Temporary position holder
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1758 bol ; Beginning-of-line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1759 url ; URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1760 time ; Time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1761 last-end ; Last ending point
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1762 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1763 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1764 (setq bol (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1765 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1766 (setq pos (point)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1767 last-end (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1768 (skip-chars-backward "^ \t" bol) ; Skip over year
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 time
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 day #
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 month
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1775 (skip-chars-backward " \t" bol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1776 (skip-chars-backward "^ \t" bol) ; Skip over day abbrev.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1777 (if (bolp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1778 nil ; Malformed entry!!! Ack! Bailout!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1779 (setq time (buffer-substring pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1780 (skip-chars-backward " \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1781 (setq pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1782 (beginning-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1783 (setq url (buffer-substring (point) pos))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1784 (goto-char (min (1+ last-end) (point-max))) ; Goto next line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1785 (if (/= (length url) 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1786 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1787 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1788 (cl-puthash url time url-global-history-hash-table))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1789
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1790 (defun url-parse-Mosaic-history-v2 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1791 ;; Parse an NCSA Mosaic/X style global history list (version 2)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1792 (goto-char (point-min))
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 tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1795 (skip-chars-forward "^\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1796 (skip-chars-forward "\n \t") ; Skip past the second tag line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1797 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1798 :test 'equal))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1799 (let (pos ; Temporary position holder
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1800 bol ; Beginning-of-line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1801 url ; URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1802 time ; Time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1803 last-end ; Last ending point
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1804 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1805 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1806 (setq bol (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1807 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1808 (setq pos (point)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1809 last-end (point))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1810 (skip-chars-backward "^ \t" bol) ; Skip over time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1811 (if (bolp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1812 nil ; Malformed entry!!! Ack! Bailout!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1813 (setq time (buffer-substring pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1814 (skip-chars-backward " \t")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1815 (setq pos (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1816 (beginning-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1817 (setq url (buffer-substring (point) pos))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1818 (goto-char (min (1+ last-end) (point-max))) ; Goto next line
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1819 (if (/= (length url) 0)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1820 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1821 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1822 (cl-puthash url time url-global-history-hash-table))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1823
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1824 (defun url-parse-Emacs-history (&optional fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1825 ;; Parse out the Emacs-w3 global history file for completion, etc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1826 (or fname (setq fname (expand-file-name url-global-history-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1827 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1828 ((not (file-exists-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1829 (message "%s does not exist." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1830 ((not (file-readable-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1831 (message "%s is unreadable." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1832 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1833 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1834 (load fname nil t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1835 (error (message "Could not load %s" fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1836 (if (boundp 'url-global-history-completion-list)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1837 ;; Hey! Automatic conversion of old format!
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1838 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1839 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1840 :test 'equal)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1841 url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1842 (mapcar (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1843 (lambda (x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1844 (cl-puthash (car x) (cdr x)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1845 url-global-history-hash-table)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1846 (symbol-value 'url-global-history-completion-list)))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1847
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1848 (defun url-parse-global-history (&optional fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1849 ;; Parse out the mosaic global history file for completions, etc.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1850 (or fname (setq fname (expand-file-name url-global-history-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1851 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1852 ((not (file-exists-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1853 (message "%s does not exist." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1854 ((not (file-readable-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1855 (message "%s is unreadable." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1856 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1857 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1858 (set-buffer (get-buffer-create " *url-tmp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1859 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1860 (insert-file-contents-literally fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1861 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1862 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1863 ((looking-at "(setq") (url-parse-Emacs-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1864 ((looking-at "ncsa-mosaic-.*-1$") (url-parse-Mosaic-history-v1 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1865 ((looking-at "ncsa-mosaic-.*-2$") (url-parse-Mosaic-history-v2 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1866 ((or (looking-at "MCOM-") (looking-at "netscape"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1867 (url-parse-Netscape-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1868 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1869 (url-warn 'url (format "Cannot deduce type of history file: %s"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1870 fname))))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1871
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1872 (defun url-write-Emacs-history (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1873 ;; Write an Emacs-w3 style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1874 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1875 (let ((count 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1876 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1877 (lambda (key value)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1878 (setq count (1+ count))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1879 (insert "(cl-puthash \"" key "\""
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1880 (if (not (stringp value)) " '" "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1881 (prin1-to-string value)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1882 " url-global-history-hash-table)\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1883 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1884 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1885 (insert (format
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1886 "(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
1887 (/ count 4)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1888 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1889 (insert "\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1890 (write-file fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1891
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1892 (defun url-write-Netscape-history (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1893 ;; Write a Netscape-style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1894 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1895 (let ((last-valid-time "785305714")) ; Picked out of thin air,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1896 ; in case first in assoc list
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1897 ; doesn't have a valid time
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1898 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1899 (insert "MCOM-Global-history-file-1\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1900 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1901 (lambda (url time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1902 (if (or (not (stringp time)) (string-match " \t" time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1903 (setq time last-valid-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1904 (setq last-valid-time time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1905 (insert url " " time "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1906 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1907 (write-file fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1908
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1909 (defun url-write-Mosaic-history-v1 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1910 ;; Write a Mosaic/X-style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1911 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1912 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1913 (insert "ncsa-mosaic-history-format-1\nGlobal\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1914 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1915 (lambda (url time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1916 (if (listp time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1917 (setq time (current-time-string time)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1918 (if (or (not (stringp time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1919 (not (string-match " " time)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1920 (setq time (current-time-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1921 (insert url " " time "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1922 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1923 (write-file fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1924
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1925 (defun url-write-Mosaic-history-v2 (fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1926 ;; Write a Mosaic/X-style global history list into FNAME
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1927 (let ((last-valid-time "827250806"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1928 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1929 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1930 (insert "ncsa-mosaic-history-format-2\nGlobal\n")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1931 (cl-maphash (function
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1932 (lambda (url time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1933 (if (listp time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1934 (setq time last-valid-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1935 (setq last-valid-time time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1936 (if (not (stringp time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1937 (setq time last-valid-time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1938 (insert url " " time "\n")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1939 url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1940 (write-file fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1941
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1942 (defun url-write-global-history (&optional fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1943 "Write the global history file into `url-global-history-file'.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1944 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
1945 with. If the type of storage cannot be determined, then prompt the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1946 user for what type to save as."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1947 (interactive)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1948 (or fname (setq fname (expand-file-name url-global-history-file)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1949 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1950 ((not url-history-changed-since-last-save) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1951 ((not (file-writable-p fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1952 (message "%s is unwritable." fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1953 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1954 (let ((make-backup-files nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1955 (version-control nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1956 (require-final-newline t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1957 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1958 (set-buffer (get-buffer-create " *url-tmp*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1959 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1960 (condition-case ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1961 (insert-file-contents-literally fname)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1962 (error nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1963 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1964 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1965 ((looking-at "ncsa-mosaic-.*-1$") (url-write-Mosaic-history-v1 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1966 ((looking-at "ncsa-mosaic-.*-2$") (url-write-Mosaic-history-v2 fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1967 ((looking-at "MCOM-") (url-write-Netscape-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1968 ((looking-at "netscape") (url-write-Netscape-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1969 ((looking-at "(setq") (url-write-Emacs-history fname))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1970 (t (url-write-Emacs-history fname)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1971 (kill-buffer (current-buffer))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1972 (setq url-history-changed-since-last-save nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1973
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1974
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1975 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1976 ;;; The main URL fetching interface
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1977 ;;; -------------------------------
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1978 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1979
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1980 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1981 (defun url-popup-info (url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1982 "Retrieve the HTTP/1.0 headers and display them in a temp buffer."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1983 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1984 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1985 data)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1986 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1987 ((string= type "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1988 (let ((url-request-method "HEAD")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1989 (url-automatic-caching nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1990 (url-inhibit-mime-parsing t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1991 (url-working-buffer " *popup*"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1992 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1993 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1994 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1995 (setq url-be-asynchronous nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1996 (url-retrieve url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1997 (subst-char-in-region (point-min) (point-max) ?\r ? )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1998 (buffer-string))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
1999 ((or (string= type "file") (string= type "ftp"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2000 (setq data (url-file-attributes url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2001 (set-buffer (get-buffer-create
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2002 (url-generate-new-buffer-name "*Header Info*")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2003 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2004 (if data
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2005 (concat (if (stringp (nth 0 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2006 (concat " Linked to: " (nth 0 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2007 (concat " Directory: " (if (nth 0 data) "Yes" "No")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2008 "\n Links: " (int-to-string (nth 1 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2009 "\n File UID: " (int-to-string (nth 2 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2010 "\n File GID: " (int-to-string (nth 3 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2011 "\n Last Access: " (current-time-string (nth 4 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2012 "\nLast Modified: " (current-time-string (nth 5 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2013 "\n Last Changed: " (current-time-string (nth 6 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2014 "\n Size (bytes): " (int-to-string (nth 7 data))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2015 "\n File Type: " (or (nth 8 data) "text/plain"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2016 (concat "No info found for " url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2017 ((and (string= type "news") (string-match "@" url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2018 (let ((art (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2019 (if (not (string= (substring art -1 nil) ">"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2020 (setq art (concat "<" art ">")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2021 (url-get-headers-from-article-id art)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2022 (t (concat "Don't know how to find information on " url)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2023
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2024 (defun url-decode-text ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2025 ;; Decode text transmitted by NNTP.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2026 ;; 0. Delete status line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2027 ;; 1. Delete `^M' at end of line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2028 ;; 2. Delete `.' at end of buffer (end of text mark).
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2029 ;; 3. Delete `.' at beginning of line."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2030 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2031 (set-buffer nntp-server-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2032 ;; Insert newline at end of buffer.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2033 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2034 (if (not (bolp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2035 (insert "\n"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2036 ;; Delete status line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2037 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2038 (delete-region (point) (progn (forward-line 1) (point)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2039 ;; Delete `^M' at end of line.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2040 ;; (replace-regexp "\r$" "")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2041 (while (not (eobp))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2042 (end-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2043 (if (= (preceding-char) ?\r)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2044 (delete-char -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2045 (forward-line 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2046 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2047 ;; Delete `.' at end of buffer (end of text mark).
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2048 (goto-char (point-max))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2049 (forward-line -1) ;(beginning-of-line)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2050 (if (looking-at "^\\.$")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2051 (delete-region (point) (progn (forward-line 1) (point))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2052 ;; Replace `..' at beginning of line with `.'.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2053 (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2054 ;; (replace-regexp "^\\.\\." ".")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2055 (while (search-forward "\n.." nil t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2056 (delete-char -1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2057 ))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2058
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2059 (defun url-get-headers-from-article-id (art)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2060 ;; Return the HEAD of ART (a usenet news article)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2061 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2062 ((string-match "flee" nntp-version)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2063 (nntp/command "HEAD" art)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2064 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2065 (set-buffer nntp-server-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2066 (while (progn (goto-char (point-min))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2067 (not (re-search-forward "^.\r*$" nil t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2068 (url-accept-process-output nntp/connection))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2069 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2070 (nntp-send-command "^\\.\r$" "HEAD" art)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2071 (url-decode-text)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2072 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2073 (set-buffer nntp-server-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2074 (buffer-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2075
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2076 (defvar url-external-retrieval-program "www"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2077 "*Name of the external executable to run to retrieve URLs.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2078
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2079 (defvar url-external-retrieval-args '("-source")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2080 "*A list of arguments to pass to `url-external-retrieval-program' to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2081 retrieve a URL by its HTML source.")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2082
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2083 (defun url-retrieve-externally (url &optional no-cache)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2084 (let ((url-working-buffer (if (and url-multiple-p
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2085 (string-equal url-working-buffer
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2086 url-default-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2087 (url-get-working-buffer-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2088 url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2089 (if (get-buffer-create url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2090 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2091 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2092 (set-buffer-modified-p nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2093 (kill-buffer url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2094 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2095 (let* ((args (append url-external-retrieval-args (list url)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2096 (urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2097 (type (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2098 (if (or (member type '("www" "about" "mailto" "mailserver"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2099 (url-file-directly-accessible-p urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2100 (url-retrieve-internally url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2101 (url-lazy-message "Retrieving %s..." url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2102 (apply 'call-process url-external-retrieval-program
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2103 nil t nil args)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2104 (url-lazy-message "Retrieving %s... done" url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2105 (if (and type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2106 (setq url-current-server (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2107 url-current-type (url-type urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2108 url-current-port (url-port urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2109 url-current-file (url-filename urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2110 (if (member url-current-file '("/" ""))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2111 (setq url-current-mime-type "text/html"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2112
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2113 (defun url-get-normalized-date (&optional specified-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2114 ;; Return a 'real' date string that most HTTP servers can understand.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2115 (require 'timezone)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2116 (let* ((raw (if specified-time (current-time-string specified-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2117 (current-time-string)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2118 (gmt (timezone-make-date-arpa-standard raw
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2119 (nth 1 (current-time-zone))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2120 "GMT"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2121 (parsed (timezone-parse-date gmt))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2122 (day (cdr-safe (assoc (substring raw 0 3) weekday-alist)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2123 (year nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2124 (month (car
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2125 (rassoc
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2126 (string-to-int (aref parsed 1)) monthabbrev-alist)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2127 )
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2128 (setq day (or (car-safe (rassoc day weekday-alist))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2129 (substring raw 0 3))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2130 year (aref parsed 0))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2131 ;; This is needed for plexus servers, or the server will hang trying to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2132 ;; parse the if-modified-since header. Hopefully, I can take this out
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2133 ;; soon.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2134 (if (and year (> (length year) 2))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2135 (setq year (substring year -2 nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2136
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2137 (concat day ", " (aref parsed 2) "-" month "-" year " "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2138 (aref parsed 3) " " (or (aref parsed 4)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2139 (concat "[" (nth 1 (current-time-zone))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2140 "]")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2141
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2142 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2143 (defun url-cache-expired (url mod)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2144 "Return t iff a cached file has expired."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2145 (if (not (string-match url-nonrelative-link url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2146 t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2147 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2148 (type (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2149 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2150 (url-standalone-mode
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2151 (not (file-exists-p (url-create-cached-filename urlobj))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2152 ((string= type "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2153 (if (not url-standalone-mode) t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2154 (not (file-exists-p (url-create-cached-filename urlobj)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2155 ((not (fboundp 'current-time))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2156 t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2157 ((member type '("file" "ftp"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2158 (if (or (equal mod '(0 0)) (not mod))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2159 (return t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2160 (or (> (nth 0 mod) (nth 0 (current-time)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2161 (> (nth 1 mod) (nth 1 (current-time))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2162 (t nil)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2163
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2164 (defun url-get-working-buffer-name ()
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2165 "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
2166 (let ((num 1)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2167 name buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2168 (while (progn (setq name (format " *URL-%d*" num))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2169 (setq buf (get-buffer name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2170 (and buf (or (get-buffer-process buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2171 (save-excursion (set-buffer buf)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2172 (> (point-max) 1)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2173 (setq num (1+ num)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2174 name))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2175
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2176 (defun url-default-find-proxy-for-url (urlobj host)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2177 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2178 ((or (and (assoc "no_proxy" url-proxy-services)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2179 (string-match
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2180 (cdr
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2181 (assoc "no_proxy" url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2182 host))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2183 (equal "www" (url-type urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2184 "DIRECT")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2185 ((cdr (assoc (url-type urlobj) url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2186 (concat "PROXY " (cdr (assoc (url-type urlobj) url-proxy-services))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2187 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2188 ;; Should check for socks
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2189 ;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2190 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2191 "DIRECT")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2192
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2193 (defvar url-proxy-locator 'url-default-find-proxy-for-url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2194
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2195 (defun url-find-proxy-for-url (url host)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2196 (let ((proxies (split-string (funcall url-proxy-locator url host) " *; *"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2197 (proxy nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2198 (case-fold-search t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2199 ;; Not sure how I should handle gracefully degrading from one proxy to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2200 ;; another, so for now just deal with the first one
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2201 ;; (while proxies
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2202 (setq proxy (pop proxies))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2203 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2204 ((string-match "^direct" proxy) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2205 ((string-match "^proxy +" proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2206 (concat "http://" (substring proxy (match-end 0)) "/"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2207 ((string-match "^socks +" proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2208 (concat "socks://" (substring proxy (match-end 0))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2209 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2210 (url-warn 'url (format "Unknown proxy directive: %s" proxy) 'critical)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2211 nil))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2212
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2213 (defun url-retrieve-internally (url &optional no-cache)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2214 (let ((url-working-buffer (if (and url-multiple-p
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2215 (string-equal
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2216 (if (bufferp url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2217 (buffer-name url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2218 url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2219 url-default-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2220 (url-get-working-buffer-name)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2221 url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2222 (if (get-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2223 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2224 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2225 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2226 (setq url-current-can-be-cached (not no-cache))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2227 (set-buffer-modified-p nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2228 (let* ((urlobj (url-generic-parse-url url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2229 (type (url-type urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2230 (url-using-proxy (if (url-host urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2231 (url-find-proxy-for-url urlobj
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2232 (url-host urlobj))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2233 nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2234 (handler nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2235 (original-url url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2236 (cached nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2237 (tmp url-current-file))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2238 (if url-using-proxy (setq type "proxy"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2239 (setq cached (url-is-cached url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2240 cached (and cached (not (url-cache-expired url cached)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2241 handler (if cached 'url-extract-from-cache
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2242 (car-safe
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2243 (cdr-safe (assoc (or type "auto")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2244 url-registered-protocols))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2245 url (if cached (url-create-cached-filename url) url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2246 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2247 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2248 (setq url-current-can-be-cached (not no-cache)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2249 ; (if url-be-asynchronous
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2250 ; (url-download-minor-mode t))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2251 (if (and handler (fboundp handler))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2252 (funcall handler url)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2253 (set-buffer (get-buffer-create url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2254 (setq url-current-file tmp)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2255 (erase-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2256 (insert "<title> Link Error! </title>\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2257 "<h1> An error has occurred... </h1>\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2258 (format "The link type `<code>%s</code>'" type)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2259 " is unrecognized or unsupported at this time.<p>\n"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2260 "If you feel this is an error, please "
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2261 "<a href=\"mailto://" url-bug-address "\">send me mail.</a>"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2262 "<p><address>William Perry</address><br>"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2263 "<address>" url-bug-address "</address>")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2264 (setq url-current-file "error.html"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2265 (if (and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2266 (not url-be-asynchronous)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2267 (get-buffer url-working-buffer))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2268 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2269 (set-buffer url-working-buffer)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2270
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2271 (url-clean-text)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2272 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2273 ((equal type "wais") nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2274 ((and url-be-asynchronous (not cached) (member type '("http" "proxy")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2275 nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2276 (url-be-asynchronous
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2277 (funcall url-default-retrieval-proc (buffer-name)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2278 ((not (get-buffer url-working-buffer)) nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2279 ((and (not url-inhibit-mime-parsing)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2280 (or cached (url-mime-response-p t)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2281 (or cached (url-parse-mime-headers nil t))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2282 (if (and (or (not url-be-asynchronous)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2283 (not (equal type "http")))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2284 (not url-current-mime-type))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2285 (if (url-buffer-is-hypertext)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2286 (setq url-current-mime-type "text/html")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2287 (setq url-current-mime-type (mm-extension-to-mime
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2288 (url-file-extension
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2289 url-current-file)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2290 (if (and url-automatic-caching url-current-can-be-cached
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2291 (not url-be-asynchronous))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2292 (save-excursion
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2293 (url-store-in-cache url-working-buffer)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2294 (if (not url-global-history-hash-table)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2295 (setq url-global-history-hash-table (make-hash-table :size 131
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2296 :test 'equal)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2297 (if (not (string-match "^about:" original-url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2298 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2299 (setq url-history-changed-since-last-save t)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2300 (cl-puthash original-url (current-time)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2301 url-global-history-hash-table)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2302 (cons cached url-working-buffer))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2303
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2304 ;;;###autoload
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2305 (defun url-retrieve (url &optional no-cache expected-md5)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2306 "Retrieve a document over the World Wide Web.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2307 The document should be specified by its fully specified
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2308 Uniform Resource Locator. No parsing is done, just return the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2309 document as the server sent it. The document is left in the
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2310 buffer specified by url-working-buffer. url-working-buffer is killed
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2311 immediately before starting the transfer, so that no buffer-local
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2312 variables interfere with the retrieval. HTTP/1.0 redirection will
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2313 be honored before this function exits."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2314 (url-do-setup)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2315 (if (and (fboundp 'set-text-properties)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2316 (subrp (symbol-function 'set-text-properties)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2317 (set-text-properties 0 (length url) nil url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2318 (if (and url (string-match "^url:" url))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2319 (setq url (substring url (match-end 0) nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2320 (let ((status (url-retrieve-internally url no-cache)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2321 (if (and expected-md5 url-check-md5s)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2322 (let ((cur-md5 (md5 (current-buffer))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2323 (if (not (string= cur-md5 expected-md5))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2324 (and (not (funcall url-confirmation-func
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2325 "MD5s do not match, use anyway? "))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2326 (error "MD5 error.")))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2327 status))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2328
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2329 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2330 ;;; How to register a protocol
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2331 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2332 (defun url-register-protocol (protocol &optional retrieve expander defport)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2333 "Register a protocol with the URL retrieval package.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2334 PROTOCOL is the type of protocol being registers (http, nntp, etc),
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2335 and is the first chunk of the URL. ie: http:// URLs will be
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2336 handled by the protocol registered as 'http'. PROTOCOL can
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2337 be either a symbol or a string - it is converted to a string,
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2338 and lowercased before being registered.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2339 RETRIEVE (optional) is the function to be called with a url as its
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2340 only argument. If this argument is omitted, then this looks
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2341 for a function called 'url-PROTOCOL'. A warning is shown if
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2342 the function is undefined, but the protocol is still
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2343 registered.
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2344 EXPANDER (optional) is the function to call to expand a relative link
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2345 of type PROTOCOL. If omitted, this defaults to
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2346 `url-default-expander'
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2347
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2348 Any proxy information is read in from environment variables at this
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2349 time, so this function should only be called after dumping emacs."
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2350 (let* ((protocol (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2351 ((stringp protocol) (downcase protocol))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2352 ((symbolp protocol) (downcase (symbol-name protocol)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2353 (t nil)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2354
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2355 (retrieve (or retrieve (intern (concat "url-" protocol))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2356 (expander (or expander 'url-default-expander))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2357 (cur-protocol (assoc protocol url-registered-protocols))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2358 (urlobj nil)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2359 (cur-proxy (assoc protocol url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2360 (env-proxy (or (getenv (concat protocol "_proxy"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2361 (getenv (concat protocol "_PROXY"))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2362 (getenv (upcase (concat protocol "_PROXY"))))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2363
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2364 (if (not protocol)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2365 (error "Invalid data to url-register-protocol."))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2366
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2367 (if (not (fboundp retrieve))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2368 (message "Warning: %s registered, but no function found." protocol))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2369
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2370 ;; Store the default port, if none previously specified and
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2371 ;; defport given
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2372 (if (and defport (not (assoc protocol url-default-ports)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2373 (setq url-default-ports (cons (cons protocol defport)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2374 url-default-ports)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2375
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2376 ;; Store the appropriate information for later
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2377 (if cur-protocol
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2378 (setcdr cur-protocol (cons retrieve expander))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2379 (setq url-registered-protocols (cons (cons protocol
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2380 (cons retrieve expander))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2381 url-registered-protocols)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2382
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2383 ;; Store any proxying information - this will not overwrite an old
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2384 ;; entry, so that people can still set this information in their
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2385 ;; .emacs file
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2386 (cond
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2387 (cur-proxy nil) ; Keep their old settings
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2388 ((null env-proxy) nil) ; No proxy setup
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2389 ;; First check if its something like hostname:port
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2390 ((string-match "^\\([^:]+\\):\\([0-9]+\\)$" env-proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2391 (setq urlobj (url-generic-parse-url nil)) ; Get a blank object
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2392 (url-set-type urlobj "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2393 (url-set-host urlobj (url-match env-proxy 1))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2394 (url-set-port urlobj (url-match env-proxy 2)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2395 ;; Then check if its a fully specified URL
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2396 ((string-match url-nonrelative-link env-proxy)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2397 (setq urlobj (url-generic-parse-url env-proxy))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2398 (url-set-type urlobj "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2399 (url-set-target urlobj nil))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2400 ;; Finally, fall back on the assumption that its just a hostname
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2401 (t
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2402 (setq urlobj (url-generic-parse-url nil)) ; Get a blank object
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2403 (url-set-type urlobj "http")
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2404 (url-set-host urlobj env-proxy)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2405
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2406 (if (and (not cur-proxy) urlobj)
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2407 (progn
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2408 (setq url-proxy-services
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2409 (cons (cons protocol (concat (url-host urlobj) ":"
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2410 (url-port urlobj)))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2411 url-proxy-services))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2412 (message "Using a proxy for %s..." protocol)))))
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2413
9ee227acff29 Import from CVS: tag r19-15b90
cvs
parents:
diff changeset
2414 (provide 'url)