Решение
Я использовал исходный код, lisp/image-mode.el
чтобы написать это. Вызов этой функции в любом буфере изображения изменит его размер, чтобы он соответствовал ширине или высоте в зависимости от отношения изображения и высоты окна к ширине.
Вам нужны эти 2 вещи, чтобы эта функция работала:
- Ваш emacs должен быть скомпилирован с Imagemagick .
- По умолчанию
libjpeg
загрузчик используется для обработки jpg
изображений. Взлом, показанный в следующей части этого ответа, используется, чтобы заставить emacs использовать imagemagick
загрузчик.
(defun modi / image-transform-fit-to-window ()
Msgstr "Измените размер изображения, чтобы соответствовать ширине или высоте на основе изображения и соотношения окон.
Imagemagick требуется для запуска этой функции. "
(Интерактивный)
(let * ((img-size (image-display-size (image-get-display-property) t))
(img-width (автомобиль img-size))
(img-height (cdr img-size))
(отношение img-h / w (/ (высота плавающего изображения) (ширина плавающего изображения)))
(win-width (- (nth 2 (window-inside-pixel-edge))
(nth 0 (окно-внутри-края-пикселя))))
(win-height (- (nth 3 (window-inside-pixel-edge))
(nth 1 (window-inside-pixel-edge))))
(коэффициент выигрыша / ширины (/ (высота выигрыша с плавающей запятой) (ширина выигрыша с плавающей запятой))))
;; Подогнать изображение по ширине, если соотношение ч / б окна> ч / ш изображения
(если (> отношение win-h / w img-h / w)
(Изображение-преобразование-прилегание к ширине)
;; Остальное подгонка по высоте
(Изображение-преобразование-прилегание к высоте))))
Взломать, чтобы заставить Emacs использовать imagemagick
для загрузки изображений
После ознакомления с отчетами об ошибках emacs #18797
, #10746
и #10112
следующее решение работало, чтобы заставить Imagemagick загружать изображения; поместите это где-нибудь в своем init.el
:
Я вынужден Emacs для использования imagemagick
только для графических файлов мне знакомо: png
, tiff
, jpg/jpeg
и svg
; остальные остаются по умолчанию. Я решил разрешить gif
открытие файлов загрузчиком по умолчанию, так как в emacs 24.4 улучшена поддержка просмотра многокадровых изображений. Все регулярные выражения взяты из 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
))
недостаток
- Типы изображений, выбранные для загрузки,
imagemagick
не будут отображаться как встроенные изображения в org-mode
.
Ссылки
eimp
изменяет файл. Это не работает на изображениях только для чтения.