ReNeo – The Neo keyboard layout family on Windows

ReNeo implements the Neo keyboard layout and its relatives on Windows. There are two main modes of operation: 1. standalone mode: ReNeo replaces all key events of the native layout (likely QWERTZ or QWERTY) with the desired Neo layout. You only need to run the ReNeo executable on system startup. 2. extension mode: First, install a native Neo driver like kbdneo. ReNeo then supplements all functions that can’t be implemented in the native driver (capslock, navigation keys on layer 4, compose, …).

ReNeo on-screen keyboard layer 1

Installation

  1. optional: Install kbdneo normally
  2. Download newest release and unpack in a directory with write permissions, e.g. C:\Users\[USER]\ReNeo
  3. Start reneo.exe oder add it to the autostart list. Use the tray icon to deactivate or quit the program.
  4. optional: Tweak config.json (generated on first start)

Update

Download new release and overwrite existing files with package contents. Because config.json isn’t contained in the release package user settings are preserved.

Uninstallation

  1. optional: Uninstall kbdneo according to Neo wiki tutorial
  2. Delete ReNeo directory and remove executable from autostart

Features

General:

As an extension to the native driver:

Configuration

ReNeo can be configured with two files.

General Configuration

config.json contains the following options:

"blacklist": [
    {
        "windowTitle": "emacs"
    },
    {
        "windowTitle": "Virtual Machine Manager"
    }
]

Modifying layouts

Layouts can be added and modified in layouts.json. Every entry containst the following parameters:

The following procedure is recommended to create a new layout:

  1. Copy an existing layout and change the name
  2. Re-order the letter key lines such that they correspond to the order on the keyboard read from the upper left to the lower right.
  3. Use block selection to select the scancodes of an existing layouts and copy them over the (now unordered) scancodes of the new layout.
  4. Use block selection to copy layers 3 and 4 of an existing layout to overwrite layers 3 and 4 of the new layout.
  5. Change modifiers und capslockableKeys as necessary.

This results in layers 3 and 4 remaining as they were while the other layers permute according to the new letter layout.

The following regex can help with aligning the columns: "[\dA-Fa-f]+\+?": *\[(\{.*?\}, *){5}\{

Virtual machines and remote desktop

As soon as several nested operatings systems interoperate things get difficult. Because different VM software and remote desktop clients behave differently there is no universal solution. What follows is some general advice and a few tested configurations.

For optimal compatibility, the innermost system should generally implement the alternative layout and all outer systems should be set to QWERTZ/QWERTY. In the case of virtual machines this means QWERTZ on the host and a Neo driver on the guest system. For remote desktop machines a local QWERTZ setup and a Neo driver on the remote system are recommended.

If it turns out that programs work better without ReNeo, the offending programs can be added to the blacklist for ReNeo to automatically deactivate, see configuration.

WSL using VcXsrv as X server

Set Windows to QWERTZ (without ReNeo), then set the Neo layout in X11 using setxkbmap.

VirtualBox

Set host to QWERTZ, then install Neo driver (e.g. ReNeo) in guest system.

Remote Desktop Manager

Use ReNeo in standalone mode on the local system. Letters and (non-unicode) special characters are transmitted correctely to the remote system.

For developers

Compilation

ReNeo is written in D and uses dub for project configuration and compilation. There are three build settings:

  1. Debug with dub build: In addition to debugging symbols, the generated executable opens instantiates a console to output debugging imformation.
  2. Debug and log with dub build --build=debug-log: Similar to debug but console output is additionally written to reneo_log.txt. Caution: this log file may contain sensitive information!
  3. Release with dub build --build=release: Optimizations are active and no console is instantiated.

The resource file res/reneo.res is built using rc.exe from the Windows SDK (x86 version, otherwise the generated res file won’t work). The command ist rc.exe reneo.rc.

Cairo DLL originates from https://github.com/preshing/cairo-windows. The D header files were generated from the C headers using DStep and manually tweaked.

Release

A tag of the form v* triggers a GitHub action to generate a release draft. Based on the different config.[layout].json files, several pre-configured ZIP archives are created.

Librarys

Uses Cairo licensed under the GNU Lesser General Public License (LGPL) version 2.1.