Closed tkf closed 12 years ago
すいません、二番目のハングする問題は e2wm 関係ありませんでした。
補足ですが、 emacsclient --tty
で接続しても、そのクライアント(フレーム)を閉じずに Emacs 本体に戻ってこれば e2wm は有効のままです。 その後、クライアントを閉じると e2wm が無効になります。
emacsclient は関係なく、 C-x 5 2
と C-x 5 0
などで新しいフレームを作って消しても同様の問題が出るようです。
良い策かどうか微妙な気がしますが、 #35 で修正できたと思います。
e2wm:pst-minor-mode-enable/disable-frame で add/remove-hook が呼ばれているのはなぜでしょうか? frame ごとに挙動を変えるなら、 hook や advice は入れっぱなしにして、 hook/advice 内で e2wm:managed-p を呼んで挙動を変えるほうがロバストな気がします。何か事情があるんでしょうか?
今回もありがとうございます!
debug がマクロなのは無効時の呼び出しコストを気にしていたからなのですが、複数の方から不便だという意見をいただいていますので関数(defsubst?)にしようと思います。
emacsclient とフレームは後回しにしていたところでした。e2wm:managed-p で分岐する方法は(自分の中では)後で確立された方法だったので、hookを操作しているのは不完全な実装です。hook, advice 入れっぱなしで managed-p で挙動を変えるほうがいいと思います。ただ、別フレームで同一バッファを表示したときに矛盾なく動くようにするにはどうすればいいか研究が必要だなと考えていました。
今回の問題ですが、こちらでも再現させてみました。以下の動きで合っているでしょうか?
○パターン1 (1-1) e2wmのフレームがある (1-2) emacsclient --tty でファイルを開く (1-3) emacsclient 上で編集してクライアントを終了させる (1-4) もとのフレーム上でe2wmが中途半端な状態になってe2wmの機能が動かなくなる
○パターン2 (2-1) e2wmのフレームがある (2-2) emacsclient --tty でファイルを開く (2-3) そのままもとのフレーム上に戻るとe2wmが中途半端な状態になってe2wmの機能が動かなくなる
頂いたパッチはパターン1が修正されるという理解であっていますか?
そうです、パターン1を修正しました。ちなみに、 「emacsclient --tty でファイルを開く」を「C-x 5 2 (make-frame-command) でフレームを開く」に変更しても同様の問題がおきます。 あと、 emacsclient --tty でファイルを開くかどうかは関係ありませんでした。 scratch バッファを開いても同様の問題がおきました。
fb9b71ded89399be91fe8d4df85c966b629d534e で C-x 5 2 で開いた場合の修正をし、 7f1679122daae7de944e69fad7021ac112d88d62 で emacsclient --tty で接続して終了させた場合にも対応させました。
ただ、パターン2はもともと問題なかった気がします(二番目のコメント参照)。今回のパッチで逆にバグ入れてしまいましたか?こちらでは、パッチの前後で問題出ません。
了解です。
こちらの環境ではパッチ適用前からパターン1,2ともダメだったので、もしかしたらまたバージョン依存かもしれません。 ちょっとver24で確認します。今週も移動などが重なるので少々お待ちください。
e2wm だけロードした Emacs 24.0.95.1 と 23.1.1 で、パッチ適用前(295944c5e1e7ed531fbffe359e6ff20847986d90)はパターン2は発生せず、パターン1のみ発生することを確認しました。使用したコマンドは以下です。
emacs -q -L ~/repos/branches/emacs-window-manager/ -L ~/repos/branches/emacs-window-layout/ --eval "(progn (setq server-name \"test\") (server-start) (require 'e2wm) (e2wm:start-management))"
emacsclient --socket-name test --tty
やっと確認出来ました。ありがとうございます。 時間がかかってすみません。
e2wm を有効にした Emacs に
emacsclient --tty
で接続して、その後にそのフレームを閉じると e2wm が無効になってしまいます。 debug オプションつけて様子を見ると以下のような感じになっていました。また、
emacsclient --tty FILENAME
で接続すると、 emacs も emacsclient もハングするので Emacs 本体を kill するしかなくなります。ただし、 FILENAME が存在しないときはハングしません。 (以前は FILENAME が存在する時もハングしなかった気がしますが、それはどうやっても再現しなくなりました。。。) Emacs 24.0.94.1 で試しました。そういえば、なんで e2wm:message ってマクロなんですか? デバッグのために e2wm.el をロードしなおすと他のモジュールで定義した pst-class が消えてしまってちょっと面倒です。。。