[climacs-cvs] CVS climacs

thenriksen thenriksen at common-lisp.net
Sun May 18 09:20:42 UTC 2008


Update of /project/climacs/cvsroot/climacs
In directory clnet:/tmp/cvs-serv22105

Modified Files:
	core.lisp 
Log Message:
Error handling now done by commands, handle errors when exiting in a
better way.


--- /project/climacs/cvsroot/climacs/core.lisp	2008/05/18 09:05:11	1.26
+++ /project/climacs/cvsroot/climacs/core.lisp	2008/05/18 09:20:42	1.27
@@ -323,37 +323,34 @@
 	 (display-message "~A is a directory name." filepath)
 	 (beep))
         (t
-         (handler-case
-             (let ((existing-view (find-view-with-pathname filepath)))
-               (if (and existing-view (if readonlyp (read-only-p (buffer existing-view)) t))
-                   (switch-to-view (current-window) existing-view)
-                   (let* ((newp (not (probe-file filepath)))
-                          (buffer (if (and newp (not readonlyp))
-                                      (make-new-buffer)
-                                      (with-open-file (stream filepath :direction :input)
-                                        (make-buffer-from-stream stream))))
-                          (view (make-new-view-for-climacs
-                                 *esa-instance* 'textual-drei-syntax-view
-                                 :name (filepath-filename filepath)
-                                 :buffer buffer)))
-                     (unless (buffer-pane-p (current-window))
-                       (other-window (or (find-if #'(lambda (window)
-                                                      (typep window 'climacs-pane))
-                                                  (windows *esa-instance*))
-                                         (split-window t))))
-                     (setf (offset (point buffer)) (offset (point view))
-                           (syntax view) (make-syntax-for-view view (syntax-class-name-for-filepath filepath))
-                           (file-write-time buffer) (if newp (get-universal-time) (file-write-date filepath))
-                           (needs-saving buffer) nil
-                           (name buffer) (filepath-filename filepath))
-                     (setf (current-view (current-window)) view)
-                     (evaluate-attribute-line view)
-                     (setf (filepath buffer) (pathname filepath)
-                           (read-only-p buffer) readonlyp)
-                     (beginning-of-buffer (point view))
-                     buffer)))
-           (file-error (c)
-             (display-message "~A" c))))))
+         (let ((existing-view (find-view-with-pathname filepath)))
+           (if (and existing-view (if readonlyp (read-only-p (buffer existing-view)) t))
+               (switch-to-view (current-window) existing-view)
+               (let* ((newp (not (probe-file filepath)))
+                      (buffer (if (and newp (not readonlyp))
+                                  (make-new-buffer)
+                                  (with-open-file (stream filepath :direction :input)
+                                    (make-buffer-from-stream stream))))
+                      (view (make-new-view-for-climacs
+                             *esa-instance* 'textual-drei-syntax-view
+                             :name (filepath-filename filepath)
+                             :buffer buffer)))
+                 (unless (buffer-pane-p (current-window))
+                   (other-window (or (find-if #'(lambda (window)
+                                                  (typep window 'climacs-pane))
+                                              (windows *esa-instance*))
+                                     (split-window t))))
+                 (setf (offset (point buffer)) (offset (point view))
+                       (syntax view) (make-syntax-for-view view (syntax-class-name-for-filepath filepath))
+                       (file-write-time buffer) (if newp (get-universal-time) (file-write-date filepath))
+                       (needs-saving buffer) nil
+                       (name buffer) (filepath-filename filepath))
+                 (setf (current-view (current-window)) view)
+                 (evaluate-attribute-line view)
+                 (setf (filepath buffer) (pathname filepath)
+                       (read-only-p buffer) readonlyp)
+                 (beginning-of-buffer (point view))
+                 buffer))))))
 
 (defmethod frame-find-file ((application-frame climacs) filepath)
   (find-file-impl filepath nil))
@@ -394,13 +391,17 @@
 
 (defmethod frame-exit :around ((frame climacs) #-mcclim &key)
   (dolist (view (views frame))
-    (when (and (buffer-of-view-needs-saving view)
-               (handler-case (accept 'boolean
-                              :prompt (format nil "Save buffer of view: ~a ?" (name view)))
-                 (error () (progn (beep)
-                                  (display-message "Invalid answer")
-                                  (return-from frame-exit nil)))))
-      (save-buffer (buffer view))))
+    (handler-case
+        (when (and (buffer-of-view-needs-saving view)
+                   (handler-case (accept 'boolean
+                                  :prompt (format nil "Save buffer of view: ~a ?" (name view)))
+                     (error () (progn (beep)
+                                      (display-message "Invalid answer")
+                                      (return-from frame-exit nil)))))
+          (save-buffer (buffer view)))
+      (file-error (e)
+        (display-message "~A (hit a key to continue)" e)
+        (read-gesture))))
   (when (or (notany #'buffer-of-view-needs-saving (views frame))
 	    (handler-case (accept 'boolean :prompt "Modified buffers of views exist.  Quit anyway?")
 	      (error () (progn (beep)




More information about the Climacs-cvs mailing list