Solución
Usé el código fuente lisp/image-mode.el
para escribir esto. Al llamar a esta función en cualquier búfer de imagen, se cambiará su tamaño para que se ajuste al ancho o la altura, dependiendo de la imagen y la relación altura / ancho de la ventana.
Necesita estas 2 cosas para que esta función funcione:
- Su emacs necesita haber sido compilado con Imagemagick .
- Por defecto, el
libjpeg
cargador se utiliza para manejar jpg
imágenes. El truco que se muestra en la siguiente parte de esta respuesta se usa para obligar a emacs a usar el imagemagick
cargador.
(defun modi / image-transform-fit-to-window ()
"Cambia el tamaño de la imagen para que se ajuste al ancho o alto según la imagen y las relaciones de ventana.
Se requiere Imagemagick para ejecutar esta función ".
(interactivo)
(let * ((img-size (image-display-size (image-get-display-property) t))
(ancho de imagen (tamaño de imagen del automóvil))
(img-height (cdr img-size))
(relación img-h / w (/ (altura flotante img) (ancho flotante img)))
(win-width (- (enésimo 2 (ventana-dentro-píxeles-bordes))
(enésimo 0 (ventana-dentro-píxeles-bordes))))
(win-height (- (enésimo 3 (ventana-dentro-píxeles-bordes))
(enésimo 1 (ventana-dentro-píxeles-bordes))))
(relación win-h / w (/ (altura de ganancia flotante) (ancho de ganancia flotante))))
;; Ajuste la imagen por ancho si la relación h / w de la ventana es> relación h / w de la imagen
(if (> win-h / w-ratio img-h / w-ratio)
(imagen-transformar-ajustar-a-ancho)
;; Otra forma de altura
(imagen-transformar-ajustar-a-altura))))
Hack para forzar el uso imagemagick
de emacs para cargar imágenes
Después de seguir a través de los informes de errores emacs #18797
, #10746
y #10112
, la siguiente solución trabajó para forzar Imagemagick a cargar imágenes; ponlo en algún lugar de tu init.el
:
Me he obligado a emacs uso imagemagick
sólo para los archivos de imagen familiar para mí: png
, tiff
, jpg/jpeg
y svg
; El resto se mantiene por defecto. Elegí permitir gif
que el cargador predeterminado abra los archivos ya que emacs 24.4 ha mejorado el soporte para ver imágenes de múltiples cuadros. Se toma toda la expresión regular de 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
))
Retirarse
- Los tipos de imagen elegidos para cargar
imagemagick
no se mostrarán como imágenes en línea en org-mode
.
Referencias
eimp
modifica el archivo. No funciona en imágenes de solo lectura.