DreymaR / BigBagKbdTrixPKL

"DreymaR's Big Bag of Keyboard Tricks" for Windows with EPKL
Other
346 stars 33 forks source link

Help images not generating properly #77

Open rauletaveras opened 1 year ago

rauletaveras commented 1 year ago

Hello! First, I'd like to thank you for this program. Second, for some reason, whenever I create help images for my custom keyboard, they do not generate properly. This is what I mean:

There is likely something wrong with the way I have configured things, but I've read the documentation, compared with other layouts, and messed around, and I just can't get it to work. I'd appreciate your help, or anyone's who knows how to solve this.

Details about my setup: OS: Windows 11 build 22621.2428 Inkscape v. 1.3 downloaded fresh from the website

This is my layout file (with some commented sections ommitted for brevity:

;;  ================================================================================================================================
;;  Layout Definition file
;;  for EPiKaL Portable Keyboard Layout (EPKL) by Øystein "DreymaR" Bech-Aase (2015-), based on PKL by Máté Farkas (2008-2010).
;
;;  - The Layout.ini file may point to a base layout as well as Extend and DeadKey table files.
;;  - It can override BaseLayout and EPKL_Layouts mappings, add key remaps and other layout info.
;;  - To use a layout, try the Layout/Settings dialog from the EPKL tray menu (or Ctrl+Shift+6).
;;  - Another way is to edit the EPKL_Layouts .ini 'layout = ' line and/or Type/Mod/ID/etc entries.
;;  - Alternatively, run EPKL in compactMode with the layout's files in the main program folder.
;;  ================================================================================================================================
;
;;  Base Layout file info: for Beakl-27
;;  - This file defines a useable layout in the EPKL format.

[information]
layoutName      = Beakl-27 (KLM/ISO/ANSI unified Virtual Key codes)
layoutCode      = Beakl-27
localeID        = 00000525

copyright       = ...
company         = ...
homepage        = ...
version         = 0.1

[pkl]
;;  A layout may augment its base one. The Remap file contains ergo and other layout remaps.
KbdType         = ANS
;;baseLayout    = BEAKL-27\Layout.ini
;;  The Extend/dkList/string files hold Extend, dead key and literal/PowerString definitions.
;baseLayout      = Colemak\BaseLayout_Cmk-eD
remapsFile      = Files\_eD_Remap.ini
extendFile      = Files\_eD_Extend.ini
dkListFile      = Files\_eD_DeadKeys.ini
stringFile      = Files\_eD_PwrStrings.ini
cmposrFile      = Files\_eD_Compose.ini

;;  The "layout/soft" ScanCode map is for typing, the "extend/hard" one for Extend mappings.
;;  The "mechanical layout" VirtualKey map is mainly for ANS(I)/ISO/JIS conversion.
mapSC_layout    = ANS
;mapSC_extend    = Ext-CAW-_@K                  ; Only "hard" (non-letter) mods. Extend Curl-DH moves Ext+V with V.

;;  DreymaR's Cmk-IBM help images (5*14 keys @96dpi)
 img_sizeWH      = 812,282                      ; (541,188 @64dpi)
;;  DreymaR's compact help images (3*10 keys @48dpi)
;;img_sizeWH      = 292,85                      ; ISO-Angle 298. Ortho 276. Others 292.
;;  Scaling factor for help images, in %. (96->64)dpi = 66.66%; (96->48)dpi = 50%
 img_scale       = 100

  Background image (key caps etc) and a background color for the image panel
;; img_bgImage     = Files\ImgBackground\Bg_Nice-Tinted_@K.png
;; img_bgImage     = Files\ImgBackground\Bg_Simple-TopsOnly_@K.png
img_bgImage     = Files\ImgBackground\Bg_FingerShui-eD_@K.png
img_bgColor     = 999999
;;  On/Off, Extend, Dead key and Shift state marker (e.g., MagBlob, GrnBlob) images
icons_OnOff     = Files\ImgIcons\Q_
img_Extend1     = Files\ImgExtend\@K_Ext1.png
img_Extend2     = Files\ImgExtend\@K_Ext2.png
img_Extend3     = Files\ImgExtend\@K_Ext3.png
img_Extend4     = Files\ImgExtend\_Empty_Ext.png
img_DKeyDir     = .\Cmk-eD\Cmk-eD_@K\DeadkeyImg
img_ModsDir     = Files\ImgModStates\GrnBlob

[layout]
;;  - These mappings override any key mappings in the _Layouts_ files.
;;  - They may in turn be overridden by mappings in the current Layout.ini file.
;
shiftStates    =            0   :   1   :   2   :   6   :   7       ;   8   :   9   :   e   :   f
;; SC = VKEY        CStat   Base    Shift   Ctrl    AltGr   AGrSh   ;   SwiSh   SwShS   SwAGr   SwAGS

QW_GR = vc_GR       0       @07e    --      --      –-  --      ; SC029: US `~ - dk_Tilde (ANS/ISO OEM_3/OEM_5)
QW_1  = 3           0       ##      !       --      –-  ¡       ; SC002: US 1! - dk_DotBelow
QW_2  = 2           0       ##      @       --      --  ²       ; SC003: US 2@ - dk_HookAbove/PalatalHook
QW_3  = 1           0       ##      #       --      --  ³       ; SC004: US 3# - dk_Horn/Tail/RetroflexHook
QW_4  = 0           0       ##      $       --      --  £       ; SC005: US 4$ - dk_Currency
QW_5  = 4           0       ##      %       --      --  ‰       ; SC006: US 5% - dk_Greek(Mu)
QW_6  = 7           0       ##      ^       --      --  ∂       ; SC007: US 6^ - dk_Circumflex
QW_7  = 6           0       ##      &       --      --  ¬       ; SC008: US 7& - dk_Caron
QW_8  = 5           0       ##      *       --      --  ∞       ; SC009: US 8* - dk_Ogonek/CommaBelow
QW_9  = 9           0       ##      (       --      --  ·       ; SC00a: US 9( - dk_Breve
QW_0  = 8           0       ##      )       --      --  °       ; SC00b: US 0) - dk_RingAbove/Lig
QW_MN = vc_MN       0       -       _       --      --  ±       ; SC00c: US -_ - dk_Macron (ANS/ISO _MINUS/_PLUS)
QW_PL = vc_PL       0       =       +       --      --  ≠       ; SC00d: US =+ - dk_DblAcute/Sci (ANS/ISO _PLUS/_4)

QW_Q  = Q           1       q       Q       --      –-      „       ; SC010: QW qQ
QW_W  = H           1       h       H       --      –-      “       ; SC011: QW wW
QW_E  = O           1       o       O       --      –-      ”       ; SC012: QW eE
QW_R  = U           1       u       U       --      –-      ¶       ; SC013: QW rR
QW_T  = X           1       x       X       --      –-      Ŋ       ; SC014: QW tT
QW_Y  = G       1       g       G               –-          Ʃ       ; SC015: QW yY
QW_U  = C           1       c       C       --      –-      Ł       ; SC016: QW uU
QW_I  = M           1       m       M       --      –-      «       ; SC017: QW iI
QW_O  = R           1       r       R       --      –-      »       ; SC018: QW oO
QW_P  = Z           1       z       Z       --      –-  …       ; SC019: QW pP - dk_Umlaut (ANS/ISO _1/_3)
QW_LB = vc_MN       0   -       _       --      --  –-      Å       ; SC01a: US [{ - eD ## (ANS/ISO _4/_6)
QW_RB = vc_RB       0   @07e    --      --      --      –-      Æ       ; SC01b: US ]} - eD ## (ANS/ISO _6/_1)

QW_A  = Y           1       y       Y       --      –-      α       ; SC01e: QW aA
QW_S  = I           1       i       I       --      –-      ™       ; SC01f: QW sS
QW_D  = E           1       e       E       --      –-      §       ; SC020: QW dD
QW_F  = A           5       a       A       --      –-      Þ       ; SC021: QW fF
QW_G  = .           0       .       --      --      –-      Ð       ; SC022: QW gG
QW_H  = D           5       d       D       --      –-      Ħ       ; SC023: QW hH
QW_J  = S           1       s       S       --      –-      ↑       ; SC024: QW jJ
QW_K  = T           1       t       T       --      --      ←       ; SC025: QW kK
QW_L  = N           1       n       N       --      —-      →       ; SC026: QW lL
QW_SC = B           1       b       B       --      --      ª       ; SC027: QW ;:
QW_QU = vc_SC       0       :       ;   --      --  ′       ; SC028: US '" - dk_Acute/Superscript (ANS/ISO _7)
QW_BS = vc_BS       0       --      --      --      --  ¦       ; SC02b: US \|  - dk_Grave/Subscript (ANS/ISO _5/_2)

;QW_LG = vc_LG      5       œ       Œ       --      --      Ø       ; SC056: US <> - eD ## (ISO OEM_102)
QW_Z  = J           1       j       J       --      --      Ʒ       ; SC02c: QW zZ
QW_X  = vc_SL           0       /   ?   --      --      ‡       ; SC02d: QW xX
QW_C  = vc_CM           0       ,   !       --      --      ¢       ; SC02e: QW cC
QW_V  = K           1       k       K       --      --      γ       ; SC02f: QW vV
QW_B  = sc_QU           0       @0b4    "       --      --      β       ; SC030: QW bB
QW_N  = W           1       w       W       --      --      Ç       ; SC031: QW nN
QW_M  = F           1       f       F       --      --      ↓       ; SC032: QW mM
QW_CM = L           1       l       L       --      --  ≤       ; SC033: US ,< - dk_Cedilla (ANS/ISO OEM_COMMA)
QW_PD = P           1       p       P       --      --  ≥       ; SC034: US .> - dk_DotAbove (ANS/ISO OEM_PERIOD)
QW_SL = V           1       v       V       --      --  ¿       ; SC035: US /? - dk_Stroke/Bar (ANS/ISO _2/_MINUS)

QWSPC = SPACE       0       Spc     Spc     --      Spc             ; SC039: Space (NBSP may cause trouble?)

And this is my settings file:

;
;;  ================================================================================================================================
;;  Program Settings file
;;  for EPiKaL Portable Keyboard Layout (EPKL) by Øystein "DreymaR" Bech-Aase (2015-), based on PKL by Máté Farkas (2008-2010).
;;  For more info, see the README files and the Big Bag Of Keyboard Tricks: https://dreymar.colemak.org – select Windows.
;
;;  - For Layout choice and settings, use the EPKL_Layouts .ini file(s). For program settings, use EPKL_Settings.
;;  - For each of these, there is a Default file and optionally an Override file, the settings in which take precedence.
;;  - For Extend layer mappings (navigation/editing etc), use the _eD_Extend.ini file. Set the modifier key in your layout.
;;  - In the Files folder there are also DeadKeys, Compose and PwrStrings files that contain different types of mappings.
;;  ================================================================================================================================
;
;;  The EPKL Settings GUI:
;;  - You can set many of the settings below with a handy EPKL Settings window from the EPKL Layout/Settings menu.
;;  - Any changes you submit from that window will be written to your Override file, thus taking precedence.
;;  - If you wish, you can then edit the entries manually in the Override file. You may also Reset them with a button.
;;  - The Settings GUI can also change the active layout, special keys (Extend and Compose) and individual key mappings.
;
;;  EPKL Settings Default file info:
;;  - Any settings in an EPKL_Settings_Override.ini file will override the corresponding Default settings in this file.
;
;;  EPKL Settings syntax:
;;  - You can use yes/y/true/1 and no/n/false/0 as entry values for all Boolean (yes/no) choices.
;;  - To disable hotkeys or other settings in your Override file without touching the Default, you can set them to --.
;;    - Otherwise, simply comment their line(s) out with a semicolon in the Default file to disable them.
;

[pkl]
;;  ================================================================================================================================
;;  EPKL Interface settings:
;;  ================================================================================================================================
;

;;  Hotkeys. For syntax rules, see http://www.autohotkey.com/docs/Hotkeys.htm#Symbols
helpImageHotkey = ^+1                   ; Ctrl+Shift+1 = Toggle the help image on/off
changeLayHotkey = ^+2                   ; Ctrl+Shift+2 = Activate the next layout in the Layouts menu
suspendMeHotkey = ^+3,^+SC029           ; Ctrl+Shift+3 = Suspend/re-enable EPKL. (^+` because sometimes ^+3 didn't work)
exitMeNowHotkey = ^+4                   ; Ctrl+Shift+4 = Quit EPKL
refreshMeHotkey = ^+5                   ; Ctrl+Shift+5 = Rerun EPKL
settingUIHotkey = ^+6                   ; Ctrl+Shift+6 = Show/hide the Layout/Settings... User Interface
zoomImageHotkey = ^+7                   ; Ctrl+Shift+7 = Zoom help image in/out. See below for zoom settings.
opaqImageHotkey = ^+8                   ; Ctrl+Shift+8 = Toggle help image opacity. See below for its setting.
;moveImageHotkey = ^+9                  ; Ctrl+Shift+9 = Move help image as if mousing over its left part
procStatsHotkey = ^+0                   ; Ctrl+Shift+0 = Show the title, process (.exe) and class of the active window
;epklDebugHotkey = ^+SC00D              ; Ctrl+Shift+= = EPKL/AHK debug and code test utilities - use at your own risk ;-)

;;  Help image settings.
showHelpImage   = yes                   ; yes/no - Display the layout help image on startup
img_HideStates  = none                  ; --,0,1,6,7,ext,dk# - Hide these help image shift states. Shift+=1, AltGr+=6.
img_Positions   = TL,TM,TR,BL,BM,BR     ; TB+LMR - Allowed help image positions. Top/Bottom, Left/Middle/Right.
img_StartPos    = BM                    ; TB+LMR - Initial help image position. Top/Bottom, Left/Middle/Right.
;;  Help image transparency. 0 is invisible, 255 opaque. < 0 for transparent background color (WIP).
img_Opacity     = 192                   ; 0-255     - 0 is invisible, 255 opaque
;;  The help images have individual size/scaling set in Layout.ini. With the zoom hotkey you can change the global scale.
img_Zooms       = 50,100                ; %     - Start at the first zoom value, then cycle with the zoom hotkey
;;  Left, right, top and bottom margins for help images. A low margin of 40+ is above the menu bar.
;;  To show the help image on a second monitor, set margins < 0. I used (R,T) = (-1918,-118) for the upper right corner.
img_Mrg_LRTB    = 2, 2, 35, 42          ; px    - Left, Right, Top, Bottom image margins. Can be <0 for second monitor.
;;  Help image horizontal push zone, in percent. If you mouse over this the image jumps right/left.
img_HorZone     = 25                    ; %     - Left/right part of image where mouse-over pushes it horizontally

;;  Menu/dialog language: A file name in the Languages folder (without .ini). 
;;    - If it is 'auto', language definitions are loaded from the system's default locale
;;    - See http://www.autohotkey.com/docs/misc/Languages.htm
menuLanguage    = auto                  ; auto, or a Files\Languages file - Menu/dialog language

;;  Advanced Mode adds some items to menus and the About... dialog.
advancedMode    = yes                   ; yes/no - Show extra info/options

;;  The default double-click menu item. The entry must match (part of) a menu item text, or you can use #& for position #.
;;  NOTE: AdvancedMode affects the number of menu entries. Hotkey full names may change depending on the settings.
;trayMenuDefault = 5&                       ; pos&  - The nth menu item
trayMenuDefault = Suspend                   ; text  - Partial text matches are allowed

;;  ================================================================================================================================
;;  Other EPKL settings:
;;  ================================================================================================================================
;

;;  Modifiers that are "Sticky" or "One-Shot" can be tapped then shortly thereafter type the key to be modded.
stickyMods      = LShift,RShift         ;       - Sticky alias One-Shot mods (Note: RCtrl may interfere with AltGr)
stickyTime      = 600                   ; ms    - Sticky/One-Shot modifier tap time

;;  Tap-or-Modifier keys have a VK/ModName layout entry. To tap, release the key within the specified time if set > 0 ms.
tapModTime      = 250                   ; ms    - Tap-or-Mod/Dual-Role-Modifier tap time

;;  Extend modifiers let you select Multi-Extend layers: Ext+Mod1 -> Ext2; Ext+Mod2 -> Ext3; Ext+Mod1+Mod2 -> Ext4.
extendMods      = RAlt,RShift           ;       - Mod1,Mod2

;;  Which Compose keys are used as CoDeKeys? That is, Compose+DeadKey, as explained elsewhere.
CoDeKeys        = CDK  ;,Def            ; ###   - These Compose keys (without the ©) are also advanced CoDeKeys

;;  If your OS layout has dead keys, put them here. If, say, '^' is a dead key you must hit '^' then Space to type it.
;;  "--" or "none" will ignore this. If you write "auto", EPKL will look for the correct mode in the EPKL_Tables file.
systemDeadKeys  = auto              ; ¨´^`~ etc., --, auto (use tables)     - The dead keys of your OS layout   ; eD WIP: Trying to do this automagically.

;;  The "janitor" inactivity timer can clean up stuck modifiers. It also suspends EPKL by timer or active app, see below.
cleanupTimeOut  = 4                     ; s     - Idle time in sec. before janitor cleanup functions are performed
;;  If you often forget to exit EPKL at a shared computer, you can set suspend/exit timeouts in minutes.
;;  After this time without keypresses, EPKL will suspend itself and/or shut down.
suspendTimeOut  = 0                     ; min   - Idle time before EPKL is suspended by cleanup. 0 disables it.
exitAppTimeOut  = 0                     ; min   - Idle time before EPKL is shut down by cleanup. 0 disables it.

;;  The apps below will suspend EPKL while they're active. Use AHK window info as shown by the ProcStats hotkey.
;;  Window class is quite robust. Title will change with docs open etc., and .exe will match all apps with that name.
;;  Be aware that window titles may use the em dash (Colemak-eD AltGr+i) and it matters to title matching.
;;  Shorthand: Use 'C' for ahk_class and 'X' for ahk_exe matching. For title matching, use 'T' or just the window title.
suspendingApps  = --    ;X bash.exe     ; T/C/X win.    - Autosuspend EPKL. Case matters. E.g., C WordPadClass, X Notepad.exe
;;  Layouts with these Locale IDs will suspend EPKL while they're active. Useful, say, if your IME conflicts with your layout.
suspendingLIDs  = --    ;f0c1           ; --, 4-xdigit LocaleIDs; see the About... menu
;;  If startSuspended is active, EPKL will start up suspended. But it's probably better to just start EPKL when needed?
;startSuspended  = yes                  ; Start EPKL in the Suspended state

;;  Compact mode: The layout file is in the same folder as EPKL.exe
compactMode     = no                    ; Run EPKL in compact mode (layout in root folder)

;;  The epklDebugHotkey, if active, runs a debug/utility routine from a selection in `_PKL_main.ahk`. Which one is specified here.
whichUtility    = 5                     ; { 1:KeyHistory,2:ListHotkeys,3:ListVars,4:ListLines,5:WinInfo,6:eD-WIP } - first 4 are AHK debug routines

[hig]
;;  ================================================================================================================================
;;  EPKL Help Image Generator settings:
;;  The EPKL HIG generates help images from the active layout, using a SVG image file template and the Inkscape program (v1.1+).
;;  ================================================================================================================================
;

;;  Path to the Inkscape scalable vector graphics program, required for the Help Image Generator (HIG)
InkscapePath    = "C:\Program Files\Inkscape\bin\inkscape.exe"

;;  Efficiency lets you choose whether to make new images in a separate ImgGen folder or directly in the layout folder.
;;  Using Efficiency level 1 means that if an image already exists it won't be overwritten but if not it'll be created.
Efficiency      = 2             ; 0: Keeps new images in the ImgGen_ folder. 1: Moves images to the layout folder. 2: Overwrites existing images.

;;  Erase the SVG temp file directory after creating the images
delTmpSvgFiles  = 1             ; 0: Don't delete. 1: Move to Recycle Bin. 2: Delete completely.

;;  If the DK image state suffix is empty, old style (""/"sh") is used by EPKL. The HIG produces the new style anyway.
img_DKStateSuf  = _s
;;  Make images only for these shift states, if present in the layout. +1 = Shift, +2 = Ctrl, +6 = AltGr, +8 = SwiSh/SGCaps, +16 = FliCK.
imgStates       = 0:+1:+6:+7  ;:8:9:e:f

;;  Symbol to replace nonprintables such as control characters and ligatures
imgNonCharMark  = 0x25AF        ; U+25AF/25A1 White Rectangle/Square. U+FFFD Replacment Character (question mark in diamond).
;;  Symbols used in the DK layer for keys releasing DK entry 0/1 or combining accents. Remove one to turn it off.
dkBaseCharMark  = 0x26AB        ; U+2B24/26AB/25CF Black Large/Medium/-- Circle. Large may be too big for the key.
dkCombCharMark  = 0x25CC        ; U+25CC Dotted Circle. For combining accents.
k_TapOrModMark  = 0x25CC        ; U+25CC Dotted Circle. For Tap-or-Modifier keys. U+25A0/2B1B Black --/Large Square.
k_RepeatItChar  = 0x1F504       ; For the Repeat key.
k_RepeatItMark  = 0x1F504       ; U+1F501/2/3/4 – Clockwise Right/left, w/ 1, down/up Open Circle Arrows.
k_ComposerChar  = 0x24b8        ; For the Compose key(s). U+2384 Composition Sym. U+24B8 Circled Lat. Cap. Letter C. U+2102 Double-Struck Cap. C.
k_ComposerMark  = 0x23fa        ; U+23FA Black Circle For Record. U+2B57 Heavy Circle with Circle Inside.

;;  Font sizes to use, depending on the number of characters in each label (1,2,3,...). The SVG file default is 32px; 14 px for small text.
fontDefault     = 32
fontSizes       = 32,25,17,14,13    ;32,24,18,14,12         ; Font sizes for the help images. Longer entries will be shown as ellipses.

;;      ; eD WIP: Mark certain keys in bold text and colors, like the Tarmak help images. Uncomment to use on new images.
;markKeyColors  = #c00:_E/_N/_K,                #009:_J     ; Tarmak1 colors
;markKeyColors  = #c00:_E/_N/_K, #990:_B/_T/_F, #009:_J     ; Tarmak2 colors

;;  The SVG template file used to generate images from, and image dimensions in the template
svgImgTemplate  = Files\HelpImgGenerator\CmkKbdFig_KLM_Template.svg
imgPosISO       = 100,100       ; (x,y) for the upper left corner
imgPosANS       = 100,700       ; --"--
imgSizeWH       = 812,282       ; 812,226 w/o space bar         ; eD WIP: Ortho boards! Make them on the same template, to the right?
imgResDPI       = 96            ; Image resolution in DPI (default 96)

;;  The max number of files Inkscape should handle in one call. Mine couldn't make more than ≈80 files per batch.
batchSize       = 72            ; Inkscape file batch size (may depend on available RAM etc?)

;;  Refresh DK(s) only: Instead of a full set of images, render only the specified comma-separated dead keys.
;dkOnlyMakeThis  = Compose_0 ;,Compose_1,Ext_Special,Ext_Cmd,
;;  Heb-Niqqud-Y|O, RingAbov-Lig, Stroke-Bar, Acute-Sup, Ogonek-CmBel, DblAcute-Sci, Currency, DotBelow, Breve, Macron ...

;;  Debug mode. I only use this to check how the UI works. DebugKey is which idKey to show, if any.
;DebugMode       = 3            ; 0: Normal operation. 1: Show key info. 2: Don't call InkScape. 3: Don't make files either.
DebugKeyID      = 0_Q           ; [DKname_] . ShiftState . CO
DreymaR commented 1 year ago

What an odd layout. You have mappings on AltGr+Shift, but not on plain AltGr?

You should probably check out the HIG setting for which states to generate images for. Also, have you tried defining the base states explicitly (instead of VK ## mappings) for the purpose of image creation?

It seems to me that you've done something that I didn't think about, somehow. Not entirely sure what that is, yet.

Oh, hang on: In your settings file you have this oddity:

imgStates       = 0:+1:+6:+7  ;:8:9:e:f

Whatever is that thing? If you want to generate states 0,1,6 and 7 use the normal 0:1:6:7 syntax. No plus signs to ruin everything, please! If you do indeed have nothing defined on state 6 then omit that.

Oh, I get it. You misread the help text above the setting. That explains how a state is calculated, as a sum of modifier bit logic. You don't specify each state with plus signs, and every example I've shown should demonstrate that clearly I hope?

rauletaveras commented 1 year ago

As for the imgStates line, I did indeed misinterpret it, but I only put the plus signs after the defaults (without the plus signs) gave me the same result.

As for the layout, hahaha, yes. Every layer past shift is just a copy and paste of the default Colemak layout, as I haven't gotten around to finishing the others. It's a staggered-keyboard version of BEAKL-27, an evolution of the slightly more well-known BEAKL-15 layout.