Update of /project/mcclim/cvsroot/mcclim/Drei In directory clnet:/tmp/cvs-serv7853/Drei
Modified Files: drei-clim.lisp input-editor.lisp Log Message: Really Fix dead keys.
Now integrated with the gesture reading machinery in standard-extended-input-steeam, so it can be circumvented if you really don't want it by handling events manually.
--- /project/mcclim/cvsroot/mcclim/Drei/drei-clim.lisp 2008/04/29 20:52:02 1.43 +++ /project/mcclim/cvsroot/mcclim/Drei/drei-clim.lisp 2008/04/30 21:27:46 1.44 @@ -392,6 +392,10 @@ (declare (ignore args)) (display-drei-area drei))
+(defmethod execute-drei-command ((drei drei-area) command) + (let ((*standard-input* (or *minibuffer* *standard-input*))) + (call-next-method))) + ;;; Implementation of the displayed-output-record and region protocol ;;; for Drei areas. The redisplay-related stuff is in ;;; drei-redisplay.lisp. --- /project/mcclim/cvsroot/mcclim/Drei/input-editor.lisp 2008/02/08 13:24:48 1.46 +++ /project/mcclim/cvsroot/mcclim/Drei/input-editor.lisp 2008/04/30 21:27:46 1.47 @@ -565,32 +565,37 @@ (old-buffer-contents (buffer-sequence buffer 0 (size buffer)))) (with-bound-drei-special-variables (drei :prompt "M-x ") (update-drei-buffer stream) - ;; Commands are permitted to signal immediate rescans, but - ;; we may need to do some stuff first. - (unwind-protect - (accepting-from-user (drei) - ;; We narrow the buffer to the last object before - ;; input-position, so the user will not be able to - ;; delete arguments prompts or other things. - (drei-core:with-narrowed-buffer (drei - (loop for index from - (1- (input-position stream)) above 0 - when (typep (buffer-object buffer index) - 'noise-string) - return (1+ index) - finally (return 0)) - t t) - (handler-case (process-gestures-or-command drei) - (unbound-gesture-sequence (c) - (display-message "~A is unbound" (gesture-name (gestures c)))) - (abort-gesture (c) - (if (member (abort-gesture-event c) - *abort-gestures* - :test #'event-matches-gesture-name-p) - (signal 'abort-gesture :event (abort-gesture-event c)) - (when was-directly-processing - (display-message "Aborted"))))))) - (update-drei-buffer stream)) + ;; Since we have an unread gesture in the encapsulated stream, + ;; we should use that for further input. *standard-input* is + ;; bound back to the minibuffer (maybe) when an actual command + ;; is executed. + (let ((*standard-input* (encapsulating-stream-stream stream))) + ;; Commands are permitted to signal immediate rescans, but + ;; we may need to do some stuff first. + (unwind-protect + (accepting-from-user (drei) + ;; We narrow the buffer to the last object before + ;; input-position, so the user will not be able to + ;; delete arguments prompts or other things. + (drei-core:with-narrowed-buffer (drei + (loop for index from + (1- (input-position stream)) above 0 + when (typep (buffer-object buffer index) + 'noise-string) + return (1+ index) + finally (return 0)) + t t) + (handler-case (process-gestures-or-command drei) + (unbound-gesture-sequence (c) + (display-message "~A is unbound" (gesture-name (gestures c)))) + (abort-gesture (c) + (if (member (abort-gesture-event c) + *abort-gestures* + :test #'event-matches-gesture-name-p) + (signal 'abort-gesture :event (abort-gesture-event c)) + (when was-directly-processing + (display-message "Aborted"))))))) + (update-drei-buffer stream))) (let ((first-mismatch (buffer-array-mismatch buffer old-buffer-contents))) (display-drei drei :redisplay-minibuffer t) (cond ((null first-mismatch)