分享一下我在windows下的的粘贴函数,需要安装imagemagick。
- 使用任何应用软件截屏或者复制图片到剪贴板,在org-mode里粘贴即可。图片会自动保存到当前文件目录下的images文件夹里。
- 该函数支持粘贴剪贴板的文字和图片,所以你可以将
Ctrl-y绑定到该函数上,然后如粘贴文字一样粘贴图片,当然文字也OK。 -
Ctrl-u Ctrl-y会提示为图片命名,并在文档中引用该图片,同时会提示为图片插入caption。 - 在org capture buffer中粘贴时,该函数会找到目标文件的目录,并将图片保存到该目录中。
(defun org-insert-clipboard (&optional captionp)
(interactive "P")
(let* ((image-dir
(if (not (buffer-file-name))
(cond ((string-prefix-p "CAPTURE-[0-9]" (buffer-name))
(let ((buffer-name (replace-regexp-in-string "CAPTURE-[0-9-]*" "" (buffer-name))))
(concat (file-name-directory (buffer-file-name (get-file-buffer buffer-name))) "images")))
(t (yank) (error "")))
"images"))
(fname (concat (make-temp-name "image-") (format-time-string "%Y%m%d-%H%M%S")))
(image-file (concat image-dir "/" fname ".png"))
(exit-status
(call-process "convert" nil nil nil
"clipboard:" image-file)))
(if (zerop exit-status)
(progn
(unless (file-exists-p image-dir) (make-directory image-dir))
(if captionp
(let ((rename (read-string "Filename to rename the temp images: ")))
(rename-file image-file (concat image-dir "/" rename ".png") t)
(insert (format "#+CAPTION: %s label:fig:%s\n" (read-string "Caption: ") rename))
(kill-new (format "Fig. ref:fig:%s " rename)))
(insert (format "[[file:%s]]" image-file))
(org-display-inline-images)))
(when captionp (user-error "No images in clipboard."))
(yank))))