É possível inserir imagens da web com seu URL?

11

É possível inserir imagens diretamente da web com seu URL org-mode? Ou seja, posso colar algo assim no buffer do emacs, para que ele mude para a imagem de um gato no link image mode?

[[https://d1ra4hr810e003.cloudfront.net/media/27FB7F0C-9885-42A6-9E0C19C35242B5AC/0/D968A2D0-35B8-41C6-A94A0C5C5FCA0725/F0E9E3EC-8F99-4ED8-A40DADEAF7A011A5/dbe669e9-40be-51c9-a9a0-001b0e022be7/thul-IMG_2100.jpg]] 

Apenas o torna um link clicável nas minhas configurações atuais.

stacko
fonte
11
Você está falando org-mode, não é? Imagens locais podem ser incorporadas, C-c C-x C-vmas acho que as remotas não podem (pelo menos fora da caixa).
JeanPierre
@JeanPierre Sim, imagens remotas em org-mode.
stacko

Respostas:

9

É possível com um pouco de código. Eu definiria um novo link como este:

#+BEGIN_SRC emacs-lisp
(org-add-link-type
 "image-url"
 (lambda (path)
   (let ((img (expand-file-name
           (concat (md5 path) "." (file-name-extension path))
           temporary-file-directory)))
     (if (file-exists-p img)
     (find-file img)
       (url-copy-file path img)
       (find-file img)))))
#+END_SRC

Quando você clica nele, você deve obter um gato no modo de imagem. Não defini funções de exportação. Além disso, a imagem é baixada como um arquivo temporário, o que pode ou não ser conveniente para você.

Em seguida, use-o assim:
[[image-url:https://d1ra4hr810e003.cloudfront.net/media/27FB7F0C-9885-42A6-9E0C19C35242B5AC/0/D968A2D0-35B8-41C6-A94A0C5C5FCA0725/F0E9E3EC-8F99-4ED8-A40DADEAF7A011A5/dbe669e9-40be-51c9-a9a0-001b0e022be7/thul-IMG_2100.jpg]]

Em seguida, você pode usar essas duas funções para sobrepor ou remover uma imagem:

(defun image-url-overlays ()
  "Put image overlays on remote image urls."
  (interactive)
  (loop for image-url in (org-element-map (org-element-parse-buffer) 'link
               (lambda (link)
                 (when (string= "image-url" (org-element-property :type link))
                   link)))
    do
    (let* ((path (org-element-property :path image-url))
           (ov (make-overlay (org-element-property :begin image-url)
                 (org-element-property :end image-url)))
           (img (create-image (expand-file-name
                   (concat (md5 path)
                       "."
                       (file-name-extension
                        path))
                   temporary-file-directory))))
      (overlay-put ov 'display img)
      (overlay-put ov 'image-url t))))

(defun image-url-clear-overlays ()
  "Reove overlays on image-urls."
  (interactive)
  (require 'ov)
  (ov-clear 'image-url))

Isso baixa a imagem como um arquivo temporário, se não existir, e coloca uma sobreposição no link.

John Kitchin
fonte
Escrevendo seu próprio código para resolver um problema? Isso é trapaça , cara.
Tianxiang Xiong
3

Não dentro do próprio buffer da organização, tanto quanto eu sei.

Se você exportar para HTML, no entanto, os links para imagens serão convertidos em imagens .

Se a descrição for um nome de arquivo ou URL que aponte para uma imagem, a exportação HTML (consulte Exportação HTML) alinhará a imagem como um botão clicável. Se não houver nenhuma descrição e o link apontar para uma imagem, essa imagem será incorporada ao arquivo HTML exportado.

Tianxiang Xiong
fonte