TTY shortcuts; setxkb non-eD variants

* Ext+AltGr+FKs select TTY Virtual Terminals 1-12
* You may comment out the include lv5_fk in symbols/extend to get back Ctrl+Alt+FK for TTY
* Use setxkb shortstr 'mod loc' for the basic variant of a locale, e.g., '4n us' for ANSI US QWERTY
* Use setxkb shortstr 'mod loc var' to specify any layout variant other than the cmk-eD us/ks ones
* Fixed problem with Ext+Q activating the CapsLock state
This commit is contained in:
DreymaR 2021-01-13 14:17:21 +01:00
parent 57e5e883c4
commit 2e86165b95
4 changed files with 251 additions and 207 deletions

View File

@ -38,11 +38,14 @@ There are plenty of explanations and further links in there.
Happy XKB hacking!
DreymaR, 2020-11
DreymaR, 2021-01
TODO:
-----
* Is there a way to use clearmods=LevelFive on all the Extend mappings by default? Or just be more careful with each RedirectKey(). Example: Q -> Esc -> Caps.
* From Daniele at the Cmk Discord: Try out localectl?
- E.g., 'localectl set-x11-keymap us pc105aw-sl cmk_ed_dh lv5:caps_switch_lock,misc:extend' should work to make changes persistent?
* The Curl(DH) model implementation have to go as it may mess w/ QWERTY. Instead, I should use two Extend variants.
- It also seems very hard for some newcomers to understand. So yes, I should have the Angle mod only and not CurlAngle models.
- Also, matrix users want the V-D swap without an Angle mod! Another nail in the coffin for the Curl models.
@ -53,12 +56,30 @@ TODO:
* Find out how to change the rules component properly to allow compiling and eventually merging to the main repo?
* Migrate from `~/.bashrc` to `~/.xprofile`? The latter is more appropriate, but which setups source it and which ones don't?
* Could use an <XTND> key code alias defined in keycodes/evdev (alias <XTND> = <CAPS>), instead of the <CAPS> code?
For an EsAlt variant as in EPKL:
```
key <AE04> { [ 4, dollar, dead_currency, EuroSign ] }; // 4
key <AD07> { [ l, L, U2039, guillemotleft ] }; // QWE U Cmk L
key <AD08> { [ u, U, ú, Ú ] }; // QWE I Cmk U - EsAlt
key <AC01> { [ a, A, á, Á ] }; // QWE A Cmk A - EsAlt
key <AC06> { [ h, H, leftarrow, rightarrow ] }; // QWE H Cmk H
// key <AC07> { [ n, N, ñ, Ñ ] }; // QWE J Cmk N - EsAlt ANSI
key <AC08> { [ e, E, é, É ] }; // QWE K Cmk E - EsAlt
key <AC09> { [ i, I, í, Í ] }; // QWE L Cmk I - EsAlt
key <AC10> { [ o, O, ó, Ó ] }; // QWE ; Cmk O - EsAlt
key <LSGT> { [ ñ, Ñ, oe, OE ] }; // <> - EsAlt ISO
// key <AB06> { [ k, K, endash, uparrow ] }; // QWE N Cmk K - ANSI
key <AD11> { [ bracketleft, braceleft, masculine, ordfeminine ] }; // [{
```
DONE:
-----
* 2020-11-05: Switched to the new DH = DHm standard (was DH = DHk)
* Changed the default layout for the setxkb.sh script to US (UniSym): In my experience, most uneducated users want US English.
* Changed the default layout for the setxkb.sh script to US (UniSym): In my experience, most users that struggle with the setup want US English.
* To get back to your old layout/model, use `setxkb 4n/5n [loc]`. You may also specify `mod loc [var]`; omit `var` for the default (basic) variant.
* Separated out the F# key block in the extend file: People complain that their TTY shortcuts aren't working because of it. Ext+AltGr+F# works though.
[XKB-conf]: https://www.freedesktop.org/wiki/Software/XKeyboardConfig/ (XKeyboard Config page)

129
setxkb.sh
View File

@ -1,9 +1,9 @@
#!/bin/bash
## ======================================================
## === SETXKB.sh to set the XKB keyboard options ===
## === by Øystein Bech "DreymaR" Gadmar, 2014 ===
## ======================================================
## ======================================================
## === SETXKB.sh to set the XKB keyboard options ===
## === by Øystein Bech "DreymaR" Gadmar, 2014 ===
## ======================================================
HeadStr="DreymaR's setxkbmap script (by GadOE, 2020-12)"
DescStr=\
@ -14,41 +14,41 @@ DescStr=\
" or use -a to write the setxkbmap command to a file.\n"
FootStr="Happy xkb-hacking! ~ Øystein Bech 'DreymaR' Gadmar"
## NOTE: It now works with local xkb(-mod) dir
# By default, setxkbmap checks ./rules first!
# Need a full xkb dir then (not just the xkb-mod files)
## NOTE: It now works with local xkb(-mod) dir
## By default, setxkbmap checks ./rules first!
## Need a full xkb dir then (not just the xkb-mod files)
## NOTE: I made a handy shorthand for activating simple Cmk[eD] model/layout combos.
# See the help text of this script for more info on the model-locale-symbols syntax.
# Example: '5w no us' activates model pc105aw-sl, layout no(cmk_ed_us)
# Models: 4n 4a(pc104angle-z) 4w(pc104wide-qu) 4aw(pc104aw-zqu) 4f(pc104awing)
# 5n 5a(pc105angle) 5w/5aw(pc105aw-sl)
# - Curl(DH) "models" add a 'c', like this: 4c, 5caw etc
# - Thus, the allowed model short strings are (4|5)(n|a|c|ca)[(w|f)]
# XKB options are left out of this: Too complex (e.g., replace or append?)
## NOTE: I made a handy shorthand for activating simple Cmk[eD] model/layout combos.
## See the help text of this script for more info on the model-locale-symbols syntax.
## Example: '5w no us' activates model pc105aw-sl, layout no(cmk_ed_us)
## Models: 4n 4a(pc104angle-z) 4w(pc104wide-qu) 4aw(pc104aw-zqu) 4f(pc104awing)
## 5n 5a(pc105angle) 5w/5aw(pc105aw-sl)
## - Curl(DH) "models" add a 'c', like this: 4c, 5caw etc
## - Thus, the allowed model short strings are (4|5)(n|a|c|ca)[(w|f)]
## XKB options are left out of this: Too complex (e.g., replace or append?)
##-------------- init ------------------------------------------
#~ MyDATE=`date +"%Y-%m-%d_%H-%M"`
MyNAME=`basename $0`
#~ MyPATH=`dirname $0`
## @@@ The default X11 dir under Debian/Ubuntu/etc is /usr/share/X11 @@@
## @@@ The default X11 dir under some (older) distros is /usr/lib/X11 @@@
## @@@ The default X11 dir under Debian/Ubuntu/etc is /usr/share/X11 @@@
## @@@ The default X11 dir under some (older) distros is /usr/lib/X11 @@@
X11DIR='/usr/share/X11'; [ -d "${X11DIR}" ] || X11DIR='/usr/lib/X11'
#~ XKBmodel=pc104aw-zqu # ANSI-104 keyboard w/ Angle(Z)Wide(Quote) mod
XKBmodel=pc105aw-sl # ISO-105 keyboard w/ CurlAngleWide(Slash) mod
#~ XKBmodel=pc104aw-zqu # ANSI-104 keyboard w/ Angle(Z)Wide(Quote) mod
XKBmodel=pc105aw-sl # ISO-105 keyboard w/ CurlAngleWide(Slash) mod
#~ XKBlayout='us(cmk_ed_us),gr(colemak),ru(colemak)' # Multiple layouts
XKBlayout='us(cmk_ed_us)' # US English Colemak[eD]'Universal Symbols' layout
XKBlayout='us(cmk_ed_us)' # US English Colemak[eD]'Universal Symbols' layout
XKBoption='misc:extend,lv5:caps_switch_lock,grp:shifts_toggle,compose:menu'
VerboseLvl=9 # (-v) How much info should setxkbmap print out?
KeepXKM='no' # (-k) Retain old /var/lib/xkb/server-*.xkm files?
XKBdir="${X11DIR}/xkb" # (-d) The xkb-type dir to run setxkbmap from
AddCmd='no' # (-a) Add setxkbmap cmd to file?
VerboseLvl=9 # (-v) How much info should setxkbmap print out?
KeepXKM='no' # (-k) Retain old /var/lib/xkb/server-*.xkm files?
XKBdir="${X11DIR}/xkb" # (-d) The xkb-type dir to run setxkbmap from
AddCmd='no' # (-a) Add setxkbmap cmd to file?
AddDefault="${HOME}/.bashrc"
AddCmdTo=${AddDefault} # (-f) File (such as '~/.bashrc') to add setxkbmap cmd to
SetXStr='' #'5caw us us' # (--) Shortcut string for setxkb (model locale eD-variant)
## NOTE: '# (-a)' means that the value can be set by option argument '-a <value>'
AddCmdTo=${AddDefault} # (-f) File (such as '~/.bashrc') to add setxkbmap cmd to
SetXStr='' #'5caw us us' # (--) Shortcut string for setxkb (model locale eD-variant)
## NOTE: '# (-a)' means that the value can be set by option argument '-a <value>'
HelpStr="\e[1mUsage: bash ${MyNAME} [optional args] [<kbd> [<loc> <sym>]]\e[0m\n"\
"===========================================================\n"\
@ -140,32 +140,43 @@ while getopts "m:l:o:v:d:f:akh?" cmdarg; do
h) PrintHelpAndExit 0 ;;
\?) PrintHelpAndExit 0 ;;
:) PrintHelpAndExit 1 ;;
# s) SetXStr=($OPTARG) ;; # Split the string
# s) SetXStr=($OPTARG) ;; # Split the string
esac
done
shift $(( $OPTIND - 1 )) # Remove already processed args
[[ "$@" == "" ]] || SetXStr=($@) # Split the ShortString
shift $(( $OPTIND - 1 )) # Remove already processed args
[[ "$@" == "" ]] || SetXStr=($@) # Split the ShortString
if [ -n "${SetXStr}" ]; then # Use ShortString notation
if [ -n "${SetXStr}" ]; then # Use ShortString notation
case ${SetXStr[0]} in
4n|4c) XKBmodel='pc104' ;; # Generic ANSI-101/104-key
4a|4ca) XKBmodel='pc104angle-z' ;; # w/ Angle(Z) ergo mod
4w|4cw) XKBmodel='pc104wide-qu' ;; # w/ Wide(Quote) ergo mod
4aw|4caw) XKBmodel='pc104aw-zqu' ;; # w/ Angle(Z)Wide(Quote) ergo mod
4f|4af|4cf) XKBmodel='pc104awing' ;; # w/ AngleWing(Quote) ergo mod
4n|4c) XKBmodel='pc104' ;; # Generic ANSI-101/104-key
4a|4ca) XKBmodel='pc104angle-z' ;; # w/ Angle(Z) ergo mod
4w|4cw) XKBmodel='pc104wide-qu' ;; # w/ Wide(Quote) ergo mod
4aw|4caw) XKBmodel='pc104aw-zqu' ;; # w/ Angle(Z)Wide(Quote) ergo mod
4f|4af|4cf) XKBmodel='pc104awing' ;; # w/ AngleWing(Quote) ergo mod
5n|5c) XKBmodel='pc105' ;; # Generic ISO-102/105-key
5a|5ca) XKBmodel='pc105angle' ;; # w/ Angle(LSGT) ergo mod
5w|5aw|5caw) XKBmodel='pc105aw-sl' ;; # w/ AngleWide(Slash) ergo mod
5n|5c) XKBmodel='pc105' ;; # Generic ISO-102/105-key
5a|5ca) XKBmodel='pc105angle' ;; # w/ Angle(LSGT) ergo mod
5w|5aw|5caw) XKBmodel='pc105aw-sl' ;; # w/ AngleWide(Slash) ergo mod
*) MyError "ShortStr model '${SetXStr[0]}' unknown!" ;;
esac
## If there are two more parts, generate the ??(cmk_ed_?s) layout; else, use existing layout.
[ -n "${SetXStr[2]}" ] && XKBlayout="${SetXStr[1]}(cmk_ed_${SetXStr[2]})" \
|| XKBlayout=`setxkbmap -query | grep layout | awk '{print $2}'`
if [ -n "${SetXStr[2]}" ]; then # If there are three parts, ...
case ${SetXStr[2]} in # ...determine the layout variant.
us) XKBvar='cmk_ed_us' ;; # Cmk-eD Unified Symbols variant
ks) XKBvar='cmk_ed_ks' ;; # Cmk-eD Keep Locale Symbols variant
*) XKBvar=${SetXStr[2]} ;; # Use specified variant
esac
else
XKBvar='basic' # Default variant
fi
if [ -n "${SetXStr[1]}" ]; then # If there are two or more parts, ...
XKBlayout="${SetXStr[1]}($XKBvar)" # ...use the lay(var) string.
else # Otherwise, use existing layout.
XKBlayout=`setxkbmap -query | grep layout | awk '{print $2}'`
fi
fi
## NOTE: The code below post processes Curl models into model+option, as per my XKB implementation.
## NOTE: The code below post processes Curl models into model+option, as per my XKB implementation.
[[ ${SetXStr[0]} =~ "c" ]] && XKBoption+=',misc:cmk_curl_dh'
@ -180,29 +191,29 @@ fi
MyCD "${XKBdir%/}"
#~ MyPoint "Running from `pwd`"
## Check for root privileges (if not root, needs the sudo command)
## Check for root privileges (if not root, needs the sudo command)
DoSudo=''
if [ "$EUID" -ne 0 ]; then # or [ `whoami` = 'root' ]; not root, so test for sudo instead
( command -v sudo >/dev/null 2>&1 ) || MyError "Need root access and sudo won't run!"
DoSudo='sudo'
fi
## Purge the old xkb server files
## Purge the old xkb server files
if [ ${KeepXKM} == 'no' ]; then
MyPoint "Looking for and removing any old .xkm server files"
${DoSudo} rm -f /var/lib/xkb/server-*.xkm || MyPoint "No .xkm files removed"
fi
## Clear the xkb options (to avoid duplicates)
## Clear the xkb options (to avoid duplicates)
setxkbmap -option ''
## Run the actual setxkbmap command
## Run the actual setxkbmap command
MySetXKB="-model ${XKBmodel} -layout ${XKBlayout} -option ${XKBoption} -v ${VerboseLvl}"
MyPoint "Running setxkbmap:\n"
setxkbmap $MySetXKB
MyEcho ""
## Add the setxkbmap command to a file, if specified (Note the special format for MySetXKB!)
## Add the setxkbmap command to a file, if specified (Note the special format for MySetXKB!)
MySetXKB="-model '${XKBmodel}' -layout '${XKBlayout}' -option '${XKBoption}'"
if [ ${AddCmd} == 'yes' ] || [ ${AddCmdTo} != ${AddDefault} ]; then
MyPoint "Adding setxkbmap cmd to ${AddCmdTo}\n"
@ -216,12 +227,12 @@ fi
MyCD "${OldDir}"
## When run in a terminal window, wait for a key press
## so you can see the results before the window closes
## When run in a terminal window, wait for a key press
## so you can see the results before the window closes
#~ MyMsg "Press any key to proceed:"
#~ read -n 1
## A silly trick to not print the last Enter if called from the install script :-)
## A silly trick to not print the last Enter if called from the install script :-)
extraEnter='';[[ `ps --no-headers -o comm= $PPID` == 'install-dreymar' ]] || extraEnter='\n'
MyMsg "${MyNAME} finished!" ${extraEnter}
exit 0
@ -231,19 +242,19 @@ exit 0
#~ MyWarning "'${MyNAME}' debug - exiting!"; exit 0
#~ echo "'$XKBmodel' '$XKBlayout'"; for i in 0 1 2; do echo "'${SetXStr[i]}'"; done; exit 0
## US/ANSI Wide ergo mod,
## Colemak[eD] US layout,
## Extend mappings w/ Caps switch:
## US/ANSI Wide ergo mod,
## Colemak[eD] US layout,
## Extend mappings w/ Caps switch:
#~ setxkbmap \
#~ -model pc104wide-qu, \
#~ -layout "us(cmk_ed_us)", \
#~ -option "misc:extend,lv5:caps_switch_lock"
## Euro/ISO AngleWide ergo mod,
## Norwegian Cmk[eD] "US" layout (grp1),
## Greek phonetic Colemak layout (grp2),
## Extend mappings w/ Caps switch (for both),
## Switch grp w/ 2xCtrl; Compose on Menu key:
## Euro/ISO AngleWide ergo mod,
## Norwegian Cmk[eD] "US" layout (grp1),
## Greek phonetic Colemak layout (grp2),
## Extend mappings w/ Caps switch (for both),
## Switch grp w/ 2xCtrl; Compose on Menu key:
#~ setxkbmap \
#~ -model pc105aw-sl, \
#~ -layout "no(cmk_ed_us),gr(colemak)", \

View File

@ -120,35 +120,35 @@ xkb_symbols "cmk_ed" {
hidden partial alphanumeric_keys
xkb_symbols "cmk_ed_letters" {
// Alphanumeric section (letter keys and semicolon)
key <AD01> { [ q, Q, singlelowquotemark, doublelowquotemark ] }; // QWE/Cmk Q
key <AD02> { [ w, W, leftsinglequotemark, leftdoublequotemark ] }; // QWE/Cmk W
key <AD03> { [ f, F,rightsinglequotemark,rightdoublequotemark ] }; // QWE E Cmk F
key <AD04> { [ p, P, Greek_pi, paragraph ] }; // QWE R Cmk P
key <AD05> { [ g, G, eng, ENG ] }; // QWE T Cmk G
key <AD06> { [ j, J, U0283, U01A9 ] }; // QWE Y Cmk J
key <AD07> { [ l, L, lstroke, Lstroke ] }; // QWE U Cmk L
key <AD08> { [ u, U, U2039, guillemotleft ] }; // QWE I Cmk U
key <AD09> { [ y, Y, U203A, guillemotright ] }; // QWE O Cmk Y
key <AD10> { [ semicolon, colon, dead_diaeresis, ellipsis ] }; // QWE P Cmk ;:
key <AD01> { [ q, Q, singlelowquotemark, doublelowquotemark ] }; // QWE Q Cmk qQ ‚„
key <AD02> { [ w, W, leftsinglequotemark, leftdoublequotemark ] }; // QWE W Cmk wW ‘“
key <AD03> { [ f, F,rightsinglequotemark,rightdoublequotemark ] }; // QWE E Cmk fF ’”
key <AD04> { [ p, P, Greek_pi, paragraph ] }; // QWE R Cmk pP π¶
key <AD05> { [ g, G, eng, ENG ] }; // QWE T Cmk gG ŋŊ
key <AD06> { [ j, J, U0283, U01A9 ] }; // QWE Y Cmk jJ ʃƩ
key <AD07> { [ l, L, lstroke, Lstroke ] }; // QWE U Cmk lL łŁ
key <AD08> { [ u, U, U2039, guillemotleft ] }; // QWE I Cmk uU ‹«
key <AD09> { [ y, Y, U203A, guillemotright ] }; // QWE O Cmk yY ›»
key <AD10> { [ semicolon, colon, dead_diaeresis, ellipsis ] }; // QWE P Cmk ;: ¨…
// U2039/203A single guillemets; U0283/01A9 esh/ESH
key <AC01> { [ a, A, dstroke, Greek_alpha ] }; // QWE/Cmk A
key <AC02> { [ r, R, registered, trademark ] }; // QWE S Cmk R
key <AC03> { [ s, S, ssharp, section ] }; // QWE D Cmk S
key <AC04> { [ t, T, thorn, THORN ] }; // QWE F Cmk T
key <AC05> { [ d, D, eth, ETH ] }; // QWE G Cmk D
key <AC06> { [ h, H, hstroke, Hstroke ] }; // QWE/Cmk H
key <AC07> { [ n, N, endash, uparrow ] }; // QWE J Cmk N
key <AC08> { [ e, E, EuroSign, leftarrow ] }; // QWE K Cmk E
key <AC09> { [ i, I, emdash, rightarrow ] }; // QWE L Cmk I
key <AC10> { [ o, O, masculine, ordfeminine ] }; // QWE ; Cmk O
key <AC01> { [ a, A, dstroke, Greek_alpha ] }; // QWE A Cmk aA đα
key <AC02> { [ r, R, registered, trademark ] }; // QWE S Cmk rR ®™
key <AC03> { [ s, S, ssharp, section ] }; // QWE D Cmk sS ߧ
key <AC04> { [ t, T, thorn, THORN ] }; // QWE F Cmk tT þÞ
key <AC05> { [ d, D, eth, ETH ] }; // QWE G Cmk dD ðÐ
key <AC06> { [ h, H, hstroke, Hstroke ] }; // QWE H Cmk hH ħĦ
key <AC07> { [ n, N, endash, uparrow ] }; // QWE J Cmk nN –↑
key <AC08> { [ e, E, EuroSign, leftarrow ] }; // QWE K Cmk eE €←
key <AC09> { [ i, I, emdash, rightarrow ] }; // QWE L Cmk iI —→
key <AC10> { [ o, O, masculine, ordfeminine ] }; // QWE ; Cmk oO ºª
//
key <AB01> { [ z, Z, U0292, U01B7 ] }; // QWE/Cmk Z
key <AB02> { [ x, X, dagger, doubledagger ] }; // QWE/Cmk X
key <AB03> { [ c, C, copyright, cent ] }; // QWE/Cmk C
key <AB04> { [ v, V, division, Greek_gamma ] }; // QWE/Cmk V
key <AB05> { [ b, B, enfilledcircbullet, Greek_beta ] }; // QWE/Cmk B
key <AB06> { [ k, K, ccedilla, Ccedilla ] }; // QWE N Cmk K
key <AB07> { [ m, M, multiply, downarrow ] }; // QWE/Cmk M
key <AB01> { [ z, Z, U0292, U01B7 ] }; // QWE Z Cmk zZ ʒƷ
key <AB02> { [ x, X, dagger, doubledagger ] }; // QWE X Cmk xX †‡
key <AB03> { [ c, C, copyright, cent ] }; // QWE C Cmk cC ©¢
key <AB04> { [ v, V, division, Greek_gamma ] }; // QWE V Cmk vV ÷γ
key <AB05> { [ b, B, enfilledcircbullet, Greek_beta ] }; // QWE B Cmk bB •β
key <AB06> { [ k, K, ccedilla, Ccedilla ] }; // QWE N Cmk kK çÇ
key <AB07> { [ m, M, multiply, downarrow ] }; // QWE M Cmk mM ×↓
// U0292/01B7 ezh/EZH
//// Activating the line below will "hard" enable the Cmk-DH = Curl(DHm) mod; see below.
@ -162,34 +162,34 @@ xkb_symbols "cmk_ed_letters" {
hidden partial alphanumeric_keys
xkb_symbols "cmk_ed_symbols" {
// Alphanumeric section (number/symbol keys)
key <TLDE> { [ grave, asciitilde, dead_tilde, U2248 ] }; // `~
key <AE01> { [ 1, exclam, dead_belowdot, exclamdown ] }; // 1
key <AE02> { [ 2, at, dead_hook, twosuperior ] }; // 2
key <AE03> { [ 3, numbersign, dead_horn, threesuperior ] }; // 3
key <AE04> { [ 4, dollar, dead_currency, sterling ] }; // 4
key <AE05> { [ 5, percent, mu, U2030 ] }; // 5
key <AE06> { [ 6, asciicircum, dead_circumflex, partialderivative ] }; // 6
key <AE07> { [ 7, ampersand, dead_caron, notsign ] }; // 7
key <AE08> { [ 8, asterisk, dead_ogonek, infinity ] }; // 8
key <AE09> { [ 9, parenleft, dead_breve, periodcentered ] }; // 9
key <AE10> { [ 0, parenright, dead_abovering, degree ] }; // 0
key <AE11> { [ minus, underscore, dead_macron, plusminus ] }; // -_
key <AE12> { [ equal, plus, dead_doubleacute, notequal ] }; // =+
key <TLDE> { [ grave, asciitilde, dead_tilde, U2248 ] }; // `~ _≈
key <AE01> { [ 1, exclam, dead_belowdot, exclamdown ] }; // 1! _¡
key <AE02> { [ 2, at, dead_hook, twosuperior ] }; // 2@ _²
key <AE03> { [ 3, numbersign, dead_horn, threesuperior ] }; // 3# _³
key <AE04> { [ 4, dollar, dead_currency, sterling ] }; // 4$ _£
key <AE05> { [ 5, percent, mu, U2030 ] }; // 5% µ‰
key <AE06> { [ 6, asciicircum, dead_circumflex, partialderivative ] }; // 6^ _∂
key <AE07> { [ 7, ampersand, dead_caron, notsign ] }; // 7& _¬
key <AE08> { [ 8, asterisk, dead_ogonek, infinity ] }; // 8* _∞
key <AE09> { [ 9, parenleft, dead_breve, periodcentered ] }; // 9( _·
key <AE10> { [ 0, parenright, dead_abovering, degree ] }; // 0) _°
key <AE11> { [ minus, underscore, dead_macron, plusminus ] }; // -_
key <AE12> { [ equal, plus, dead_doubleacute, notequal ] }; // =+ _≠
// U2248 approx equal; U2030 per mille
key <AD11> { [ bracketleft, braceleft, aring, Aring ] }; // [{
key <AD12> { [ bracketright, braceright, ae, AE ] }; // ]}
key <AD11> { [ bracketleft, braceleft, aring, Aring ] }; // [{ åÅ
key <AD12> { [ bracketright, braceright, ae, AE ] }; // ]} æÆ
//
key <AC11> { [ apostrophe, quotedbl, dead_acute, U2032 ] }; // '"
key <BKSL> { [ backslash, bar, dead_grave, brokenbar ] }; // \|
key <AC11> { [ apostrophe, quotedbl, dead_acute, U2032 ] }; // '" _
key <BKSL> { [ backslash, bar, dead_grave, brokenbar ] }; // \|
// U2032 prime
key <LSGT> { [ oe, OE, oslash, Ooblique ] }; // <>
key <AB08> { [ comma, less, dead_cedilla, lessthanequal ] }; // ,
key <AB09> { [ period, greater, dead_abovedot, greaterthanequal ] }; // .
key <AB10> { [ slash, question, dead_stroke, questiondown ] }; // /?
key <LSGT> { [ oe, OE, oslash, Ooblique ] }; // œŒ øØ
key <AB08> { [ comma, less, dead_cedilla, lessthanequal ] }; // ,< _≤
key <AB09> { [ period, greater, dead_abovedot, greaterthanequal ] }; // .> _≥
key <AB10> { [ slash, question, dead_stroke, questiondown ] }; // /? _¿
//
key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
key <SPCE> { [ space, space, nobreakspace, nobreakspace ] }; // Space
// NOTE: In Linux, CapsLock is tweaked in the Keyboard settings (for freedom of choice etc.)
// key <CAPS> { [ BackSpace, BackSpace, Caps_Lock, Caps_Lock ] };
// key <CAPS> { [ BackSpace, BackSpace, Caps_Lock, Caps_Lock ] }; // Caps/Back
};
// NOTE:

View File

@ -1,5 +1,5 @@
// Extend mode symbols for xkb on X.Org Server 7.x
// 2014-02-01 OEystein Bech "DreymaR" Gadmar
// 2014-2021 OEystein Bech "DreymaR" Gadmar
// See "DreymaR's Big Bag of Keyboard Tricks": http://forum.colemak.com/viewtopic.php?pid=9918
// A modular Extend mapping layer like the one I have in Portable Keyboard Layout for Windows
// - Key names are in /usr/include/X11/keysymdef.h and XF86keysym.h (Removing the XK_ prefix)
@ -44,7 +44,7 @@
// One idea is to use AltGr+Caps as a lv7_lock (Caps+AltGr is already lv7_switch)
// NOTE: If a hex pad is needed, the lv7(8?)+KBHDJG -> ABCDEF mappings are one solution
// NOTE: There's a KP key named KP_BEGIN; it seems like a hack? Ignored for now.
// NOTE: I've duplicated KP_0 to make it easy to hit. Maybe KP_Enter should've been helped too...?
// NOTE: I've duplicated KP_0 to make it easy to hit. Useful for bigrams with 0.
// TODO: Autorepeat is hurting for some. This is probably an XKB bug? What can be done about it?
// One fix is to run xset afterwards: 'seq -s " r " 8 255 | xargs xset r' supposedly does the trick.
// Add the following to key <> {} defs (before symbols[Group1]=)?
@ -58,14 +58,93 @@
default partial
xkb_symbols "basic" {
// name[Group1]= "Extend layer";
include "extend(lv5)"
include "extend(lv5_fk)" // The F# key block. Some may want to exclude this as it affects TTY shortcuts.
include "extend(lv5)" // Extend mappings for all other keys
};
partial alphanumeric_keys modifier_keys
xkb_symbols "lv5_fk" {
key.type[group1]="EIGHT_LEVEL"; // (Caps)Lock state not used on these keys
// NOTE: Many use Ctrl+Alt+<FK##> for TTY server control keys. With Extend, use Ext+AltGr+<FK##> instead.
key <FK01> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F01
XF86AudioPlay , XF86AudioPause , // Audio Play/Pause
XF86_Switch_VT_1 , NoSymbol ], // Virtual Terminal 1
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I208>,clearmods=all), Redirect(key=<I209>,clearmods=all), // <I208>/<I209>(‡‡)
SwitchScreen(screen=1,!same) , NoAction() ] };
key <FK02> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F02
XF86AudioPrev , XF86AudioRewind , // Audio Previous/Rewind
XF86_Switch_VT_2 , NoSymbol ], // Virtual Terminal 2
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I173>,clearmods=all), Redirect(key=<I176>,clearmods=all), // <I173>/<I176>(‡‡)
SwitchScreen(screen=2,!same) , NoAction() ] };
key <FK03> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F03
XF86AudioNext , XF86AudioForward , // Audio Next/Forward
XF86_Switch_VT_3 , NoSymbol ], // Virtual Terminal 3
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I171>,clearmods=all), Redirect(key=<I216>,clearmods=all), // <I171>/<I216>(‡‡)
SwitchScreen(screen=3,!same) , NoAction() ] };
key <FK04> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F04
XF86AudioStop , XF86Eject , // Audio Stop/Eject
XF86_Switch_VT_4 , NoSymbol ], // Virtual Terminal 4
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I174>,clearmods=all), Redirect(key=<I169>,clearmods=all), // <I174>/<I169>(‡‡)
SwitchScreen(screen=4,!same) , NoAction() ] };
key <FK05> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F05
XF86AudioMute , XF86Reload , // Audio Mute/Reload
XF86_Switch_VT_5 , NoSymbol ], // Virtual Terminal 5
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<MUTE>,clearmods=all), Redirect(key=<I181>,clearmods=all), // <MUTE>/<I181>(‡‡)
SwitchScreen(screen=5,!same) , NoAction() ] };
key <FK06> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F06
XF86AudioLowerVolume , XF86MonBrightnessDown , // Audio Vol- / Brightness-
XF86_Switch_VT_6 , NoSymbol ], // Virtual Terminal 6
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<VOL->,clearmods=all), Redirect(key=<I232>,clearmods=all), // <VOL->/<I232>(‡‡)
SwitchScreen(screen=6,!same) , NoAction() ] };
key <FK07> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F07
XF86AudioRaiseVolume , XF86MonBrightnessUp , // Audio Vol+ / Brightness+
XF86_Switch_VT_7 , NoSymbol ], // Virtual Terminal 7
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<VOL+>,clearmods=all), Redirect(key=<I233>,clearmods=all), // <VOL+>/<I233>(‡‡)
SwitchScreen(screen=7,!same) , NoAction() ] };
key <FK08> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F08
XF86AudioMedia , XF86Sleep , // MediaPlayer / Sleep
XF86_Switch_VT_8 , NoSymbol ], // Virtual Terminal 8
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I234>,clearmods=all), Redirect(key=<I150>,clearmods=all), // <I234>/<I150>(‡‡)
SwitchScreen(screen=8,!same) , NoAction() ] };
key <FK09> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F09
XF86HomePage , XF86WWW , // HomePage / Web
XF86_Switch_VT_9 , NoSymbol ], // Virtual Terminal 9
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I180>,clearmods=all), Redirect(key=<I158>,clearmods=all), // <I180>/<I158>(‡‡)
SwitchScreen(screen=9,!same) , NoAction() ] };
key <FK10> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F10
XF86Search , XF86Mail , // Search / Mail
XF86_Switch_VT_10 , NoSymbol ], // Virtual Terminal 10
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I225>,clearmods=all), Redirect(key=<I223>,clearmods=all), // <I225>/<I223>(‡‡)
SwitchScreen(screen=10,!same), NoAction() ] };
key <FK11> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F11
XF86Explorer , XF86Launch1 , // Explorer / App1
XF86_Switch_VT_11 , XF86LogGrabInfo ], // Virtual Terminal 11 / Debug
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(), // (in inet, XF86Launch3 is <I210>)
Redirect(key=<I152>,clearmods=all), Redirect(key=<I156>,clearmods=all), // <I152>/<I156>(‡‡)
SwitchScreen(screen=11,!same), NoAction() ] };
key <FK11> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol , // F11
XF86Calculator , XF86Launch2 , // Calculator / App2
XF86_Switch_VT_12 , XF86LogWindowTree ], // Virtual Terminal 12 / Debug
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(), // (in inet, XF86Launch4 is <I211>)
Redirect(key=<I148>,clearmods=all), Redirect(key=<I157>,clearmods=all), // <I148>/<I157>(‡‡)
SwitchScreen(screen=12,!same), NoAction() ] };
};
partial alphanumeric_keys modifier_keys
xkb_symbols "lv5" {
// name[Group1]= "Extend layer";
// key.type[group1]="EIGHT_LEVEL"; // (Caps)Lock state not used on these keys
key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC"; // Lock affects lv1/5 but not lv3/7 - a bit inflexible but OK I guess
// NOTE: Earlier, if I set lv5-6 of Esc to Caps_Lock, lv1-4 would be CapsLock PLUS Esc! Is this fixed now?
@ -77,72 +156,6 @@ xkb_symbols "lv5" {
LockMods(mods=Lock) , LockMods(mods=Lock) , // Lock mod for <CAPS>
LockMods(mods=Lock) , LockMods(mods=Lock) ] // Lock mod for <CAPS>
}; // ; Esc (one could also use <SCLK> aka ScrollLock for Caps, if desired)
// NOTE: Many are used to Ctrl+Alt+<FK##> being XF86_Switch_VT_## keys! This is lost with Extend. Use Ext+AltGr+<FK##> now.
key <FK01> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
XF86AudioPlay , XF86AudioPause , // Play/Pause
XF86_Switch_VT_1 , XF86_Switch_VT_1 ], // Virtual Terminal
// key <FK01> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioPlay , XF86AudioPause ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I208>,clearmods=all), Redirect(key=<I209>,clearmods=all), // <I208>/<I209>(‡‡)
SwitchScreen(screen=1,!same) , SwitchScreen(screen=1,!same) ]
}; // F01
key <FK02> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioPrev , XF86AudioRewind ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I173>,clearmods=all), Redirect(key=<I176>,clearmods=all), // <I173>/<I176>(‡‡)
NoAction() , NoAction() ]
}; // F02
key <FK03> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioNext , XF86AudioForward ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I171>,clearmods=all), Redirect(key=<I216>,clearmods=all), // <I171>/<I216>(‡‡)
NoAction() , NoAction() ]
}; // F03
key <FK04> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioStop , XF86Eject ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I174>,clearmods=all), Redirect(key=<I169>,clearmods=all), // <I174>/<I169>(‡‡)
NoAction() , NoAction() ]
}; // F04
key <FK05> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioMute , XF86Reload ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<MUTE>,clearmods=all), Redirect(key=<I181>,clearmods=all), // <MUTE>/<I181>(‡‡)
NoAction() , NoAction() ]
}; // F05
key <FK06> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioLowerVolume , XF86MonBrightnessDown ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<VOL->,clearmods=all), Redirect(key=<I232>,clearmods=all), // <VOL->/<I232>(‡‡)
NoAction() , NoAction() ]
}; // F06
key <FK07> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioRaiseVolume , XF86MonBrightnessUp ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<VOL+>,clearmods=all), Redirect(key=<I233>,clearmods=all), // <VOL+>/<I233>(‡‡)
NoAction() , NoAction() ]
}; // F07
key <FK08> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86AudioMedia , XF86Sleep ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I234>,clearmods=all), Redirect(key=<I150>,clearmods=all), // <I234>/<I150>(‡‡)
NoAction() , NoAction() ]
}; // F08
key <FK09> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86HomePage , XF86WWW ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I180>,clearmods=all), Redirect(key=<I158>,clearmods=all), // <I180>/<I158>(‡‡)
NoAction() , NoAction() ]
}; // F09
key <FK10> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86Search , XF86Mail ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I225>,clearmods=all), Redirect(key=<I223>,clearmods=all), // <I225>/<I223>(‡‡)
NoAction() , NoAction() ]
}; // F10
key <FK11> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86Explorer , XF86Launch1 ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I152>,clearmods=all), Redirect(key=<I156>,clearmods=all), // <I152>/<I156>(‡‡)
NoAction() , NoAction() ] // (in inet(evdev), XF86Launch3 is <I210>)
}; // F11
key <FK12> { symbols[Group1]=[ NoSymbol,NoSymbol,NoSymbol,NoSymbol, XF86Calculator , XF86Launch2 ],
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I148>,clearmods=all), Redirect(key=<I157>,clearmods=all), // <I148>/<I157>(‡‡)
NoAction() , NoAction() ] // (in inet(evdev), XF86Launch4 is <I211>)
}; // F12
key <TLDE> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Pointer_EnableKeys , Pointer_EnableKeys , // Ptr_On
Pointer_EnableKeys , Pointer_EnableKeys ] // (Enable MouseKeys)
@ -227,75 +240,75 @@ xkb_symbols "lv5" {
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<ESC>) , Redirect(key=<ESC>) , // <ESC>
Redirect(key=<HOME>) , Redirect(key=<HOME>) ] // <HOME>
}; // Cmk Q
}; // Q
key <AD02> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
XF86ScrollUp , XF86ScrollUp , // ScrollUp(††)
Up , KP_Up ], // ↑
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
PtrBtn(button=4) , PtrBtn(button=4) , // PtrWhBtUp/Ri
NoAction() , NoAction() ] // (ScrollRight/Left & button 6/7 may cause crashes now?!)
}; // Cmk W
}; // W
key <AD03> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
XF86Back , XF86Back , // BrBck
End , KP_End ], // End
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I166>) , Redirect(key=<I166>) , // <I166>(‡‡)
NoAction() , NoAction() ]
}; // Cmk F
}; // QWE E, Cmk F
key <AD04> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
XF86Forward , XF86Forward , // BrFwd
Delete , KP_Delete ], // Del
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<I167>) , Redirect(key=<I167>) , // <I167>(‡‡)
NoAction() , NoAction() ]
}; // Cmk P
}; // QWE R, Cmk P
key <AD05> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Pointer_Up , Pointer_Up , // PtrUp(††)
Escape , Escape ], // Esc
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
MovePtr(x=+0,y=-8) , MovePtr(x=+0,y=-8) , // PtrUp(††)
Redirect(key=<ESC>) , Redirect(key=<ESC>) ] // <ESC>
}; // Cmk G
}; // QWE T, Cmk G
key <AD06> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Page_Up , Page_Up , // PgUp
Page_Up , KP_Prior ], // PgUp
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<PGUP>) , Redirect(key=<PGUP>) , // <PGUP>
Redirect(key=<PGUP>) , NoAction() ]
}; // Cmk J
}; // QWE Y, Cmk J
key <AD07> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Home , Home , // Home
KP_4 , U21D0 ], // KP_4 ← ⇐
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<HOME>) , Redirect(key=<HOME>) , // <HOME>
NoAction() , NoAction() ]
}; // Cmk L
}; // QWE U, Cmk L
key <AD08> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Up , Up , // ↑
KP_5 , U21D4 ], // KP_5 ↔ ⇔
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<UP>) , Redirect(key=<UP>) , // <UP>
NoAction() , NoAction() ]
}; // Cmk U
}; // QWE I, Cmk U
key <AD09> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
End , End , // End
KP_6 , U21D2 ], // KP_6 → ⇒
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<END>) , Redirect(key=<END>) , // <END>
NoAction() , NoAction() ]
}; // Cmk Y
}; // QWE O, Cmk Y
key <AD10> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Delete , Delete , // Del
KP_Add , KP_Add ], // KP_+
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<DELE>) , Redirect(key=<DELE>) , // <DELE>
NoAction() , NoAction() ]
}; // ; :
}; // QWE P, Cmk ; :
key <AD11> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Escape , Escape , // Esc
parenleft , braceleft ], // (
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<ESC>) , Redirect(key=<ESC>) , // <ESC>
Redirect(key=<ESC>,clearmods=LevelFive) , Redirect(key=<ESC>,clearmods=LevelFive) , // <ESC>
NoAction() , NoAction() ]
}; // [ {
key <AD12> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
@ -319,35 +332,35 @@ xkb_symbols "lv5" {
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
SetMods(mods=Alt) , SetMods(mods=Alt) , // Alt mod for <LALT>
NoAction() , NoAction() ]
}; // Cmk A
}; // QWE A, Cmk A
key <AC02> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
XF86ScrollDown , XF86ScrollDown , // ScrollDown(††)
Down , KP_Down ], // ↓
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
PtrBtn(button=5) , PtrBtn(button=5) , // PtrWhBtDn/Le
NoAction() , NoAction() ] // (ScrollRight/Left & button 6/7 may cause crashes now?!)
}; // Cmk R
}; // QWE S, Cmk R
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
}; // QWE D, Cmk S
key <AC04> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Control_L , Control_L , // Ctrl
BackSpace , BackSpace ], // Back
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
SetMods(mods=Control) , SetMods(mods=Shift+Control) , // Control mod for <LCTL>
NoAction() , NoAction() ]
}; // Cmk T
}; // QWE F, Cmk T
key <AC05> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Pointer_Down , Pointer_Down , // PtrDn(††)
Num_Lock , Num_Lock ], // NumLock
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
MovePtr(x=+0,y=+8) , MovePtr(x=+0,y=+8) , // PtrDn(††)
NoAction() , NoAction() ]
}; // Cmk D
}; // QWE G, Cmk D
key <AC06> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Page_Down , Page_Down , // PgDn
Page_Down , KP_Next ], // PgDn
@ -361,28 +374,28 @@ xkb_symbols "lv5" {
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<LEFT>) , Redirect(key=<LEFT>) , // <LEFT>
NoAction() , NoAction() ]
}; // Cmk N
}; // QWE J, Cmk N
key <AC08> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Down , Down , // ↓
KP_2 , U21D3 ], // KP_2 ↓ ⇓
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<DOWN>) , Redirect(key=<DOWN>) , // <DOWN>
NoAction() , NoAction() ]
}; // Cmk E
}; // QWE K, Cmk E
key <AC09> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Right , Right , // →
KP_3 , U21D8 ], // KP_3 ↘ ⇘
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<RGHT>) , Redirect(key=<RGHT>) , // <RGHT>
NoAction() , NoAction() ]
}; // Cmk I
}; // QWE L, Cmk I
key <AC10> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
BackSpace , BackSpace , // Back
KP_Enter , KP_Enter ], // KP_Enter
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<BKSP>) , Redirect(key=<BKSP>) , // <BKSP>
NoAction() , NoAction() ]
}; // Cmk O
}; // QWE ;, Cmk O
key <AC11> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Menu , Menu , // Menu
apostrophe , quotedbl ], // ' "
@ -428,7 +441,6 @@ xkb_symbols "lv5" {
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
Redirect(key=<AB04>,mods=Control,clearmods=LevelFive), Redirect(key=<AB04>,mods=Shift+Control,clearmods=LevelFive), // Ctrl+V
Redirect(key=<AB04>,mods=Control,clearmods=LevelFive), Redirect(key=<AB04>,mods=Shift+Control,clearmods=LevelFive)] // Ctrl+V
// Redirect(key=<PAST>) , Redirect(key=<PAST>) , // <PAST>(‡‡)
// Redirect(key=<PAST>) , Redirect(key=<PAST>) ] // <PAST>(‡‡) (not working since Ub14.04?)
}; // V
key <AB05> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
@ -444,7 +456,7 @@ xkb_symbols "lv5" {
actions[Group1]=[NoAction(),NoAction(),NoAction(),NoAction(),
PtrBtn(button=2) , PtrBtn(button=2) , // PtrMBt
NoAction() , NoAction() ]
}; // Cmk K
}; // QWE N, Cmk K
key <AB07> { symbols[Group1]=[ NoSymbol , NoSymbol , NoSymbol , NoSymbol ,
Pointer_Button3 , Pointer_Button3 , // RBt(††)
KP_0 , U21D5 ], // KP_0 ↕ ⇕
@ -489,11 +501,10 @@ xkb_symbols "lv5" {
// ‡‡: Multimedia keys are in symbols/inet(evdev); this should be enabled (base rules usually handle it)
// NOTE: RedirectKey alone doesn't work for the #->FK keys; they then act as the remapped FK## (Multimedia)
// NOTE: I'm not mapping the CAPS key to lv5_switch here, as that should be done separately
// NOTE: I'm not mapping the CAPS key to lv5_switch here, as that should be done separately.
// Leave it to the layout/options to decide which key(s) to use as switches.
// key <CAPS> { [ ISO_Level5_Shift , BackSpace , Caps_Lock , Caps_Lock , NoSymbol ] };
// modifier_map Mod3 { ISO_Level5_Shift };
// NOTE: Leave for the layout/options to decide which key(s) to use as switches!
// include "level3(ralt_switch)"
// include "level5(caps_switch)"
};
@ -524,7 +535,8 @@ xkb_symbols "lv5" {
// ==========================================================================================================
//// An attempt at using the Overlay functionality for modifier Extend mappings.
//// NOTE: Not working. One problem: The Caps key cannot both be a lvl5_switch and overlay_switch!?
//partial // alphanumeric_keys
// ==========================================================================================================
//partial alphanumeric_keys
//xkb_symbols "overlay_mods" {
//// name[Group1]= "Extend layer";
//