reload buffers when restarting ABLE within the same CL session
authorD Herring <dherring@at.tentpost.dot.com>
Wed, 16 Nov 2011 07:02:55 +0000 (02:02 -0500)
committerD Herring <dherring@at.tentpost.dot.com>
Wed, 16 Nov 2011 07:02:55 +0000 (02:02 -0500)
idea thanks to Junia Magalhães

main.lisp

index c284c34..688abfb 100644 (file)
--- a/main.lisp
+++ b/main.lisp
   "Creates main window, layout controls and set-up some key bindings."
   (ltk:with-ltk (:handle-errors nil :handle-warnings nil :debugger nil)
     (setf *editor-frame* (make-instance 'ltk:frame :padding "\"1 1\""))
-    (setf *buffer-manager* (make-instance 'buffer-manager))
-    (setf *listener* (make-instance 'listener :padding "\"1 1\""))
-    (setf *statusbar* (make-instance 'statusbar))
-    (ltk:pack *statusbar* :side :bottom :fill :both)
-    (ltk:pack *listener* :side :bottom :fill :both)
-    (ltk:pack *editor-frame* :side :bottom :fill :both :expand t)
-    (ltk:on-close ltk::*tk* 'on-quit)
-    (ltk:set-geometry ltk::*tk* *window-width* *window-height* *window-x* *window-y*)
-    (ltk:minsize ltk::*tk* 320 200)
-    (on-new-file)
-    (bind-commands)
-    (create-menus)
-    (focus-editor)))
+    ;; reload buffers when restarting ABLE in the same CL session
+    (let ((old-manager *buffer-manager*))
+      (setf *buffer-manager* (make-instance 'buffer-manager))
+      (setf *listener* (make-instance 'listener :padding "\"1 1\""))
+      (setf *statusbar* (make-instance 'statusbar))
+      (ltk:pack *statusbar* :side :bottom :fill :both)
+      (ltk:pack *listener* :side :bottom :fill :both)
+      (ltk:pack *editor-frame* :side :bottom :fill :both :expand t)
+      (ltk:on-close ltk::*tk* 'on-quit)
+      (ltk:set-geometry ltk::*tk* *window-width* *window-height* *window-x* *window-y*)
+      (ltk:minsize ltk::*tk* 320 200)
+      (on-new-file)
+      (bind-commands)
+      (create-menus)
+
+      (when old-manager
+        (dolist (buf (reverse (buffers old-manager)))
+          (let ((filename (and buf (file-path buf))))
+            (when (probe-file filename)
+              (format t "~%re-opening ~A" filename)
+              (open-file filename))))))
+
+      (focus-editor)))
 
 (defun start ()
   (load-user-config)