異なる Emacs プロセスから同じファイルを操作する Emacs Lisp が必要です。そのため、次のスクリプトを作成して、どのようにlock-buffer
機能するかを確認しました。ただし、2 番目の Emacs プロセスでファイルをロックしようとすると停止します ( find-and-lock-file $es2 /tmp/dummy
)。emacsclient --socket-name server-2 --eval '(kill-emacs)'
Emacs プロセスを停止するには、別の端末に移動して送信する必要があります。でUIを開いた場合、Emacsはファイルに対して何をすべきかを尋ねますがemacsclient -t --socket-name server-2
、すべてをバックグラウンドで実行し、Emacsプロンプトを使用してプロセスを続行することを避けたいです。これどうやってするの?ファイルのロックに失敗したときにEmacsにエラーを発生させることは可能ですか?
編集: @event_jr を使用して回答を提案しましたfile-locked-p
。ほとんどの場合、うまくいくと思います。file-locked-p
ただし、との実行の間に、他の Emacs プロセスがファイルをロックできると思いますlock-buffer
。だから、私はこの質問を開いたままにします。解決しました。ありがとう、@event_jr!
#!/bin/bash
es1="server-1"
es2="server-2"
start-server () {
emacs -q --daemon --eval "(progn (setq server-name \"$1\") (server-start) (require 'cl))"
}
emacs-eval () {
echo "@$1 >>> $2"
emacsclient --socket-name "$1" --eval "$2"
}
kill-emacs () {
emacs-eval "$1" '(kill-emacs)'
}
find-and-lock-file () {
emacs-eval "$1" "(progn (find-file \"$2\") (set-buffer-modified-p t) (lock-buffer))"
}
start-server $es1
start-server $es2
find-and-lock-file $es1 /tmp/dummy
find-and-lock-file $es2 /tmp/dummy
kill-emacs $es1
kill-emacs $es2