2011-08-08 9 views
2

私はorg-modeを使用しています。私の議題(example of an agenda)をテキストファイルにエクスポートして、conkyで表示できるようにしています。私はそうのようにこれを変更したコマンドラインからの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 

私は5分ごとに実行するようにcronジョブとしてこのセットを持っているorg-mode manualはこれを行うには、このコマンドラインの例を提供しています。私は実際にemacsを開いていない限り素晴らしい作品です。その後、ファイルagenda-export.txtが空であることがわかりました。 cronを経由coammandライン対から手動でこれを実行するには、私は(私が開いているファイルに応じて、または類似の)このエラーが出る:

...~/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.txtagenda-export.txtに移動します。

しかし、私はこのようなスクリプトを実行しようとすると、ロックを盗み出すか、続行するか、終了するかについて、同じemacsの問い合わせを受けています。 org-agendaがファイルに対して何もしないので、何も悪影響を及ぼさないと思うので、私は進歩しても問題ありません...しかし、私はemacsに "強制"または "続行"する方法を知らない問題が発生した場合。私は非対話的なものが必要です。

  • をemacsのに--forceオプションまたは類似を渡すことが
  • が見一時停止に進行させるために、エクスポート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

@トライプルー:ありがとう。私は想像力のどんなストレッチでもバッシュエキスパートではありません。ヒントをありがとう! – Hendy

答えて

1

はEmacsを使用せずにファイルをコピーしようとしたことがありますか?あなたのcrontabで プット:

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

通常の "CP" コマンドはemacsのロックをコピーするべきではありません。もちろん、cpコマンドの間に議題を保存すると、しばらくの間にファイルが破損する可能性がありますが、あまり悪くはありません。

+0

面白い提案。私はいくつかの質問があります:1)org-modeは.emacsからの議題候補のリストを取得します。だから、私は/ tmp/dir /〜/ orgを調べるように別の.emacsファイルが必要だと思う。2)そのノートでは、毎回dirをコピーする必要があります.1つではなく、約10個のファイルが取り出されています。それは私の質問で混乱しているかもしれません - 私はロックの苦情がどのように見えるかの例を挙げていました。私はいくつか開いている場合、私はそれぞれのためのエラーを取得します。 – Hendy

+0

1)本当にありません。参照した「org-mode」マニュアルの3番目の例は、ファイルの場所を変更する方法を示しています。メインの.emacsで関数を定義し、コマンドラインから呼び出すことで、コマンドラインを短くすることができます。 2)問題はありません。 'mkdir -p/tmp/dest && cp dir/*。org/tmp/dest /'は複数のファイルをうまくコピーします。あなたのファイルが大きければ(300K +)、rsyncを使うことができますが、これは過度のものになると思います。 – theamk

+0

私はちょうどemacsが開いていた場合、cronジョブが実行されないようにすることで、これとしばらく一緒に住んでいました。私はこれを再訪するために更新が不十分で十分に不満を抱きました。あなたの解決策は間違いなく機能します!私は/ tmp/orgを調べるために私の単純なbashスクリプトを調整しました。存在しない場合は作成してください。次に、cp〜/ org/*。org/tmp/org /となります。上記のコマンドを実行しますが、(あなたが指摘したように) 'org-agenda-files(quote("/tmp/org "))'オプションを使用してください。すばらしく動作します。 – Hendy

関連する問題