从命令行运行emacs并处理锁定的文件

时间:2011-08-08 22:00:45

标签: emacs command-line org-mode

我正在使用org-mode并希望将我的议程(example of an agenda)导出到文本文件中,以便我可以用conky显示它。 org-mode manual使用此命令行示例来执行此操作:

emacs -batch -l ~/.emacs -eval '(org-batch-agenda "t")' | lpr

我对此进行了修改:

emacs -batch -l ~/.emacs -eval '(org-batch-agenda "e")' \
> ~/org/aux/agenda-export.txt

我将此设置为每5分钟运行一次的cron作业。除非我真的打开emacs,否则它的效果很好。然后我注意到文件agenda-export.txt是空的。在从coammand行与通过cron手动运行时,我收到此错误(或类似于我打开的文件):

...~/org/file.org locked by jwhendy (pid 10935): (s, q, p, ?)?

我打算编写一个可能导出到agenda-export-test.txt的脚本,然后检查一个空文件或没有行(wc -l == 0可能?)。如果为true,请保留现有文件并删除agenda-export-test.txt。如果没有,请将agenda-export-test.txt移至agenda-export.txt

但是......当我尝试运行这样的脚本时,我遇到了关于是否窃取锁定,继续或退出的相同emacs查询。我很好继续,因为我不认为组织议程对文件做任何事情因此它不会伤害任何东西......但我不知道如何告诉emacs“强制”或选择“继续“如果遇到问题。我需要一些非互动的东西。

总而言之,我的想法是尝试:

  • 传递--force选项或类似于emacs以使其在暂停时继续
  • 查看导出的tmp文件是否有任何行并相应处理
  • 告诉emacs以“只读模式”运行(但我认为它不存在)

主要的问题是,使用cron,我不是要告诉进程要做什么,所以它只是将一个空文件作为导出的结果。如何通过像cron那样无法响应的“盲目”过程来处理这个锁定的文件业务?

我也尝试过询问邮件列表而没有工作结果。 [1]我想知道这里的某人是否有想法。

[1] http://www.mail-archive.com/emacs-orgmode@gnu.org/msg45056.html

1 个答案:

答案 0 :(得分:1)

您是否尝试过不使用emacs复制文件? 放入你的crontab:

cp ~/org/file.org /tmp/export.org && emacs -batch .... /tmp/export.org ..

常规“cp”命令不应复制emacs锁。当然,如果你在cp命令期间保存议程,偶尔你可能会得到一个损坏的文件,但这不应该太糟糕。