Update of /project/climacs/cvsroot/climacs In directory clnet:/tmp/cvs-serv29597
Modified Files: file-commands.lisp gui.lisp Log Message: The order of events when executing a command must go:
1. execute the command 2. (a) update-syntax; (b) update needs-saving; 3. redisplay panes 4. clear-modify
Put 1. and 2. in execute-frame-command :after and 4. in execute-frame-command :around; 3. happens in execute-frame-command :around ESA. It's not the tidiest implementation right now but it sort of works.
Make sure that a loaded file has an up-to-date syntax and a cleared modified flag.
--- /project/climacs/cvsroot/climacs/file-commands.lisp 2006/03/25 20:58:41 1.4 +++ /project/climacs/cvsroot/climacs/file-commands.lisp 2006/03/27 15:43:17 1.5 @@ -164,9 +164,8 @@ (name buffer) (filepath-filename filepath) (needs-saving buffer) nil) (beginning-of-buffer (point pane)) - ;; this one is needed so that the buffer modification protocol - ;; resets the low and high marks after redisplay - (redisplay-frame-panes *application-frame*) + (update-syntax buffer (syntax buffer)) + (clear-modify buffer) buffer))))))
(defun directory-of-buffer (buffer) --- /project/climacs/cvsroot/climacs/gui.lisp 2006/03/27 14:10:24 1.207 +++ /project/climacs/cvsroot/climacs/gui.lisp 2006/03/27 15:43:17 1.208 @@ -188,15 +188,6 @@ "Return the current buffer." (buffer (current-window)))
-(defmethod redisplay-frame-panes :around ((frame climacs) &rest args) - (declare (ignore args)) - (let ((buffers (remove-duplicates (loop for pane in (windows frame) - when (buffer-pane-p pane) - collect (buffer pane))))) - (loop for buffer in buffers - do (update-syntax buffer (syntax buffer))) - (call-next-method))) - (defun climacs (&key new-process (process-name "Climacs") (width 900) (height 400)) "Starts up a climacs session" @@ -288,10 +279,14 @@ (defmethod execute-frame-command :around ((frame climacs) command) (let ((current-window (car (windows frame)))) (handler-case - (if (buffer-pane-p current-window) - (with-undo ((buffer current-window)) + (progn + (if (buffer-pane-p current-window) + (with-undo ((buffer current-window)) + (call-next-method)) (call-next-method)) - (call-next-method)) + (loop for buffer in (buffers frame) + do (when (modified-p buffer) + (clear-modify buffer)))) (offset-before-beginning () (beep) (display-message "Beginning of buffer")) (offset-after-end () @@ -309,9 +304,9 @@
(defmethod execute-frame-command :after ((frame climacs) command) (loop for buffer in (buffers frame) + do (update-syntax buffer (syntax buffer)) do (when (modified-p buffer) - (setf (needs-saving buffer) t) - (clear-modify buffer)))) + (setf (needs-saving buffer) t))))
(defmethod find-applicable-command-table ((frame climacs)) (or