Рішення
Я використовував вихідний код, lisp/image-mode.el
щоб написати це. Виклик цієї функції в будь-якому буфері зображення дозволить змінити її розмір відповідно до ширини або висоти залежно від співвідношення зображення та висоти вікна / ширини зображення.
Для роботи цієї функції вам потрібні ці 2 речі:
- Ваші emacs повинні бути складені за допомогою Imagemagick .
- За замовчуванням
libjpeg
завантажувач використовується для обробки jpg
зображень. Хак, показаний у наступній частині цієї відповіді, використовується для того, щоб змусити emacs використовувати imagemagick
завантажувач.
(defun modi / image-transform-fit-to-window ()
Msgstr "Змініть розмір зображення відповідно до ширини чи висоти на основі співвідношення зображень та вікон.
Для запуску цієї функції потрібен Imagemagick. "
(інтерактивний)
(нехай * ((img-size (image-display-size (image-get-display-property) t))
(img-width (автомобіль img-size))
(img-height (cdr img-size))
(коефіцієнт img-h / w (/ (float img-height) (float img-width)))
(win-width (- (nth 2 (вікно-всередині-пікселя))
(nth 0 (краю вікна-всередині пікселя))))
(win-height (- (nth 3 (вікно-всередині-пікселя))
(nth 1 (вікно-всередині-пікселя))))
(співвідношення win-h / w (/ (float win-height) (float win-width))))
;; Підібрати зображення по ширині, якщо співвідношення h / w вікна> співвідношення h / w зображення
(якщо (> співвідношення 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
файл модифікує. Він не працює на зображення, доступні лише для читання.