• You are not logged in.

DreymaR's Big Bag of Keyboard Tricks (Linux/XKB files included)!

  • Started by DreymaR
  • 384 Replies:
  • Reputation: 15
  • Registered: 12-Sep-2016
  • Posts: 45

The keycode for ALT_L is indeed 64. The only way autorepeat could be the cause is when the ALT_L is repeated, I think. You could test it with xev by holding ALT_L pressed. But it is unlikely the problem, since a key doesn't autorepeat when another key is pressed, and since autorepeat is disabled for modifiers. I think you should look for another cause.
For completeness, with 'xset -r keycode' you can disable autorepeat for a key (r will set autorepeat, -r will unset it), from 'man xset'.

Create advanced keyboard layouts in various formats using my Keyboard Layout Files Creator!

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

Could the issue be something like this?

http://unix.stackexchange.com/questions … eat-in-xkb
https://bugs.freedesktop.org/show_bug.cgi?id=9796

Apparently, there's a bug in XKB that overrides your repeat settings for a key. If you state 'repeat=yes' the key will just get whatever it already had.

This should also be noted, from the mouth of XKB wizard Ivan Pascal himself. Indeed, modifiers are inherently non-repeating:
http://pascal.tsu.ru/en/xkb/gram-symbols.html#repeat

(Some more info below. A bit of a hard read, if you ask me...)
http://pascal.tsu.ru/en/xkb/gram-action.html#controls
http://pascal.tsu.ru/en/xkb/internals.html#controls

Last edited by DreymaR (30-Nov-2016 13:16:29)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343
Hang on...!

I fired up my VirtualBox Ubuntu16.04 box to check out the autorepeat issue... and there's no issue! Everything's autorepeating just fine.

That makes it hard for me to diagnose/fix this! I wonder what made this work for me and not for you...

Last edited by DreymaR (30-Nov-2016 14:21:20)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 15
  • Registered: 12-Sep-2016
  • Posts: 45
DreymaR said:

Could the issue be something like this?

http://unix.stackexchange.com/questions … eat-in-xkb
https://bugs.freedesktop.org/show_bug.cgi?id=9796

Apparently, there's a bug in XKB that overrides your repeat settings for a key. If you state 'repeat=yes' the key will just get whatever it already had.

This should also be noted, from the mouth of XKB wizard Ivan Pascal himself. Indeed, modifiers are inherently non-repeating:
http://pascal.tsu.ru/en/xkb/gram-symbols.html#repeat

(Some more info below. A bit of a hard read, if you ask me...)
http://pascal.tsu.ru/en/xkb/gram-action.html#controls
http://pascal.tsu.ru/en/xkb/internals.html#controls

Nice findings, DreymaR! Especially the bug at freedesktop looks like the cause of the problems.

The XKB pages from Ivan Pascal contain a lot information. Modifiers are indeed non-repeating, which is nice. The 'control flags' he writes about are global flags. If the RepeatKeys flag is disabled, no key will autorepeat. So, those flags aren't the problem.
I also think those pages are a bit hard to read. I think this is because they are directly translated from Russian to English. This also explains the high frequency of typos.

DreymaR said:
Hang on...!

I fired up my VirtualBox Ubuntu16.04 box to check out the autorepeat issue... and there's no issue! Everything's autorepeating just fine.

That makes it hard for me to fix this! I wonder what made this work for me and not for you...

It is indeed a very unpredictable issue. But I think it is the same as the bug at freedesktop, since that bug also has some random-like behavior.

Create advanced keyboard layouts in various formats using my Keyboard Layout Files Creator!

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

Yes, there are global control flags. But also bits set for each key code. So in a symbols file there can be code like this:

        key <UP> {
                type="CTRL+ALT_FOUR_LEVEL",
                repeat=yes,
                symbols[Group1] = [ Up, Up, Prior, Home ],
                actions[Group1] = [ NoAction(), NoAction(), RedirectKey(key=<PGUP>, clearmods=Alt), RedirectKey(key=<HOME>, clearmods=Control+Alt) ]
        };

(Not my code, that. But as you see, the repeat behavior can be set for each key – which will however be overridden by the global control flag I think.)

One thing I thought about is that autorepeat is usually set to 'default' for each key. In this state, the hardware (in my case, the VirtualBox client) may provide autorepeat for keys, which is then just propagated. In other cases, the hardware or "hardware" does not generate any autorepeat behavior and the OS should solve this (but doesn't). If I've read Ivan Pascal correctly, this may be part of our issue.

I was thinking I could try adding 'repeat=true, ' lines to my extend symbols file to see if that makes a difference (that'd go in the key <####> { } defs, before symbols[Group1]=). But if I can't reproduce the problem on my machine, I can't check whether that works!

If you can see the problem, maybe you can test it? In the xkb/symbols/extend file, change for instance

    key <AC03> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
                   Shift_L              , Shift_L               , // Shift
                   Right                , KP_Right             ], //  →
                 actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
                   SetMods(mods=Shift)  , SetMods(mods=Shift)   , // Shift mod for <LFSH>
                   NoAction()           , NoAction()           ]
               };  // Cmk S

to

    key <AC03> { repeat=true,
                 symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
                   Shift_L              , Shift_L               , // Shift
                   Right                , KP_Right             ], //  →
                 actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
                   SetMods(mods=Shift)  , SetMods(mods=Shift)   , // Shift mod for <LFSH>
                   NoAction()           , NoAction()           ]
               };  // Cmk S

Then you'll have to recompile the X server (run my setxkb script for instance).

Last edited by DreymaR (30-Nov-2016 14:36:38)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Jan-2014
  • Posts: 11

Hi,

I've returned after several years to this topic, to further enhance keyboard. I'd love to have mirrorred layout if I have right hand on mouse. I read whole forum once again, all scripts, tried it several times ... and I still don't get it ;)

What I wanted to do, was to define mirroring using your extend layer.

What do I have:
last time I tried it had some issues, so for simplicity I just edited '/usr/share/X11/xkb/symbols/cz' file, and created whole new layout without any definition reuse modularity or whatever. I have just one layout "cz alfonz" and if anything goes wrong 'setxkbmap cz alfonz' loads my keyboard.

I appretiate your init script, but would like to use and update my layout, and for that I need to undestand your code, so I cannot use: "bang! updated!" way, and need to fiddle myself.

What I did as a first incremental step:
1) I uncommented types/level5 code for EIGHT_LEVEL_LEVEL_FIVE_LOCK by accepting your changes.
2) in symbols/leve5 I added caps_switch
3) copied your extend layer file.
4) updated evdev to contain misc_extend definitions

not understanding gnome/xfce UI at all I invoked:
setxkbmap -layout cz -variant alfonz -option level5:caps_switch_lock,mics:extend

and there was no change in behavior of capslock. What is missing? Can you advise?

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

Well, firstly I hope you had 'misc:extend' rather than 'mics:extend'? ;-) And I think it's 'lv5:caps_switch_lock', not what you wrote?

I think it's best to use quotes around your entries, so -option "<options>". But it may not matter here.

Did the rest of your setxkbmap command work?

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Jan-2014
  • Posts: 11

Hi,

sorry for late reply. I wasn't at PC on which I can test it.

Yes, indeed. I wrote mics instead of misc. That's clear error. I tried to replace 'level5:caps_switch_lock' in my command line with lv5:caps_swith_lock, but seems to do the same. But to be honest, changing mics to misc did have one effect. My 'e' stopped working.

so this:
setxkbmap -layout cz -variant alfonz
works as intended, while this:
setxkbmap -layout cz -variant qwerty_alfonz -option 'lv5:caps_switch_lock,misc:extend'
works the same minus 'e' key. Caps still work normally. Nothing from axtand layar works (sorry I wantad to ratry to ba sura, and now I naad to logout/login to ravart back to normal world). No arror is producad, whan invoking this command.

Thanks for any hint/halp,
sorry about my radnack languaga ;)

P.S. The modifications of files in /usr/share/X11/xkd was done in meld; I did not type it myself, since I evidently suck at it.

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

Lol!

Hope you figure it out. And get your E back!

Did you actually implement the level5 Caps switch/lock? It's in a symbols file for level5 in my xkb files.

Last edited by DreymaR (14-Mar-2017 15:53:51)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Han
  • New member
  • Reputation: 0
  • Registered: 14-May-2017
  • Posts: 2

Thank you DreymaR for the great work with this! Colemak is great, but I also really love Extend. But unfortunately I have a problem with it now. I just got started on Ubuntu and got your Big Bag installed and everything works, except that Ext+W doesn't work. It does nothing. Is there a way I could fix that? I'm peering into all the files but I can't really find a solution.

Edit: I now found this in /xkb/symbols/extend:

key <AD02> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
                   XF86ScrollUp         , XF86ScrollRight       , // ScrollUp(††)
                   Up                   , KP_Up                ], //  ↑
                 actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
                   PtrBtn(button=4)     , PtrBtn(button=6)      , // PtrWhBtUp/Ri
                   NoAction()           , NoAction()           ]
               };  // Cmk W

If I edit this to XF86ScrollUp, instead of ScollRight, should it then work?

Last edited by Han (14-May-2017 09:00:20)
Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

No, the XF86ScrollUp/Right actually do very little on their own, unless you use something to assign hotkey functionality to them. Ubuntu can do that.

What produces the actual mousewheel action should be the key action PtrBtn(button=4). Strange if that isn't working for you – I take it the WheelDown on Extend+R works, since you didn't mention that?

Maybe you could check with your hotkey mappings whether anything hijacks the WheelUp? Also, maybe Xev can show you what's going on? There's a script in my tools folder that I use to run xev but you can just run it from the command line too.

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 0
  • Registered: 23-May-2017
  • Posts: 2

Thanks a lot DreymaR, this is really great stuff! I really love the extend layer.
I tried both the xkb solution and the hardware based solution using a Leonardo.
The hardware solution works better for me (mouse features).
One question, I'm using ctrl-r quite frequently for searching in the bash shell history. It does not look like that this shortcut is available in the extend layer, or am I missing something?
I consider remapping the alt key on the extend layer for that purpose, or do you have a better idea?

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

This is correct: My Extend layer contains no Ctrl+letter mappings besides the Undo/Cut/Copy/Paste block. This is mostly by design. For one thing, there wouldn't be enough keys for all conceivable Ctrl+# combos you need! And so, the "Extend" key for those is simply the actual Ctrl key! ;-) But some needs can be solved with alternative Extend combos, as seen in my Extend Extra Extreme topic.

The Extend keys that I myself consider most up for grabs are the Tilde key, and a couple of the right pinky ones. I never find myself using the Insert mapping for instance. However, to access the search history it'd be tempting to use the Favourites key (Ext+\) instead if you aren't needing that?

I wouldn't touch the Alt key since that could cause trouble in some unforeseen way.

Last edited by DreymaR (04-Jun-2017 16:48:52)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 117
  • From: UK
  • Registered: 14-Apr-2014
  • Posts: 975
kohlerm said:

Thanks a lot DreymaR, this is really great stuff! I really love the extend layer.
I tried both the xkb solution and the hardware based solution using a Leonardo.
The hardware solution works better for me (mouse features).
One question, I'm using ctrl-r quite frequently for searching in the bash shell history. It does not look like that this shortcut is available in the extend layer, or am I missing something?
I consider remapping the alt key on the extend layer for that purpose, or do you have a better idea?

The Extend layer is indeed a wonderous thing.
I don't think there's anything wrong with making custom modifications. My Extend layer is about 90% the same as DreymaR's, but I do also use the most common Ctrl mappings, e.g. Extend-F mapped to Ctrl-F for 'find'.  I don't care so much about the mouse movement functions so am happy to lose those. I also prefer having browser back/forward on W/P rather than F/P, but these are quite minor details.

I use Alt as my Extend key and it works really well. It may depend on your OS and what method you use to remap it though.

Last edited by stevep99 (04-Jun-2017 18:55:34)

Using Colemak-DH with Seniply.

Offline
  • 0
  • Reputation: 11
  • Registered: 06-Jun-2013
  • Posts: 551

tried to update today so I could try latest dh mods

i cloned the github repo and then ran the install script

cue world of pain...

has anyone had any luck with the latest release on ubuntu?

Mine was complaining about multiple keyboard files, it wasn't picking up the wide angle layout and I couldn't see any new layouts

thankfully had an older big bag download to hand and just reinstalled that and all is well again

I'm going to have to wait til it cools down a bit over here before trying that again - it was very stressful!

Offline
  • 0
  • Reputation: 11
  • Registered: 06-Jun-2013
  • Posts: 551

I'll attempt it again when I'm on top of my game and I have a qwerty keyboard to hand

Not really sure what went wrong yet

Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

Sorry. I edited the files but didn't have the time to test them properly. I'll look into it, when I have the time.

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 0
  • Registered: 30-Mar-2017
  • Posts: 15

I dug a bit in the code, but I have some problems understanding how to install only Extend functionality (without installing other layouts...)

Can someone help me?


I see there is an extend file in the mapping symbols, what else do I need?

Last edited by Nopaste (29-Jun-2017 11:31:07)
Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

I don't see why you shouldn't want it all installed, as long as you don't have to activate anything you don't want?

If you want to install Extend only you'll have to dig out its references in the rules files. It's a bit tricky. But I suppose you could also be sneaky and include extend(basic) at the end of your layout file in symbols, if you really want to "cheat". :-)

Activating Extend only is a lot easier. You just activate the misc:extend and level5:caps_switch_lock options with setxkb(-map) as explained on page 1.

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 0
  • Registered: 30-Mar-2017
  • Posts: 15
DreymaR said:

I don't see why you shouldn't want it all installed, as long as you don't have to activate anything you don't want?

If you want to install Extend only you'll have to dig out its references in the rules files. It's a bit tricky. But I suppose you could also be sneaky and include extend(basic) at the end of your layout file in symbols, if you really want to "cheat". :-)

Activating Extend only is a lot easier. You just activate the misc:extend and level5:caps_switch_lock options with setxkb(-map) as explained on page 1.

I actually have a custom Colemak (dead keys on [ and ] to insert accented keys) so if I install everything it overwrites this layout.

I think the simplest way is to install everything, add my layouts, and activate only extend with those commands. I'll try!

Mmmh after install, without touching anything the caps lock doesn't work anymore on the custom layouts :/

Last edited by Nopaste (29-Jun-2017 13:46:24)
Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

I see. Well, if you just put my extend and level5 files in your symbols folder then the include mentioned above should work. You'll also need to include the level5 part if you want Caps as your Extend modifier.

The end of your layout definition in xkb/symbols should then look something like this:

  include "extend(basic)"
  include "level5(caps_switch_lock)"
};

Are you sure your custom Colemak with accent dead keys isn't one of my locale ones, though? What are your dead key mappings for LBr/RBr?

Last edited by DreymaR (29-Jun-2017 13:46:45)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 0
  • Registered: 30-Mar-2017
  • Posts: 15
DreymaR said:

I see. Well, if you just put my extend and level5 files in your symbols folder then the include mentioned above should work. You'll also need to include the level5 part if you want Caps as your Extend modifier.

The end of your layout definition in xkb/symbols should then look something like this:

  include "extend(basic)"
  include "level5(caps_switch_lock)"
};

Thanks!
I'll try it right away!


DreymaR said:

Are you sure your custom Colemak with accent dead keys isn't one of my locale ones, though? What are your dead key mappings for LBr/RBr?


I have two layouts one is the normal Colemak (that i use when programming), the other has the dead keys in:

[ -> `
] -> ´

(and the brackets on shift and alt-gr)

edit.

does't work... doing that results in X crashing and unable to login again.
I had to restore the files in xkb to get it to work again

Last edited by Nopaste (29-Jun-2017 14:11:43)
Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

If everything crashed then you must've made a syntax error which made xkb unable to compile. Check that you didn't make any mistakes.

So what you're using is essentially my Spanish/LatAm locale Colemak, but with the accents swapped and brackets on lv2. So you could edit my layout in the es symbols file, or get used to acute on LBr, and just use that.

Cmk-eD-es%2Blatam-usym-aw_Xmc.png?raw=1

Last edited by DreymaR (30-Jun-2017 11:07:05)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0
  • Reputation: 11
  • Registered: 06-Jun-2013
  • Posts: 551

i'm going to give it another go..

ok - observations, on running install script i get two warnings - see below

@@@ DreymaR's Big Bag Of Tricks install script (by GadOE, 2016-06) @@@
¤ Found mod root dir './x-mod_v2-17-1ub1_2016-06-06'
¤ Subdirectories to mod: 'xkb'
¤ Looking for 'xkb' backup in '/usr/share/X11'...
¤ Backing up: None
¤ Replacing files in '/usr/share/X11/xkb' with mod
¤ System install done

@@@ DreymaR's setxkbmap script (by GadOE, 2015-01) @@@
¤ Using model/layout 'pc105aw-sl'/'us(cmk_ed_us)' from ShortStr
¤ Changed dir to '/usr/share/X11/xkb'
¤ Looking for and removing any old .xkm server files
¤ Running setxkbmap:

Setting verbose level to 9
locale is C
Warning! Multiple definitions of keyboard model
         Using command line, ignoring X server
Warning! Multiple definitions of keyboard layout
         Using command line, ignoring X server
Trying to load rules file ./rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105aw-sl
layout:     us(cmk_ed_us)
options:    misc:extend,lv5:caps_switch_lock,grp:shifts_toggle,compose:menu,misc:cmk_curl_dh
Trying to build keymap using the following components:
keycodes:   evdev(pc105aw-sl)+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us(cmk_ed_us)+inet(evdev)+group(shifts_toggle)+compose(menu)+level5(caps_switch_lock)+extend(basic)+colemak(cmk_ed_dh)
geometry:   pc(pc105aw-sl)

¤ Changed dir to '/home/ben/Dropbox/colemak/BigBagKbdTrixXKB'

@@@ setxkb.sh finished! @@@


@@@ install-dreymar-xmod.sh finished! @@@

Another thing - the anglewide mod was gone after install so i went into /etc/default/keyboard and made it look like this:

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

# XKBMODEL="pc105"
XKBMODEL="pc105awide-sl"
XKBLAYOUT="gb"
XKBVARIANT=""
XKBOPTIONS="misc:extend,lv5:caps_switch_lock,grp:shifts_toggle,compose:menu"

BACKSPACE="guess"

i then rebooted but  it took a while for the wide mod to kick in when i'd logged back in - i.e. it didn't seem to apply straight away after rebooting which was weird, but seems ok now..

Last thing, HM have switched as expected, but ZXCVD is still the same

before I try and fix it, can you confirm you see the same dr. drey?

I'm using 'English (Colemak[eD],Curl-DH ergo mod) - is that the right one? I'm assuming it is as the MH swap is there..

update:

curses - there is something wrong with this linux version, i just rebooted to see if i could see that delay on the wide angle mod again and now i just don't have wide angle again

any ideas gratefully received..

Last edited by bph (05-Jul-2017 11:25:09)
Offline
  • 0
  • Reputation: 210
  • From: Viken, Norway
  • Registered: 13-Dec-2006
  • Posts: 5,343

Oh, this doesn't look so bad! The warnings are fine, no worries. It's just saying that there's a keyboard already defined by the X server but it'll use yours instead.

Yeah, as you can see the AngleWide-ISO model isn't called "pc105awide-sl" but "pc105aw-sl" now. I'll get around to updating the documentation. When in doubt though, poke through the setxkb.sh script for clues. ;-)

The reason ZXCVD is unchanged is that you now have to use a CurlAngle(Wide) ergo mod instead of just Angle(Wide). So the model you'll want is "pc105caw-sl". The reason you then lost WideAngle entirely is that you've used a model that doesn't exist (anymore) so the X server defaults to the normal PC105 model. This didn't kick in immediately, as it only happens after a server file update. I suspect this might have played a part in the long startup time. Good thing it doesn't just crash at least... :-o

The main reason for all this confusing business with CurlAngle ergo mods is to keep the Extend mapping on the right key. I really think that Paste should still be on Ext+V. As a side effect, people will now have the choice of going with ZXCDV_ or ZXCVD_ (however, there's no such option for HM/MH without editing the symbols/colemak file).

The setxkb.sh script should have an option to write a line to your ~/.bashrc file. So with that, you can have a properly configured layout on every logon. Check whether you have any setxkbmap entries already in that file, and if not then run setxkb.sh properly configured to add one. I actually think that'll obviate the need to edit /etc/default/keyboard – but I'm not sure.

Lastly, we apologize for the inconvenience and thank you for your patience in this matter! ;-)

Last edited by DreymaR (05-Jul-2017 11:52:02)

*** Learn Colemak in 2–5 steps with Tarmak! ***
*** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

Offline
  • 0