diff --git a/README.md b/README.md index d7e2a60..fdf1fee 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ localectl --------- * You can use the `localectl set-x11-keymap` command to make changes persistent; you may have to run it with `sudo` privileges * Syntax: `[sudo] localectl [--no-convert] set-x11-keymap layout [model [variant [options]]]` -* Example: `sudo localectl set-x11-keymap us pc105aw-sl cmk_ed_us "lv5:caps_switch_lock,misc:extend"` +* Example: `sudo localectl set-x11-keymap us pc105awide cmk_ed_us "lv5:caps_switch_lock,misc:extend"` * For `layout` and `[variant]`, you can use for instance `"us,us"` and `"cmk_ed_us,"` to switch between Cmk-eD and the default us layout * Unfortunately, you can't switch between multiple models nor options this way – so your QWERTY may have the Angle (and Curl!) mods... * Add `--no-convert` to not convert between closest matching console and X11 keyboard mappings; this precludes applying as system console mapping @@ -89,15 +89,14 @@ input * { } ``` -And, here's one for Hyprland: +And here's one for Hyprland's `~/.config/hypr/hyprland` file: ``` input { kb_rules=evdev - kb_model=pc105aw-sl + kb_model=pc105awide kb_layout=us kb_variant=cmk_ed_us kb_options=misc:extend,lv5:caps_switch_lock,grp:shifts_toggle,compose:menu,misc:cmk_curl_dh - repeat_rate=40 repeat_delay=200 } diff --git a/setkb.sh b/setkb.sh index d2e7640..5f832f3 100644 --- a/setkb.sh +++ b/setkb.sh @@ -49,6 +49,7 @@ XRunDir=${XKBDIR} # (-d) The xkb-type dir to run setxkbmap from AddCmdYN='no' # (-a) Add setxkbmap cmd to file? AddDefault="${HOME}/.bashrc" AddCmdTo=${AddDefault} # (-f) File (such as '~/.bashrc') to add setxkbmap cmd to +PrntCmd='no' # (-p) Print the setxkbmap command instead of running it? ArgStr='' #'5caws us us' # (--) Shortcut string for setkb (model locale eD-variant) ## NOTE: '# (-a)' means that the value can be set by option argument '-a ' @@ -65,6 +66,7 @@ HelpStr="\e[1mUsage: bash ${MyNAME} [optional args] [ [ ]]\e[0m\n "[-k] Keep old XKB server(s) - '${KeepXKM}' [toggle, no arg.]\n"\ "[-a] Add cmd line to file? - '${AddCmdYN}' [toggle, no arg.]\n"\ "[-f] to add cmd to - '${AddCmdTo}'\n"\ +"[-p] Print cmd; don't run it - '${PrntCmd}'\n"\ "[--] - '${ArgStr}'\n"\ "\nSpecify '-d-' to run from the local repo directory w/o installing.\n"\ "\n\e[1mShortStr syntax, defining eD model+layout as a short split string:\e[0m\n"\ @@ -127,11 +129,11 @@ MyCD() OldDir=`pwd` NewDir=${1:-`pwd`} cd ${NewDir} \ - && MyPoint "Changed dir to '${NewDir}'" || MyError "Change to '${NewDir}' failed" + && MyPoint "Changing dir to '${NewDir}'" || MyError "Change to '${NewDir}' failed" } #~ if [ "$#" == 0 ]; then PrintHelpAndExit 2; fi # No args -while getopts "m:l:o:v:d:f:akh?" cmdarg; do +while getopts "m:l:o:v:d:f:pakh?" cmdarg; do case $cmdarg in m) XKBmodel="$OPTARG" ;; l) XKBlayout="$OPTARG" ;; @@ -139,6 +141,7 @@ while getopts "m:l:o:v:d:f:akh?" cmdarg; do v) Verbosity="$OPTARG" ;; d) XRunDir="$OPTARG" ;; f) AddCmdTo="$OPTARG" ;; + p) PrntCmd='yes' ;; a) AddCmdYN='yes' ;; k) KeepXKM='yes' ;; h) PrintHelpAndExit 0 ;; @@ -150,20 +153,20 @@ done shift $(( $OPTIND - 1 )) # Remove already processed args [[ "${XRunDir}" == '-' ]] && XRunDir="${XKBLOC}" # Use the default local dir -[[ "$@" == "" ]] || ArgStr=($@) # Split the ShortString, if present +[[ "$@" == "" ]] || ArgStr=($@) # Split the ShortString, if present if [ -n "${ArgStr}" ]; then # Use ShortString notation ModStr="${ArgStr[0]}" KbdStr="${ModStr:0:1}" ; ModStr="${ModStr:1}" # 1st chr = Kbd type: 4/5 for ANSI/ISO - [[ "${ModStr:0:1}" == 'c' ]] && DH-Mod='y' || DH-Mod='n' # 2nd chr may be 'c' for the Curl mod - [[ ${DH-Mod} == 'y' ]] && ModStr="${ModStr:1}" # (remove the found character) + [[ "${KbdStr}" =~ [45] ]] || MyError "Kbd model 'pc10${KbdStr}' unknown!" + [[ "${ModStr:0:1}" == 'c' ]] && DH_Mod='y' || DH_Mod='n' # 2nd chr may be 'c' for the Curl mod + [[ ${DH_Mod} == 'y' ]] && ModStr="${ModStr:1}" # (remove the found character) [[ "${ModStr: -1}" == 's' ]] && SymMod='y' || SymMod='n' # Last chr may be 's' for the Sym mod if [[ ${SymMod} == 'y' ]]; then ModStr="${ModStr:: -1}" - if [[ "${ModStr}" =~ 'w' ]]; then # Sort out Sym variants - case "#{KbdStr}" in + if [[ "${ModStr}" =~ [w] ]]; then # Sort out Sym variants + case "${KbdStr}" in 4) SymStr='wide-104' ;; # symkeys(sym_w-104) 5) SymStr='wide-105' ;; # symkeys(sym_w-105) - *) MyError "Kbd model 'pc10${KbdStr}' unknown!" ;; esac else SymStr='non-wide' # symkeys(sym_non-w) @@ -171,7 +174,7 @@ if [ -n "${ArgStr}" ]; then # Use ShortString notation SymStr="sym_${SymStr}" fi case "${ModStr}" in - n) ModStr='' ;; # Generic pc104(ANSI)/pc105(ISO) kbd + n|'') ModStr='' ;; # Generic pc104(ANSI)/pc105(ISO) kbd a) ModStr='angle' ;; # w/ Angle ergo mod w) ModStr='-wide' ;; # w/ Wide ergo mod aw) ModStr='awide' ;; # w/ AngleWide ergo mod @@ -179,7 +182,7 @@ if [ -n "${ArgStr}" ]; then # Use ShortString notation *) MyError "ShortStr model '${ArgStr[0]}' unknown!" ;; esac XKBmodel="pc10${KbdStr}${ModStr}" # Kbd type and Angle/Wide define xkb model - [[ ${DH-Mod} == 'y' ]] && XKBoption+=',misc:cmk_curl_dh' # Curl-DH is an XKB option + [[ ${DH_Mod} == 'y' ]] && XKBoption+=',misc:cmk_curl_dh' # Curl-DH is an XKB option [[ ${SymMod} == 'y' ]] && XKBoption+=",misc:${SymStr}" # Sym mod is an XKB option if [ -n "${ArgStr[2]}" ]; then # If there are three parts, ... @@ -194,7 +197,8 @@ if [ -n "${ArgStr}" ]; then # Use ShortString notation if [ -n "${ArgStr[1]}" ]; then # If there are two or more parts, ... XKBlayout="${ArgStr[1]}($XKBvar)" # ...use the lay(var) string. else # Otherwise, use existing layout. - XKBlayout=`setxkbmap -query | grep layout | awk '{print $2}'` + [[ XKBlayout=`setxkbmap -query | grep layout | awk '{print $2}'` ]] \ + || XKBlayout='us' # If not found, default to the US locale fi fi ## TODO: Also set the right Extend variant option for Curl, when it gets implemented. @@ -204,7 +208,9 @@ fi MyMsg "$HeadStr" #~ MyCD "${XKBpath%/}/${XRunDir%/}" if [ -n "${ArgStr}" ]; then - MyPoint "Using model/layout '$XKBmodel'/'$XKBlayout' from ShortStr" + MyPoint "ShortStr model/layout: ${XKBmodel} / ${XKBlayout}" + MyPoint "ShortStr lay. options: Curl(DH) - '${DH_Mod}'; Sym - '${SymMod}'." + MyEcho fi MyCD "${XRunDir%/}" # Change to the xkb dir first @@ -225,16 +231,21 @@ fi ## Clear the xkb options (to avoid duplicates) setxkbmap -option '' -## Run the actual setxkbmap command +## Run or print out the actual setxkbmap command +[[ ${PrntCmd} == 'yes' ]] && RunPrt='Printing' || RunPrt='Running' SetXKB="-model ${XKBmodel} -layout ${XKBlayout} -option ${XKBoption}" if [ ${XRunDir} == ${XKBDIR} ]; then - MyPoint "Running setxkbmap with the system XKB dir:\n" + MyPoint "${RunPrt} setxkbmap command with the system XKB dir:\n" OptXKB="-v ${Verbosity}" # Note: Verbosity doesn't work well with -print else - MyPoint "Running setxkbmap with a local XKB dir:\n" # . is the local dir + MyPoint "${RunPrt} setxkbmap command with a local XKB dir:\n" # . is the local dir OptXKB="-print | xkbcomp -I -I. -I${XKBDIR} $DISPLAY 2>/dev/null" # Wasn't there a hyphen before $DISPLAY? fi -setxkbmap $SetXKB $OptXKB +if [ ${PrntCmd} == 'yes' ]; then + MyEcho "setxkbmap ${SetXKB} ${OptXKB}" +else + setxkbmap ${SetXKB} ${OptXKB} +fi MyEcho "" ## Add the setxkbmap command to a file, if specified. Note the quotes necessary for FileXKB. diff --git a/xkb-data_xmod/README.md b/xkb-data_xmod/README.md index 1140d61..3b281e6 100644 --- a/xkb-data_xmod/README.md +++ b/xkb-data_xmod/README.md @@ -25,23 +25,32 @@ They work just fine with nearly all other versions and distros, though. Note that the `base` and `evdev` rules are compiled slightly differently, so I provide both. Their `.lst` and `.xml` counterparts are identical/aliases.
+FIXD: +----- +* The setkb.sh script wasn't working as it should. It got an error saying, e.g., "model pc104 doesn't exist". + - Shortstrs like `4ns` and `5cas` worked, as did `4aw` or `5w`. `4ws` didn't; gave "pc104/pc105 doesn't exist" errors. + - Identified these bugs: `DH-Mod` -> `DH_Mod` && "#{ModStr}" -> "${ModStr}". + - Furthermore, the layout was empty if setkb.sh can't run the setxkbmap cmd to determine layout. + - Added a conditional to see if the command was run successfully or default to 'us' + - Furthermore, the variant defaults to 'cmk_ed_us' instead of 'basic'? Because of a default setting, or what? It's OK though. + - Models `5s`, `5c` or `5cs` still not working, giving errors like `5s doesn't exist`. `5ns` worked. + - The error was not having a case model for the empty string ''. + - Giving a weird KbdStr could lead to weirdness. Now it gives an error message. +
+ +2FIX: +----- +* WSL1 uses xorg rules. I've only prepared for evdev and base. How to solve that? But xorg -> base by link! + - Is there another reason, then, that setxkbmap can't see my changes? The files are installed. + +* Local dir by setkb.sh isn't working? +
+ TODO: ----- -* Rework ergo model names. - - I'd like to use a model string `pc104`/`pc105` in setkb, which would simplify the case search in `SetXStr`. - - Then, the mods should have the same names, e.g., `pc104awide`/`pc105awide` instead of `pc104aw-zqu`/`pc105aw-sl`. - - Use `#angle`, `#wide`, `#awide` (and pc104awing). - - Is there currently no ISO-Wide option? No. That's because the Angle mod is "mandatory". But still, for consistency. - - Hide the AWing option from menus? It's pretty arcane and not really recommended. - - The `pc105curl` model is actually a CurlAngle model, and thus badly named. Fix. All the Curl models seem messy? - -* Sym mod implementation - - The Sym mod should not be implemented as hard/model; it must not rearrange Extend. - - Better to make a new symbols/symbolkeys file, and put all symbol key definitions in there. - - That'd be nice for any other (not too radical) alt-layouts as well, I should think? - - Then select sym mod according to wide status, as an option. - - Update setkb.sh to handle all that. +* The `pc105curl` model is actually a CurlAngle model, and thus badly named. Fix?! + - All the Curl models seem messy? What was I thinking? But maybe to avoid the option thing, they could still be useful? * Better instructions for Wayland? - Depends on your Wayland Compositor (Sway is common?) @@ -81,8 +90,6 @@ TODO: * Check out the compose:102 option. This would be similar to what I've used in EPKL for Windows! It's also present in some other layouts. - Add compose:102 in the default setkb options? Inconsistent between ISO and ANSI, just add a pro-tip? -* Echo the setxkbmap command when using setkb.sh, for ease of troubleshooting! Also make the script able to output the command for piping. - * Add a localectl option to setkb.sh? So people can choose that or setxkbmap. Eventually, even more variants such as Sway? * Problems with Super+ shortcuts: https://github.com/DreymaR/BigBagKbdTrixXKB/issues/23#issuecomment-1027839924 @@ -176,7 +183,20 @@ HOLD: DONE: ----- -* Update xkb-data to 2.35.1.1 as of 2023-05-31 (package updated 2022-04-05) +* Echo the setxkbmap command when using setkb.sh, for ease of troubleshooting! Also make the script able to output the command for piping? + +* Reworked ergo model names. + - Mods should have modularly related names, e.g., `pc104awide`/`pc105awide` instead of `pc104aw-zqu`/`pc105aw-sl`. + - Converted, therefore, to `#angle`, `#wide`, `#awide` (and the "arcane" `pc104awing`, now hidden from menus). + +* Sym mod implementation. + - The Sym mod can not be implemented as hard/model, as it must not rearrange Extend. Like Curl, it is an `option` mod. + - Made a symbols/symkeys file, and put all symbol key definitions in there. + - There are `non-wide`, `wide-104` and `wide-105` variants. The latter two build on the Colemak-Wide ergo mods. + - The `setkb.sh` script is updated to handle these with an `s` shortstr syntax, so it respects `caws` nomenclature. + - This should be nice for use with any other layouts that don't touch symbol keys as well! Even QWERTY. + +* Update xkb-data to 2.35.1.1 as of 2023-05-31 (package updated 2022-04-05). - The [freedesktop.org GitLab repo][XKBgitLb] is the freshest there is? But it has the rules in raw/uncompiled format. - So, instead use the [Debian Sid xkb-data package][XKB-DebS] which is the most updated one in actual use. - Add the patch that fixes the hobbled Colemak (LatAm, Colemak for Gaming) variant