Solução
Eu usei o código fonte lisp/image-mode.el
para escrever isso. A chamada dessa função em qualquer buffer de imagem redimensionará para caber na largura ou altura, dependendo das proporções de altura e largura da imagem e da janela.
Você precisa destas duas coisas para que esta função funcione:
- Seu emacs precisa ter sido compilado com o Imagemagick .
- Por padrão, o
libjpeg
carregador é usado para manipular jpg
imagens. O hack mostrado na próxima parte desta resposta é usado para forçar o emacs a usar o imagemagick
loader.
(desfazer modi / transformar-imagem-ajustar-à-janela ()
"Redimensione a imagem para caber na largura ou altura com base nas proporções de imagem e janela.
O Imagemagick é necessário para executar esta função. "
(interativo)
(let * ((img-size (tamanho da exibição da imagem (propriedade da imagem))))
(largura img (tamanho img do carro))
(img-height (cdr img-size))
(img-h / w-ratio (/ (float img-height) (float img-width)))
(largura da vitória (- (enésimo 2 (bordas da janela dentro dos pixels)))
(enésimo 0 (janela dentro das bordas dos pixels))))
(win-height (- (enésimo 3 (bordas da janela dentro dos pixels)))
(enésimo 1 (janela dentro das bordas dos pixels))))
(win-h / w-ratio (/ (altura de ganho flutuante) (largura de ganho flutuante))))
;; Ajustar a imagem pela largura se a proporção h / w da janela for> proporção h / w da imagem
(se (> proporção win-h / w img-h / w))
(transformação da imagem ajustada à largura)
;; Outro ajuste pela altura
(transformação de imagem ajustada à altura))))
Corte para forçar o uso do emacs imagemagick
para carregar imagens
Após seguir os relatórios de erros do emacs #18797
, #10746
e #10112
a solução a seguir trabalhou para forçar o Imagemagick a carregar imagens; coloque em algum lugar do seu init.el
:
Eu forcei Emacs para uso imagemagick
somente para os arquivos de imagem familiar para mim: png
, tiff
, jpg/jpeg
e svg
; o restante é mantido como padrão. Optei por permitir que os gif
arquivos sejam abertos pelo carregador padrão, pois o emacs 24.4 aprimorou o suporte para a visualização de imagens com vários quadros. Todo o regexp é retirado lisp/image.el
.
(setq image-type-header-regexps
`(
("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
("\\`P[1-6]\\\(?:\
\\(?:\\(?:#[^\r\n]*[\r\n]\\)?[[:space:]]\\)+\
\\(?:\\(?:#[^\r\n]*[\r\n]\\)?[0-9]\\)+\
\\)\\{2\\}" . pbm)
("\\`GIF8[79]a" . gif)
;; ("\\`\x89PNG\r\n\x1a\n" . png) ;; Uncomment this (and comment the below line) to enable inline png images in org-mode
("\\`\x89PNG\r\n\x1a\n" . imagemagick) ; png
("\\`[\t\n\r ]*#define \\([a-z0-9_]+\\)_width [0-9]+\n\
#define \\1_height [0-9]+\n\\(\
#define \\1_x_hot [0-9]+\n\
#define \\1_y_hot [0-9]+\n\\)?\
static \\(unsigned \\)?char \\1_bits" . xbm)
;; ("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . tiff)
("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . imagemagick) ; tiff
("\\`[\t\n\r ]*%!PS" . postscript)
;; ("\\`\xff\xd8" . jpeg) ;; Uncomment this (and comment the below line) to enable inline jpg images in org-mode
("\\`\xff\xd8" . imagemagick) ; jpeg
("\\`\377\330" . imagemagick) ; jpeg
(,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)")
(comment-re (concat "\\(?:!--" incomment-re "*-->[ \t\r\n]*<\\)")))
(concat "\\(?:<\\?xml[ \t\r\n]+[^>]*>\\)?[ \t\r\n]*<"
comment-re "*"
"\\(?:!DOCTYPE[ \t\r\n]+[^>]*>[ \t\r\n]*<[ \t\r\n]*" comment-re "*\\)?"
"[Ss][Vv][Gg]"))
;; . svg) ;; Uncomment this (and comment the below line) to enable inline svg images in org-mode
. imagemagick) ; svg
))
Recua
- Os tipos de imagem escolhidos para serem carregados
imagemagick
não serão exibidos como imagens embutidas org-mode
.
Referências
eimp
modifica o arquivo. Não funciona em imagens somente leitura.