Hi,
I've found some problems in McClim yesterday and written some patches (for three of the four problems).
Regards, Max-Gerd Retzlaff
========================================================================
- The example in section 10.2.1 of the clim spec v2.2:
(define-editor-command (com-save-file :menu t :keystroke (:s :control)) () ...)
is either an error and :keystroke (#\s :control) was meant, or it suggests that it should be possible to first define a keystroke :s like for example:
(define-gesture-name :s :keyboard (#\s))
and add modifiers later. The latter does not work in McClim; modifiers that are only specified in the :keystroke argument to a define-command are simply ignored.
Patch: - none -
========================================================================
- accepting-dialog should behave as if the argument align-prompts had the value :right if it is specified as T (clim spec v2.2, 13.3); only the values nil, :left, :right, and t are possible.
Patch to dialog.lisp:
-- zipp --
@@ -167,7 +183,10 @@ (frame-class 'accept-values)) (declare (ignore own-window exit-boxes modify-initial-query resize-frame label scroll-bars x-position y-position - width height frame-class)) + width height frame-class)) + (when (and align-prompts ;; t means the same as :right + (not (eq align-prompts :left))) + (setf align-prompts :right)) (multiple-value-bind (cx cy) (stream-cursor-position stream) (let* ((*accepting-values-stream* (make-instance 'accepting-values-stream
-- zapp --
========================================================================
- accepting-values for partial-commands
The generated accepting-values shouldn't allow to be exited (via "OK") as long as decent values (i.e. matching the specified presentation type) are supplied for the required arguments of the command.
Note: This is a personal taste, I haven't found anything in the clim-spec that requires such a behaviour.
Proposed patch (a hack): Apply the following patch to commands.lisp:
-- zipp --
--- commands.lisp.~1.53.~ 2005-06-28 06:32:46.000000000 +0200 +++ commands.lisp 2005-08-18 02:05:11.975682512 +0200 @@ -746,6 +746,7 @@ ;; We don't need fresh gensyms of these variables for each accept form. (with-gensyms (value ptype changedp) `(defun ,name (,command-table ,stream ,partial-command) + (do ((still-missing nil t)) (nil) (destructuring-bind (,command-name ,@original-args) ,partial-command (let ((,command-line-name (command-line-name-for-command @@ -755,7 +756,7 @@ ,@(mapcar #'list required-arg-names original-args)) (accepting-values (,stream) (format ,stream - "You are being prompted for arguments to ~S~%" + "You are being prompted for arguments to ~S~%~%" ,command-line-name) ,@(loop for var in required-arg-names @@ -767,9 +768,16 @@ (declare (ignore ,ptype)) (terpri ,stream) (when ,changedp - (setq ,var ,value)))))) - (list ,command-name ,@required-arg-names)))))))) - + (setq ,var ,value))))) + (when still-missing + (format ,stream + "~&Please supply all arguments."))) + (setf ,partial-command (list ,command-name ,@required-arg-names)) + (unless (partial-command-p ,partial-command) + (return ,partial-command))))))))))
;;; XXX What do to about :acceptably? Probably need to wait for Goatee "buffer ;;; streams" so we can insert an accept-result-extent in the buffer for
-- zapp --
========================================================================
- exit-boxes of accepting-values; 13.3 of the clim spec v2.2 says:
-- zipp -- exit-boxes
[...] The default behavior is as though you specified the following:
'((:exit "OK") (:abort "Cancel")) -- zapp --
The default behavior of McClim correspondends to '((:exit "Exit") (:abort "Abort")) at the moment.
Patch: Replace the strings "Exit" and "Abort" in #'display-exit-boxes of dialog.lisp by "Exit" and "Abort", respectively. Patch to dialog.lisp:
-- zipp --
--- dialog.lisp.~1.19.~ 2005-02-27 21:52:49.000000000 +0100 +++ dialog.lisp 2005-08-17 08:43:20.000000000 +0200 @@ -224,11 +243,11 @@ (fresh-line stream) (with-output-as-presentation (stream nil 'exit-button) - (format stream "Exit")) + (format stream "OK")) (write-char #\space stream) (with-output-as-presentation (stream nil 'abort-button) - (format stream "Abort")) + (format stream "Cancel")) (terpri stream)))
(defmethod stream-accept ((stream accepting-values-stream) type
-- zapp --
========================================================================
Hello,
Max-Gerd Retzlaff writes:
The example in section 10.2.1 of the clim spec v2.2:
(define-editor-command (com-save-file :menu t :keystroke (:s :control)) () ...)
is either an error and :keystroke (#\s :control) was meant, or it suggests that it should be possible to first define a keystroke :s like for example:
(define-gesture-name :s :keyboard (#\s))
and add modifiers later. The latter does not work in McClim; modifiers that are only specified in the :keystroke argument to a define-command are simply ignored.
Right, this is actually not in the spec, but in Franz' User's Guide. It looks like a typo to me.
Take care,