kiwanami / emacs-window-manager

Customizable window manager for emacs
229 stars 28 forks source link

Problem when manipulating file with run-with-idle-timer #6

Closed tkf closed 12 years ago

tkf commented 12 years ago

run-with-idle-timer でファイルを保存する関数(recentf-save-list など)を呼ぶと、ウィンドウ構成が崩れてしまうようです。以下のファイルを emacs -l file で読み込んで起動させると、問題を再現できます。例えば、 e2wm:dp-magit を開き、 Magit Logs window で log を前後して、 *magit-commit* window を表示させ、5秒まつとこの *magit-commit* window が消え、元の *magit: REPO* buffer が表示されてしまいます。

my-recentf-auto-save-list-workaround を呼ぶとこの問題は起きないのですが、代わりに warning message が出てしまいます。ちなみに、idleに入る前に e2wm 管理下に無いフレームに居た場合はこの問題は起きません。

(add-to-list 'load-path "~/.emacs.d/el-get/e2wm/")
(add-to-list 'load-path "~/.emacs.d/el-get/window-layout/")
(add-to-list 'load-path "~/.emacs.d/el-get/magit/")
(add-to-list 'load-path "~/.emacs.d/el-get/monky/")

(require 'recentf)
(require 'e2wm-config)
(require 'e2wm-vcs)

(run-with-idle-timer 5 t 'recentf-save-list)
;; (run-with-idle-timer 5 t 'my-recentf-auto-save-list-workaround)

(defun my-recentf-auto-save-list-workaround ()
  (flet ((warn (fmt &rest args) (apply 'message fmt args))
         ;; a hack to make things ignored by e2wm
         (e2wm:pst-get-instance (&optional frame) nil))
    (recentf-save-list)))

(recentf-mode 1)
(e2wm:start-management)

;; How to reproduce:
;; 1. Open some file (in Git repository)
;; 2. M-x e2wm:dp-magit
;; 3. Open some other buffer in the main window
;; 4. Wait 5 sec, then the default window set appears automatically

;; When my-recentf-auto-save-list-workaround is used, you will see an Error:
;;    recentf mode: Wrong type argument: arrayp, nil

間違えて別プロジェクトに投稿していました (kiwanami/emacs-anything-books#4) すいません...。 一応こちらに再投稿しておきます。

tkf commented 12 years ago

直していただいたやつ(@9e4d3d28099d01abeb6e8e8506d9abcdafff3b5e)ですが、正常に動作してるみたいです。同じ手順で問題が再現しなくなりました。ありがとうございます!

kiwanami commented 12 years ago

ご確認ありがとうございます!