由于emacs互锁文件,我想通过cron运行org-mobile命令,但使用emacsclient:
emacsclient -nw --eval "(org-mobile-pull)" --eval "(org-mobile-push)"但是如果没有emacs服务器在运行,我希望命令在emacs批处理模式下运行:
emacs --batch --eval "(org-mobile-pull)" --eval "(org-mobile-push)"我不知道如何做到这一点,所以好奇,如果有人有任何想法。
发布于 2012-07-15 14:58:56
我很好奇你最终想要实现什么?为什么不总是启动一个新的Emacs进程呢?额外的开销将只有零点几秒。
在我2岁的MBP上:
%时间emacs --批处理--eval nil emacs --批处理--eval nil 0.03s用户0.01s系统87% cpu 0.054总计
沿着您当前的路径,您可以检查emacsclient的退出代码,以决定是否应该批量运行
if emacsclient --eval nil >/dev/null 2>&1; then echo "run client"; else echo "run emacs"; fi编辑:我看到你想为偷锁问题编写一个答案。请查看我对使用ask-user-about-lock解决此问题的question的回答。
编辑:因此我们的想法是重新定义ask-user-about-lock以返回t。请参阅文档:
ask-user-about-lock是‘userlock.el’中的一个自动加载的Lisp函数。
(询问-用户-关于-锁文件对手)
当用户想要编辑文件但被对手锁定时,询问用户该怎么做。这个函数有三个选择: do (signal‘文件锁定(列出文件对手))以避免编辑文件return t(抓取文件上的锁) return nil (即使文件被锁定也要编辑文件)你可以重新定义这个函数在这三个选项中选择你喜欢的任何方式。
背
脚本示例(记住chmod)
#!/usr/bin/env emacs --script
(defun ask-user-about-lock (file opponent)
t)
(org-mobile-pull)
(org-mobile-push)发布于 2012-07-15 14:53:16
如果服务器未运行,emacsclient将返回错误代码。如果您确定要eval的代码将使emacsclient正常退出,则以下方法应该有效:
emacsclient -nw --eval "(org-mobile-pull)" --eval "(org-mobile-push)" 2>/dev/null || emacs --batch --eval "(org-mobile-pull)" --eval "(org-mobile-push)"但是请注意,这种简单的方法会丢弃您可能感兴趣的潜在错误消息(但仅在运行emacsclient的情况下)。
https://stackoverflow.com/questions/11489846
复制相似问题