新建org文件如何自动添加上一些header

如何在新建的org文件中自动添加如#+LATEX_CLASS 和+# -- eval: (setq org-download-image-dir (file-name-sans-extension (buffer-name))); --等内容?就是相当于一个模板。

这个包可以。

用 Emacs 自带的 auto-insert 应该能达成要求,不过我对这个没怎么了解过。

我个人用的是自己写的一个比较简单的东西。

如果要用的话只要将两处 “~/模板” 改成自己模板的存放目录即可,模板文件名跟后缀名相同,比如 org 文件的模板文件名就是 org.org;然后需要安装 yasnippet。

打开一个文件时会查找 “~/模板” 目录下有没有相应的模板文件,有的话就将内容导入,然后使用 yas-expand-snippet 进行处理。

(advice-add 'find-file :after
            #'(lambda (&rest _)
                (let* ((name (and (buffer-file-name)
                                  (not (file-exists-p (buffer-file-name)))
                                  (file-name-extension
                                   (concat "arbitrary"
                                           (file-name-nondirectory
                                            (buffer-file-name))))))
                       (realname (and name (concat name "." name))))
                  (and realname
                       (member realname (directory-files "~/模板"))
                       (insert-file-contents (concat "~/模板/" realname))
                       (yas-expand-snippet (buffer-string)
                                           (point-min) (point-max))))))

你真的太厉害了,就要的这种效果。

C-c C-e #

可能有惊喜哦(

并没有任何惊喜。

人家需求不是 C-c C-e #

不是有find-file-hook吗,为啥要改掉find-file的处理逻辑呢

用你说的怎么实现?

这算是个elisp的入门测试吧

改成 (add-to-list 'find-file-hook (lambda xxxxxxxxxxxxxxxxxxx)) 就行了。 另外还有个 find-file-not-found-functions 专门用来给没有找到文件时用的,lambda中都不用再判断文件是否存在了

额,我当初实现的时候应该也是先用的 find-file-hook,至于为什么后来弃了,具体原因忘了,好久之前写的了

刚刚试过了,也可以实现!

皮肤好帅,分享一下可以吗?