Org mode 的 agenda file最好每次重起自动加载,否则执行 org-agenda 和 org-capture 都会有一秒多的延迟。Spacemacs好像就是在启动的时候载入这些文件的,所以加载时间特别久。
我目前的方案是
(use-package org
:defer 4
:config
(mapc 'find-file-noselect (org-agenda-files))
;; 所有的 .org 都在 org-agenda 目录里面,直接在启动4s之后全部加载
)
这么做有个优点就是不占启动时间,可以把启动的时间优化到1s以内。
有个明显的缺点,基本上启动之后有个明显的延迟,基本上只能在scratch里面编辑了
然后我找到了 async
但是 不知道怎么用,下面这个函数运行之后没有结果。。。
(async-start
(lambda ()
(require 'org) ;; 保证 org-agenda-files 可用
(mapc 'find-file-noselect (org-agenda-files)))
'ignore)
不知道该怎么实现?
async 不是这样用的,它另外启动一个 emacs 线程,和原来的线程没有任何关系的。比如你用 org asnyc 导出的时候,需要一个启动文件给另外的线程。
1 个赞
启动要2分钟的表示不差这点时间。
我觉得不能用 async 实现。因为它的原理是重开一个emacs 来在“后台”完成一些耗时工作,比如编译,收邮件。
这些后台的Emacs 和前台不共享变量,需要在启动时把必须的数据传递过去,然后一般也不需要传递结果给前台。所以应该没法用来大幅提升加载配置速度。
1 个赞
我用 systemd 在系统启动时运行 emacs daemon,然后用 emacsclient -c -n 启动,秒开,哈哈
我觉得后台打开文件的时候不应该卡住画面啊,是我用的方法不对吗,find-file-noselect 之后画面确实卡住了
可以搞两个启动文件,两套配置,虽然有点折腾了。。。
这是emacs 如果空闲5min,则自动显示 org agenda buffer(空闲的意思是这段时间没有任何按键或鼠标事件)
你可以调整下 时间, 调整下是否repeat
它只是在emacs空闲多少秒的之后执行一个函数,
如果你打开emacs 马上就用它 ,那还是慢。
(run-with-idle-timer 300 t 'show-todo-list-after-init) ;idle 300=5*60s,show todo list
;(run-with-timer SECS REPEAT FUNCTION &rest ARGS)
;(run-with-idle-timer SECS REPEAT FUNCTION &rest ARGS)
(defun show-todo-list-after-init(&optional frame)
(require 'org-agenda)
(dolist (f org-agenda-files)
(unless (file-exists-p f)
(setq org-agenda-files (delete f org-agenda-files))))
(when org-agenda-files
(call-interactively 'org-todo-list)
(switch-to-buffer "*Org Agenda*")))
3 个赞
你这个函数每5分钟执行一次,然后每次会跳出来一个窗口啊。。。
而且如果我没理解错的话,第一次执行还是会卡住的,等于一次性全部加载文件了
额,我去读了 run-with-idle-timer 的文档,你的方法是正确的。。又学到了一招。。