Загрузите файл с помощью Emacs Lisp
Есть ли у elisp функция, которая берет URL-адрес и пункт назначения и загружает этот URL-адрес из Интернета?
Я обнаружил url-retrieve
и url-retrieve-synchronously
, но url-retrieve
принимает обратный вызов, а url-retrieve-synchronously
помещает все в буфер. Есть ли что-то более простое?
Ответы
Ответ 1
Попробуйте url-copy-file
. Его описание гласит,
url-copy-file - это автоматически загруженная функция Lisp в `url-handlers.el '.
(url-copy-file url newname & опционально ok-if-already-exists keep-time)
Скопировать URL-адрес в новое имя. Оба аргумента должны быть строками. Сигналы "ошибка файла уже существует", если имя файла уже существует, если третий аргумент ok-if-уже существует и не равен нулю. Число как третий arg означает подтверждение запроса, если новое имя уже существует. Это то, что происходит при интерактивном использовании с M-x. Четвертое значение keep-time arg не-nil означает, что новый файл тот же последнее модифицированное время как старое. (Это работает только с некоторыми системами.) Префикс arg делает keep-time non-nil.
Ответ 2
Очевидно, что url-copy-file
- лучший вариант, но для более предприимчивых хакеров Emacs я бы предложил что-то вроде этого:
(require 'url)
(defun download-file (&optional url download-dir download-name)
(interactive)
(let ((url (or url
(read-string "Enter download URL: "))))
(let ((download-buffer (url-retrieve-synchronously url)))
(save-excursion
(set-buffer download-buffer)
;; we may have to trim the http response
(goto-char (point-min))
(re-search-forward "^$" nil 'move)
(forward-char)
(delete-region (point-min) (point))
(write-file (concat (or download-dir
"~/downloads/")
(or download-name
(car (last (split-string url "/" t))))))))))
Ответ 3
(w3m-download "http://www.gnu.org/index.html")
Ответ 4
http://steloflute.tistory.com/entry/Emacs-Lisp-urlretrieve
; synchronously
(defun get-url (url)
(with-current-buffer (url-retrieve-synchronously url) (buffer-string)))
(print (get-url "http://www.gnu.org"))
; asynchronously
(defun print-url (url)
(url-retrieve url (lambda (a) (print a))))
(print-url "http://www.gnu.org")
Получение URL-адресов | http://www.gnu.org/software/emacs/manual/html_node/url/Retrieving-URLs.html
Текущий буфер | http://www.gnu.org/software/emacs/manual/html_node/elisp/Current-Buffer.html