Подтвердить что ты не робот

Загрузите файл с помощью Emacs Lisp

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

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

4b9b3361

Ответ 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