Emacs
emacs-lisp

EmacsLispでURLの画像を取得

More than 3 years have passed since last update.

概要

Emacsで画像を使うときにwgetしてローカルに保存せずに、
そのまま画像を見たかったので画像をバッファに表示する関数を作りました。

定義

  • 処理 image-urlの画像を展開してバッファを返す
  • 引数 image-url:画像のURL
  • 返値 buffer 画像が展開されたバッファ
(defun get-image-from-url (image-url)
  "Get image data from url, and return image buffer"
  (let ((start-buffer (current-buffer))
        (image-data 
         (url-http-get image-url nil))
        (created-buffer (generate-new-buffer "*image*")))
    (set-buffer created-buffer)
    (insert image-data)
    (image-mode)
    (set-buffer start-buffer)
    created-buffer))

(defun url-http-get (url args)
  "Send ARGS to URL as a GET request."
  (let (
        (response-string nil)
        (url-request-method "GET")
        (url-request-data
         (mapconcat (lambda (arg)
                      (concat (url-hexify-string (car arg))
                              "="
                              (url-hexify-string (cdr arg))))
                    args
                    "&")))
    (set-buffer
     (url-retrieve-synchronously
      (concat url "?" url-request-data)))
    (goto-char (point-min))
    (re-search-forward "\n\n")
    (setq response-string
          (buffer-substring-no-properties
           (point) (point-max)))
    (kill-buffer (current-buffer))
    response-string))

使い方

(switch-to-buffer
 (get-image-from-url "http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/EmacsIcon.svg/48px-EmacsIcon.svg.png"))