- "Input" is faster and more reliable according to AHK's documentation.
- However, it caused some unspecified "lost characters" issues 12 years ago
(see commit bea2956dea), so beware
Main changes are
- Selections made in the edit control are no longer cleared on updates
- Track only changes to be made in the edit control's text instead of
manipulating the entire logText with every logWrite, logProgressUpdate
- There were two places were UNSH%..% variables had been changed,
depending on where characters are placed in the layout
- This resulted in a bug where the wrong (un)-shifted variants of a
character was sent out, for example when entering the compose sequence
<compose><Mod5+space><Mod5+space> the "_" character was sent out instead
of the correct compose character "-"
Note: This fix removes code which I do not understand why it was ever
needed (commit messages are missing/not helpful) so this may break stuff.
- Make hotkeys uninterruptible:
This might prevent side-effects that may be caused by interrupting
a hotkey with another one, causing global variables (such as modifier
states) to be corrupted and output to be sent in the wrong order.
- Put on-screen board update in separate (interruptible) thread:
A timer-spawned thread ensures the board gets updated but does not block
hotkey events, and that update requests are canceled as soon as a new
update request is made.
Major changes:
- "Everything is a compose", incl. invididual keystrokes:
Keys and composes are now on equal footing, their processing unified.
- Key event processing through AllStar and subsequent procedures
rewritten for clarity.
- Parts of "Wie mit Neo"-Tool rewritten (while adjusting to new compose)
Compose:
- Compose-definitions cannot overwrite (or make unreachable) existing ones,
so the order of generating composes from files etc. matters
- Reordered Xcompose-files (now base.module is first)
- Compose-definitions in compose.generated.ahk updated
- custom.ahk gets two new initialization event functions so that user can
declare custom composes before/after others.
Key events:
- Multi-character compose-sequences no longer automatically release the last
key in the sequence (instead, it will be released once the key which
triggered the sequence's output is lifted)
- Keyboard-autorepeat no longer sends key-up (release) events
Other changes:
- The reliance on global variables has been reduced, resorting to local
variables and passing arguments to called functions instead.
- CharProc's receive the keyName of the invoking key as first argument
- Keyhooks must return True (to stop event bubbling) or False
- Keyboard autorepeat is now managed with just two global variables,
instead of one per individual key.
- Unused arguments (ActKey) removed from functions
The ability to overload the dynamic function variable was never used*,
not documented, and its benefits were not clear. On the contrary,
dynamic calls are error prone, perform worse, and reduce code readability.
Therefore, call EbeneActualisieren() statically.
Reverts 155b64cd2d
*) No use-case found in official repository, checked with
$ git rev-list --all | xargs git grep <???>
and for instance <???> = "EbeneAktualisieren :=", "EbeneAktualisieren:=", "EbeneAktualisieren =", "EbeneAktualisieren="
- move layout-definitions from individual variables to assoc. array
- make layout-filenames more consistent
- add more GUISYM symbols for non-printable characters (e.g. from compose)
- allow styles to adjust keycap font-size (scales with GUI size)
- code cleanup and comments added
Replace global variables lookups of the form val := dict%key% with
associative array lookup, improving on-screen-board performance
(especially the first time a new level is displayed) and no longer
spamming global namespace.
most important changes:
- Modules now initialize themselves when their "Initialize<modulename>"
function is called, instead of doing so in the auto-execute section
when being included.
- The entire startup process is now organized much more transparently
in initialize.ahk
- The "performance.ahk" module was renamed "global_switches.ahk"
and serves as unified place for defaulting all global script settings.
- custom.ahk: new InitializeCustom() and renamed LoadCustomCompose()
- drop ANSI-Autohotkey support, make AutoHotkey_L Unicode mandatory
(ANSI wasn't fully supported anyways, also compare 41738845d1)
- new tool compose-update.ahk replaces make-compose.bat
- removed makecompose.ahk, which was mostly redundant
(but subtly different in Unicode- vs. ANSI native encoding)
- new compose-parse.ahk and util.ahk replace most of makecompose.ahk and
compose-gen.ahk, and improves performance
- configurable compose-update.ahk and dynamic compose (on startup):
compose-files can be specified in ini-files (fully backwarts-compatible
with the "dynamischesCompose" Neo2.ini setting)
c11c590100 introduced collisions such as
<Multi_key> <u> <u> in Compose/src/en_US.UTF-8 which conflicts with the
unicode tool which is activated on <compose><u><u>.
Since the tools are documented features of neovars, they should have
precedence (at least by default).
"CompRevision" in the generated compose files now identifies the last
commit reachable from HEAD that affects the projects Compose/-directory.
Similarly, the "compose-tainted.generated.ahk" file is only created in
place of "compose.generated.ahk" if git diff reports changes that affect
tge Compose/-directory.
- Adds dist/ folder with templates Neo2.ini and custom.ahk
- New user-definable function LoadUserdefinedCompose() called on startup:
-- allows user to add neovars-specific compose commands
-- see examples in custom.ahk template for CM.., CD.., CRC.., and
CF.. usage (as introduced with commit 97f4584533)
Replace the batch-file based build process with more powerful AHK scripts.
The most important changes are summarized below.
New build tools:
- Add tools/ folder which replaces build/
- Add tools/build-make.ahk main build script
New build configuration:
- Add build-config.ini which can be edited to configure the build process.
For example, the option custom=1 includes the user's custom.ahk script,
and portable=1 compiles a portable version.
- Add tools/build-configure.ahk which processes build-config.ini and
autogenerates configuration scripts included in the compiled version.
- The user's custom.ahk file is no loger moved around under %Appdata%,
but instead included indirectly in compile-specific includes.
- Introduce global variable "isPortable"
- In portable version,
-- "File Install" does not overwrite already extracted resources
(useful if we lack write-permissions or run from slow external device)
-- "ApplicationFolder" and "ResourceFolder" point to script-local folder
%A_SkriptDir%/Neo2-portable
- Introduce two new Neo2.ini-keys "Mod2LockOff" and "Mod4LockOff",
in analogy to the existing "NumLockOff" option
- Both options disable modifier-locking internally, but may not fix issues
caused by failure to send correct sequences of shift events (#243 ?)
- Lower-case'd UseMod4Light -> useMod4Light
- Identify GUI windows by their hWNDs instead of naming the GUIs
-- allows the compiler to unload running instances of the script
by closing the respective window, even when e.g. the on-screen
keyboard board is active
-- allows to have multiple persistent windows of the "Wie mit Neo"
tool (so users can lookup sequences, compare them, etc.)
- Removed generic GUI event handlers from keyhooks module;
instead modules shall define and handle their own events
- seems to work properly?
- why would customLayout (i.e. with the QWERTZ layout string) work, but not qwertz-mode,
when both use the same custom-layout capabilities internally?
- Tab is now processed through neovars even if shift is pressed simulatenously.
- Einhandneo now reacts to shift+M3+tab also on the left tab (toggle caps-lock)
- Einhandneo sets up a caps-lock symbol for the on-screen keyboard
- (fix) On-screen board now displays the tab correctly on level 5
- removes all global variables LOSE... which were used to cache the original layout's characters and capitalization options (LOSE2%e1%, LOSE5%e1%, LOSE6%e1%, LOSEC%e1% for every layout characrer e1)
- Change1256Layout(..) no longer restores the cached LOSE... properties, but instead permutes all keys with their currently defined properties
This reduces the chance of "undoing" changes made to the keys in other modules.
- Setup for the unicode-tool program key P___Uni moved back to tools.ahk
(1) The font was changed to sytem default.
This fixes ugly output and missing changes in font-weight in cases were
only one of the DejaVu font-series was installed.
(2) The AlwaysOnTop option is added to the window.
This allows typing in the proposed compose sequences in an editor window
that would otherwise conceal the tool window.
Changes:
- Calculator new sequences: <compose>+"Uc" and <compose>+"uC" (echo)
- "Wie mit Neo?" new sequences: <compose>+"Uw" and <compose>+"uW"
Purpose:
- make the compose-sequences more fault tolerant
- user can defer his choice between calculator variants until right before the
command completes (and only after the commands become visible on the on-screen board)
Note: colliding user-defined or non-standard/generated compose sequences will overwrite the new definitions.
At the on-screen board,
- layouts can highlight keys that invoke tools
(helps to distinguish them from printed characters)
- the "Wie mit Neo?" tool key is displayed with symbol "UW"
Adds options for BST-layouts:
- configurable font-style/color and replacement text ('**' originally) for keys starting or appending to a compose sequence
- optionally show characters that can be appended to an active compose-sequence instead of the (fixed) replacement text
(which partially defeated the purpose of the on-screen keyboard)
Fixes:
- Always show characters on keys that have a CF.. compose definition associated with them
(originally, '**' was displayed even on letters)
- Keep labels on modifier keys while composing
Changes:
On-screen board now displays
- Soft hyphen (U+00AD, <Mod6+->) enclosed in small parentheses
- Non-breaking hyphen (U+2011, <Mod5+->) enclosed in top corners
- Narrow no-break space (U+202F, <Mod6+space>) enclosed in single
angle quotation marks instead of the larger "> <" characters
Reasoning:
- all three symbols add left/right enclosing characters to indicate that
the enclosed character is modified to it's *soft*, *non-breaking* or
*narrow* variant
- narrow no-break space symbol changes only minimally, fits better
with the hyphens
- new symbols for hyphens reduce the chance to mix up different variants
- soft hyphen symbol resembles ISO/IEC 9995-7:2009/Amd 1:2012
- non-breaking hyphen symbol resembles non-breaking space notation
and still partially resembles ISO/IEC 9995-7 (unicode lacks small
square brackets)
Notes:
- Narrow No-Break Space = U+202F = <Mod6+space>
- Non-Breaking Hyphen = U+2011 = <Mod5+->
- Soft Hyphen = U+00AD = <Mod6+->
- kombinierende Diakritika auf T1-T3 (beim wiederholtem Betätigen) werden immer mit gepunktetem Kreis und dem jeweiligen ausgegebenen kombinierenden Unicode-Zeichen dargestellt
- Compose-Key mit den verbundenen Viertelnoten beschriftet
- minimale visuelle Anpassungen aufgrund von Positionierungsproblemen des DejaVu-Fonts
- Removed GuyAddKeySM and global IM.. variables from BST
- Modifier keys recognized by key-pos (CP..) variable in BSTUpdate()
- Fixes presumably inadvertent mixups of GuyAddKeySM and GuyAddKeyM in some layouts
- Fixes potential issues with layouts that define modifiers differently due to persistent global IM.. := 1 variables