orgmode有各种各样的好处,主要是文本折叠和缩进的功能实在太好用,gtd也功 能很强大。无论是用于hugo编辑工具还是作为笔记的主力,都是很好的实践。 但有一个问题,是emacs和org的弱项-图片处理。
在word等所见即所得的编辑工具中,插入图片可以很顺利的完成。而要在org文 档中插入一个图片,就麻烦很多。首先需要下载图片到一个特定的目录,插入图 片的时候,还需要用链接的方式把目录打出来。显示也不直观,往往在生成pdf 文档后,才发现图片过大或者过小,需要调整。随着时间的推移,org文档依赖 的图片也会增删改,导致文档的图片丢失。
但emacs和org有高度可定制性,通过搜索资料,找到了几乎完美的解决办法。
org-download
它可以现实以下功能:
- 通过鼠标拖拽图片到emacs里,实现图片插入
- 通过绑定的快捷键激活外部截屏工具,以鼠标选定截屏区域,选好后直接插入 截图
安装
在emacs的emlp库中找到后,i选择安装,然后x执行就可以。
配置
- 官网的配置
(require 'org-download)
(add-hook 'dired-mode-hook 'org-download-enable)
上面的配置仅能实现鼠标拖拽插入图片的功能,
- 我的配置,其中定义annotate这个函数是为了避免每次截图都显示图片的一些注
释信息。
(require 'org-download)
(add-hook 'dired-mode-hook 'org-download-enable)
(setq org-download-annotate-function (lambda (_link) ""))
- 通过配置模式生成的配置
(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(org-agenda-files '("~/.todos/journal.org" "~/.todos/gtd.org" "~/.todos/work.org")) '(org-download-screenshot-method "screencapture -i %s") '(package-selected-packages '(org-download yasnippet ox-hugo openwith elpy magit magit-gerrit magithub)))
org-download默认依赖的命令行截屏工具如下:
- Windows:imagemagick/convert;
- Linux:gnome-screenshot, scrot, gm, xclip;
- MAC:screencapture
通过以上配置,就可以在mac上,配置图片截屏工具使用screencapture,实现截 屏图片快捷插入,也可以拖砖插入。
截图保存的图片名称:时间戳+截屏软件名称.png
截图保存的图片路径:以org文档的最外层标题为目录名,保存的org文档的同级目录下,如果不存在则创建
截屏的命令是
M-x -d-sc
也可以自己定义一个快捷键。
- 参考网上部分配置参考,图片存储路径是文件名,设置org模式下截图快捷键
(defun my-org-download-method (link) (let ((filename (format-time-string "screenshot_%Y%m%d_%H%M%S.png")) (dirname (file-name-sans-extension (buffer-name)) )) ;; if directory not exist, create it (unless (file-exists-p dirname) (make-directory dirname)) ;; return the path to save the download files (expand-file-name filename dirname))) (setq org-download-method 'my-org-download-method) (add-hook 'org-mode-hook (lambda() (local-set-key (kbd "C-c p") 'org-download-screenshot)))
inline images
org提供了一个功能,可以显示图片,在org文档中,如果图片还是没有显示,只 是显示了链接,可以切换到显示 inline image,快捷键是 C-c C-x C-v 。
使用yasnippet定义图片显示格式宏
插入的图片,有时候需要指定一些显示效果,比如,靠左,靠右,定义像素值, 定义图片显示比例等。org模式下,有各种对图片的显示控制参数,如下
#+CAPTION: name
#+ATTR_HTML: :title tille1 :align centre
#+ATTR_HTML: :width 10% :height 20%
或者指定像素值
#+ATTR_ORG: :width ~
#+ATTR_HTML: :width ~
这些值的指定,可以用yasnippet宏来实现,比如定一个picv的宏,在org模式中, 只要输入picv然后按tab键,就可以扩展成定义的格式,比较简便。
使用效果
上图中,第二个链接是通过指定陪孩子,不显示图片注释信息。第三个链接是加
入了图片的显示定义参数。