Keymapping prerelease

C. David Shaffer cdshaffer at acm.org
Fri Sep 17 03:26:30 UTC 2004


I have posted a pre-release of the latest Keymapping version.  This is a 
pre-release so that I can get some feedback on the directions I'm taking 
this small enhancement.  I don't recommend loading it into your 
production image.  I have been using the current version for a few days 
now and it seems OK but I hook into keyboard event handling pretty early 
in the event chain so problems could leave you with a hosed image.  
Also, it conflicts with the Keymapping release on SqueakMap so don't 
load them into the same image.  It requires Sixx and BFAV (I use the tab 
bar framework in that package).  The latest can be found at:

   
 http://www.cs.westminster.edu/~shaffer/cgi-bin/repository.cgi/Keymapping-cds.52.mcz
    
Load it then evaluate:
    Keymap installTextMorphKeymap.
    Keymap installWorldKeymap "proceed through the exception"
    
Open a KeymapEditor (from the World open menu) and have a look. 
    
Here are some of the new things in this pre-release:

    . keymaps are now available for all morphs, not just TextMorphs
    . morphs belong to named keymap categories  (see implementors of 
keymapCategories for details)
        - by default a morph belongs to a keymap category corresponding 
to its class name
        - PasteUpMorphs belong to categories PasteUpMorph and World (the 
later only if the PUM is a World)
        - all subclasses of TextMorph belong to the category TextMorph
        - TextMorphForEditView belongs to TextMorph and TextMorphForEditView
    . morph instances may have a "local keymap" (a per-instance keymap, 
that is)
    . keymap entry lookup works up the morph ownership chain
    . keymapping takes precedence over other keyboard handling (more later)
    
Bugs:

    . I can't seem to get the PluggableListMorph to resize when the 
keymap editor is resized. Tried lots of things, failed miserably.  Hints
    would be welcomed.
    
    . Loading and saving need some work.
    
    . There is currently no way to load a keymap (from a stream) and 
make it a local keymap for a specific morph.  This can be
    done easily in code, however.
    
    . It is currently not possible to delete a whole keymap (category) 
from the UI
    
    . There are many keyboard combinations which aren't correctly 
translated by Keymapping.  Some of them b/c the VM doesn't pass
    a distinct keyCode (under linux, for example, the home key and <c-a> 
produce the same keycode so you can't tell the difference
    between <c-home> and <c-a>).  In others cases it's just because I 
haven't looked into it yet.  This will be the next bug I squash.


Items I'm less than happy with and work to be done

    . KMBlockActions are compiled in the nil context so "self" is 
meaningless.  Not a big deal since you can get the target
    morph as an argument to the block but creating a block with:
        km addSequence: '<c-q>' action: (KMBlockAction block: [self 
doSomething])
    can be confusing in the GUI (i.e. it won't work if accepted as-is).  
There will also be problems if you try to load a saved
    keymap containing this entry (KMBlockActions only save their source 
code and are recompiled upon loading).
    
    . As mentioned above, keymap entries take precedence over keyboard 
events handled by keyStroke:.  For example,
    the default keymap defines <m-t> to find a transcript.  If you open 
a ProcessBrowser and try to use the terminate keyboard
    shortcut, it will raise a Transcript instead.  This is easily 
corrected by moving all morphs over to using Keymaps :-)

    . More existing morph shortcuts need to be converted to keymappings
    
    . I should revisit rr's services framework in light of this 
redesigned package and supply a ServiceKeymapAction.
    
    . Keymaps should report conflicting entries (same sequence or one 
sequence which is a prefix of another) and there should
    be a way to find conflicting entries in a morph ownership chain


As always, feedback is welcomed.

David





More information about the Squeak-dev mailing list