73 lines
3.3 KiB
EmacsLisp
73 lines
3.3 KiB
EmacsLisp
; This file is GPL licensed, same as Emacs
|
|
|
|
|
|
; callback to rewrite image pat so emacs can show images inside blog post drafts.
|
|
(defun firehose/markdown-translate-image-path (path)
|
|
"Translate /media/... image links to ../media/... relative to buffer."
|
|
(message (concat "markdown translate image path called on " path))
|
|
|
|
(if (string-prefix-p "/images" path)
|
|
(concat "../../../static" path)))
|
|
|
|
|
|
; test
|
|
(message (firehose/markdown-translate-image-path "/images/bla"))
|
|
|
|
; monkey patch function to fix our filename
|
|
(defun markdown-display-inline-images ()
|
|
"Add inline image overlays to image links in the buffer.
|
|
This can be toggled with `markdown-toggle-inline-images'
|
|
or \\[markdown-toggle-inline-images]."
|
|
(interactive)
|
|
(message "monkeypatched function called")
|
|
(unless (display-images-p)
|
|
(error "Cannot show images"))
|
|
(save-excursion
|
|
(save-restriction
|
|
(widen)
|
|
(goto-char (point-min))
|
|
(while (re-search-forward markdown-regex-link-inline nil t)
|
|
(let* ((start (match-beginning 0))
|
|
(imagep (match-beginning 1))
|
|
(end (match-end 0))
|
|
(file (funcall markdown-translate-filename-function (match-string-no-properties 6))))
|
|
(when (and imagep
|
|
(not (zerop (length file))))
|
|
(unless (file-exists-p file)
|
|
(let* ((download-file (funcall markdown-translate-filename-function file))
|
|
(valid-url (ignore-errors
|
|
(member (downcase (url-type (url-generic-parse-url download-file)))
|
|
markdown-remote-image-protocols))))
|
|
(if (and markdown-display-remote-images valid-url)
|
|
(setq file (markdown--get-remote-image download-file))
|
|
(when (not valid-url)
|
|
;; strip query parameter
|
|
(setq file (replace-regexp-in-string "?.+\\'" "" file))
|
|
(unless (file-exists-p file)
|
|
(setq file (url-unhex-string file)))))))
|
|
(when (file-exists-p file)
|
|
(let* ((abspath (if (file-name-absolute-p file)
|
|
file
|
|
(concat default-directory file)))
|
|
(image
|
|
(cond ((and markdown-max-image-size
|
|
(image-type-available-p 'imagemagick))
|
|
(create-image
|
|
abspath 'imagemagick nil
|
|
:max-width (car markdown-max-image-size)
|
|
:max-height (cdr markdown-max-image-size)))
|
|
(markdown-max-image-size
|
|
(create-image abspath nil nil
|
|
:max-width (car markdown-max-image-size)
|
|
:max-height (cdr markdown-max-image-size)))
|
|
(t (create-image abspath)))))
|
|
(when image
|
|
(let ((ov (make-overlay start end)))
|
|
(overlay-put ov 'display image)
|
|
(overlay-put ov 'face 'default)
|
|
(push ov markdown-inline-image-overlays)))))))))))
|
|
|
|
; register hook
|
|
(setq markdown-translate-filename-function
|
|
#'firehose/markdown-translate-image-path)
|