drag-and-dropでブラウザから画像をダウンロードしてリンクを入れる

request.elを使う.

(defun my/org-insert-uri-image (uri action)
  (if (not (eq major-mode 'org-mode))
      (dnd-open-file uri action)
    (require 'request)
    (request uri
      :encoding 'binary
      :complete (cl-function
                 (lambda (&key data response &allow-other-keys)
                   (let* ((ext (pcase (request-response-header response "content-type")
                                 ("image/jpeg" ".jpeg")
                                 ("image/png" ".png")
                                 (typ "")))
                          (fname (format "./%s%s"
                                         (format-time-string "%Y-%m-%d_%H-%M-%S"
                                                             (current-time))
                                         ext)))
                     (with-temp-buffer
                       (insert data)
                       (write-region nil nil fname))
                     (insert (format "[[%s]]" fname))))))))

(push '("^\\(https?\\)://" . my/org-insert-uri-image) dnd-protocol-alist)

TODO: ローカルの画像もmvして同じようにやりたい