数位板+emacs,简直不要太爽

先上一张效果图

首先介绍一下 “workflow”

  1. 首先,我会先到xournal++里面画完图。
  2. gnome桌面有局部截图的快捷键的,是shift+ptrscr,如果同时按住ctrl的话,就可以不保存到截图文件夹而是保存到clipboard,按这个快捷键进行框选截图很方便。
  3. 再在emacs内使用org-download的org-download-clipboard(在doom-emacs中可以使用 SPC m a p)来粘贴就好了。

再水一下自己的心路历程

刚刚开始使用emacs的org-mode做笔记的时候就有一个想法:打字比写字可爽多了,但是如果可以在org-mode里面方便地画图就好了。最近在忙着期末复习,我又不太喜欢手写,所以笔记都是用org-mode做的,便越觉得在org-mode里面完美做笔记需要一个哪怕再简陋的画图的功能。

碰巧,最近我从女朋友那里得到了一块三手(可能是四手了)的wacom数位板,拿到之后就觉得可以试试用电脑代替一下ipad做笔记,便以"gnome桌面上的手写笔记软件"之类的关键词找了一下,找到了一个叫xournal++的软件来做这件事情。

后面突发奇想,

  1. 为什么都在电脑上面了,为什么还要写字,用我心爱的机械键盘打字不香嘛?
  2. 都打字了,为什么要在这个不熟悉的软件里面打字,用org-mode做笔记它不香嘛?
  3. emacs 虽然没有可以方便用数位板进行绘画的插件,但是我可以截图啊!

然后用这个思路去试了一下,我发现我已经爱上学习了。

13赞

cool!

不过这么搞有点占桌面,我现在笔记本+显示器+键盘都有点捉襟见肘了.

ot一下,居然能在emacs社区看到学经典控制论的非程序员。

1赞

哦~,这里还有学通信工程的非程序员

1赞

确实有点费空间,但是我比起你来没有外接显示器,所以空间占用率尚可。我之前是用脚本检测外接键盘,然后如果接了外接键盘就禁用笔记本的键盘,然后就将我的键盘直接放在笔记本的键盘区上面使用。

现在我的使用方法是把数位板叠在键盘区上面,然后键盘直接放在腿上打字 :smiley:

尝试了一下类似的做法,有一点疑问想请教一下:

看您截图里,应该采用的是attachmentorg-download-method。这样的话,所有保存的图片会被存到~/org/.attach下一个很长串的目录下我个人觉得这个做法不太清爽;另外,在插入了attachment后,headline会出现一个对应的:ATTACH:的tag,导出成pdf(latex)的话就会出现在相应的标题中,比较不美观

我自己采用的方法是把org-download-method设置为directory,这样还能够设置org-download-image-dirorg-download-heading-lvl,方便整理所有的图片文件。但这样做也会带来一定的问题,最主要的就是在导出pdf(latex)时,可以看到在对应的latex文档中,出现的不是\includegraphix而是url,目前我还没研究出为什么会这样。

attach的tag不导出就是了,将org-export-with-tag(大概叫这个名字)设置成nil就好了。我导出的时候也不太喜欢导出tag

感谢,现在我终于把这个机制弄得比较舒服了。

org-mode下设置

  (setq org-export-with-tags nil)

来取消导出时的tag,然后设置

(setq org-download-method 'attach
        org-attach-id-dir "."
        org-attach-preferred-new-method 'dir
        org-download-timestamp "%Y-%m-%d_%H-%M-%S_")

作为截图保存的机制。我不太喜欢把attachment的文件放入~/org目录,另外org-download-method设置为directory有我上面说的导出bug。

这样弄完之后感觉效果就很顺手了,我用的是WSL的emacs,X410可以设置共享剪贴板,目前我可以通过在windows下Win+Shift+S截图,然后直接在emacs中SPC m a p粘贴,不过唯一的小遗憾是如果当前的headline没有设置:DIR:的话,会要求输入一个目录以存放attachment,暂时没有找到自动以一级标题作为目录名的方法。不过总体来说感觉已经很爽了,感谢启发!

1赞

最近又找到了新的玩法,参考一个大佬的blog post

首先是不要用doom自带的org-download,也就是把init.el当中的+dragndrop去掉,然后手动在package.el中添加(package! org-download),然后在config.el中设置

;; ask for the filename before pasting an image
;; filename should end with ".png/.jpg/.svg"
(defun zz/org-download-paste-clipboard (&optional use-default-filename)
  (interactive "P")
  (require 'org-download)
  (let ((file
         (if (not use-default-filename)
             (read-string (format "Filename [%s]: "
                                  org-download-screenshot-basename)
                          nil nil org-download-screenshot-basename)
           nil)))
    (org-download-clipboard file)))

(after! org
  (setq org-download-method 'directory
        org-download-image-dir "images"
        org-download-heading-lvl nil
        org-download-timestamp "%Y%m%d-%H%M%S_"
        org-image-actual-width 500)
  (map! :map org-mode-map :localleader "ap" #'zz/org-download-paste-clipboard)
  )

;; disable electric-indent-mode in org
(add-hook! org-mode (electric-indent-local-mode -1))

这里大佬自定义了一个函数,使得我们可以在粘贴图片时自行命名(注意要加拓展名,.png/.jpg/.svg都可以但.bmp似乎不可以),然后就可以把它绑定到原先的键位SPC m a p上。

此外还有在org-mode中禁用了electric-indent,这个我不是非常了解,但也照抄了。

然后还有一些我个人的设置

;; 导出时不显示tag(如果method为attach会在headline后添加对应tag)
  (setq org-export-with-tags nil)
  ;; 导出为latex时,所有图片采用0.6\linewidth,如果想用图片原宽,设置为""即可
  (setq org-latex-image-default-width "\\0.6linewidth")
  ;; hyperref设置,主要是生成目录时避免红框
  (setq org-latex-hyperref-template "\\hypersetup{\n pdfauthor={%a},\n pdftitle={%t},\n pdfkeywords={%k},\n pdfsubject={%d},\n colorlinks=true,\n linkcolor=black\n}\n")
  ;; 隐藏#+DOWNLOADED的标注,我这里没有启用
  ;; (setq org-download-annotate-function (lambda (_link) ""))
2赞

我最近没有什么要手写的笔记了,而且由于受到键位原教旨主义的感召,自己开始攒配置了,所以一直没有重新来设置这个。先马住,来年开学的时候抄一下。