Загрузите файл с Emacs Lisp - PullRequest
       5

Загрузите файл с Emacs Lisp

20 голосов
/ 15 декабря 2010

Имеется ли в elisp функция, которая принимает URL-адрес и пункт назначения и загружает URL-адреса из Интернета?

Я обнаружил url-retrieve и url-retrieve-synchronously, но url-retrieve принимает обратный вызов и url-retrieve-synchronously помещает все в буфер. Есть что-нибудь попроще?

Ответы [ 4 ]

25 голосов
/ 15 декабря 2010

Попробуйте url-copy-file. Его описание гласит,

url-copy-file - это автоматически загружаемая функция Lisp в `url-handlers.el '.

(url-copy-file, url newname и необязательное время хранения ok-if-уже существует)

Скопировать URL на новое имя. Оба аргумента должны быть строками. Сигнализирует об ошибке «файл уже существует», если файл с новым именем уже существует, если не указан третий аргумент ok-if-Уже-существует и не ноль. Число в качестве третьего аргумента означает подтверждение запроса, если новое имя уже существует. Это то, что происходит в интерактивном режиме с M-x. Четвёртое arg keep-time non-nil означает, что дать новый файл то же самое время последнего изменения как старое. (Это работает только на некоторых системах.) Префикс arg делает время хранения ненулевым.

8 голосов
/ 15 декабря 2010

Очевидно, 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))))))))))
4 голосов
/ 23 апреля 2014

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

4 голосов
/ 15 декабря 2010
...