2

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)"

誰かが何かアイデアを持っているなら、私はこれをどのように達成するのかとても好奇心が強いのかわかりません。

4

2 に答える 2

6

あなたが最終的に何を達成しようとしているのか知りたいですか?なぜ常に新しいEmacsプロセスを開始しないのですか?追加のオーバーヘッドはほんの一瞬です

私の2歳のMBPについて:

%time emacs --batch --eval nil emacs --batch --eval nil 0.03s user 0.01s system 87%cpu 0.054 total

現在のパスをたどると、終了コードを確認してemacsclient 、バッチで実行する必要があるかどうかを判断できます。

if emacsclient --eval nil >/dev/null 2>&1; then echo "run client"; else echo "run emacs"; fi

編集:あなたはロックを盗む質問への答えをスクリプト化したいと思います。これを解決するために使用するためのこの質問に対する私の答えをチェックしてくださいask-user-about-lock

編集:つまり、ask-user-about-locktを返すように再定義するという考え方です。ドキュメントを参照してください:

ask-user-about-lockは、`userlock.el'に自動ロードされたLisp関数です。

(ファイルの対戦相手にユーザーに尋ねる)

ファイルを編集したいが、相手によってロックされている場合の対処方法をユーザーに尋ねます。この関数には、次の3つの方法を選択できます。ファイルの編集を控えるdo(signal'file-locked(list FILE OPPONENT))return t(ファイルのロックを取得)return nil(ファイルを編集しますロックされています)。この関数を再定義して、これら3つの選択肢から好きな方法で選択できます。

[戻る]

スクリプトの例(chmodを忘れないでください)

#!/usr/bin/env emacs --script

(defun ask-user-about-lock (file opponent)
  t)

(org-mobile-pull)
(org-mobile-push)
于 2012-07-15T06:58:55.837 に答える
1

サーバーが実行されていない場合、emacsclientはエラーコードを返します。必要なコードが正常に終了することが確実な場合はevalemacsclient次のように機能するはずです。

emacsclient -nw --eval "(org-mobile-pull)" --eval "(org-mobile-push)" 2>/dev/null || emacs --batch --eval "(org-mobile-pull)" --eval "(org-mobile-push)"

ただし、この単純なアプローチでは、関心のある可能性のある潜在的なエラーメッセージが破棄されることに注意してください(ただし、emacsclientが実行されている場合のみ)。

于 2012-07-15T06:53:16.273 に答える