Çözüm
Bunu lisp/image-mode.el
yazmak için kaynak kodunu kullandım . Bu işlevin herhangi bir görüntü arabelleğinde çağrılması, görüntü ve pencere yükseklik / genişlik oranlarına bağlı olarak genişlik veya yüksekliğe sığacak şekilde yeniden boyutlandırılır.
Bu işlevin çalışması için şu 2 şeye ihtiyacınız vardır:
- Emac'larınızın Imagemagick ile derlenmiş olması gerekir .
- Varsayılan olarak
libjpeg
yükleyici jpg
görüntüleri işlemek için kullanılır . Bu cevabın bir sonraki bölümünde gösterilen saldırı, emac'ları imagemagick
yükleyici kullanmaya zorlamak için kullanılır .
(defun modi / image-transform-fit-to-window ()
Msgstr "" "Görüntü ve pencere oranlarına göre görüntüyü genişlik veya yüksekliğe sığacak şekilde yeniden boyutlandırın.
Bu işlevi çalıştırmak için Imagemagick gerekir. "
(İnteraktif)
(let * ((img-size (resim-görüntü-boyutu (image-get-display-property) t))
(img genişliği (araba img boyutu))
(img yüksekliği (cdr img boyutu))
(img-h / w-oranı (/ (float img-yüksekliği) (float img-genişliği)))
(kazan genişliği (- (n. 2 (piksel içi pencere kenarları))
(n. 0 (piksel içi pencere kenarları))))
(kazanma yüksekliği (- (n. 3 (piksel içi pencere kenarları))
(n. 1 (piksel içi pencere kenarları)))))
(win-h / w-oranı (/ (float win-height) (float win-width)))))
;; Pencerenin s / b oranı görüntünün s / h oranı ise görüntüyü genişliğe sığdır
(eğer (> win-h / w-oranı img-h / w-oranı)
(Resim-transform-uyum-genişlik)
;; Yüksekliğe göre başka uyum
(Resim-transform-uyum yükseklik))))
Emac'leri imagemagick
görüntüleri yüklemek için kullanmaya zorlamak için kesmek
Emacs hata raporları aracılığıyla izledikten sonra #18797
, #10746
ve #10112
aşağıdaki çözüm yük görüntülere ImageMagick zorlayarak çalıştı; bir yere koy init.el
:
Ben kullanımına Emacs zorlamıştır imagemagick
bana tanıdık dosyaları yalnızca görüntü için: png
, tiff
, jpg/jpeg
ve svg
; geri kalanı varsayılan olarak tutulur. gif
Emacs 24.4 çok çerçeveli görüntüleri izlemek için geliştirilmiş desteğe sahip olduğundan, dosyaların varsayılan yükleyici tarafından açılmasına izin vermeyi seçtim . Tüm normal ifade alınır 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
))
sakınca
- Tarafından yüklenmek üzere seçilen görüntü türleri
imagemagick
satır içi görüntüler olarak gösterilmez org-mode
.
Referanslar
eimp
Dosyayı değiştirdiğine dikkat edilmelidir . Salt okunur görüntülerde çalışmaz.