Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Spelling fixes from Mike Watters.
Use `format-items' when displaying inline completions. This makes it work better in the ESA minibuffer.
Fix bug that sometimes caused previous prompts to be covered by typeout.
Fixed some random input-editor bugs.
Implement classic CLIM behavior for :erase keyword in with-input-editor-typeout. Doesn't mesh well with border output records, for some reason.
Oops, deleted an extra line along with the old comment.
Don't error when completion fails in complete-input-rescan.
Fix minor bug in complete-from-possibilities.
Redraw the input buffer after displaying typeout, causes scrolling and stuff if necessary.
Implemented generic input-editor typeout, provided we can get an output record for the input editor. Theoretically, the nice typeout implementation should now also work for Goatee, though I seem to have broken it at some other point.
Added in-line completion using input-editor typeout instead of calling menu-choose. Does not work in Goatee. May fail under some circumstances that input-editor typeout doesn't handle well yet. May behave illogically because the list of completions is kept alive for fairly long, yet the presentations on it become untouchable almost immediately. This is because they are of a specially created completion presentation type, and not the more general presentation type of the object they represent. This knowledge is not accessible to the input-editing machinery (also, it seems presentation type options are compared for equality using EQ/EQL, so two content-wise identical possibility-lists can have different completion presentation types).
Completions are lists, not cons cells.
Moved some input-editing functions around. The typeout area is now cleared at the end of an input-editing session.
Fixed nested use of with-input-editing.
Support :POSSIBILITY-PRINTER for COMPLETE-INPUT.
Try to centralise the with-input-editing logic a bit. Make with-input-editing work for input-editing-streams.
WITH-INPUT-EDITING now works really well with Drei.
Made the input-editing streams and clim-stream-panes interactive streams.
Added docstrings for input-editor related stuff.
Fixed last known Drei input-editing-stream issue by implementing Goatee-style handling of :REPLACE keyword parameter to STREAM-REPLACE-INPUT (not mentioned in the spec).
Added support for CLIM 2.2-style `with-activation-gestures' and `with-delimiter-gestures'.
Flip the *use-goatee* default to NIL, as prompted by this discussion: <antifuchs> YuleAthas: do you think it's responsible to flip the *use-goatee* switch now? <YuleAthas> antifuchs: yes.
Committed changes necessary to support Drei (and non-Goatee input editors at all). Also some indirection permitting run-time selection of editor substrate and the code for :text-editor and :text-field gadgets.
Improved the implementation of `menu-choose' - now supports almost all features demanded by the spec (though some in a nonoptimal way). Changed a few calls to `menu-choose' in McCLIM to utilize labels.
Many more generic function defgenerics in decls.lisp ... moving some out from their individual files. ... one or two tiny code cleanups I think the only substantive changes in this commit are: * remove the workaround for sbcl-0.9.8 broken forward-referenced-class metacircularity; * delete the unused uniform-design protocol-class; * put the standard-sheet-input-mixin as a superclass of standard-extended-input-stream, not of the protocol class extended-input-stream. If someone wants to tell me that these things are wrong, that's fine; at least some things appear still to work. Now we only emit 209 style warnings when loading mcclim under sbcl. (When compiling and loading, it's closer to 500). This commit cures all but a few redefinition style-warnings -- so now almost all generic functions are defined before the first method definition is seen. It doesn't cure implicit definition of generic function style warnings, so there are probably plenty of specified generic functions which are not explicitly defined. (Leaving aside the issues with unspecified generic functions) TODO: * DEFGENERIC* forward declarations * specified methods and macros * specified special variables * unification of protocol-classes and decls
Changed the way possibilities are presented when complete-from-generator is used in the command reader. Now the list of possibilities generated will be sorted alphabetically. This solution is possibly not ideal, but I thought any better solution would require more widespread changes.
Move most protocol class definitions into protocol-classes.lisp, which is compiled and loaded early. Some class definitions, which had slot definitions that I didn't have the stomach to tease apart, stayed behind. Replace the presentation documentation state mechanism with updating-output so that other functions / programs can write to the pointer documentation area and not screw things up. We still use the state to actually print the documentation.
Remove the blocks marked #+unicode, and remove #-unicode tags. As clisp includes :unicode on their *features* list, it doesn't make much sense anymore to keep code around that worked only with an experimental branch of cmucl, long ago.
Added some improvements to accept-from-string so that random accept methods and default processing are more likely to work with it. Added a null command and null-command presentation type so that the REPL doesn't print something obnoxious when the user enters an empty command. Some fixes to default processing.
Fixed input editing problem reported by Luke Gorrie. Some old code in stream-read-gesture was causing the scan pointer to be incremented twice in some cases.
Changed the handling of "empty input" for the purposes of returning a default value from ACCEPT. I eliminated the around method on STREAM-READ-CHAR that looked for activation/delimiter gestures and replaced it with an error handler on SIMPLE-PARSE-ERROR. The major effect of this is that (accept 'string) now return the empty string if the call to ACCEPT is not passed a default; other accept methods can return something useful for empty input too. This fixes some problems in the address book demo and with dialogs in general.
Fixed presentation highlighting to do the right thing in the :SINGLE-BOX NIL case. Fixed Goatee to not draw anything when drawing is not enabled for the stream. Changed input editing streams to never put activation gestures in the input buffer. There is only one place to receive an activation gesture: the end of the buffer. If the user types an activation gesture, the insertion pointer is moved to the end of the buffer. Fixed various problems with accepting-values. In particular, the insertion pointer does not need to be left at the end of a field when the user exits the dialog. Also, the behavior in the presence of errors new: if an error occurs while the user is typing in an accepting-values field, the bell is beeped and the insertion pointer is positioned before the stream position where the error occured.
Changed invoke-empty-input and handle-empty-input to use the activation/completion gesture typed by the user in deciding which empty input continuation to invoke. This avoids bailing out of a call to accept from within an inner (recursive) call to accept when the user types a delimiter gesture for the inner call in an attempt to get its default value.
Implemented :ALIGN-PROMPTS in ACCEPTING-VALUES. This was harder than it sounds, requiring several changes and cleanups: Moved the call to PROMPT-FOR-ACCEPT from ACCEPT to STREAM-ACCEPT. The spec vaguely hints that ACCEPT is responsible for drawing the prompt, but that makes things like wrapping the calls to PROMPT-FOR-ACCEPT and ACCEPT-PRESENT-DEFAULT inside a table formatting directive hard to do. This shouldn't affect any user code. Made Goatee input streams play nice with output recording. Added the notion of a NEWLINE-CHARACTER to Goatee buffers; NIL is valid, so one can construct Goatee areas that will only have one line. This eliminates a lot of ugliness from ACCEPTING-VALUES dialogs. Fixed a few Goatee bugs.
Implement the :INITIALLY-SELECT-QUERY-IDENTIFIER option of ACCEPTING-VALUES. Update the text entry field in ACCEPTING-VALUES when the :DEFAULT argument in the corresponding call to ACCEPT changes. Return the correct third value from ACCEPT when the user enters new input. Add some documentation about INCREMENTAL-DISPLAY and the difference set. Added FIND-PRESENTATION-TYPE-CLASS and CLASS-PRESENTATION-TYPE-NAME which are trivial but which were not implemented. Examples/accepting-values.lisp is a couple of examples from the Franz user guide. Tools/unimplemented.lisp prints out all the symbols in the CLIM package which have no definition.
Changed STREAM-DESIGNATOR-SYMBOL to take a default value argument. The value corresponding to T isn't always *STANDARD-OUTPUT*. Fixed a problem in the incremental redisplay code checked in recently: the output record that holds an updating output record's children wasn't always created. Some tweaks (in progress) to ACCEPTING-VALUES.
Fix typo in complete-input-rescan
Changed the way defaults are handled by accept. I added a mixin class to standard-input-editing-stream, empty-input-mixin; an around method on stream-read-gesture; and some supporting macrology (handle-empty-input) to detect "empty" input and throw control to the appropriate place. Accept-1 now uses handle-empty-input to determine if it should return the default value. This means that the accept methods no longer need to do anything with their :default argument unless they use it for merging. I removed the :default and :default-type arguments from many accept methods all over McCLIM. Fixed a bad bug in the basic input editing loop (stream-read-gesture): rescanning-p should be set to nil when the scan-pointer reaches the fill pointer (not the insertion-pointer). Fixed a small bug in make-gf-specialized-ptype, a support function for com-show-generic-function.
2004-03-24 Timothy Moore <firstname.lastname@example.org> * INSTALL.OPENMCL: updated instructions. * builtin-commands.lisp (default-translator): Return the presentation type of the presentation as the second value. (document-form-translator): New function (%frob-constant-form, %frob-form): Use document-form-translator. Add translators from standard-object to expression and form. (expression-as-form): Add a menu entry for this translator. (ccl::%read-list-expression, (accept expression t textual-view), read, read-preserving-whitespace): Move the Lisp form reader stuff from the ptype 'form to the ptype 'expression. Disallow any activation or delimiter gestures while reading an expression. * commands.lisp (command-name-from-symbol): Don't strip leading subsequences of "COM-" from the command name. (keyword-arg-name-from-symbol): New function. (command-parsers): Add argument-unparser slot (make-keyword): New function (make-key-accessors): Use it. Accept keynames that begin with a #\: and have dashes replaced by spaces. (make-unprocessor-fun) New function to create an unprocessor function for each command. (%define-command): New macro preserving old behavior. Use new unprocessor stuff. (output-destination, invoke-with-standard-output): New class and generic function for outputing the results of commands to an output stream. (define-command): Implement :provide-output-destination-keyword (command-line-unparser): Call new stuff instead. * dialog.lisp: Add (redundant):provide-output-destination-keyword keyword argument to some commands. * incremental-redisplay.lisp: Work in progress. Turn things inside-out. * input-editing.lisp (complete-input): Don't insert input when mode is :complete and we've failed. * presentation-defs.lisp (accept-1): Use multiple-value-list when looking at results of accept method. ((present t completion t t)): Use the arguments to the type to drive the present method here. ((accept sequence t textual-view)): Don't peek-char initially! It breaks accepting the first element via mouse click. (accept sequence-enumerated t textual-view): new method. * recording.lisp : Cosmetic fixups. * regions.lisp (ellipse-normal-radii*): Add Gilbert's English translation of the comment and clean up the function. * system.lisp: Add Goatee/presentation-history. * transforms.lisp (+identity-transformation+): Move earlier in the file to avoid a warning. * utils.lisp (delete-1, parse-lambda-list): new functions. * Apps/Listener/dev-commands.lisp : Add :provide-output-destination-keyword argument to many commands. ((presentation-type generic-function)): Rewrite. Make it inherit from t, add accept method. The type of the object is generic-function, not the name or something. ((presentation-type standard-generic-function), (presentation-type method), (presentation-type standard-method)): add. (Show Generic Function): All-singing all-dancing command for exploring generic functions and their methods. ((presentation-type package)): New type with completing accept method. (Set Package): New command * Apps/Listener/listener.lisp (run-frame-top-level): Add bindings for all the Common Lisp reader and printer variables. * Apps/Scigraph/dwim/macros.lisp (define-command): Add :provide-output-destination-keyword support for McCLIM. * Goatee/goatee-command.lisp (lookup-gesture-command): Disable annoying debugging output. * Lisp-Dep/fix-openmcl.lisp (:clim-mop): In OpenMCL 0.14 use and export all symbols from :openmcl-mop. (compute-applicable-methods-using-classes): Hack for the listener.
Presentation histories. The new goatee command C-M y works reasonably well in the listener demo. More testing and user documentation is needed. Work in progress on the OpenGL backend.
Work in progress on the OpenGL backend, but nothing's working yet. Refactored the KeySym and modifiers code in the CLX backend so that it can be used by the OpenGL backend too. Fixed a typo in presentation-replace-input; it was always creating accept result extents. Added support in accepting-values for placing the default in the text entry field and fixed several problems that turned up as a result. The completion functions take sequences, not just lists. Also, :allow-any-input was broken.
Fix bug where commands would disappear after entering them. Among other problems, there was a problem in redisplay-output-record, which performed a transformation on pane-viewport-region. It seems to me that pane-viewport-region is already in the right coordinate system, but maybe someone else can verify this assertion. Reordered files in system.lisp so that dialog.lisp comes before builtin-commands.lisp; accepting-values is needed before any commands are defined.
Change handling of activation gestures and their effect on the input editing stream. A stream now becomes activated when stream-read-gesture sees the gesture (not stream-process-gesture), and a stream is "deactivated" if the activation gesture is unread. In (method accept form ...) suppress all activation gestures while read-preserving-whitespace is processing input. This enables multi-line input of forms. Add (method accept pathname ...) so you don't have to type quotes around pathnames in the listener demo.
Fixed bug in COMPLETE-INPUT-RESCAN where if the gesture was not a partial completer, NIL would be compared against a number.
* The spec states that the input-not-of-required-type condition must be a subtype of PARSE-ERROR (was defined as just ERROR). * Fixing this also makes ACCEPTing the OR presentation type work correctly.
Due to popular demand we spit FORMAT-style debugging messages out to *trace-output* instead of *debug-io*
Accepting-values. It's ugly and has some cursor glitches but otherwise appears to work. Various changes to Goatee were made to support accepting-values. Also, Goatee screen lines are now better-behaved output records.
Fixed a completion bug - invoking completion on a fully specified command name caused a trip to the debugger.
INVOKE-WITH-INPUT-EDITING (EXTENDED-INPUT-STREAM ...) In case of a noise string the scan-pointer was incremented twice. Removed one of INCFs; not sure 100% correct but it seems be an improvement.
make all of the package names passed to in-package be lowercase keywords for ACL's java mode
Hack around lack of string stream class in CMUCL/SBCL
Don't define a slot accessor named TYPE
3 sets of additions/changes/fixes: presentation-replace-input Bugs I fixed while at ILC, including implementing accept-from-string. Fixes made in the course of getting cl-reversi to work (it mostly does modulo display timing issues). This includes a revamping of command tables, menus and keystrokes.
Commit of patch submitted my Oliver Markovic. Original message: Message-ID: <email@example.com> From: Oliver Markovic <firstname.lastname@example.org> To: email@example.com Subject: Protocol Classes Date: Sat, 09 Nov 2002 22:06:50 +0100 Hi, Attached is a patch, which uses DEFINE-PROTOCOL-CLASS for all protocol classes as defined in the spec (not all were using that macro). I also added simple docstrings to the macro and changed the error message to something more civil :-) This should also add some required predicates, which were missing. I also noticed that protocol classes were given slots contradicting the definition in 2.5: "A protocol class is an "abstract" class with no slots and no methods (except perhaps for some default methods) [...]". But I guess that's no serious deviation from the spec though. greetz, -- Oliver Markovic
language support for text-styles, korean font support, support for 16 bit fonts, support for font composition, support for timer events, some cosmetic changes, support for unicode characters, etc. A bit much at once, and hopefully it won't break for anyone who isn't using unicode enabled cmucl.
A different fix than Brian's for the original typo in completing-from-suggestions. Arguments other than stream are evaluated.
minor completing-from-suggestions fix - ',args rather than (list args)
Uncommented menu-choose.lisp from the system definition. I'm using it so it's not experimental, damn it :) Possibilities gestures for command completion. C-/ and right mouse bring up possibilities menus. Make user-command-table inherit from global-command-table. Implement keyword arguments in commands. Implement the "read" part of the pointer protocol. Added accept method for sequence presentation type. Change handling of *null-presentation*. This isn't traversed in find-applicable-translators / map-applicable-translators anymore; it's handeld in find-innermost-presentation-match. Gave a raised appearance to menus drawn with menu-choose and friends. Someone who knows what they're doing should look over what I did. Steps towards implementing line wrap in Goatee. Fixed bug in insert-obj-before pointed out by someone on IRC.
CLIM has its own version of INTERACTIVE-STREAM-P.
clean up a bunch of ACL compiler warnings
The most visible change is that argument prompts are displayed in line. Input editing on the prompt strings is a bit shaky (it should be disallowed). Commands for \C-u and \C-k are now implemented. * Goatee/buffer.lisp: Implement extents. * input-editing.lisp (noise-string-property, noise-string-start-property, *noise-string*, *noise-string-start*): Markers in the input buffer for noise strings. (stream-read-gesture): Skip over noise strings. * Goatee/editable-buffer.lisp (editable-buffer): subclass extent-buffer-mixin. (line-last-point): Move into buffer.lisp. (forward-char*): Fix bugs. (map-over-region, delete-region, clear-buffer): New functions. * Goatee/editing-stream.lisp (noise-extent). New class. (make-input-editing-stream-snapshot): Record noise extents in input buffer. (offset-location*, replace-input): Various bugs. (input-editor-format): Write to Goatee buffer inside a noise extent. * presentations.lisp (default-describe-presentation-type): Don't prepend an article when plural count is nil. (presentation method accept (string)): Handle default. * recording.lisp : Reimplement standard-sequence-output-record as an array so we can support the proper orders of map-over-records-containing-position and map-over-records-overlapping-region. * Examples/clim-fig.lisp: (com-undo, com-clear): Fix assumptions about output record being a list. * Goatee/clim-area.lisp (add-output-record, delete-output-record, clear-output-record, map-over-records-containing-position, map-over-records-overlapping-region): Implement functions that used to be defaulted by superclass. * Goatee/goatee-command.lisp (clear-input-buffer, kill-line): New commands.
These changes have been tested in ACL as well as CMUCL. * Lisp-Dep/fix-acl.lisp, Lisp-Dep/fix-cmu.lisp, Lisp-Dep/fix-sbcl.lisp: (defclass, compile-time-clos-class-p): Patch defclass to record CLOS classes at compile time. * presentations.lisp (compile-time-clos-p): Use the above when defined. * presentations.lisp (accept-using-completion): Helper function that defaults empty completion input. (method accept boolean): Use accept-using-completion. (method accept completion): Implement. * input-editing.lisp (stream-read-gesture): Don't loop doing stream-process-gesture when stream-read-gesture of encapsulated stream returns nil. (complete-input): Some tweaks to deal with "empty" input. * commands.lisp (make-argument-accept-fun, command-line-command-parser, read-command): Adjustments to deal with empty arguments. (com-help): Add gratuitous argument to test accept of completion presentation type and defaults. * Goatee/flexivector.lisp (method print-object (flexivector t)): Add missing stream argument to write-char. * Goatee/buffer.lisp: (method (setf point*) (t t basic-buffer-mixin), method buffer-close-line* (basic-buffer-mixin t t), method delete-char (basic-buffer), (method forward-char* (basic-buffer t), method buffer-close-line* :around (bp-buffer-mixin bp-buffer-line t)): Various bug fixes made in the course of doing replace-input in a multiline buffer.
commands.lisp (make-argument-accept-fun): Wrap in eval-when (:compile-toplevel). input-editing.lisp (complete-input): Tweak to preserve the ending delimiter. presentations.lisp: accept method for boolean.
Major new functionality: command processing with completion. Check out the address-book demo. In it, all commands are available on the command line. Completion and editing work. Prompts for input show up on *debug-io* for now, but otherwise command input is accepted from presentations. 2002-05-08 Tim Moore <firstname.lastname@example.org> * commands.lisp: Implemented the magic argument parser function for commands. Defined presentation types for command-name and command, as well as present and accept methods for them. (command-line-parser, command-line-unparser): Implemented. (define-command): Changed the :name argument to define-command to default to t which goes against the spec; this gives us some interesting command line parsing in the address book demo. I'll change it back when we have presentation translators. * frames.lisp (default-frame-top-level): changed default prompt to "Command: ". Don't echo results of commands. (execute-frame-command): Apply command name to command arguments like the spec says. * input-editing.lisp (stream-read-gesture): set rescanning to nil after reading a new gesture from the underlaying stream. (with-delimiter-gestures): Implement. (input-editor-format): Direct output to *debug-io* for now. (read-token): Handle null gestures, which shouldn't happen, but might after a stream is activated. (simple-parse-error): Fix :format-control initarg. (*completion-gestures*, simple-completion-error, complete-input, complete-from-generator, complete-from-possibilities, completing-from-suggestions): Implement. * ports.lisp (distribute-event): Change sheet of keyboard events to the sheet with input focus. * presentations.lisp (fake-params-args): Generate dummy args for optional and keyword arguments so their defaults don't need to be evaluated at compile time. (define-presentation-method): Set up a block with the same name as the method around the method body. (method presentation-typep): default method. (method presentation-type-of (standard-object)): Don't fail if the presentation type has no parameters. (method description (standard-class)): Add. (highlight-applicable-presentation): Don't pass through button events to the stream; handle them here. (accept): Provide a default :default-type argument if :default is specified. (method stream-accept (standard-input-editing-stream)): add. (accept-1): Respect replace-input argument. (prompt-for-accept): Work on any stream. (prompt-for-accept-1): Tweak default prompt for recursive accept. (method present): Define default method. (accept-using-read): Take read-eval as an argument. (method accept): Define default method. (presentation-method presentation-type-of (string)): Return a more general result. * stream-input.lisp (gesture-name command-delimiter): Define. * system.lisp: Reenable the address book demo. * Backends/CLX/port.lisp (method realize-mirror (clx-port application-pane)): Add to register for pointer motion events. * Goatee/buffer.lisp: Added buffer pointers, which maintain their relative position across inserts and deletes. (bp-buffer-mixin, bp-buffer-line): Classes for buffer pointers. Added all the buffer protocol functions for buffer pointers. * Goatee/editing-stream.lisp (location*-offset*): Old offset-location* :) (offset-location*) New function to return a stream offset from a buffer location. (replace-input): Rewrite to preserve insertion pointer, using buffer pointers. * Goatee/goatee-command.lisp: Add #\tab as an insertable character.
Fixed a bug in frame-input-context-track-pointer that was causing a draw-rectangle* call on every motion event. The vertical spacing for standard-extended-output-stream was, in effect, being added twice to start dimensions for each line. After fixing that, plus some stuff in Goatee/clim-area.lisp, input editing regions line up with other text on the same line. Implemented replace-input, presentation-replace-input, and write-token. Implemented the input-sensitizer argument to with-input-editing. Accept now replaces input editing text with input from button gestures and makes the (now uneditable) input editing text sensitive as a presentation. In Goatee: Beefed up buffer-close-line* to be able to delete lines backwards as well, simplifying delete-char in the process.
Many bug fixes in Goatee. Rewrote buffer functions in terms of a "buffer protocol" that will all subclasses to easily track changes to a buffer. Added Goatee conditions, which are handled by execute-gesture-command and produce a satisfying beep. Added Goatee implementation of input editing streams. Adapted standard-input-editing-stream to use Goatee for input editing. Made necessary changes to system file and package definitions. We have input editing! Check it out in the presentation-test demo (run-test 'summation). There is one known glitch: the edited text isn't aligned properly with other text written to the stream. I'll be looking into that shortly.
Several changes on the road to real input editing. Make stream-read-char and friends on extended-input-stream understand :eof in the Gray stream protocol. Change handling of activation gestures in input editing: an input gesture causes an editing stream to be activated, after which IP goes to FP and further reads beyond that result in :eof. Make a couple of cleanups suggested by Robert. Push return of default values from accept down into the accept presentation methods. Eat the activation gesture, if any, at the end of input when at top level. Implement abort gestures and accelerator gestures. Define a catch-abort-gestures macro that nicely handles abort gestures.
Checkin to get context sensitive input working with multi-threaded process-next-event. Set input focus in run-frame-top-level. Assume that someday, in the presence of multiple frames, we'll do the right thing with switching the input focus from frame to frame. Added a frame-intercept-event-queue to frames. process-next-event examines the frame associated with the pane that has input focus and puts device events on that frame's queue if desired. Rewrote stream-input-wait, stream-read-gesture and the with-input-context input-test and input-handler functions per mikemac's suggestions. The with-input-context stuff uses the intercept queue mechanism now. Fixed a typo in gadgets.lisp.
added support for :return as an activation gesture, renamed newline to :newline
Committed initial code for Goatee emacs-alike editor. This is all completely broken at the moment. Added conditions for errors encountered during accept (spuriously referred to as errors in present in the spec). Added some new accept presentation methods. Changed parse-display-variable to default to not transform an empty host to "localhost" so we get a Unix domain connection instead of a TCP socket.
Implement +flipping-ink+. Make the cursor code use it so the cursor can be moved over text in the future.
Implement defaulting behavior of accept on empty input.
Rudimentary implementation of accept, with one accept method (for reals) and an example. Split views out into another file so that +textual-view+ can be referenced in the streams code.
Implement extended input streams, stub of input editing streams and enough of encapsulating streams to support input editing. A few random bug fixes too.
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|