2011-08-08 62 views
2

我正在使用組織模式並希望將我的日程(example of an agenda)導出爲文本文件,以便我可以用conky顯示它。該org-mode manual擁有此命令行例子來做到這一點:從命令行運行emacs並處理鎖定的文件

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

我修改這個像這樣:

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

我有這一套作爲cron作業每5分鐘運行一次。它工作得很好,除非我真的打開了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查詢。我可以繼續,因爲我不認爲org-agenda對文件做任何事情,因此它不會損害任何東西......但我不知道如何告訴emacs「強制」或選擇「繼續「如果遇到問題。我需要一些非互動的東西。

因此,要總結,我的想法是嘗試:

  • 傳遞--force選項或類似emacs的,使其繼續在暫停
  • 看看導出的tmp文件有任何行並相應地處理它
  • 告訴emacs的運行中「只讀模式」(但我不認爲它的存在)

的主要問題是:用cron,我不在那裏告訴處理做什麼,等等只需將一個空文件作爲導出結果。我該如何處理這個鎖定的文件業務,像cron這樣的「盲」過程,無法迴應?

我試過問郵件列表以及沒有工作結果。 [1]我想知道這裏有人可能有想法。

[1] http://www.mail-archive.com/[email protected]/msg45056.html

+1

關於使用'wc -l'測試空文件的無用性的切線註釋。 'man test'(特別是'test -s')或者'grep',如果你想查找非空行或者其他東西。 – tripleee

+0

@tripleee:謝謝。任何想象力都不是我的專家。謝謝你的提示! – Hendy

回答

1

您是否嘗試過複製文件,而無需使用emacs? 把你的crontab:

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

有規律的 「CP」 命令不得複製emacs的鎖。當然,如果在cp命令期間保存日程安排,偶爾會遇到損壞的文件,但這應該不會太糟糕。

+0

有趣的建議。我有幾個問題:1)組織模式從.emacs獲得議程候選人名單;因此我想我需要一個單獨的.emacs文件來告訴它看起來在/ tmp/dir/vs.〜/ org。2)在那張紙上,我每次都需要複製一個目錄,因爲我有大約10個文件被拖出,而不僅僅是一個。這在我的問題中可能會令人困惑 - 我舉了一個鎖投訴的例子。如果我有幾個打開,我得到每個錯誤。 – Hendy

+0

1)不是。您引用的「組織模式」手冊中的第三個示例顯示瞭如何更改文件位置。您可以在main .emacs中定義函數,並從命令行調用它來縮短命令行。 2)沒問題,'mkdir -p/tmp/dest && cp dir/*。org/tmp/dest /'會高興地複製多個文件。如果你的文件很大(300K +),你可以使用rsync,但我認爲這將是矯枉過正。 – theamk

+0

我只是在emacs打開的情況下讓cron作業不能運行一段時間。由於缺乏更新來重新審視這個問題,我感到沮喪,您的解決方案絕對有效!我調整了簡單的bash腳本來檢查/ tmp/org;如果它不存在,請創建它。然後cp〜/ org/*。org/tmp/org /。然後運行上面的命令,但使用(如你指出的!)'org-agenda-files(quote(「/ tmp/org」))''選項。奇妙的作品。 – Hendy

相關問題