X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmm-url.el;h=23909d3ce1d8d594e086b4b4bd44f7ef3d48cd60;hb=333aeb9610f5189544c882fd534e001d9f064f96;hp=b1a3c45a9db011303ef2ee176a1d25f66ed0a5a0;hpb=078814385d52f2539f043b1a8ae6f2db9e9579b3;p=gnus diff --git a/lisp/mm-url.el b/lisp/mm-url.el index b1a3c45a9..23909d3ce 100644 --- a/lisp/mm-url.el +++ b/lisp/mm-url.el @@ -1,5 +1,7 @@ ;;; mm-url.el --- a wrapper of url functions/commands for Gnus -;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, +;; 2006 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu @@ -17,8 +19,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -34,8 +36,9 @@ (require 'mm-util) (require 'gnus) -(eval-and-compile - (autoload 'executable-find "executable")) +(defvar url-current-object) +(defvar url-package-name) +(defvar url-package-version) (defgroup mm-url nil "A wrapper of url package and external url command for Gnus." @@ -45,15 +48,16 @@ (condition-case nil (require 'url) (error nil))) - "*If not-nil, use external grab program `mm-url-program'." + "*If non-nil, use external grab program `mm-url-program'." + :version "22.1" :type 'boolean :group 'mm-url) (defvar mm-url-predefined-programs - '((wget "wget" "-q" "-O" "-") + '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-") (w3m "w3m" "-dump_source") (lynx "lynx" "-source") - (curl "curl"))) + (curl "curl" "--silent" "--user-agent mm-url" "--location"))) (defcustom mm-url-program (cond @@ -64,6 +68,7 @@ (t "GET")) "The url grab program. Likely values are `wget', `w3m', `lynx' and `curl'." + :version "22.1" :type '(choice (symbol :tag "wget" wget) (symbol :tag "w3m" w3m) @@ -74,6 +79,7 @@ Likely values are `wget', `w3m', `lynx' and `curl'." (defcustom mm-url-arguments nil "The arguments for `mm-url-program'." + :version "22.1" :type '(repeat string) :group 'mm-url) @@ -263,36 +269,51 @@ This is taken from RFC 2396.") (defun mm-url-load-url () "Load `url-insert-file-contents'." (unless (condition-case () - (require 'url-handlers) + (progn + (require 'url-handlers) + (require 'url-parse) + (require 'url-vars)) (error nil)) ;; w3-4.0pre0.46 or earlier version. (require 'w3-vars) (require 'url))) +;;;###autoload (defun mm-url-insert-file-contents (url) + "Insert file contents of URL. +If `mm-url-use-external' is non-nil, use `mm-url-program'." (if mm-url-use-external (progn (if (string-match "^file:/+" url) (insert-file-contents (substring url (1- (match-end 0)))) (mm-url-insert-file-contents-external url)) (goto-char (point-min)) + (if (fboundp 'url-generic-parse-url) + (setq url-current-object + (url-generic-parse-url url))) (list url (buffer-size))) (mm-url-load-url) (let ((name buffer-file-name) - (url-request-extra-headers (list (cons "Connection" "Close"))) (url-package-name (or mm-url-package-name url-package-name)) (url-package-version (or mm-url-package-version - url-package-version))) - (prog1 - (url-insert-file-contents url) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward "\r 1000\r ?" nil t) - (replace-match ""))) - (setq buffer-file-name name))))) - + url-package-version)) + result) + (setq result (url-insert-file-contents url)) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward "\r 1000\r ?" nil t) + (replace-match ""))) + (setq buffer-file-name name) + (if (and (fboundp 'url-generic-parse-url) + (listp result)) + (setq url-current-object (url-generic-parse-url + (car result)))) + result))) + +;;;###autoload (defun mm-url-insert-file-contents-external (url) + "Insert file contents of URL using `mm-url-program'." (let (program args) (if (symbolp mm-url-program) (let ((item (cdr (assq mm-url-program mm-url-predefined-programs)))) @@ -300,7 +321,8 @@ This is taken from RFC 2396.") args (append (cdr item) (list url)))) (setq program mm-url-program args (append mm-url-arguments (list url)))) - (apply 'call-process program nil t nil args))) + (unless (eq 0 (apply 'call-process program nil t nil args)) + (error "Couldn't fetch %s" url)))) (defvar mm-url-timeout 30 "The number of seconds before timing out an URL fetch.") @@ -332,18 +354,13 @@ If FOLLOW-REFRESH is non-nil, redirect refresh url in META." (delete-region (point-min) (point-max)) (setq result (mm-url-insert url t))))) (setq result (mm-url-insert-file-contents url))) - (if (fboundp 'url-generic-parse-url) - (setq url-current-object (url-generic-parse-url - (if (listp result) - (car result) - result)))) (setq done t))) result)) (defun mm-url-decode-entities () "Decode all HTML entities." (goto-char (point-min)) - (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t) + (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+[0-9]*\\);" nil t) (let ((elem (if (eq (aref (match-string 1) 0) ?\#) (let ((c (string-to-number (substring @@ -434,4 +451,5 @@ spaces. Die Die Die." (provide 'mm-url) +;;; arch-tag: 0594f9b3-417c-48b0-adc2-5082e1e7917f ;;; mm-url.el ends here