(when-let ((er (plist-get status :error)))
(error "Error retrieving: %s %S" url er))
(unless (search-forward-regexp "^\r?\n\r?" nil 'noerror)
- (rest-error 'rest-unintelligible-result))
- (delete-region (point-min) (point))
- ,@body)
- (when (buffer-live-p b)
- (kill-buffer b)))))))
+ (error "Error retrieving: %s %S" url "incomprehensible buffer"))
+ (with-temp-buffer
+ (url-insert-buffer-contents b url)
+ (kill-buffer b)
+ (goto-char (point-min))
+ ,@body)))))))
(if ,async
(wrap-errors (url-retrieve url callback nil 'silent))
- (let ((buffer (wrap-errors (url-retrieve-synchronously url 'silent))))
- (with-current-buffer buffer
- (funcall callback nil)))))
+ (with-current-buffer (wrap-errors (url-retrieve-synchronously url 'silent))
+ (funcall callback nil))))
(wrap-errors (with-temp-buffer
(let ((url (expand-file-name ,file ,url-1)))
(unless (file-name-absolute-p url)
(defvar url-http-codes)
+(defun url-insert-buffer-contents (buffer url &optional visit beg end replace)
+ "Insert the contents of BUFFER into current buffer.
+This is like `url-insert', but also decodes the current buffer as
+if it had been inserted from a file named URL."
+ (if visit (setq buffer-file-name url))
+ (save-excursion
+ (let* ((start (point))
+ (size-and-charset (url-insert buffer beg end)))
+ (kill-buffer buffer)
+ (when replace
+ (delete-region (point-min) start)
+ (delete-region (point) (point-max)))
+ (unless (cadr size-and-charset)
+ ;; If the headers don't specify any particular charset, use the
+ ;; usual heuristic/rules that we apply to files.
+ (decode-coding-inserted-region (point-min) (point) url
+ visit beg end replace))
+ (let ((inserted (car size-and-charset)))
+ (when (fboundp 'after-insert-file-set-coding)
+ (let ((insval (after-insert-file-set-coding inserted visit)))
+ (if insval (setq inserted insval))))
+ (list url inserted)))))
+
;;;###autoload
(defun url-insert-file-contents (url &optional visit beg end replace)
(let ((buffer (url-retrieve-synchronously url)))
(kill-buffer buffer)
;; Signal file-error per http://debbugs.gnu.org/16733.
(signal 'file-error (list url desc))))))
- (if visit (setq buffer-file-name url))
- (save-excursion
- (let* ((start (point))
- (size-and-charset (url-insert buffer beg end)))
- (kill-buffer buffer)
- (when replace
- (delete-region (point-min) start)
- (delete-region (point) (point-max)))
- (unless (cadr size-and-charset)
- ;; If the headers don't specify any particular charset, use the
- ;; usual heuristic/rules that we apply to files.
- (decode-coding-inserted-region start (point) url
- visit beg end replace))
- (let ((inserted (car size-and-charset)))
- (when (fboundp 'after-insert-file-set-coding)
- (let ((insval (after-insert-file-set-coding inserted visit)))
- (if insval (setq inserted insval))))
- (list url inserted))))))
+ (url-insert-buffer-contents buffer url visit beg end replace)))
(put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents)