之前的方式一直很土,先把图片下载到固定目录,然后再去引用。感谢 org-download + pngpaste,现在的工作流:
- Cmd+Ctrl+Shift+4 进行截屏,并复制到剪贴板
- 运行org-download-screenshot 复制到 org 中
- 完美
- 具体配置可参考:
之前的方式一直很土,先把图片下载到固定目录,然后再去引用。感谢 org-download + pngpaste,现在的工作流:
org download 貌似可以直接把图片拖进emacs
是支持拖拽,但是我的emacs 一般都是全屏的,剪贴板是更方便的方式。
我从桌面或浏览器拖进去的话,是在emacs buffer里打开而不是插入一个链接,这是什么情况?
macOS / doom-emacs
我的Safari拖入图片是个链接,Chrome正常,见鬼
Mac下的话,其自带的命令行截屏工具screencapture挺好用的,支持窗口切换,org-download也有集成,把screenshot-method换成screencapture即可。
今天研究了一下,可以直接使用elisp实现复制macOS剪贴板里的图片,毕竟我习惯使用QQ微信的cmd-shift-a截屏,可以先从kill-ring中得到图片,然后可以直接写入文件
(let ((image (get-text-property 0 'display (current-kill 0))))
(when (or (not (consp image)) (not (eq (car image) 'image)))
(error "No image found"))
(with-temp-buffer
(let ((file (plist-get (cdr image) :file)))
(if file
(if (not (file-exists-p file))
(error "File %s no longer exists" file)
(insert-file-contents-literally file))
(insert (plist-get (cdr image) :data))))
(write-region (point-min) (point-max)
(read-file-name "Write image to file: "))))
也可以结合org-download
来使用
(defun maple/org-download-yank()
(interactive)
(let ((file org-download-screenshot-file)
(image (get-text-property 0 'display (current-kill 0))))
(if (or (not (consp image)) (not (eq (car image) 'image)))
(org-download-yank)
(with-temp-buffer
(insert (plist-get (cdr image) :data))
(let ((coding-system-for-write 'no-conversion))
(write-region nil nil file)))
(when (file-exists-p file)
(org-download-image file)
(delete-file file)))))
不过有一个问题,连续截屏情况下只会粘贴第一张图片,不知道是什么原因