Merge lp://staging/~marmuta/onboard/nightmode into lp://staging/~onboard/onboard/main

Proposed by marmuta
Status: Merged
Merged at revision: not available
Proposed branch: lp://staging/~marmuta/onboard/nightmode
Merge into: lp://staging/~onboard/onboard/main
Diff against target: 2431 lines
10 files modified
Onboard/KeyCommon.py (+3/-0)
Onboard/KeyGtk.py (+2/-1)
Onboard/KeyboardSVG.py (+112/-8)
Onboard/settings.py (+9/-6)
layouts/Full-Alpha.svg (+635/-0)
layouts/Full-Dark-Alpha.svg (+635/-0)
layouts/Full-Dark-Numpad.svg (+271/-0)
layouts/Full-Dark.sok (+181/-0)
layouts/Full-Numpad.svg (+271/-0)
layouts/Full.sok (+179/-0)
To merge this branch: bzr merge lp://staging/~marmuta/onboard/nightmode
Reviewer Review Type Date Requested Status
Chris Jones Approve
Review via email: mp+12265@code.staging.launchpad.net
To post a comment you must log in.
Revision history for this message
marmuta (marmuta) wrote :

Hi,
thank you for working on onboard! I'm really grateful that there is a well working onscreen keyboard installed by default in Ubuntu.

I've put some changes together to support a dark layout. The bright default layout was too straining on the eyes for my usage patterns, i.e. popping it open and closing it frequently on an otherwise dark desktop *squint*. Also I was switching panes way too frequently for editing and function keys.

There are two new layouts in the branch, both with an extended set of keys in the first pane, one in default colors and one meant for dark environments. Would there be any interest in merging this?

It'd be great if only the code changes made it in, as current onboard hard codes the label color to black, which effectively forbids the creation of dark layouts. I'd be absolutely thrilled if the layouts turned out to be merge material too though. They are the first thing I'm installing on a fresh system and frankly, there isn't that much choice in a default install of onboard yet.

Let me know what you think.

Revision history for this message
Chris Jones (tortoise) wrote :

Hi Marmuta

Thanks for the contribution! I'm using the darkroom gtk theme and your colours fit much better than the default ones.

The proper fix would be for the default layout to get the colours from the current theme. That's a fair bit of work so this'll do for now.

I've got the following issues with the code, otherwise I'd be happy to merge:

The label_rgba field in the Pane class doesn't ever get used.

The label_rgba field in the KeyCommon class is a list but the docstring calls it a tuple. Also, I tend to shy away setting list default values in the class body. Variables defined in the class body are class variables, not instance variables. So key.label_rgba[0] = 0.5 for example, would set the red label_rgba value for every instance of KeyCommon. Either make the default value a tuple or set label_rgba = None and initialise to the default value in the __init__ method.

We're trying to standardise on underscore_seperated_variable_names not CamelCase and line lengths < 80 characters.

review: Needs Fixing
Revision history for this message
Francesco Fumanti (frafu) wrote :

Hi,

Thanks Marmuta for your work.

I understand that you are not very satisfied with the default layout: in
fact, I am using a custom tailored layout myself; but I did not submit
it to the public, because it was a quick hack adding a line with the
keys I was missing on the main pain like the arrow keys, esc, del,
tilde, pipe,...

I gave a look at your layout and the following came to mind:

- The "Switch Buttons"-button is missing on your layout or did I
overlook it.

- Would it not be better to create a compact layout like those of a laptop?

- Concerning label_rgba: What about adding gconf keys for it as long as
we are not fetching them from the active theme? More, we might even
leave the gconf keys when we fetching them from the active theme adding
a "Back to default colors"-button setting the colors back to those
matching the theme.

Chris, could you please comment on my comments, especially the third
about label_rgba?

Cheers

Francesco

Chris Jones wrote:
> Review: Needs Fixing Hi Marmuta
>
> Thanks for the contribution! I'm using the darkroom gtk theme and
> your colours fit much better than the default ones.
>
> The proper fix would be for the default layout to get the colours
> from the current theme. That's a fair bit of work so this'll do for
> now.
>
> I've got the following issues with the code, otherwise I'd be happy
> to merge:
>
> The label_rgba field in the Pane class doesn't ever get used.
>
> The label_rgba field in the KeyCommon class is a list but the
> docstring calls it a tuple. Also, I tend to shy away setting list
> default values in the class body. Variables defined in the class
> body are class variables, not instance variables. So
> key.label_rgba[0] = 0.5 for example, would set the red label_rgba
> value for every instance of KeyCommon. Either make the default value
> a tuple or set label_rgba = None and initialise to the default value
> in the __init__ method.
>
> We're trying to standardise on underscore_seperated_variable_names
> not CamelCase and line lengths < 80 characters.

176. By marmuta

Cleanup according to first code review at
https://code.edge.launchpad.net/~marmuta/onboard/nightmode/+merge/12265

Revision history for this message
marmuta (marmuta) wrote :

> Review: Needs Fixing
> Hi Marmuta
>
> Thanks for the contribution! I'm using the darkroom gtk theme and
> your colours fit much better than the default ones.
That's great, I'm glad you like it. I tend to use a pitch black
human theme, but now that I've seen it, it almost looks as if it
was made for darkroom :).

> The proper fix would be for the default layout to get the colours
> from the current theme. That's a fair bit of work so this'll do for
> now.
>
> I've got the following issues with the code, otherwise I'd be happy
> to merge:
>
> The label_rgba field in the Pane class doesn't ever get used.
Yeah, that is a bit awkward, but since the color is specified as an
attribute of the pane, I felt it should at least have a token
representation in the pane object. Actually I'd rather have used this
per-pane color directly for the label drawing than introduce a new
attribute label_rgba in class KeyCommon. Problem is, that the
containing pane is unknown for class RectKey and others. Is there a
reason that pane is not a member of the base class KeyCommon?

> The label_rgba field in the KeyCommon class is a list but the
> docstring calls it a tuple. Also, I tend to shy away setting list
> default values in the class body. Variables defined in the class
> body are class variables, not instance variables. So
> key.label_rgba[0] = 0.5 for example, would set the red label_rgba
> value for every instance of KeyCommon. Either make the default value
> a tuple or set label_rgba = None and initialise to the default value
> in the __init__ method.
Yes, thanks for pointing that out. It's a tuple now, though
I'd rather remove it altogether, see above.

> We're trying to standardise on underscore_seperated_variable_names
> not CamelCase and line lengths < 80 characters. --
Ok, done, I hope :)

> https://code.edge.launchpad.net/~marmuta/onboard/nightmode/+merge/12265
> You are the owner of lp:~marmuta/onboard/nightmode.

Revision history for this message
marmuta (marmuta) wrote :

> Hi,
>
> Thanks Marmuta for your work.
Thank you, Francesco!

> I understand that you are not very satisfied with the default layout: in
> fact, I am using a custom tailored layout myself; but I did not submit
> it to the public, because it was a quick hack adding a line with the
> keys I was missing on the main pain like the arrow keys, esc, del,
> tilde, pipe,...
Yes, I had a hacked together one too for some time and finally decided to clean it up a bit :).

> I gave a look at your layout and the following came to mind:
>
> - The "Switch Buttons"-button is missing on your layout or did I
> overlook it.
Actually I didn't really understand what it was for, so it kinda dropped by the wayside.
Should it switch left and right pointer buttons? Is that to allow for right mouse clicks for single button pointer users? If yes, then should I perhaps move the settings button to the second pane and replaced it with "switch buttons"?

> - Would it not be better to create a compact layout like those of a laptop?
I found it easier for me to adapt when the virtual keyboard resembled the physical keyboard I'm most commonly using. It just happens to be the standard 105 key one for me. Compact layouts may be more efficient but they seem less standardized and come at the cost of a certain learning curve in the beginning. Not saying there shouldn't be more layouts to choose from though.

> - Concerning label_rgba: What about adding gconf keys for it as long as
> we are not fetching them from the active theme? More, we might even
> leave the gconf keys when we fetching them from the active theme adding
> a "Back to default colors"-button setting the colors back to those
> matching the theme.
I'm open for changes, the current solution simply seemed like the way of least resistance.

> Chris, could you please comment on my comments, especially the third
> about label_rgba?
>
> Cheers
>
> Francesco
>
>
> Chris Jones wrote:
> > Review: Needs Fixing Hi Marmuta
> >
> > Thanks for the contribution! I'm using the darkroom gtk theme and
> > your colours fit much better than the default ones.
> >
> > The proper fix would be for the default layout to get the colours
> > from the current theme. That's a fair bit of work so this'll do for
> > now.
> >
> > I've got the following issues with the code, otherwise I'd be happy
> > to merge:
> >
> > The label_rgba field in the Pane class doesn't ever get used.
> >
> > The label_rgba field in the KeyCommon class is a list but the
> > docstring calls it a tuple. Also, I tend to shy away setting list
> > default values in the class body. Variables defined in the class
> > body are class variables, not instance variables. So
> > key.label_rgba[0] = 0.5 for example, would set the red label_rgba
> > value for every instance of KeyCommon. Either make the default value
> > a tuple or set label_rgba = None and initialise to the default value
> > in the __init__ method.
> >
> > We're trying to standardise on underscore_seperated_variable_names
> > not CamelCase and line lengths < 80 characters.

Revision history for this message
Francesco Fumanti (frafu) wrote :

Hi,

marmuta wrote:
>> - The "Switch Buttons"-button is missing on your layout or did I
>> overlook it.
> Actually I didn't really understand what it was for, so it kinda
> dropped by the wayside. Should it switch left and right pointer
> buttons? Is that to allow for right mouse clicks for single button
> pointer users? If yes, then should I perhaps move the settings button
> to the second pane and replaced it with "switch buttons"?

Yes; its function is indeed to switch left and right mouse buttons.

As the people with two mouse buttons don't have any use for it, I am not
sure if it is a good idea to put it on the main pane. It should however
be present on one of the panes, even if currently it is broken. Or does
the "Switch Button"-button work on your system?

(I just tried again by installing a .deb created from revision 179 of
trunk.)

>> - Would it not be better to create a compact layout like those of a
>> laptop?
> I found it easier for me to adapt when the virtual keyboard resembled
> the physical keyboard I'm most commonly using. It just happens to be
> the standard 105 key one for me. Compact layouts may be more
> efficient but they seem less standardized and come at the cost of a
> certain learning curve in the beginning. Not saying there shouldn't
> be more layouts to choose from though.

This turns into a tradeoff between screen space and user friendliness.
When Chris will have merged your changes to trunk after he finds them
ok, people will at least have the choice.

>> - Concerning label_rgba: What about adding gconf keys for it as
>> long as we are not fetching them from the active theme? More, we
>> might even leave the gconf keys when we fetching them from the
>> active theme adding a "Back to default colors"-button setting the
>> colors back to those matching the theme.
> I'm open for changes, the current solution simply seemed like the way
> of least resistance.
>
>> Chris, could you please comment on my comments, especially the
>> third about label_rgba?

Let's see what Chris is going to say about it...

Thanks again for your contribution.

Francesco

177. By marmuta

Added "Switch Buttons" to the second pane. The new layouts don't
reference Default-Editing.svg anymore and have their own
Full-*Numpad.svg now.

178. By marmuta

Sort the layout list to keep Default on top. System and user
layouts stay in seperate groups.

Revision history for this message
Chris Jones (tortoise) wrote :

> Hi,
>
> marmuta wrote:
> >> - The "Switch Buttons"-button is missing on your layout or did I
> >> overlook it.
> > Actually I didn't really understand what it was for, so it kinda
> > dropped by the wayside. Should it switch left and right pointer
> > buttons? Is that to allow for right mouse clicks for single button
> > pointer users? If yes, then should I perhaps move the settings button
> > to the second pane and replaced it with "switch buttons"?
>
> Yes; its function is indeed to switch left and right mouse buttons.
>
> As the people with two mouse buttons don't have any use for it, I am not
> sure if it is a good idea to put it on the main pane. It should however
> be present on one of the panes, even if currently it is broken. Or does
> the "Switch Button"-button work on your system?
>
> (I just tried again by installing a .deb created from revision 179 of
> trunk.)

It is possible to fit in the switch buttons button by taking the full keyboard layout and swapping the settings and Prnt Scroll and Pause buttons. That leaves room to slot the switch buttons button underneath.

> > Compact layouts may be more
> > efficient but they seem less standardized and come at the cost of a
> > certain learning curve in the beginning. Not saying there shouldn't
> > be more layouts to choose from though.
>
> This turns into a tradeoff between screen space and user friendliness.
> When Chris will have merged your changes to trunk after he finds them
> ok, people will at least have the choice.

It's probably worth sticking to the standard layout as much as possible. We can always provide a compact layout as another option.

> >> - Concerning label_rgba: What about adding gconf keys for it as
> >> long as we are not fetching them from the active theme? More, we
> >> might even leave the gconf keys when we fetching them from the
> >> active theme adding a "Back to default colors"-button setting the
> >> colors back to those matching the theme.
> > I'm open for changes, the current solution simply seemed like the way
> > of least resistance.

I don't think that many people will want to change the label colours without also changing the colours of the keys themselves. I think it's worth allowing users to change theme colours without using a text editor. Something along the lines of gnome-appearance-properties' customise theme colours dialog.

Revision history for this message
Chris Jones (tortoise) wrote :

> > The label_rgba field in the Pane class doesn't ever get used.
> Yeah, that is a bit awkward, but since the color is specified as an
> attribute of the pane, I felt it should at least have a token
> representation in the pane object.

I think the key itself should hold the label colour. It would be worth adding the ability to specify label colours per key in addition to per pane. With the key label colours taking precedence over the pane label colours.

> Actually I'd rather have used this
> per-pane color directly for the label drawing than introduce a new
> attribute label_rgba in class KeyCommon. Problem is, that the
> containing pane is unknown for class RectKey and others. Is there a
> reason that pane is not a member of the base class KeyCommon?

I've been trying to avoid circular references, it can make the code a bit messy.

Remove Pane.label_rgba and I'll merge the code changes :-)

Revision history for this message
Francesco Fumanti (frafu) wrote :

Hi,

Chris Jones wrote:
>> marmuta wrote:
>> As the people with two mouse buttons don't have any use for it, I
>> am not sure if it is a good idea to put it on the main pane. It
>> should however be present on one of the panes, even if currently it
>> is broken. Or does the "Switch Button"-button work on your system?
>>
>> (I just tried again by installing a .deb created from revision 179
>> of trunk.)
>
> It is possible to fit in the switch buttons button by taking the full
> keyboard layout and swapping the settings and Prnt Scroll and Pause
> buttons. That leaves room to slot the switch buttons button
> underneath.

I don't think that the Print, Scroll and Pause buttons will fit in a
space where the Settings button is currently positioned. What about the
following:

As there is an empty line over the arrows, why not move down the 9
buttons placed over the arrow keys to free the space to the right of the
function keys. This will give us plenty of space for the
"Settings"-button and "Switch Buttons"-buttons.

That would also be room for an "Iconize"-button, that I have to mind for
some time yet. In fact, the idea is to create such an "Iconize"-button
to have a bigger target than the button on the title bar, to the
minimize onboard to the panel (or to the floating icon if it is active).
Since we are talking about layout, I thought to mention it, but until
now I have not looked at how it could be implemented.

>>> Compact layouts may be more efficient but they seem less
>>> standardized and come at the cost of a certain learning curve in
>>> the beginning. Not saying there shouldn't be more layouts to
>>> choose from though.
>> This turns into a tradeoff between screen space and user
>> friendliness. When Chris will have merged your changes to trunk
>> after he finds them ok, people will at least have the choice.
>
> It's probably worth sticking to the standard layout as much as
> possible. We can always provide a compact layout as another option.

ok

>>>> - Concerning label_rgba: What about adding gconf keys for it as
>>>> long as we are not fetching them from the active theme? More,
>>>> we might even leave the gconf keys when we fetching them from
>>>> the active theme adding a "Back to default colors"-button
>>>> setting the colors back to those matching the theme.
>>> I'm open for changes, the current solution simply seemed like the
>>> way of least resistance.
>
> I don't think that many people will want to change the label colours
> without also changing the colours of the keys themselves. I think
> it's worth allowing users to change theme colours without using a
> text editor. Something along the lines of
> gnome-appearance-properties' customise theme colours dialog.

Yes, something along the lines of the colors dialog in
gnome-appearance-properties. But I would say to leave that for onboard
0.93, as the changes will not be trivial; or am I wrong?

Cheers

Francesco

Revision history for this message
marmuta (marmuta) wrote :

Hi,

I've added sorting for the layout list in settings to get the default
layout back to the top. If that's not wanted please just ignore it for the merge.

> marmuta wrote:
> >> - The "Switch Buttons"-button is missing on your layout or did I
> >> overlook it.
> > Actually I didn't really understand what it was for, so it kinda
> > dropped by the wayside. Should it switch left and right pointer
> > buttons? Is that to allow for right mouse clicks for single button
> > pointer users? If yes, then should I perhaps move the settings
> > button to the second pane and replaced it with "switch buttons"?
>
> Yes; its function is indeed to switch left and right mouse buttons.
>
> As the people with two mouse buttons don't have any use for it, I am
> not sure if it is a good idea to put it on the main pane. It should
> however be present on one of the panes, even if currently it is
> broken.
I had it added to the second panes yesterday, close to the tab bar to
keep the travel distance low, but I see that the discussion is
ongoing :)

> Or does the "Switch Button"-button work on your system?
Unfortunately not, it toggles the gconf key without the switch happening. It doesn't work from gconf-editor either, only from gnome-mouse-properties for some reason.

> > It is possible to fit in the switch buttons button by taking the
> > full keyboard layout and swapping the settings and Prnt Scroll and
> > Pause buttons. That leaves room to slot the switch buttons button
> > underneath.
>
> I don't think that the Print, Scroll and Pause buttons will fit in a
> space where the Settings button is currently positioned. What about
> the following:
>
> As there is an empty line over the arrows, why not move down the 9
> buttons placed over the arrow keys to free the space to the right of
> the function keys. This will give us plenty of space for the
> "Settings"-button and "Switch Buttons"-buttons.
That would make me hunt for keys again for a while. My
motivation was originally to have a close representation of the
standard keyboard to avoid having to retrain when switching between
on- and off-screen keyboards across operations systems. They are all
different in gnome, kde and the other OS already, each with its
own incompatible trade-offs.

Would it be wrong to demote the settings button to the second pane? I do kinda like it where it is, but it's not really an input button and "switch buttons" seems more important. There are already two other ways to get to the settings too, plus I'd expect settings to be used only occasionally.

Here is another spacy idea, though somewhat beyond the scope of this merge. Instead of a switch button have three, perhaps round buttons for double click, middle- and right mouse button, (D) (M) (R). They would fit into the empty space above the cursor keys. All three would act three-state sticky like the other modifier keys. That would allow for left-, middle-, right-, both single- and double click and the keyboard layout wouldn't need to be shifted around.
There could be a toggle in settings to turn pointer keys on/off too.

179. By marmuta

removed Pane.label_rgba

Revision history for this message
marmuta (marmuta) wrote :

> > > The label_rgba field in the Pane class doesn't ever get used.
> > Yeah, that is a bit awkward, but since the color is specified as an
> > attribute of the pane, I felt it should at least have a token
> > representation in the pane object.
>
> I think the key itself should hold the label colour. It would be
> worth adding the ability to specify label colours per key in addition
> to per pane. With the key label colours taking precedence over the
> pane label colours.
That was the intention after the pane turned out to be inaccessible.
On the other hand physical keyboard rarely come with different colored
key labels either.

> > Actually I'd rather have used this
> > per-pane color directly for the label drawing than introduce a new
> > attribute label_rgba in class KeyCommon. Problem is, that the
> > containing pane is unknown for class RectKey and others. Is there a
> > reason that pane is not a member of the base class KeyCommon?
>
> I've been trying to avoid circular references, it can make the code a
> bit messy.
>
> Remove Pane.label_rgba and I'll merge the code changes :-)
OK, it's gone :)

Revision history for this message
Francesco Fumanti (frafu) wrote :
Download full text (4.2 KiB)

Hi,

marmuta wrote:
> I've added sorting for the layout list in settings to get the default
> layout back to the top. If that's not wanted please just ignore it
> for the merge.

It is ok for me; but it is up to Chris to decide.

>> As the people with two mouse buttons don't have any use for it, I
>> am not sure if it is a good idea to put it on the main pane. It
>> should however be present on one of the panes, even if currently it
>> is broken.
> I had it added to the second panes yesterday, close to the tab bar to
> keep the travel distance low, but I see that the discussion is
> ongoing :)

This is also ok for me.

>> Or does the "Switch Button"-button work on your system?
> Unfortunately not, it toggles the gconf key without the switch
> happening. It doesn't work from gconf-editor either, only from
> gnome-mouse-properties for some reason.

The same is happening on my system; so it seems to be a problem of
karmic and not a quirk of my system. And as it also does not work from
gconf-editor, we can assume that it is not fault of onboard.

>>> It is possible to fit in the switch buttons button by taking the
>>> full keyboard layout and swapping the settings and Prnt Scroll
>>> and Pause buttons. That leaves room to slot the switch buttons
>>> button underneath.
>> I don't think that the Print, Scroll and Pause buttons will fit in
>> a space where the Settings button is currently positioned. What
>> about the following:
>>
>> As there is an empty line over the arrows, why not move down the 9
>> buttons placed over the arrow keys to free the space to the right
>> of the function keys. This will give us plenty of space for the
>> "Settings"-button and "Switch Buttons"-buttons.
> That would make me hunt for keys again for a while. My motivation was
> originally to have a close representation of the standard keyboard
> to avoid having to retrain when switching between on- and off-screen
> keyboards across operations systems. They are all different in gnome,
> kde and the other OS already, each with its own incompatible
> trade-offs.

My suggestion about moving the 9 keys down one row was mainly to get
enough space for the Settings and Switch Buttons buttons.

> Would it be wrong to demote the settings button to the second pane? I
> do kinda like it where it is, but it's not really an input button
> and "switch buttons" seems more important. There are already two
> other ways to get to the settings too, plus I'd expect settings to be
> used only occasionally.

Indeed, once a user has congigured onboard the way he likes it, he will
only rarely use the Settings button. Consequently, I also think that it
would be better suited on the second pane.

Concerning the Switch Buttons button, we should probably also put it on
the second pane, because:
- people able to use two mouse buttons don't have any usage for it
- people that can only use one mouse button already have an alternative
in the Accessibility tab of the mouse control panel

However, there are situations where the alternative does not work
because of the way it has been implemented. For the moment, these users
have to resort to dwell clicking (also in the acces...

Read more...

Revision history for this message
marmuta (marmuta) wrote :
Download full text (3.8 KiB)

>
> >> As the people with two mouse buttons don't have any use for it, I
> >> am not sure if it is a good idea to put it on the main pane. It
> >> should however be present on one of the panes, even if currently it
> >> is broken.
> > I had it added to the second panes yesterday, close to the tab bar
> > to keep the travel distance low, but I see that the discussion is
> > ongoing :)
>
> This is also ok for me.
>
Right, so "switch buttons" stays on the second pane.

> >>
> >> As there is an empty line over the arrows, why not move down the 9
> >> buttons placed over the arrow keys to free the space to the right
> >> of the function keys. This will give us plenty of space for the
> >> "Settings"-button and "Switch Buttons"-buttons.
> > That would make me hunt for keys again for a while. My motivation
> > was originally to have a close representation of the standard
> > keyboard to avoid having to retrain when switching between on- and
> > off-screen keyboards across operations systems. They are all
> > different in gnome, kde and the other OS already, each with its own
> > incompatible trade-offs.
>
> My suggestion about moving the 9 keys down one row was mainly to get
> enough space for the Settings and Switch Buttons buttons.

Yes, this is how I understood it. I was trying to argue against that
change and for sacrificing the settings button instead, but...

> > Would it be wrong to demote the settings button to the second pane?
> > I do kinda like it where it is, but it's not really an input button
> > and "switch buttons" seems more important. There are already two
> > other ways to get to the settings too, plus I'd expect settings to
> > be used only occasionally.
>
> Indeed, once a user has congigured onboard the way he likes it, he
> will only rarely use the Settings button. Consequently, I also think
> that it would be better suited on the second pane.

...now that "switch buttons" stays in the second pane there is no pressing need to move settings anymore, right? So keep the layout in its current state with settings first pane, switch buttons second?
Chris, would that be acceptable for you too?

> Concerning the Switch Buttons button, we should probably also put it
> on the second pane, because:
> - people able to use two mouse buttons don't have any usage for it
> - people that can only use one mouse button already have an
> alternative in the Accessibility tab of the mouse control panel

OK, "switch buttons" stays on the second pane.

> > Here is another spacy idea, though somewhat beyond the scope of
> > this merge. Instead of a switch button have three, perhaps round
> > buttons for double click, middle- and right mouse button, (D) (M)
> > (R). They would fit into the empty space above the cursor keys. All
> > three would act three-state sticky like the other modifier keys.
> > That would allow for left-, middle-, right-, both single- and
> > double click and the keyboard layout wouldn't need to be shifted
> > around. There could be a toggle in settings to turn pointer keys
> > on/off too.
>
> Adding such a functionality would probably make onboard depend on the
> AT-SPI framework.

If so, than I take m...

Read more...

Revision history for this message
Chris Jones (tortoise) wrote :

> As there is an empty line over the arrows, why not move down the 9
> buttons placed over the arrow keys to free the space to the right of the
> function keys. This will give us plenty of space for the
> "Settings"-button and "Switch Buttons"-buttons.

Yeah, that's what I meant :-)

>
> That would also be room for an "Iconize"-button, that I have to mind for
> some time yet. In fact, the idea is to create such an "Iconize"-button
> to have a bigger target than the button on the title bar, to the
> minimize onboard to the panel (or to the floating icon if it is active).
> Since we are talking about layout, I thought to mention it, but until
> now I have not looked at how it could be implemented.

Good idea. Maybe extend the script key action so that scripts are passed an instance of the running keyboard that they can act on.

> Yes, something along the lines of the colors dialog in
> gnome-appearance-properties. But I would say to leave that for onboard
> 0.93, as the changes will not be trivial; or am I wrong?

Yes, lets leave that for 0.93.

Cheers, Chris

Revision history for this message
Francesco Fumanti (frafu) wrote :

Hi,

Chris Jones wrote:
>> That would also be room for an "Iconize"-button, that I have to
>> mind for some time yet. In fact, the idea is to create such an
>> "Iconize"-button to have a bigger target than the button on the
>> title bar, to the minimize onboard to the panel (or to the floating
>> icon if it is active). Since we are talking about layout, I thought
>> to mention it, but until now I have not looked at how it could be
>> implemented.
>
> Good idea. Maybe extend the script key action so that scripts are
> passed an instance of the running keyboard that they can act on.

I would say to also leave this for version 0.93, otherwise we will never
get to the 0.92 release...

Or if it is trivial for you to add it, I would use the space of the
Settings button of the Full layout for the Iconize-button, and put the
Settings button and the Switch Buttons button to the second pane.

Cheers

Francesco

Revision history for this message
Chris Jones (tortoise) wrote :

> ...now that "switch buttons" stays in the second pane there is no pressing
> need to move settings anymore, right? So keep the layout in its current state
> with settings first pane, switch buttons second?
> Chris, would that be acceptable for you too?

Yep

> If so, than I take my proposal back :) I'd rather not have onboard require
> "Assistive Technologies". Back when I was dwell clicking for a while, I was
> looking for simple tools. Mousetweaks for some reason needs the whole AT-SPI
> framework enabled, with high memory usage, slower applications and the
> occasional crashers. I gave up on it and settled on kmousetool instead. Things
> may have changed though, I haven't needed it in a while.
>
> > Moreover, would such a functionality not be better suited in the
> > mousetweaks module that is already providing the features of the
> > accessibility tab of the mouse control panel?
>
> That's true, on second thought reimplementing half of mousetweaks features
> doesn't seem like a sensible thing to do.

Currently the switch buttons button toggles a gconf key which is monitored by gnome-settings-daemon. This works inconsistently on my system. Since gnome-settings-daemon does not depend on AT-SPI it must be possible to mangle mouse buttons without it.

I think this functionality probably doesn't belong in Onboard. Mousetweaks seems to use AT-SPI to get a global pointer location. It's hard to understand why the at-spi-registryd is needed for that information.

Ok, I think we're ready to merge now :-)

review: Approve
Revision history for this message
Francesco Fumanti (frafu) wrote :

Hi,

Chris Jones wrote:
>> If so, than I take my proposal back :) I'd rather not have onboard
>> require "Assistive Technologies". Back when I was dwell clicking
>> for a while, I was looking for simple tools. Mousetweaks for some
>> reason needs the whole AT-SPI framework enabled, with high memory
>> usage, slower applications and the occasional crashers. I gave up
>> on it and settled on kmousetool instead. Things may have changed
>> though, I haven't needed it in a while.
>>
>>> Moreover, would such a functionality not be better suited in the
>>> mousetweaks module that is already providing the features of the
>>> accessibility tab of the mouse control panel?
>> That's true, on second thought reimplementing half of mousetweaks
>> features doesn't seem like a sensible thing to do.
>
> Currently the switch buttons button toggles a gconf key which is
> monitored by gnome-settings-daemon. This works inconsistently on my
> system. Since gnome-settings-daemon does not depend on AT-SPI it
> must be possible to mangle mouse buttons without it.
>
> I think this functionality probably doesn't belong in Onboard.
> Mousetweaks seems to use AT-SPI to get a global pointer location.
> It's hard to understand why the at-spi-registryd is needed for that
> information.

Indeed, toggling left and right handedness of the pointer does not need
at-spi, but I suppose that if we wanted to perform more advanced
manipulations on the mouse clicks, we would have to use AT-SPI.

Anyway, we surely agree on the fact that there are other functionalities
(like word completion and word prediction) that deserve more our
attention to be implemented in onboard than mouse click manipulations.

Cheers

Francesco

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Onboard/KeyCommon.py'
2--- Onboard/KeyCommon.py 2009-09-11 13:24:11 +0000
3+++ Onboard/KeyCommon.py 2009-09-27 08:05:21 +0000
4@@ -45,6 +45,9 @@
5 font_size = 1
6 """ Size to draw the label text in Pango units"""
7
8+ label_rgba = (0.0,0.0,0.0,1.0)
9+ """ Four tuple with values between 0 and 1 containing label color"""
10+
11 label_index = 0
12 """ Index in labels that is currently displayed by this key """
13
14
15=== modified file 'Onboard/KeyGtk.py'
16--- Onboard/KeyGtk.py 2009-08-16 19:12:09 +0000
17+++ Onboard/KeyGtk.py 2009-09-27 08:05:21 +0000
18@@ -35,7 +35,8 @@
19 context.move_to((location[0] + self.label_offset[0]) * scale[0],
20 (location[1] + self.label_offset[1]) * scale[1])
21
22- context.set_source_rgb(0, 0, 0)
23+ context.set_source_rgba(self.label_rgba[0], self.label_rgba[1],
24+ self.label_rgba[2], self.label_rgba[3])
25 layout = context.create_layout()
26 layout.set_text(self.labels[self.label_index])
27 font_description = pango.FontDescription()
28
29=== modified file 'Onboard/KeyboardSVG.py'
30--- Onboard/KeyboardSVG.py 2009-09-24 19:05:46 +0000
31+++ Onboard/KeyboardSVG.py 2009-09-27 08:05:21 +0000
32@@ -46,22 +46,34 @@
33 " width must currently be px (pixels)."))
34
35 #find background of pane
36- paneBackground = [0.0,0.0,0.0,0.0]
37+ pane_background = [0.0,0.0,0.0,0.0]
38
39 if pane_xml.hasAttribute("backgroundRed"):
40- paneBackground[0] = pane_xml.attributes["backgroundRed"].value
41+ pane_background[0] = pane_xml.attributes["backgroundRed"].value
42 if pane_xml.hasAttribute("backgroundGreen"):
43- paneBackground[1] = pane_xml.attributes["backgroundGreen"].value
44+ pane_background[1] = pane_xml.attributes["backgroundGreen"].value
45 if pane_xml.hasAttribute("backgroundBlue"):
46- paneBackground[2] = pane_xml.attributes["backgroundBlue"].value
47+ pane_background[2] = pane_xml.attributes["backgroundBlue"].value
48 if pane_xml.hasAttribute("backgroundAlpha"):
49- paneBackground[3] = pane_xml.attributes["backgroundAlpha"].value
50+ pane_background[3] = pane_xml.attributes["backgroundAlpha"].value
51+
52+ #find label color of pane
53+ pane_label_rgba = [0.0,0.0,0.0,1.0]
54+
55+ if pane_xml.hasAttribute("labelRed"):
56+ pane_label_rgba[0] = float(pane_xml.attributes["labelRed"].value)
57+ if pane_xml.hasAttribute("labelGreen"):
58+ pane_label_rgba[1] = float(pane_xml.attributes["labelGreen"].value)
59+ if pane_xml.hasAttribute("labelBlue"):
60+ pane_label_rgba[2] = float(pane_xml.attributes["labelBlue"].value)
61+ if pane_xml.hasAttribute("labelAlpha"):
62+ pane_label_rgba[3] = float(pane_xml.attributes["labelAlpha"].value)
63
64 #scanning
65 columns = []
66
67 self.load_keys_geometry(pane_svg, keys)
68- key_groups = self.load_keys(pane_xml, keys)
69+ key_groups = self.load_keys(pane_xml, keys, pane_label_rgba)
70
71 try:
72 for column_xml in pane_xml.getElementsByTagName("column"):
73@@ -74,7 +86,7 @@
74 _("%s appears in scanning definition only") % (str(exception)))
75
76 return Pane(pane_xml.attributes["id"].value, key_groups,
77- columns, pane_size, paneBackground)
78+ columns, pane_size, pane_background)
79
80
81 def load_layout(self, layout_data_file):
82@@ -141,11 +153,12 @@
83 keys[id] = self.parse_path(path, pane)
84 """
85
86- def load_keys(self, doc, keys):
87+ def load_keys(self, doc, keys, label_rgba):
88 groups = {}
89 for key_xml in doc.getElementsByTagName("key"):
90 name = key_xml.attributes["id"].value
91 if name in keys:
92+<<<<<<< TREE
93 key = keys[name]
94 if key_xml.hasAttribute("char"):
95 key.action = key_xml.attributes["char"].value
96@@ -228,6 +241,97 @@
97 if sticky == "true":
98 key.sticky = True
99 elif sticky == "false":
100+=======
101+ try:
102+ key = keys[name]
103+ if key_xml.hasAttribute("char"):
104+ key.action = key_xml.attributes["char"].value
105+ key.action_type = KeyCommon.CHAR_ACTION
106+ elif key_xml.hasAttribute("keysym"):
107+ value = key_xml.attributes["keysym"].value
108+ key.action_type = KeyCommon.KEYSYM_ACTION
109+ if value[1] == "x":#Deals for when keysym is hex
110+ key.action = string.atoi(value,16)
111+ else:
112+ key.action = string.atoi(value,10)
113+ elif key_xml.hasAttribute("keypress_name"):
114+ key.action = key_xml.attributes["keypress_name"].value
115+ key.action_type = KeyCommon.KEYPRESS_NAME_ACTION
116+ elif key_xml.hasAttribute("press"):
117+ key.action = key_xml.attributes["char"].value
118+ key.action_type = KeyCommon.CHAR_ACTION
119+ elif key_xml.hasAttribute("modifier"):
120+ try:
121+ key.action = modifiers[
122+ key_xml.attributes["modifier"].value]
123+ except KeyError, (strerror):
124+ raise Exception("Unrecognised modifier %s in" \
125+ "definition of %s" (strerror, name))
126+ key.action_type = KeyCommon.MODIFIER_ACTION
127+
128+ elif key_xml.hasAttribute("macro"):
129+ key.action = key_xml.attributes["macro"].value
130+ key.action_type = KeyCommon.MACRO_ACTION
131+ elif key_xml.hasAttribute("script"):
132+ key.action = key_xml.attributes["script"].value
133+ key.action_type = KeyCommon.SCRIPT_ACTION
134+ elif key_xml.hasAttribute("keycode"):
135+ key.action = string.atoi(
136+ key_xml.attributes["keycode"].value)
137+ key.action_type = KeyCommon.KEYCODE_ACTION
138+
139+ labels = ["","","","",""]
140+ #if label specified search for modified labels.
141+ if key_xml.hasAttribute("label"):
142+ labels[0] = key_xml.attributes["label"].value
143+ if key_xml.hasAttribute("cap_label"):
144+ labels[1] = key_xml.attributes["cap_label"].value
145+ if key_xml.hasAttribute("shift_label"):
146+ labels[2] = key_xml.attributes["shift_label"].value
147+ if key_xml.hasAttribute("altgr_label"):
148+ labels[3] = key_xml.attributes["altgr_label"].value
149+ if key_xml.hasAttribute("altgrNshift_label"):
150+ labels[4] = \
151+ key_xml.attributes["altgrNshift_label"].value
152+ #Get labels from keyboard.
153+ else:
154+ if key.action_type == KeyCommon.KEYCODE_ACTION:
155+ labDic = self.vk.labels_from_keycode(key.action)
156+ labels = (labDic[0],labDic[2],labDic[1],
157+ labDic[3],labDic[4])
158+
159+ # Translate labels - Gettext behaves oddly when translating
160+ # empty strings
161+ key.labels = [ lab and _(lab) or None for lab in labels ]
162+
163+ # assign label color - default label color is pane default
164+ key.label_rgba = label_rgba
165+
166+ if key_xml.hasAttribute("font_offset_x"):
167+ offset_x = \
168+ float(key_xml.attributes["font_offset_x"].value)
169+ else:
170+ offset_x = config.DEFAULT_LABEL_OFFSET[0]
171+
172+ if key_xml.hasAttribute("font_offset_y"):
173+ offset_x = \
174+ float(key_xml.attributes["font_offset_y"].value)
175+ else:
176+ offset_y = config.DEFAULT_LABEL_OFFSET[1]
177+ key.label_offset = (offset_x, offset_y)
178+
179+ sticky = key_xml.attributes["sticky"].value.lower()
180+ if sticky:
181+ if sticky == "true":
182+ key.sticky = True
183+ elif sticky == "false":
184+ key.sticky = False
185+ else:
186+ raise Exception( "'sticky' attribute had an"
187+ "invalid value: %s when parsing key %s"
188+ % (sticky, name))
189+ else:
190+>>>>>>> MERGE-SOURCE
191 key.sticky = False
192 else:
193 raise Exception( "'sticky' attribute had an"
194
195=== modified file 'Onboard/settings.py'
196--- Onboard/settings.py 2009-08-19 22:12:07 +0000
197+++ Onboard/settings.py 2009-09-27 08:05:22 +0000
198@@ -208,15 +208,12 @@
199 try:
200 sokdoc = minidom.parse(file_object).documentElement
201
202+ value = sokdoc.attributes["id"].value
203 if os.access(filename,os.W_OK):
204- it = self.layoutList.append(("<i>%s</i>"
205- % sokdoc.attributes["id"].value, filename))
206+ soks.append((value.lower(), "<i>%s</i>" % value, filename))
207 else:
208- it = self.layoutList.append((
209- sokdoc.attributes["id"].value, filename))
210+ soks.append((value.lower(), value, filename))
211
212- if filename == config.layout_filename:
213- self.layout_view.get_selection().select_iter(it)
214 except ExpatError,(strerror):
215 print "XML in %s %s" % (filename, strerror)
216 except KeyError,(strerror):
217@@ -224,6 +221,12 @@
218
219 file_object.close()
220
221+ for key, value, filename in sorted(soks):
222+ it = self.layoutList.append((value, filename))
223+ if filename == config.layout_filename:
224+ self.layout_view.get_selection().select_iter(it)
225+
226+
227 def find_soks(self, path):
228 files = os.listdir(path)
229 soks = []
230
231=== added file 'layouts/Full-Alpha.svg'
232--- layouts/Full-Alpha.svg 1970-01-01 00:00:00 +0000
233+++ layouts/Full-Alpha.svg 2009-09-27 08:05:22 +0000
234@@ -0,0 +1,635 @@
235+<?xml version='1.0' encoding='UTF-8'?>
236+<!-- Created with onBoard -->
237+<svg xmlns:cc='http://web.resource.org/cc/'
238+ xmlns:svg='http://www.w3.org/2000/svg'
239+ xmlns:dc='http://purl.org/dc/elements/1.1/'
240+ xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
241+ xmlns='http://www.w3.org/2000/svg'
242+ height='118.0'
243+ width='350.0'
244+ version='1.0'
245+ id='full-alpha'>
246+ <rect
247+ style="fill:#f2e5d8;stroke:#000000"
248+ height="18"
249+ width="23"
250+ y="99.063034"
251+ x="192"
252+ id="RALT" />
253+ <rect
254+ style="fill:#e5d8b2;stroke:#000000"
255+ height="18"
256+ width="18"
257+ y="80.063034"
258+ x="47"
259+ id="AB01" />
260+ <rect
261+ style="fill:#e5d8b2;stroke:#000000"
262+ height="18"
263+ width="18"
264+ y="23.063038"
265+ x="40"
266+ id="AE02" />
267+ <rect
268+ style="fill:#e5d8b2;stroke:#000000"
269+ height="18"
270+ width="18"
271+ y="23.063038"
272+ x="59"
273+ id="AE03" />
274+ <rect
275+ style="fill:#e5d8b2;stroke:#000000"
276+ height="18"
277+ width="18"
278+ y="42.063038"
279+ x="183"
280+ id="AD09" />
281+ <rect
282+ style="fill:#e5d8b2;stroke:#000000"
283+ height="18"
284+ width="18"
285+ y="23.063038"
286+ x="21"
287+ id="AE01" />
288+ <rect
289+ style="fill:#e5d8b2;stroke:#000000"
290+ height="18"
291+ width="18"
292+ y="23.063038"
293+ x="116"
294+ id="AE06" />
295+ <rect
296+ style="fill:#e5d8b2;stroke:#000000"
297+ height="18"
298+ width="18"
299+ y="23.063038"
300+ x="135"
301+ id="AE07" />
302+ <rect
303+ style="fill:#e5d8b2;stroke:#000000"
304+ height="18"
305+ width="18"
306+ y="23.063038"
307+ x="78"
308+ id="AE04" />
309+ <rect
310+ style="fill:#e5d8b2;stroke:#000000"
311+ height="18"
312+ width="18"
313+ y="23.063038"
314+ x="97"
315+ id="AE05" />
316+ <rect
317+ style="fill:#e5d8b2;stroke:#000000"
318+ height="18"
319+ width="18"
320+ y="42.063038"
321+ x="69"
322+ id="AD03" />
323+ <rect
324+ style="fill:#e5d8b2;stroke:#000000"
325+ height="18"
326+ width="18"
327+ y="42.063038"
328+ x="50"
329+ id="AD02" />
330+ <rect
331+ style="fill:#e5d8b2;stroke:#000000"
332+ height="18"
333+ width="18"
334+ y="42.063038"
335+ x="31"
336+ id="AD01" />
337+ <rect
338+ style="fill:#e5d8b2;stroke:#000000"
339+ height="18"
340+ width="18"
341+ y="23.063038"
342+ x="173"
343+ id="AE09" />
344+ <rect
345+ style="fill:#e5d8b2;stroke:#000000"
346+ height="18"
347+ width="18"
348+ y="42.063038"
349+ x="145"
350+ id="AD07" />
351+ <rect
352+ style="fill:#e5d8b2;stroke:#000000"
353+ height="18"
354+ width="18"
355+ y="42.063038"
356+ x="126"
357+ id="AD06" />
358+ <rect
359+ style="fill:#e5d8b2;stroke:#000000"
360+ height="18"
361+ width="18"
362+ y="42.063038"
363+ x="107"
364+ id="AD05" />
365+ <rect
366+ style="fill:#e5d8b2;stroke:#000000"
367+ height="18"
368+ width="18"
369+ y="42.063038"
370+ x="88"
371+ id="AD04" />
372+ <rect
373+ style="fill:#e5d8b2;stroke:#000000"
374+ height="18"
375+ width="18"
376+ y="80.063034"
377+ x="218"
378+ id="AB10" />
379+ <rect
380+ style="fill:#e5d8b2;stroke:#000000"
381+ height="18"
382+ width="18"
383+ y="61.063038"
384+ x="226"
385+ id="AC11" />
386+ <rect
387+ style="fill:#e5d8b2;stroke:#000000"
388+ height="18"
389+ width="18"
390+ y="61.063038"
391+ x="207"
392+ id="AC10" />
393+ <rect
394+ style="fill:#f2e5d8;stroke:#000000"
395+ height="18"
396+ width="23"
397+ y="99.063034"
398+ x="264"
399+ id="RCTL" />
400+ <rect
401+ style="fill:#f2e5d8;stroke:#000000"
402+ height="18"
403+ width="27"
404+ y="99.063034"
405+ x="2"
406+ id="LCTL" />
407+ <rect
408+ style="fill:#d8cca5;stroke:#000000"
409+ height="18"
410+ width="28"
411+ y="42.063038"
412+ x="2"
413+ id="TAB" />
414+ <rect
415+ style="fill:#f2e5d8;stroke:#000000"
416+ height="18"
417+ width="23"
418+ y="99.063034"
419+ x="54"
420+ id="LALT" />
421+ <rect
422+ style="fill:#e5d8b2;stroke:#000000"
423+ height="18"
424+ width="18"
425+ y="23.063038"
426+ x="2"
427+ id="TLDE" />
428+ <rect
429+ style="fill:#e5d8b2;stroke:#000000"
430+ height="18"
431+ width="18"
432+ y="80.063034"
433+ x="28"
434+ id="LSGT" />
435+ <rect
436+ style="fill:#f2e5d8;stroke:#000000"
437+ height="18"
438+ width="25"
439+ y="80.063034"
440+ x="2"
441+ id="LFSH" />
442+ <rect
443+ style="fill:#d8cca5;stroke:#000000"
444+ height="18"
445+ width="38"
446+ y="23.063038"
447+ x="249"
448+ id="BKSP" />
449+ <rect
450+ style="fill:#f2e5d8;stroke:#000000"
451+ height="18"
452+ width="33"
453+ y="61.063038"
454+ x="2"
455+ id="CAPS" />
456+ <rect
457+ style="fill:#e5d8b2;stroke:#000000"
458+ height="18"
459+ width="28"
460+ y="42.063038"
461+ x="259"
462+ id="BKSL" />
463+ <rect
464+ style="fill:#d8cca5;stroke:#000000"
465+ height="18"
466+ width="42"
467+ y="61.063038"
468+ x="245"
469+ id="RTRN" />
470+ <rect
471+ style="fill:#d8cca5;stroke:#000000"
472+ height="18"
473+ width="23"
474+ y="99.063034"
475+ x="240"
476+ id="MENU" />
477+ <rect
478+ style="fill:#e5d8b2;stroke:#000000"
479+ height="18"
480+ width="18"
481+ y="42.063038"
482+ x="202"
483+ id="AD10" />
484+ <rect
485+ style="fill:#e5d8b2;stroke:#000000"
486+ height="18"
487+ width="18"
488+ y="42.063038"
489+ x="221"
490+ id="AD11" />
491+ <rect
492+ style="fill:#e5d8b2;stroke:#000000"
493+ height="18"
494+ width="18"
495+ y="42.063038"
496+ x="240"
497+ id="AD12" />
498+ <rect
499+ style="fill:#e5d8b2;stroke:#000000"
500+ height="18"
501+ width="18"
502+ y="80.063034"
503+ x="180"
504+ id="AB08" />
505+ <rect
506+ style="fill:#e5d8b2;stroke:#000000"
507+ height="18"
508+ width="18"
509+ y="23.063038"
510+ x="211"
511+ id="AE11" />
512+ <rect
513+ style="fill:#e5d8b2;stroke:#000000"
514+ height="18"
515+ width="18"
516+ y="23.063038"
517+ x="192"
518+ id="AE10" />
519+ <rect
520+ style="fill:#e5d8b2;stroke:#000000"
521+ height="18"
522+ width="18"
523+ y="23.063038"
524+ x="230"
525+ id="AE12" />
526+ <rect
527+ style="fill:#e5d8b2;stroke:#000000"
528+ height="18"
529+ width="18"
530+ y="61.063038"
531+ x="93"
532+ id="AC04" />
533+ <rect
534+ style="fill:#e5d8b2;stroke:#000000"
535+ height="18"
536+ width="18"
537+ y="61.063038"
538+ x="112"
539+ id="AC05" />
540+ <rect
541+ style="fill:#e5d8b2;stroke:#000000"
542+ height="18"
543+ width="18"
544+ y="61.063038"
545+ x="131"
546+ id="AC06" />
547+ <rect
548+ style="fill:#e5d8b2;stroke:#000000"
549+ height="18"
550+ width="18"
551+ y="61.063038"
552+ x="150"
553+ id="AC07" />
554+ <rect
555+ style="fill:#e5d8b2;stroke:#000000"
556+ height="18"
557+ width="18"
558+ y="80.063034"
559+ x="199"
560+ id="AB09" />
561+ <rect
562+ style="fill:#e5d8b2;stroke:#000000"
563+ height="18"
564+ width="18"
565+ y="61.063038"
566+ x="36"
567+ id="AC01" />
568+ <rect
569+ style="fill:#e5d8b2;stroke:#000000"
570+ height="18"
571+ width="18"
572+ y="61.063038"
573+ x="55"
574+ id="AC02" />
575+ <rect
576+ style="fill:#e5d8b2;stroke:#000000"
577+ height="18"
578+ width="18"
579+ y="61.063038"
580+ x="74"
581+ id="AC03" />
582+ <rect
583+ style="fill:#e5d8b2;stroke:#000000"
584+ height="18"
585+ width="18"
586+ y="80.063034"
587+ x="123"
588+ id="AB05" />
589+ <rect
590+ style="fill:#e5d8b2;stroke:#000000"
591+ height="18"
592+ width="18"
593+ y="80.063034"
594+ x="104"
595+ id="AB04" />
596+ <rect
597+ style="fill:#e5d8b2;stroke:#000000"
598+ height="18"
599+ width="18"
600+ y="23.063038"
601+ x="154"
602+ id="AE08" />
603+ <rect
604+ style="fill:#e5d8b2;stroke:#000000"
605+ height="18"
606+ width="18"
607+ y="80.063034"
608+ x="142"
609+ id="AB06" />
610+ <rect
611+ style="fill:#e5d8b2;stroke:#000000"
612+ height="18"
613+ width="18"
614+ y="61.063038"
615+ x="169"
616+ id="AC08" />
617+ <rect
618+ style="fill:#e5d8b2;stroke:#000000"
619+ height="18"
620+ width="18"
621+ y="61.063038"
622+ x="188"
623+ id="AC09" />
624+ <rect
625+ style="fill:#e5d8b2;stroke:#000000"
626+ height="18"
627+ width="18"
628+ y="80.063034"
629+ x="85"
630+ id="AB03" />
631+ <rect
632+ style="fill:#e5d8b2;stroke:#000000"
633+ height="18"
634+ width="18"
635+ y="80.063034"
636+ x="66"
637+ id="AB02" />
638+ <rect
639+ style="fill:#e5d8b2;stroke:#000000"
640+ height="18"
641+ width="18"
642+ y="42.063038"
643+ x="164"
644+ id="AD08" />
645+ <rect
646+ style="fill:#d8cca5;stroke:#000000"
647+ height="18"
648+ width="23"
649+ y="99.063034"
650+ x="216"
651+ id="RWIN" />
652+ <rect
653+ style="fill:#e5d8b2;stroke:#000000"
654+ height="18"
655+ width="113"
656+ y="99.063034"
657+ x="78"
658+ id="SPCE" />
659+ <rect
660+ style="fill:#f2e5d8;stroke:#000000"
661+ height="18"
662+ width="50"
663+ y="80.063034"
664+ x="237"
665+ id="RTSH" />
666+ <rect
667+ style="fill:#f2e5d8;stroke:#000000"
668+ height="18"
669+ width="23"
670+ y="99.063034"
671+ x="30"
672+ id="LWIN" />
673+ <rect
674+ style="fill:#e5d8b2;stroke:#000000"
675+ height="18"
676+ width="18"
677+ y="80.063034"
678+ x="161"
679+ id="AB07" />
680+ <rect
681+ style="fill:#d8cca5;stroke:#000000"
682+ height="18"
683+ width="18"
684+ y="98.982155"
685+ x="311.66177"
686+ id="DOWN" />
687+ <rect
688+ style="fill:#d8cca5;stroke:#000000"
689+ height="18"
690+ width="18"
691+ y="22.982155"
692+ x="330.66177"
693+ id="PGUP" />
694+ <rect
695+ style="fill:#d8cca5;stroke:#000000"
696+ height="18"
697+ width="18"
698+ y="22.982155"
699+ x="311.66177"
700+ id="HOME" />
701+ <rect
702+ style="fill:#d8cca5;stroke:#000000"
703+ height="18"
704+ width="18"
705+ y="98.982155"
706+ x="292.66177"
707+ id="LEFT" />
708+ <rect
709+ style="fill:#d8cca5;stroke:#000000"
710+ height="18"
711+ width="18"
712+ y="98.982155"
713+ x="330.66177"
714+ id="RGHT" />
715+ <rect
716+ style="fill:#d8cca5;stroke:#000000"
717+ height="18"
718+ width="18"
719+ y="41.982155"
720+ x="292.66177"
721+ id="DELE" />
722+ <rect
723+ style="fill:#d8cca5;stroke:#000000"
724+ height="18"
725+ width="18"
726+ y="41.982155"
727+ x="311.66177"
728+ id="END" />
729+ <rect
730+ style="fill:#d8cca5;stroke:#000000"
731+ height="18"
732+ width="18"
733+ y="41.982155"
734+ x="330.66177"
735+ id="PGDN" />
736+ <rect
737+ style="fill:#d8cca5;stroke:#000000"
738+ height="18"
739+ width="18"
740+ y="79.982155"
741+ x="311.66177"
742+ id="UP" />
743+ <rect
744+ style="fill:#d8cca5;stroke:#000000"
745+ height="18"
746+ width="18"
747+ y="22.982155"
748+ x="292.66177"
749+ id="INS" />
750+ <rect
751+ style="fill:#d8cca5;stroke:#000000"
752+ height="18"
753+ width="18"
754+ y="1.3677174"
755+ x="192.29951"
756+ id="F10" />
757+ <rect
758+ style="fill:#d8cca5;stroke:#000000"
759+ height="18"
760+ width="18"
761+ y="1.3677174"
762+ x="59.299507"
763+ id="F3" />
764+ <rect
765+ style="fill:#d8cca5;stroke:#000000"
766+ height="18"
767+ width="18"
768+ y="1.3677174"
769+ x="40.299507"
770+ id="F2" />
771+ <rect
772+ style="fill:#d8cca5;stroke:#000000"
773+ height="18"
774+ width="18"
775+ y="1.3677174"
776+ x="2.2995079"
777+ id="ESC" />
778+ <rect
779+ style="fill:#d8cca5;stroke:#000000"
780+ height="18"
781+ width="18"
782+ y="1.3677174"
783+ x="230.29951"
784+ id="F12" />
785+ <rect
786+ style="fill:#d8cca5;stroke:#000000"
787+ height="18"
788+ width="18"
789+ y="1.3677174"
790+ x="211.29951"
791+ id="F11" />
792+ <rect
793+ style="fill:#d8cca5;stroke:#000000"
794+ height="18"
795+ width="18"
796+ y="1.3677174"
797+ x="173.29951"
798+ id="F9" />
799+ <rect
800+ style="fill:#d8cca5;stroke:#000000"
801+ height="18"
802+ width="18"
803+ y="1.3677174"
804+ x="116.29951"
805+ id="F6" />
806+ <rect
807+ style="fill:#d8cca5;stroke:#000000"
808+ height="18"
809+ width="18"
810+ y="1.3677174"
811+ x="135.29951"
812+ id="F7" />
813+ <rect
814+ style="fill:#d8cca5;stroke:#000000"
815+ height="18"
816+ width="18"
817+ y="1.3677174"
818+ x="21.299507"
819+ id="F1" />
820+ <rect
821+ style="fill:#d8cca5;stroke:#000000"
822+ height="18"
823+ width="18"
824+ y="1.3677174"
825+ x="78.299507"
826+ id="F4" />
827+ <rect
828+ style="fill:#d8cca5;stroke:#000000"
829+ height="18"
830+ width="18"
831+ y="1.3677174"
832+ x="154.29951"
833+ id="F8" />
834+ <rect
835+ style="fill:#d8cca5;stroke:#000000"
836+ height="18"
837+ width="18"
838+ y="1.3677174"
839+ x="97.299507"
840+ id="F5" />
841+ <rect
842+ style="fill:#d8cca5;stroke:#000000"
843+ height="18"
844+ width="18"
845+ y="1.3655807"
846+ x="330.70572"
847+ id="Pause" />
848+ <rect
849+ style="fill:#d8cca5;stroke:#000000"
850+ height="18"
851+ width="18"
852+ y="1.3677174"
853+ x="292.70569"
854+ id="Prnt" />
855+ <rect
856+ style="fill:#d8cca5;stroke:#000000"
857+ height="18"
858+ width="18"
859+ y="1.3655807"
860+ x="311.70572"
861+ id="Scroll" />
862+ <rect
863+ style="fill:#f27f7f;stroke:#000000"
864+ height="18"
865+ width="32.799999"
866+ y="1.3677174"
867+ x="254.2"
868+ id="settings" />
869+</svg>
870
871=== added file 'layouts/Full-Dark-Alpha.svg'
872--- layouts/Full-Dark-Alpha.svg 1970-01-01 00:00:00 +0000
873+++ layouts/Full-Dark-Alpha.svg 2009-09-27 08:05:22 +0000
874@@ -0,0 +1,635 @@
875+<?xml version='1.0' encoding='UTF-8'?>
876+<!-- Created with onBoard -->
877+<svg xmlns:cc='http://web.resource.org/cc/'
878+ xmlns:svg='http://www.w3.org/2000/svg'
879+ xmlns:dc='http://purl.org/dc/elements/1.1/'
880+ xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
881+ xmlns='http://www.w3.org/2000/svg'
882+ height='118.0'
883+ width='350.0'
884+ version='1.0'
885+ id='svg2'>
886+ <rect
887+ style="fill:#403020;stroke:#7f7f7f"
888+ height="18"
889+ width="23"
890+ y="99.063034"
891+ x="192"
892+ id="RALT" />
893+ <rect
894+ style="fill:#505001;stroke:#7f7f7f"
895+ height="18"
896+ width="18"
897+ y="80.063034"
898+ x="47"
899+ id="AB01" />
900+ <rect
901+ style="fill:#505001;stroke:#7f7f7f"
902+ height="18"
903+ width="18"
904+ y="23.063038"
905+ x="40"
906+ id="AE02" />
907+ <rect
908+ style="fill:#505001;stroke:#7f7f7f"
909+ height="18"
910+ width="18"
911+ y="23.063038"
912+ x="59"
913+ id="AE03" />
914+ <rect
915+ style="fill:#505001;stroke:#7f7f7f"
916+ height="18"
917+ width="18"
918+ y="42.063038"
919+ x="183"
920+ id="AD09" />
921+ <rect
922+ style="fill:#505001;stroke:#7f7f7f"
923+ height="18"
924+ width="18"
925+ y="23.063038"
926+ x="21"
927+ id="AE01" />
928+ <rect
929+ style="fill:#505001;stroke:#7f7f7f"
930+ height="18"
931+ width="18"
932+ y="23.063038"
933+ x="116"
934+ id="AE06" />
935+ <rect
936+ style="fill:#505001;stroke:#7f7f7f"
937+ height="18"
938+ width="18"
939+ y="23.063038"
940+ x="135"
941+ id="AE07" />
942+ <rect
943+ style="fill:#505001;stroke:#7f7f7f"
944+ height="18"
945+ width="18"
946+ y="23.063038"
947+ x="78"
948+ id="AE04" />
949+ <rect
950+ style="fill:#505001;stroke:#7f7f7f"
951+ height="18"
952+ width="18"
953+ y="23.063038"
954+ x="97"
955+ id="AE05" />
956+ <rect
957+ style="fill:#505001;stroke:#7f7f7f"
958+ height="18"
959+ width="18"
960+ y="42.063038"
961+ x="69"
962+ id="AD03" />
963+ <rect
964+ style="fill:#505001;stroke:#7f7f7f"
965+ height="18"
966+ width="18"
967+ y="42.063038"
968+ x="50"
969+ id="AD02" />
970+ <rect
971+ style="fill:#505001;stroke:#7f7f7f"
972+ height="18"
973+ width="18"
974+ y="42.063038"
975+ x="31"
976+ id="AD01" />
977+ <rect
978+ style="fill:#505001;stroke:#7f7f7f"
979+ height="18"
980+ width="18"
981+ y="23.063038"
982+ x="173"
983+ id="AE09" />
984+ <rect
985+ style="fill:#505001;stroke:#7f7f7f"
986+ height="18"
987+ width="18"
988+ y="42.063038"
989+ x="145"
990+ id="AD07" />
991+ <rect
992+ style="fill:#505001;stroke:#7f7f7f"
993+ height="18"
994+ width="18"
995+ y="42.063038"
996+ x="126"
997+ id="AD06" />
998+ <rect
999+ style="fill:#505001;stroke:#7f7f7f"
1000+ height="18"
1001+ width="18"
1002+ y="42.063038"
1003+ x="107"
1004+ id="AD05" />
1005+ <rect
1006+ style="fill:#505001;stroke:#7f7f7f"
1007+ height="18"
1008+ width="18"
1009+ y="42.063038"
1010+ x="88"
1011+ id="AD04" />
1012+ <rect
1013+ style="fill:#505001;stroke:#7f7f7f"
1014+ height="18"
1015+ width="18"
1016+ y="80.063034"
1017+ x="218"
1018+ id="AB10" />
1019+ <rect
1020+ style="fill:#505001;stroke:#7f7f7f"
1021+ height="18"
1022+ width="18"
1023+ y="61.063038"
1024+ x="226"
1025+ id="AC11" />
1026+ <rect
1027+ style="fill:#505001;stroke:#7f7f7f"
1028+ height="18"
1029+ width="18"
1030+ y="61.063038"
1031+ x="207"
1032+ id="AC10" />
1033+ <rect
1034+ style="fill:#403020;stroke:#7f7f7f"
1035+ height="18"
1036+ width="23"
1037+ y="99.063034"
1038+ x="264"
1039+ id="RCTL" />
1040+ <rect
1041+ style="fill:#403020;stroke:#7f7f7f"
1042+ height="18"
1043+ width="27"
1044+ y="99.063034"
1045+ x="2"
1046+ id="LCTL" />
1047+ <rect
1048+ style="fill:#404031;stroke:#7f7f7f"
1049+ height="18"
1050+ width="28"
1051+ y="42.063038"
1052+ x="2"
1053+ id="TAB" />
1054+ <rect
1055+ style="fill:#403020;stroke:#7f7f7f"
1056+ height="18"
1057+ width="23"
1058+ y="99.063034"
1059+ x="54"
1060+ id="LALT" />
1061+ <rect
1062+ style="fill:#505001;stroke:#7f7f7f"
1063+ height="18"
1064+ width="18"
1065+ y="23.063038"
1066+ x="2"
1067+ id="TLDE" />
1068+ <rect
1069+ style="fill:#505001;stroke:#7f7f7f"
1070+ height="18"
1071+ width="18"
1072+ y="80.063034"
1073+ x="28"
1074+ id="LSGT" />
1075+ <rect
1076+ style="fill:#403020;stroke:#7f7f7f"
1077+ height="18"
1078+ width="25"
1079+ y="80.063034"
1080+ x="2"
1081+ id="LFSH" />
1082+ <rect
1083+ style="fill:#404031;stroke:#7f7f7f"
1084+ height="18"
1085+ width="38"
1086+ y="23.063038"
1087+ x="249"
1088+ id="BKSP" />
1089+ <rect
1090+ style="fill:#403020;stroke:#7f7f7f"
1091+ height="18"
1092+ width="33"
1093+ y="61.063038"
1094+ x="2"
1095+ id="CAPS" />
1096+ <rect
1097+ style="fill:#505001;stroke:#7f7f7f"
1098+ height="18"
1099+ width="28"
1100+ y="42.063038"
1101+ x="259"
1102+ id="BKSL" />
1103+ <rect
1104+ style="fill:#404031;stroke:#7f7f7f"
1105+ height="18"
1106+ width="42"
1107+ y="61.063038"
1108+ x="245"
1109+ id="RTRN" />
1110+ <rect
1111+ style="fill:#404031;stroke:#7f7f7f"
1112+ height="18"
1113+ width="23"
1114+ y="99.063034"
1115+ x="240"
1116+ id="MENU" />
1117+ <rect
1118+ style="fill:#505001;stroke:#7f7f7f"
1119+ height="18"
1120+ width="18"
1121+ y="42.063038"
1122+ x="202"
1123+ id="AD10" />
1124+ <rect
1125+ style="fill:#505001;stroke:#7f7f7f"
1126+ height="18"
1127+ width="18"
1128+ y="42.063038"
1129+ x="221"
1130+ id="AD11" />
1131+ <rect
1132+ style="fill:#505001;stroke:#7f7f7f"
1133+ height="18"
1134+ width="18"
1135+ y="42.063038"
1136+ x="240"
1137+ id="AD12" />
1138+ <rect
1139+ style="fill:#505001;stroke:#7f7f7f"
1140+ height="18"
1141+ width="18"
1142+ y="80.063034"
1143+ x="180"
1144+ id="AB08" />
1145+ <rect
1146+ style="fill:#505001;stroke:#7f7f7f"
1147+ height="18"
1148+ width="18"
1149+ y="23.063038"
1150+ x="211"
1151+ id="AE11" />
1152+ <rect
1153+ style="fill:#505001;stroke:#7f7f7f"
1154+ height="18"
1155+ width="18"
1156+ y="23.063038"
1157+ x="192"
1158+ id="AE10" />
1159+ <rect
1160+ style="fill:#505001;stroke:#7f7f7f"
1161+ height="18"
1162+ width="18"
1163+ y="23.063038"
1164+ x="230"
1165+ id="AE12" />
1166+ <rect
1167+ style="fill:#505001;stroke:#7f7f7f"
1168+ height="18"
1169+ width="18"
1170+ y="61.063038"
1171+ x="93"
1172+ id="AC04" />
1173+ <rect
1174+ style="fill:#505001;stroke:#7f7f7f"
1175+ height="18"
1176+ width="18"
1177+ y="61.063038"
1178+ x="112"
1179+ id="AC05" />
1180+ <rect
1181+ style="fill:#505001;stroke:#7f7f7f"
1182+ height="18"
1183+ width="18"
1184+ y="61.063038"
1185+ x="131"
1186+ id="AC06" />
1187+ <rect
1188+ style="fill:#505001;stroke:#7f7f7f"
1189+ height="18"
1190+ width="18"
1191+ y="61.063038"
1192+ x="150"
1193+ id="AC07" />
1194+ <rect
1195+ style="fill:#505001;stroke:#7f7f7f"
1196+ height="18"
1197+ width="18"
1198+ y="80.063034"
1199+ x="199"
1200+ id="AB09" />
1201+ <rect
1202+ style="fill:#505001;stroke:#7f7f7f"
1203+ height="18"
1204+ width="18"
1205+ y="61.063038"
1206+ x="36"
1207+ id="AC01" />
1208+ <rect
1209+ style="fill:#505001;stroke:#7f7f7f"
1210+ height="18"
1211+ width="18"
1212+ y="61.063038"
1213+ x="55"
1214+ id="AC02" />
1215+ <rect
1216+ style="fill:#505001;stroke:#7f7f7f"
1217+ height="18"
1218+ width="18"
1219+ y="61.063038"
1220+ x="74"
1221+ id="AC03" />
1222+ <rect
1223+ style="fill:#505001;stroke:#7f7f7f"
1224+ height="18"
1225+ width="18"
1226+ y="80.063034"
1227+ x="123"
1228+ id="AB05" />
1229+ <rect
1230+ style="fill:#505001;stroke:#7f7f7f"
1231+ height="18"
1232+ width="18"
1233+ y="80.063034"
1234+ x="104"
1235+ id="AB04" />
1236+ <rect
1237+ style="fill:#505001;stroke:#7f7f7f"
1238+ height="18"
1239+ width="18"
1240+ y="23.063038"
1241+ x="154"
1242+ id="AE08" />
1243+ <rect
1244+ style="fill:#505001;stroke:#7f7f7f"
1245+ height="18"
1246+ width="18"
1247+ y="80.063034"
1248+ x="142"
1249+ id="AB06" />
1250+ <rect
1251+ style="fill:#505001;stroke:#7f7f7f"
1252+ height="18"
1253+ width="18"
1254+ y="61.063038"
1255+ x="169"
1256+ id="AC08" />
1257+ <rect
1258+ style="fill:#505001;stroke:#7f7f7f"
1259+ height="18"
1260+ width="18"
1261+ y="61.063038"
1262+ x="188"
1263+ id="AC09" />
1264+ <rect
1265+ style="fill:#505001;stroke:#7f7f7f"
1266+ height="18"
1267+ width="18"
1268+ y="80.063034"
1269+ x="85"
1270+ id="AB03" />
1271+ <rect
1272+ style="fill:#505001;stroke:#7f7f7f"
1273+ height="18"
1274+ width="18"
1275+ y="80.063034"
1276+ x="66"
1277+ id="AB02" />
1278+ <rect
1279+ style="fill:#505001;stroke:#7f7f7f"
1280+ height="18"
1281+ width="18"
1282+ y="42.063038"
1283+ x="164"
1284+ id="AD08" />
1285+ <rect
1286+ style="fill:#404031;stroke:#7f7f7f"
1287+ height="18"
1288+ width="23"
1289+ y="99.063034"
1290+ x="216"
1291+ id="RWIN" />
1292+ <rect
1293+ style="fill:#505001;stroke:#7f7f7f"
1294+ height="18"
1295+ width="113"
1296+ y="99.063034"
1297+ x="78"
1298+ id="SPCE" />
1299+ <rect
1300+ style="fill:#403020;stroke:#7f7f7f"
1301+ height="18"
1302+ width="50"
1303+ y="80.063034"
1304+ x="237"
1305+ id="RTSH" />
1306+ <rect
1307+ style="fill:#403020;stroke:#7f7f7f"
1308+ height="18"
1309+ width="23"
1310+ y="99.063034"
1311+ x="30"
1312+ id="LWIN" />
1313+ <rect
1314+ style="fill:#505001;stroke:#7f7f7f"
1315+ height="18"
1316+ width="18"
1317+ y="80.063034"
1318+ x="161"
1319+ id="AB07" />
1320+ <rect
1321+ style="fill:#404031;stroke:#7f7f7f"
1322+ height="18"
1323+ width="18"
1324+ y="98.982155"
1325+ x="311.66177"
1326+ id="DOWN" />
1327+ <rect
1328+ style="fill:#404031;stroke:#7f7f7f"
1329+ height="18"
1330+ width="18"
1331+ y="22.982155"
1332+ x="330.66177"
1333+ id="PGUP" />
1334+ <rect
1335+ style="fill:#404031;stroke:#7f7f7f"
1336+ height="18"
1337+ width="18"
1338+ y="22.982155"
1339+ x="311.66177"
1340+ id="HOME" />
1341+ <rect
1342+ style="fill:#404031;stroke:#7f7f7f"
1343+ height="18"
1344+ width="18"
1345+ y="98.982155"
1346+ x="292.66177"
1347+ id="LEFT" />
1348+ <rect
1349+ style="fill:#404031;stroke:#7f7f7f"
1350+ height="18"
1351+ width="18"
1352+ y="98.982155"
1353+ x="330.66177"
1354+ id="RGHT" />
1355+ <rect
1356+ style="fill:#404031;stroke:#7f7f7f"
1357+ height="18"
1358+ width="18"
1359+ y="41.982155"
1360+ x="292.66177"
1361+ id="DELE" />
1362+ <rect
1363+ style="fill:#404031;stroke:#7f7f7f"
1364+ height="18"
1365+ width="18"
1366+ y="41.982155"
1367+ x="311.66177"
1368+ id="END" />
1369+ <rect
1370+ style="fill:#404031;stroke:#7f7f7f"
1371+ height="18"
1372+ width="18"
1373+ y="41.982155"
1374+ x="330.66177"
1375+ id="PGDN" />
1376+ <rect
1377+ style="fill:#404031;stroke:#7f7f7f"
1378+ height="18"
1379+ width="18"
1380+ y="79.982155"
1381+ x="311.66177"
1382+ id="UP" />
1383+ <rect
1384+ style="fill:#404031;stroke:#7f7f7f"
1385+ height="18"
1386+ width="18"
1387+ y="22.982155"
1388+ x="292.66177"
1389+ id="INS" />
1390+ <rect
1391+ style="fill:#404031;stroke:#7f7f7f"
1392+ height="18"
1393+ width="18"
1394+ y="1.3677174"
1395+ x="192.29951"
1396+ id="F10" />
1397+ <rect
1398+ style="fill:#404031;stroke:#7f7f7f"
1399+ height="18"
1400+ width="18"
1401+ y="1.3677174"
1402+ x="59.299507"
1403+ id="F3" />
1404+ <rect
1405+ style="fill:#404031;stroke:#7f7f7f"
1406+ height="18"
1407+ width="18"
1408+ y="1.3677174"
1409+ x="40.299507"
1410+ id="F2" />
1411+ <rect
1412+ style="fill:#404031;stroke:#7f7f7f"
1413+ height="18"
1414+ width="18"
1415+ y="1.3677174"
1416+ x="2.2995079"
1417+ id="ESC" />
1418+ <rect
1419+ style="fill:#404031;stroke:#7f7f7f"
1420+ height="18"
1421+ width="18"
1422+ y="1.3677174"
1423+ x="230.29951"
1424+ id="F12" />
1425+ <rect
1426+ style="fill:#404031;stroke:#7f7f7f"
1427+ height="18"
1428+ width="18"
1429+ y="1.3677174"
1430+ x="211.29951"
1431+ id="F11" />
1432+ <rect
1433+ style="fill:#404031;stroke:#7f7f7f"
1434+ height="18"
1435+ width="18"
1436+ y="1.3677174"
1437+ x="173.29951"
1438+ id="F9" />
1439+ <rect
1440+ style="fill:#404031;stroke:#7f7f7f"
1441+ height="18"
1442+ width="18"
1443+ y="1.3677174"
1444+ x="116.29951"
1445+ id="F6" />
1446+ <rect
1447+ style="fill:#404031;stroke:#7f7f7f"
1448+ height="18"
1449+ width="18"
1450+ y="1.3677174"
1451+ x="135.29951"
1452+ id="F7" />
1453+ <rect
1454+ style="fill:#404031;stroke:#7f7f7f"
1455+ height="18"
1456+ width="18"
1457+ y="1.3677174"
1458+ x="21.299507"
1459+ id="F1" />
1460+ <rect
1461+ style="fill:#404031;stroke:#7f7f7f"
1462+ height="18"
1463+ width="18"
1464+ y="1.3677174"
1465+ x="78.299507"
1466+ id="F4" />
1467+ <rect
1468+ style="fill:#404031;stroke:#7f7f7f"
1469+ height="18"
1470+ width="18"
1471+ y="1.3677174"
1472+ x="154.29951"
1473+ id="F8" />
1474+ <rect
1475+ style="fill:#404031;stroke:#7f7f7f"
1476+ height="18"
1477+ width="18"
1478+ y="1.3677174"
1479+ x="97.299507"
1480+ id="F5" />
1481+ <rect
1482+ style="fill:#404031;stroke:#7f7f7f"
1483+ height="18"
1484+ width="18"
1485+ y="1.3655807"
1486+ x="330.70572"
1487+ id="Pause" />
1488+ <rect
1489+ style="fill:#404031;stroke:#7f7f7f"
1490+ height="18"
1491+ width="18"
1492+ y="1.3677174"
1493+ x="292.70569"
1494+ id="Prnt" />
1495+ <rect
1496+ style="fill:#404031;stroke:#7f7f7f"
1497+ height="18"
1498+ width="18"
1499+ y="1.3655807"
1500+ x="311.70572"
1501+ id="Scroll" />
1502+ <rect
1503+ style="fill:#7f0000;stroke:#7f7f7f"
1504+ height="18"
1505+ width="32.799999"
1506+ y="1.3677174"
1507+ x="254.2"
1508+ id="settings" />
1509+</svg>
1510
1511=== added file 'layouts/Full-Dark-Numpad.svg'
1512--- layouts/Full-Dark-Numpad.svg 1970-01-01 00:00:00 +0000
1513+++ layouts/Full-Dark-Numpad.svg 2009-09-27 08:05:22 +0000
1514@@ -0,0 +1,271 @@
1515+<?xml version='1.0' encoding='UTF-8'?>
1516+<!-- Created with onBoard -->
1517+<svg xmlns:cc='http://web.resource.org/cc/'
1518+ xmlns:svg='http://www.w3.org/2000/svg'
1519+ xmlns:dc='http://purl.org/dc/elements/1.1/'
1520+ xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
1521+ xmlns='http://www.w3.org/2000/svg'
1522+ height='98.0'
1523+ width='294.0'
1524+ version='1.0'
1525+ id='svg2'>
1526+ <rect
1527+ style="fill:#404031;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1528+ height="18.0"
1529+ width="18.0"
1530+ y="79.0"
1531+ x="118.0"
1532+ id="KPDL" />
1533+ <rect
1534+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1535+ height="18.0"
1536+ width="18.0"
1537+ y="79.0"
1538+ x="21.0"
1539+ id="DOWN" />
1540+ <rect
1541+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1542+ height="18.0"
1543+ width="18.0"
1544+ y="3.0"
1545+ x="137.0"
1546+ id="KPSU" />
1547+ <rect
1548+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1549+ height="18.0"
1550+ width="18.0"
1551+ y="3.0"
1552+ x="99.0"
1553+ id="KPDV" />
1554+ <rect
1555+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1556+ height="18.0"
1557+ width="18.0"
1558+ y="3.0"
1559+ x="40.0"
1560+ id="PGUP" />
1561+ <rect
1562+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1563+ height="18.0"
1564+ width="37.0"
1565+ y="79.0"
1566+ x="80.0"
1567+ id="KP0" />
1568+ <rect
1569+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1570+ height="18.0"
1571+ width="18.0"
1572+ y="60.0"
1573+ x="80.0"
1574+ id="KP1" />
1575+ <rect
1576+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1577+ height="18.0"
1578+ width="18.0"
1579+ y="60.0"
1580+ x="99.0"
1581+ id="KP2" />
1582+ <rect
1583+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1584+ height="18.0"
1585+ width="18.0"
1586+ y="60.0"
1587+ x="118.0"
1588+ id="KP3" />
1589+ <rect
1590+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1591+ height="18.0"
1592+ width="18.0"
1593+ y="41.0"
1594+ x="80.0"
1595+ id="KP4" />
1596+ <rect
1597+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1598+ height="18.0"
1599+ width="18.0"
1600+ y="41.0"
1601+ x="99.0"
1602+ id="KP5" />
1603+ <rect
1604+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1605+ height="18.0"
1606+ width="18.0"
1607+ y="41.0"
1608+ x="118.0"
1609+ id="KP6" />
1610+ <rect
1611+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1612+ height="18.0"
1613+ width="18.0"
1614+ y="22.0"
1615+ x="80.0"
1616+ id="KP7" />
1617+ <rect
1618+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1619+ height="18.0"
1620+ width="18.0"
1621+ y="22.0"
1622+ x="99.0"
1623+ id="KP8" />
1624+ <rect
1625+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1626+ height="18.0"
1627+ width="18.0"
1628+ y="22.0"
1629+ x="118.0"
1630+ id="KP9" />
1631+ <rect
1632+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1633+ height="21.241886"
1634+ width="33.017849"
1635+ y="27.995533"
1636+ x="251.67101"
1637+ id="m5" />
1638+ <rect
1639+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1640+ height="21.241886"
1641+ width="33.017849"
1642+ y="27.995533"
1643+ x="213.65045"
1644+ id="m4" />
1645+ <rect
1646+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1647+ height="21.241886"
1648+ width="33.017849"
1649+ y="52.777733"
1650+ x="213.65045"
1651+ id="m7" />
1652+ <rect
1653+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1654+ height="21.241886"
1655+ width="33.017849"
1656+ y="52.777733"
1657+ x="175.6299"
1658+ id="m6" />
1659+ <rect
1660+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1661+ height="21.241886"
1662+ width="33.017849"
1663+ y="3.2133317"
1664+ x="213.65045"
1665+ id="m1" />
1666+ <rect
1667+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1668+ height="21.241886"
1669+ width="33.017849"
1670+ y="3.2133317"
1671+ x="175.6299"
1672+ id="m0" />
1673+ <rect
1674+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1675+ height="37.0"
1676+ width="18.0"
1677+ y="22.0"
1678+ x="137.0"
1679+ id="KPAD" />
1680+ <rect
1681+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1682+ height="21.241886"
1683+ width="33.017849"
1684+ y="3.2133317"
1685+ x="251.67101"
1686+ id="m2" />
1687+ <rect
1688+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1689+ height="18.0"
1690+ width="18.0"
1691+ y="3.0"
1692+ x="21.0"
1693+ id="HOME" />
1694+ <rect
1695+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1696+ height="21.241886"
1697+ width="33.017849"
1698+ y="52.777733"
1699+ x="251.67101"
1700+ id="m8" />
1701+ <rect
1702+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1703+ height="18.0"
1704+ width="18.0"
1705+ y="79.0"
1706+ x="2.0"
1707+ id="LEFT" />
1708+ <rect
1709+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1710+ height="18.0"
1711+ width="18.0"
1712+ y="79.0"
1713+ x="40.0"
1714+ id="RGHT" />
1715+ <rect
1716+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1717+ height="18.0"
1718+ width="18.0"
1719+ y="22.0"
1720+ x="2.0"
1721+ id="DELE" />
1722+ <rect
1723+ style="fill:#2b2b63;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1724+ height="21.241886"
1725+ width="33.017849"
1726+ y="27.995533"
1727+ x="175.6299"
1728+ id="m3" />
1729+ <rect
1730+ style="fill:#404031;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1731+ height="37.0"
1732+ width="18.0"
1733+ y="60.0"
1734+ x="137.0"
1735+ id="KPEN" />
1736+ <rect
1737+ style="fill:#505001;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1738+ height="18.0"
1739+ width="18.0"
1740+ y="3.0"
1741+ x="118.0"
1742+ id="KPMU" />
1743+ <rect
1744+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1745+ height="18.0"
1746+ width="18.0"
1747+ y="22.0"
1748+ x="21.0"
1749+ id="END" />
1750+ <rect
1751+ style="fill:#403020;stroke:#7f7f7f;stroke-opacity:1;fill-opacity:1"
1752+ height="18.0"
1753+ width="18.0"
1754+ y="3.0"
1755+ x="80.0"
1756+ id="NMLK" />
1757+ <rect
1758+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1759+ height="18.0"
1760+ width="18.0"
1761+ y="22.0"
1762+ x="40.0"
1763+ id="PGDN" />
1764+ <rect
1765+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1766+ height="18.0"
1767+ width="18.0"
1768+ y="60.0"
1769+ x="21.0"
1770+ id="UP" />
1771+ <rect
1772+ style="fill:#404031;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1773+ height="18.0"
1774+ width="18.0"
1775+ y="3.0"
1776+ x="2.0"
1777+ id="INS" />
1778+ <rect
1779+ style="fill:#7f0000;stroke:#7f7f7f;fill-opacity:1;stroke-opacity:1"
1780+ height="18"
1781+ width="33.065235"
1782+ x="251.67316"
1783+ y="79"
1784+ id="switchButtons" />
1785+</svg>
1786
1787=== added file 'layouts/Full-Dark.sok'
1788--- layouts/Full-Dark.sok 1970-01-01 00:00:00 +0000
1789+++ layouts/Full-Dark.sok 2009-09-27 08:05:22 +0000
1790@@ -0,0 +1,181 @@
1791+<?xml version='1.0' encoding='UTF-8'?>
1792+<keyboard id='Full Keyboard, Dark'>
1793+ <pane filename='Full-Dark-Alpha.svg'
1794+ backgroundRed='0' backgroundBlue='0'
1795+ backgroundGreen='0' backgroundAlpha='1'
1796+ labelRed='1' labelBlue='1' labelGreen='1' labelAlpha='1'
1797+ font='10' id='Alpha'>
1798+ <key sticky='false' id='AB01' keycode='52' group='alphanumeric'/>
1799+ <key sticky='false' id='AE02' keycode='11' group='alphanumeric'/>
1800+ <key sticky='false' id='AE03' keycode='12' group='alphanumeric'/>
1801+ <key sticky='false' id='AD09' keycode='32' group='alphanumeric'/>
1802+ <key sticky='false' id='AE01' keycode='10' group='alphanumeric'/>
1803+ <key sticky='false' id='AE06' keycode='15' group='alphanumeric'/>
1804+ <key sticky='false' id='AE07' keycode='16' group='alphanumeric'/>
1805+ <key sticky='false' id='AE04' keycode='13' group='alphanumeric'/>
1806+ <key sticky='false' id='AE05' keycode='14' group='alphanumeric'/>
1807+ <key sticky='false' id='AD03' keycode='26' group='alphanumeric'/>
1808+ <key sticky='false' id='AD02' keycode='25' group='alphanumeric'/>
1809+ <key sticky='false' id='AD01' keycode='24' group='alphanumeric'/>
1810+ <key sticky='false' id='AE09' keycode='18' group='alphanumeric'/>
1811+ <key sticky='false' id='AD07' keycode='30' group='alphanumeric'/>
1812+ <key sticky='false' id='AD06' keycode='29' group='alphanumeric'/>
1813+ <key sticky='false' id='AD05' keycode='28' group='alphanumeric'/>
1814+ <key sticky='false' id='AD04' keycode='27' group='alphanumeric'/>
1815+ <key sticky='false' id='AB10' keycode='61' group='alphanumeric'/>
1816+ <key sticky='false' id='AC11' keycode='48' group='alphanumeric'/>
1817+ <key sticky='false' id='AC10' keycode='47' group='alphanumeric'/>
1818+
1819+ <key sticky='false' id='TLDE' keycode='49' group='alphanumeric'/>
1820+ <key sticky='false' id='LSGT' keycode='94' group='alphanumeric'/>
1821+ <key sticky='false' id='BKSL' keycode='51' group='alphanumeric'/>
1822+ <key modifier='control' sticky='true' id='RCTL' label='Ctrl'
1823+ group='bottomrow'/>
1824+ <key modifier='control' sticky='true' id='LCTL' label='Ctrl'
1825+ group='bottomrow'/>
1826+ <key modifier='mod5' sticky='true' id='RALT' label='Alt Gr'
1827+ group='bottomrow'/>
1828+ <key keycode='23' sticky='false' id='TAB' label='Tab' group='misc'/>
1829+ <key modifier='mod1' sticky='true' id='LALT' label='Alt' group='bottomrow'/>
1830+ <key modifier='shift' sticky='true' id='LFSH' label='⇧' group='shifts'/>
1831+ <key keycode='22' sticky='false' id='BKSP' label='⇦' group='backspace'/>
1832+ <key modifier='caps' sticky='true' id='CAPS' label='CAPS' group='misc'/>
1833+ <key keycode='36' sticky='false' id='RTRN' label='Return' group='misc'/>
1834+ <key keycode='117' sticky='false' id='MENU' label='Menu' group='bottomrow'/>
1835+ <key sticky='false' id='AD10' keycode='33' group='alphanumeric'/>
1836+ <key sticky='false' id='AD11' keycode='34' group='alphanumeric'/>
1837+ <key sticky='false' id='AD12' keycode='35' group='alphanumeric'/>
1838+ <key sticky='false' id='AB08' keycode='59' group='alphanumeric'/>
1839+ <key sticky='false' id='AE11' keycode='20' group='alphanumeric'/>
1840+ <key sticky='false' id='AE10' keycode='19' group='alphanumeric'/>
1841+ <key sticky='false' id='AE12' keycode='21' group='alphanumeric'/>
1842+ <key sticky='false' id='AC04' keycode='41' group='alphanumeric'/>
1843+ <key sticky='false' id='AC05' keycode='42' group='alphanumeric'/>
1844+ <key sticky='false' id='AC06' keycode='43' group='alphanumeric'/>
1845+ <key sticky='false' id='AC07' keycode='44' group='alphanumeric'/>
1846+ <key sticky='false' id='AB09' keycode='60' group='alphanumeric'/>
1847+ <key sticky='false' id='AC01' keycode='38' group='alphanumeric'/>
1848+ <key sticky='false' id='AC02' keycode='39' group='alphanumeric'/>
1849+ <key sticky='false' id='AC03' keycode='40' group='alphanumeric'/>
1850+ <key sticky='false' id='AB05' keycode='56' group='alphanumeric'/>
1851+ <key sticky='false' id='AB04' keycode='55' group='alphanumeric'/>
1852+ <key sticky='false' id='AE08' keycode='17' group='alphanumeric'/>
1853+ <key sticky='false' id='AB06' keycode='57' group='alphanumeric'/>
1854+ <key sticky='false' id='AC08' keycode='45' group='alphanumeric'/>
1855+ <key sticky='false' id='AC09' keycode='46' group='alphanumeric'/>
1856+ <key sticky='false' id='AB03' keycode='54' group='alphanumeric'/>
1857+ <key sticky='false' id='AB02' keycode='53' group='alphanumeric'/>
1858+ <key sticky='false' id='AD08' keycode='31' group='alphanumeric'/>
1859+ <key sticky='false' id='AB07' keycode='58' group='alphanumeric'/>
1860+ <key keycode='116' sticky='false' id='RWIN' label='Win' group='bottomrow'/>
1861+ <key sticky='false' id='SPCE' keycode='65' group='bottomrow'/>
1862+ <key modifier='shift' sticky='true' id='RTSH' label='⇧' group='shifts'/>
1863+ <key modifier='mod4' sticky='true' id='LWIN' label='Win' group='bottomrow'/>
1864+
1865+ <key sticky='false' keysym='65470' id='F1' label='F1' group='fkeys'/>
1866+ <key sticky='false' keysym='65471' id='F2' label='F2' group='fkeys'/>
1867+ <key sticky='false' keysym='65472' id='F3' label='F3' group='fkeys'/>
1868+ <key sticky='false' keysym='65473' id='F4' label='F4' group='fkeys'/>
1869+ <key sticky='false' keysym='65474' id='F5' label='F5' group='fkeys'/>
1870+ <key sticky='false' keysym='65475' id='F6' label='F6' group='fkeys'/>
1871+ <key sticky='false' keysym='65476' id='F7' label='F7' group='fkeys'/>
1872+ <key sticky='false' keysym='65477' id='F8' label='F8' group='fkeys'/>
1873+ <key sticky='false' keysym='65478' id='F9' label='F9' group='fkeys'/>
1874+ <key sticky='false' keysym='65481' id='F12' label='F12' group='fkeys'/>
1875+ <key sticky='false' keysym='65479' id='F10' label='F10' group='fkeys'/>
1876+ <key sticky='false' keysym='65480' id='F11' label='F11' group='fkeys'/>
1877+ <key sticky='false' keysym='65377' id='Prnt' label='Prnt' group='fkeys'/>
1878+ <key sticky='false' keysym='65299' id='Pause' label='Pause' group='fkeys'/>
1879+ <key sticky='false' keysym='65307' id='ESC' label='ESC' group='fkeys'/>
1880+ <key sticky='false' keysym='65300' id='Scroll' label='Scroll'
1881+ group='fkeys'/>
1882+ <key script='sokSettings' sticky='false' id='settings' label='Settings'
1883+ group='scripts'/>
1884+
1885+ <key keypress_name='left' sticky='false' id='LEFT' label='←'
1886+ group='directions'/>
1887+ <key keypress_name='right' sticky='false' id='RGHT' label='→'
1888+ group='directions'/>
1889+ <key keypress_name='up' sticky='false' id='UP' label='↑'
1890+ group='directions'/>
1891+ <key keypress_name='down' sticky='false' id='DOWN' label='↓'
1892+ group='directions'/>
1893+ <key keypress_name='insert' sticky='false' id='INS' label='Ins'
1894+ group='editing'/>
1895+ <key keypress_name='delete' sticky='false' id='DELE' label='Del'
1896+ group='editing'/>
1897+ <key keypress_name='home' sticky='false' id='HOME' label='Hm'
1898+ group='editing'/>
1899+ <key keypress_name='end' sticky='false' id='END' label='End'
1900+ group='editing'/>
1901+ <key keypress_name='page_up' sticky='false' id='PGUP' label='Pg&#10;Up'
1902+ group='editing'/>
1903+ <key keypress_name='page_down' sticky='false' id='PGDN' label='Pg&#10;Dn'
1904+ group='editing'/>
1905+ </pane>
1906+ <pane filename='Full-Dark-Numpad.svg'
1907+ backgroundRed='0.1' backgroundGreen='0.1'
1908+ backgroundBlue='0.2' backgroundAlpha='0.7'
1909+ labelRed='1' labelBlue='1' labelGreen='1' labelAlpha='1'
1910+ font='10' id='Numpad'>
1911+ <key sticky='false' id='KPSU' char='-' label='-' group='keypadoperators'/>
1912+ <key sticky='false' id='KPDV' char='/' label='/' group='keypadoperators'/>
1913+ <key sticky='false' id='KPAD' char='+' label='+' group='keypadoperators'/>
1914+ <key sticky='false' id='KPMU' char='*' label='*' group='keypadoperators'/>
1915+ <key keycode='90' sticky='false' id='KP0' label='0' group='keypadnumber'/>
1916+ <key keycode='87' sticky='false' id='KP1' label='1' group='keypadnumber'/>
1917+ <key keycode='88' sticky='false' id='KP2' label='2' group='keypadnumber'/>
1918+ <key keycode='89' sticky='false' id='KP3' label='3' group='keypadnumber'/>
1919+ <key keycode='83' sticky='false' id='KP4' label='4' group='keypadnumber'/>
1920+ <key keycode='84' sticky='false' id='KP5' label='5' group='keypadnumber'/>
1921+ <key keycode='85' sticky='false' id='KP6' label='6' group='keypadnumber'/>
1922+ <key keycode='79' sticky='false' id='KP7' label='7' group='keypadnumber'/>
1923+ <key keycode='80' sticky='false' id='KP8' label='8' group='keypadnumber'/>
1924+ <key keycode='81' sticky='false' id='KP9' label='9' group='keypadnumber'/>
1925+ <key keypress_name='delete' sticky='false' id='KPDL' label='Del'
1926+ group='keypadmisc'/>
1927+ <key modifier='mod2' sticky='true' id='NMLK' label='Nm&#10;Lk'
1928+ group='keypadmisc'/>
1929+ <key keycode='108' sticky='false' id='KPEN' label='Ent' group='keypadmisc'/>
1930+ <key macro='0' sticky='false' id='m0' label='Snippet&#10;0'
1931+ group='snippets'/>
1932+ <key macro='1' sticky='false' id='m1' label='Snippet&#10;1'
1933+ group='snippets'/>
1934+ <key macro='2' sticky='false' id='m2' label='Snippet&#10;2'
1935+ group='snippets'/>
1936+ <key macro='3' sticky='false' id='m3' label='Snippet&#10;3'
1937+ group='snippets'/>
1938+ <key macro='4' sticky='false' id='m4' label='Snippet&#10;4'
1939+ group='snippets'/>
1940+ <key macro='5' sticky='false' id='m5' label='Snippet&#10;5'
1941+ group='snippets'/>
1942+ <key macro='6' sticky='false' id='m6' label='Snippet&#10;6'
1943+ group='snippets'/>
1944+ <key macro='7' sticky='false' id='m7' label='Snippet&#10;7'
1945+ group='snippets'/>
1946+ <key macro='8' sticky='false' id='m8' label='Snippet&#10;8'
1947+ group='snippets'/>
1948+ <key keypress_name='left' sticky='false' id='LEFT' label='←'
1949+ group='directions'/>
1950+ <key keypress_name='right' sticky='false' id='RGHT' label='→'
1951+ group='directions'/>
1952+ <key keypress_name='up' sticky='false' id='UP' label='↑'
1953+ group='directions'/>
1954+ <key keypress_name='down' sticky='false' id='DOWN' label='↓'
1955+ group='directions'/>
1956+ <key keypress_name='insert' sticky='false' id='INS' label='Ins'
1957+ group='editing'/>
1958+ <key keypress_name='delete' sticky='false' id='DELE' label='Del'
1959+ group='editing'/>
1960+ <key keypress_name='home' sticky='false' id='HOME' label='Hm'
1961+ group='editing'/>
1962+ <key keypress_name='end' sticky='false' id='END' label='End'
1963+ group='editing'/>
1964+ <key keypress_name='page_up' sticky='false' id='PGUP' label='Pg&#10;Up'
1965+ group='editing'/>
1966+ <key keypress_name='page_down' sticky='false' id='PGDN' label='Pg&#10;Dn'
1967+ group='editing'/>
1968+ <key script='switchButtons' sticky='false' id='switchButtons'
1969+ label='Switch&#10;Buttons' group='scripts'/>
1970+ </pane>
1971+</keyboard>
1972
1973=== added file 'layouts/Full-Numpad.svg'
1974--- layouts/Full-Numpad.svg 1970-01-01 00:00:00 +0000
1975+++ layouts/Full-Numpad.svg 2009-09-27 08:05:22 +0000
1976@@ -0,0 +1,271 @@
1977+<?xml version='1.0' encoding='UTF-8'?>
1978+<!-- Created with onBoard -->
1979+<svg xmlns:cc='http://web.resource.org/cc/'
1980+ xmlns:svg='http://www.w3.org/2000/svg'
1981+ xmlns:dc='http://purl.org/dc/elements/1.1/'
1982+ xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
1983+ xmlns='http://www.w3.org/2000/svg'
1984+ height='98.0'
1985+ width='294.0'
1986+ version='1.0'
1987+ id='svg2'>
1988+ <rect
1989+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
1990+ height="18.0"
1991+ width="18.0"
1992+ y="79.0"
1993+ x="118.0"
1994+ id="KPDL" />
1995+ <rect
1996+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
1997+ height="18.0"
1998+ width="18.0"
1999+ y="79.0"
2000+ x="21.0"
2001+ id="DOWN" />
2002+ <rect
2003+ style="fill:#e5d8b2;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2004+ height="18.0"
2005+ width="18.0"
2006+ y="3.0"
2007+ x="137.0"
2008+ id="KPSU" />
2009+ <rect
2010+ style="fill:#e5d8b2;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2011+ height="18.0"
2012+ width="18.0"
2013+ y="3.0"
2014+ x="99.0"
2015+ id="KPDV" />
2016+ <rect
2017+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2018+ height="18.0"
2019+ width="18.0"
2020+ y="3.0"
2021+ x="40.0"
2022+ id="PGUP" />
2023+ <rect
2024+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2025+ height="18.0"
2026+ width="37.0"
2027+ y="79.0"
2028+ x="80.0"
2029+ id="KP0" />
2030+ <rect
2031+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2032+ height="18.0"
2033+ width="18.0"
2034+ y="60.0"
2035+ x="80.0"
2036+ id="KP1" />
2037+ <rect
2038+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2039+ height="18.0"
2040+ width="18.0"
2041+ y="60.0"
2042+ x="99.0"
2043+ id="KP2" />
2044+ <rect
2045+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2046+ height="18.0"
2047+ width="18.0"
2048+ y="60.0"
2049+ x="118.0"
2050+ id="KP3" />
2051+ <rect
2052+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2053+ height="18.0"
2054+ width="18.0"
2055+ y="41.0"
2056+ x="80.0"
2057+ id="KP4" />
2058+ <rect
2059+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2060+ height="18.0"
2061+ width="18.0"
2062+ y="41.0"
2063+ x="99.0"
2064+ id="KP5" />
2065+ <rect
2066+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2067+ height="18.0"
2068+ width="18.0"
2069+ y="41.0"
2070+ x="118.0"
2071+ id="KP6" />
2072+ <rect
2073+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2074+ height="18.0"
2075+ width="18.0"
2076+ y="22.0"
2077+ x="80.0"
2078+ id="KP7" />
2079+ <rect
2080+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2081+ height="18.0"
2082+ width="18.0"
2083+ y="22.0"
2084+ x="99.0"
2085+ id="KP8" />
2086+ <rect
2087+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2088+ height="18.0"
2089+ width="18.0"
2090+ y="22.0"
2091+ x="118.0"
2092+ id="KP9" />
2093+ <rect
2094+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2095+ height="21.241886"
2096+ width="33.017849"
2097+ y="27.995533"
2098+ x="251.67101"
2099+ id="m5" />
2100+ <rect
2101+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2102+ height="21.241886"
2103+ width="33.017849"
2104+ y="27.995533"
2105+ x="213.65045"
2106+ id="m4" />
2107+ <rect
2108+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2109+ height="21.241886"
2110+ width="33.017849"
2111+ y="52.777733"
2112+ x="213.65045"
2113+ id="m7" />
2114+ <rect
2115+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2116+ height="21.241886"
2117+ width="33.017849"
2118+ y="52.777733"
2119+ x="175.6299"
2120+ id="m6" />
2121+ <rect
2122+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2123+ height="21.241886"
2124+ width="33.017849"
2125+ y="3.2133317"
2126+ x="213.65045"
2127+ id="m1" />
2128+ <rect
2129+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2130+ height="21.241886"
2131+ width="33.017849"
2132+ y="3.2133317"
2133+ x="175.6299"
2134+ id="m0" />
2135+ <rect
2136+ style="fill:#e5d8b2;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2137+ height="37.0"
2138+ width="18.0"
2139+ y="22.0"
2140+ x="137.0"
2141+ id="KPAD" />
2142+ <rect
2143+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2144+ height="21.241886"
2145+ width="33.017849"
2146+ y="3.2133317"
2147+ x="251.67101"
2148+ id="m2" />
2149+ <rect
2150+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2151+ height="18.0"
2152+ width="18.0"
2153+ y="3.0"
2154+ x="21.0"
2155+ id="HOME" />
2156+ <rect
2157+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2158+ height="21.241886"
2159+ width="33.017849"
2160+ y="52.777733"
2161+ x="251.67101"
2162+ id="m8" />
2163+ <rect
2164+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2165+ height="18.0"
2166+ width="18.0"
2167+ y="79.0"
2168+ x="2.0"
2169+ id="LEFT" />
2170+ <rect
2171+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2172+ height="18.0"
2173+ width="18.0"
2174+ y="79.0"
2175+ x="40.0"
2176+ id="RGHT" />
2177+ <rect
2178+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2179+ height="18.0"
2180+ width="18.0"
2181+ y="22.0"
2182+ x="2.0"
2183+ id="DELE" />
2184+ <rect
2185+ style="fill:#7f7fcc;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2186+ height="21.241886"
2187+ width="33.017849"
2188+ y="27.995533"
2189+ x="175.6299"
2190+ id="m3" />
2191+ <rect
2192+ style="fill:#d8cca5;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2193+ height="37.0"
2194+ width="18.0"
2195+ y="60.0"
2196+ x="137.0"
2197+ id="KPEN" />
2198+ <rect
2199+ style="fill:#e5d8b2;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2200+ height="18.0"
2201+ width="18.0"
2202+ y="3.0"
2203+ x="118.0"
2204+ id="KPMU" />
2205+ <rect
2206+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2207+ height="18.0"
2208+ width="18.0"
2209+ y="22.0"
2210+ x="21.0"
2211+ id="END" />
2212+ <rect
2213+ style="fill:#f2e5d8;stroke:#000000;stroke-opacity:1;fill-opacity:1"
2214+ height="18.0"
2215+ width="18.0"
2216+ y="3.0"
2217+ x="80.0"
2218+ id="NMLK" />
2219+ <rect
2220+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2221+ height="18.0"
2222+ width="18.0"
2223+ y="22.0"
2224+ x="40.0"
2225+ id="PGDN" />
2226+ <rect
2227+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2228+ height="18.0"
2229+ width="18.0"
2230+ y="60.0"
2231+ x="21.0"
2232+ id="UP" />
2233+ <rect
2234+ style="fill:#d8cca5;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2235+ height="18.0"
2236+ width="18.0"
2237+ y="3.0"
2238+ x="2.0"
2239+ id="INS" />
2240+ <rect
2241+ style="fill:#f27f7f;stroke:#000000;fill-opacity:1;stroke-opacity:1"
2242+ height="18"
2243+ width="33.065235"
2244+ x="251.67316"
2245+ y="79"
2246+ id="switchButtons" />
2247+</svg>
2248
2249=== added file 'layouts/Full.sok'
2250--- layouts/Full.sok 1970-01-01 00:00:00 +0000
2251+++ layouts/Full.sok 2009-09-27 08:05:22 +0000
2252@@ -0,0 +1,179 @@
2253+<?xml version='1.0' encoding='UTF-8'?>
2254+<keyboard id='Full Keyboard'>
2255+ <pane filename='Full-Alpha.svg'
2256+ backgroundRed='0' backgroundGreen='0'
2257+ backgroundBlue='0' backgroundAlpha='0.3'
2258+ font='10' id='Alpha'>
2259+ <key sticky='false' id='AB01' keycode='52' group='alphanumeric'/>
2260+ <key sticky='false' id='AE02' keycode='11' group='alphanumeric'/>
2261+ <key sticky='false' id='AE03' keycode='12' group='alphanumeric'/>
2262+ <key sticky='false' id='AD09' keycode='32' group='alphanumeric'/>
2263+ <key sticky='false' id='AE01' keycode='10' group='alphanumeric'/>
2264+ <key sticky='false' id='AE06' keycode='15' group='alphanumeric'/>
2265+ <key sticky='false' id='AE07' keycode='16' group='alphanumeric'/>
2266+ <key sticky='false' id='AE04' keycode='13' group='alphanumeric'/>
2267+ <key sticky='false' id='AE05' keycode='14' group='alphanumeric'/>
2268+ <key sticky='false' id='AD03' keycode='26' group='alphanumeric'/>
2269+ <key sticky='false' id='AD02' keycode='25' group='alphanumeric'/>
2270+ <key sticky='false' id='AD01' keycode='24' group='alphanumeric'/>
2271+ <key sticky='false' id='AE09' keycode='18' group='alphanumeric'/>
2272+ <key sticky='false' id='AD07' keycode='30' group='alphanumeric'/>
2273+ <key sticky='false' id='AD06' keycode='29' group='alphanumeric'/>
2274+ <key sticky='false' id='AD05' keycode='28' group='alphanumeric'/>
2275+ <key sticky='false' id='AD04' keycode='27' group='alphanumeric'/>
2276+ <key sticky='false' id='AB10' keycode='61' group='alphanumeric'/>
2277+ <key sticky='false' id='AC11' keycode='48' group='alphanumeric'/>
2278+ <key sticky='false' id='AC10' keycode='47' group='alphanumeric'/>
2279+
2280+ <key sticky='false' id='TLDE' keycode='49' group='alphanumeric'/>
2281+ <key sticky='false' id='LSGT' keycode='94' group='alphanumeric'/>
2282+ <key sticky='false' id='BKSL' keycode='51' group='alphanumeric'/>
2283+ <key modifier='control' sticky='true' id='RCTL' label='Ctrl'
2284+ group='bottomrow'/>
2285+ <key modifier='control' sticky='true' id='LCTL' label='Ctrl'
2286+ group='bottomrow'/>
2287+ <key modifier='mod5' sticky='true' id='RALT' label='Alt Gr'
2288+ group='bottomrow'/>
2289+ <key keycode='23' sticky='false' id='TAB' label='Tab' group='misc'/>
2290+ <key modifier='mod1' sticky='true' id='LALT' label='Alt' group='bottomrow'/>
2291+ <key modifier='shift' sticky='true' id='LFSH' label='⇧' group='shifts'/>
2292+ <key keycode='22' sticky='false' id='BKSP' label='⇦' group='backspace'/>
2293+ <key modifier='caps' sticky='true' id='CAPS' label='CAPS' group='misc'/>
2294+ <key keycode='36' sticky='false' id='RTRN' label='Return' group='misc'/>
2295+ <key keycode='117' sticky='false' id='MENU' label='Menu' group='bottomrow'/>
2296+ <key sticky='false' id='AD10' keycode='33' group='alphanumeric'/>
2297+ <key sticky='false' id='AD11' keycode='34' group='alphanumeric'/>
2298+ <key sticky='false' id='AD12' keycode='35' group='alphanumeric'/>
2299+ <key sticky='false' id='AB08' keycode='59' group='alphanumeric'/>
2300+ <key sticky='false' id='AE11' keycode='20' group='alphanumeric'/>
2301+ <key sticky='false' id='AE10' keycode='19' group='alphanumeric'/>
2302+ <key sticky='false' id='AE12' keycode='21' group='alphanumeric'/>
2303+ <key sticky='false' id='AC04' keycode='41' group='alphanumeric'/>
2304+ <key sticky='false' id='AC05' keycode='42' group='alphanumeric'/>
2305+ <key sticky='false' id='AC06' keycode='43' group='alphanumeric'/>
2306+ <key sticky='false' id='AC07' keycode='44' group='alphanumeric'/>
2307+ <key sticky='false' id='AB09' keycode='60' group='alphanumeric'/>
2308+ <key sticky='false' id='AC01' keycode='38' group='alphanumeric'/>
2309+ <key sticky='false' id='AC02' keycode='39' group='alphanumeric'/>
2310+ <key sticky='false' id='AC03' keycode='40' group='alphanumeric'/>
2311+ <key sticky='false' id='AB05' keycode='56' group='alphanumeric'/>
2312+ <key sticky='false' id='AB04' keycode='55' group='alphanumeric'/>
2313+ <key sticky='false' id='AE08' keycode='17' group='alphanumeric'/>
2314+ <key sticky='false' id='AB06' keycode='57' group='alphanumeric'/>
2315+ <key sticky='false' id='AC08' keycode='45' group='alphanumeric'/>
2316+ <key sticky='false' id='AC09' keycode='46' group='alphanumeric'/>
2317+ <key sticky='false' id='AB03' keycode='54' group='alphanumeric'/>
2318+ <key sticky='false' id='AB02' keycode='53' group='alphanumeric'/>
2319+ <key sticky='false' id='AD08' keycode='31' group='alphanumeric'/>
2320+ <key sticky='false' id='AB07' keycode='58' group='alphanumeric'/>
2321+ <key keycode='116' sticky='false' id='RWIN' label='Win' group='bottomrow'/>
2322+ <key sticky='false' id='SPCE' keycode='65' group='bottomrow'/>
2323+ <key modifier='shift' sticky='true' id='RTSH' label='⇧' group='shifts'/>
2324+ <key modifier='mod4' sticky='true' id='LWIN' label='Win' group='bottomrow'/>
2325+
2326+ <key sticky='false' keysym='65470' id='F1' label='F1' group='fkeys'/>
2327+ <key sticky='false' keysym='65471' id='F2' label='F2' group='fkeys'/>
2328+ <key sticky='false' keysym='65472' id='F3' label='F3' group='fkeys'/>
2329+ <key sticky='false' keysym='65473' id='F4' label='F4' group='fkeys'/>
2330+ <key sticky='false' keysym='65474' id='F5' label='F5' group='fkeys'/>
2331+ <key sticky='false' keysym='65475' id='F6' label='F6' group='fkeys'/>
2332+ <key sticky='false' keysym='65476' id='F7' label='F7' group='fkeys'/>
2333+ <key sticky='false' keysym='65477' id='F8' label='F8' group='fkeys'/>
2334+ <key sticky='false' keysym='65478' id='F9' label='F9' group='fkeys'/>
2335+ <key sticky='false' keysym='65481' id='F12' label='F12' group='fkeys'/>
2336+ <key sticky='false' keysym='65479' id='F10' label='F10' group='fkeys'/>
2337+ <key sticky='false' keysym='65480' id='F11' label='F11' group='fkeys'/>
2338+ <key sticky='false' keysym='65377' id='Prnt' label='Prnt' group='fkeys'/>
2339+ <key sticky='false' keysym='65299' id='Pause' label='Pause' group='fkeys'/>
2340+ <key sticky='false' keysym='65307' id='ESC' label='ESC' group='fkeys'/>
2341+ <key sticky='false' keysym='65300' id='Scroll' label='Scroll'
2342+ group='fkeys'/>
2343+ <key script='sokSettings' sticky='false' id='settings' label='Settings'
2344+ group='scripts'/>
2345+
2346+ <key keypress_name='left' sticky='false' id='LEFT' label='←'
2347+ group='directions'/>
2348+ <key keypress_name='right' sticky='false' id='RGHT' label='→'
2349+ group='directions'/>
2350+ <key keypress_name='up' sticky='false' id='UP' label='↑'
2351+ group='directions'/>
2352+ <key keypress_name='down' sticky='false' id='DOWN' label='↓'
2353+ group='directions'/>
2354+ <key keypress_name='insert' sticky='false' id='INS' label='Ins'
2355+ group='editing'/>
2356+ <key keypress_name='delete' sticky='false' id='DELE' label='Del'
2357+ group='editing'/>
2358+ <key keypress_name='home' sticky='false' id='HOME' label='Hm'
2359+ group='editing'/>
2360+ <key keypress_name='end' sticky='false' id='END' label='End'
2361+ group='editing'/>
2362+ <key keypress_name='page_up' sticky='false' id='PGUP' label='Pg&#10;Up'
2363+ group='editing'/>
2364+ <key keypress_name='page_down' sticky='false' id='PGDN' label='Pg&#10;Dn'
2365+ group='editing'/>
2366+ </pane>
2367+ <pane filename='Full-Numpad.svg'
2368+ backgroundRed='0.55' backgroundGreen='0.55'
2369+ backgroundBlue='0.7' backgroundAlpha='0.85'
2370+ font='10' id='Numpad'>
2371+ <key sticky='false' id='KPSU' char='-' label='-' group='keypadoperators'/>
2372+ <key sticky='false' id='KPDV' char='/' label='/' group='keypadoperators'/>
2373+ <key sticky='false' id='KPAD' char='+' label='+' group='keypadoperators'/>
2374+ <key sticky='false' id='KPMU' char='*' label='*' group='keypadoperators'/>
2375+ <key keycode='90' sticky='false' id='KP0' label='0' group='keypadnumber'/>
2376+ <key keycode='87' sticky='false' id='KP1' label='1' group='keypadnumber'/>
2377+ <key keycode='88' sticky='false' id='KP2' label='2' group='keypadnumber'/>
2378+ <key keycode='89' sticky='false' id='KP3' label='3' group='keypadnumber'/>
2379+ <key keycode='83' sticky='false' id='KP4' label='4' group='keypadnumber'/>
2380+ <key keycode='84' sticky='false' id='KP5' label='5' group='keypadnumber'/>
2381+ <key keycode='85' sticky='false' id='KP6' label='6' group='keypadnumber'/>
2382+ <key keycode='79' sticky='false' id='KP7' label='7' group='keypadnumber'/>
2383+ <key keycode='80' sticky='false' id='KP8' label='8' group='keypadnumber'/>
2384+ <key keycode='81' sticky='false' id='KP9' label='9' group='keypadnumber'/>
2385+ <key keypress_name='delete' sticky='false' id='KPDL' label='Del'
2386+ group='keypadmisc'/>
2387+ <key modifier='mod2' sticky='true' id='NMLK' label='Nm&#10;Lk'
2388+ group='keypadmisc'/>
2389+ <key keycode='108' sticky='false' id='KPEN' label='Ent' group='keypadmisc'/>
2390+ <key macro='0' sticky='false' id='m0' label='Snippet&#10;0'
2391+ group='snippets'/>
2392+ <key macro='1' sticky='false' id='m1' label='Snippet&#10;1'
2393+ group='snippets'/>
2394+ <key macro='2' sticky='false' id='m2' label='Snippet&#10;2'
2395+ group='snippets'/>
2396+ <key macro='3' sticky='false' id='m3' label='Snippet&#10;3'
2397+ group='snippets'/>
2398+ <key macro='4' sticky='false' id='m4' label='Snippet&#10;4'
2399+ group='snippets'/>
2400+ <key macro='5' sticky='false' id='m5' label='Snippet&#10;5'
2401+ group='snippets'/>
2402+ <key macro='6' sticky='false' id='m6' label='Snippet&#10;6'
2403+ group='snippets'/>
2404+ <key macro='7' sticky='false' id='m7' label='Snippet&#10;7'
2405+ group='snippets'/>
2406+ <key macro='8' sticky='false' id='m8' label='Snippet&#10;8'
2407+ group='snippets'/>
2408+ <key keypress_name='left' sticky='false' id='LEFT' label='←'
2409+ group='directions'/>
2410+ <key keypress_name='right' sticky='false' id='RGHT' label='→'
2411+ group='directions'/>
2412+ <key keypress_name='up' sticky='false' id='UP' label='↑'
2413+ group='directions'/>
2414+ <key keypress_name='down' sticky='false' id='DOWN' label='↓'
2415+ group='directions'/>
2416+ <key keypress_name='insert' sticky='false' id='INS' label='Ins'
2417+ group='editing'/>
2418+ <key keypress_name='delete' sticky='false' id='DELE' label='Del'
2419+ group='editing'/>
2420+ <key keypress_name='home' sticky='false' id='HOME' label='Hm'
2421+ group='editing'/>
2422+ <key keypress_name='end' sticky='false' id='END' label='End'
2423+ group='editing'/>
2424+ <key keypress_name='page_up' sticky='false' id='PGUP' label='Pg&#10;Up'
2425+ group='editing'/>
2426+ <key keypress_name='page_down' sticky='false' id='PGDN' label='Pg&#10;Dn'
2427+ group='editing'/>
2428+ <key script='switchButtons' sticky='false' id='switchButtons'
2429+ label='Switch&#10;Buttons' group='scripts'/>
2430+ </pane>
2431+</keyboard>

Subscribers

People subscribed via source and target branches

to status/vote changes: