# <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em"><path fill="currentColor" d="M3,12V6.75L9,5.43V11.91L3,12M20,3V11.75L10,11.9V5.21L20,3M3,13L9,13.09V19.9L3,18.75V13M20,13.25V22L10,20.09V13.1L20,13.25Z" /></svg> ReNeo

ReNeo implementiert das Neo-Tastaturlayout und seine Verwandten (Bone, NeoQwertz usw.) für Windows. Es eignet sich zum Ausprobieren, für die kurzfristige Nutzung an fremden Rechnern, aber auch zur dauerhaften Installation ohne Administratorrechte. ReNeo kann dabei in zwei Varianten genutzt werden:

  1. Im _Standalone-Modus_ ersetzt ReNeo alle Tastendrücke des nativen Layouts (in der Regel Qwertz) durch das gewünschte Neo-Layout. Dafür muss zum Systemstart nur die `reneo.exe` ausgeführt werden.
  1. Im _Erweiterungsmodus_ installiert man zusätzlich den nativen Neo-Treiber [kbdneo](kbdneo.md) bzw. dessen Varianten für Bone oder NeoQwertz. ReNeo ergänzt dann automatisch alle Funktionen, die nativ nicht umsetzbar sind: dazu gehören Capslock, Steuertasten auf Ebene 4, Compose, bessere Kompatibilität mit bestimmten Programmen, usw.

## Installation

  - ReNeo [herunterladen](../Download/index.md) (oder [hier](https://github.com/Rojetto/ReNeo/releases/latest)) und in ein Verzeichnis mit Schreibrechten entpacken (z.B. `C:\Users\[USER]\ReNeo`).
  - (optional) `config.json` nach eigenen Wünschen [anpassen](#konfiguration)
  - `reneo.exe` starten oder zum Autostart hinzufügen. Über das Trayicon kann das Programm deaktiviert und beendet werden.

kbdneo kann nachträglich installiert werden, ohne dass Einstellungen geändert werden müssen.

!!! attention "Für Notebook-Besitzer"
    Bei Notebooks, die im den Ziffernblock im Hauptfeld integriert haben (bei eingeschaltetem Numlock), sollte die Option `autoNumlock` ausgeschaltet werden. Diese ist standardmäßig eingeschaltet, was nach dem Start zu einem dauerhaft aktivierten Ziffernblock führt und somit einen Teil der Tastatur unbrauchbar macht.
    
    Setzt man diese Einstellung auf `false`, behält ReNeo den (meist ausgeschalteten) Numlock-Status beim Start bei. [Siehe dazu hier](#konfiguration) unter `autoNumlock`.

### Deinstallation

Es genügt, das ReNeo-Verzeichnis zu löschen und ggf. das Programm aus dem Autostart zu entfernen.


## Funktionen

### Allgemein

  - Unterstützt von Haus aus die folgenden Neo-basierten Layouts: Neo, Bone, NeoQwertz, AdNW, KOY, Mine, [3l](https://github.com/jackrosenthal/threelayout)
    - ein Wechsel zwischen diesen Layouts erfolgt über das Traymenü
    - weitere Layouts können in `layouts.json` (siehe [Layouts anpassen](#layouts-anpassen)) hinzugefügt und/oder angepasst werden
  - Alle Zeichen von toten Tasten und [Compose-Sequenzen](#compose) im Linux-kompatiblen Format. Diese sind auch durch den Nutzer erweiterbar. Beim Start werden alle `.module`-Dateien im Verzeichnis `compose/` geladen.
  - Capslock (beide Shift-Tasten) und Mod4-Lock (beide Mod4-Tasten)
  - ++Shift+Pause++ (de-)aktiviert ReNeo
  - Bildschirmtastatur: Wird über Traymenü ein- und ausgeschaltet, oder per Shortcut ++Mod3+F1++. Die Anzeige wechselt zwischen den Ebenen, wenn Modifier gedrückt werden.
  - Einhandmodus: Ist dieser Modus aktiv, wird bei gedrückt gehaltener Leertaste (einstellbar) die gesamte Tastatur „gespiegelt“. Umschalten ist über das Tray-Menü oder per Shortcut ++Mod3+F10++.

 Alle Shortcuts sind einstellbar, siehe [Konfiguration](#konfiguration) unter `hotkeys`.

### Als Erweiterung zum nativen Treiber

- Steuertasten auf Ebene 4
- Wird das native Layout als Neo-verwandt erkannt (kbdneo.dll, kbdbone.dll oder kbdgr2.dll), schaltet ReNeo automatisch in den Erweiterungsmodus. Das Umschalten zwischen nativen Layouts über die Windows-Einstellungen ist ganz normal möglich.
- Verbesserte Kompatibilität mit Qt- und GTK-Anwendungen. Workaround für [diesen Bug](https://git.neo-layout.org/neo/neo-layout/issues/510).
- Compose-Taste ++Mod3+Tab++ sendet keinen (zusätzlichen) Tab mehr an die Anwendung. Workaround für [diesen Bug](https://git.neo-layout.org/neo/neo-layout/issues/397).

### Bildschirmtastatur
Mit der Tastenkombination ++Mod3+F1++ erhält man eine graphische Zusammenfassung der Neo-Tastatur. Sie erleichtert das Finden eines noch nicht so vertrauten Zeichens und hilft zudem beim Erlernen des Blindschreibens, da der Blick auf den Bildschirm und nicht auf die Tastatur gerichtet ist. Werden während der Anzeige der Tastatur verschiedene Modifier (++Shift++, ++Mod3++, ++Mod4++) oder Kombinationen gedrückt, so springt die Abbildung automatisch in die entsprechende Ebene.

![image](images/reneo-bst.png)

Die Bildschirmtastatur ist halbtransparent und kann am linken oder rechten Rand angefasst und vergrößert oder verkleinert werden. Hält man sie an einer beliebigen Taste fest, lässt sie sich frei auf dem Bildschirm verschieben. Sie kann durch erneutes Drücken von ++Mod3+F1++ beendet werden.

### Unicode

Sämtliche Unicode-Zeichen lassen sich direkt durch Eingabe ihres [Codepoints](https://en.wikipedia.org/wiki/Unicode#Architecture_and_terminology) (in hexadezimaler Schreibweise) generieren. Dazu ist die Compose-Sequenz `♫uu`, gefolgt vom Codepoint und einem Leerzeichen (`␣`), einzugeben. Führende Nullen werden ignoriert.

!!! example "Beispiele"
    | Eingabe | Ergebnis |
    |:--|:--|
    |`   ♫uu41␣`| → A (U+0041)  |
    |`  ♫uu292␣`| → ʒ (U+0292)  |
    |` ♫uu2665␣`| → ♥ (U+2665)  |
    |`♫uu1f680␣`| → 🚀 (U+1F680) |

### Römische Zahlen

Ähnlich wie bei Unicode-Zeichen können auch römische Zahlen automatisch generiert werden. Dazu wird die Compose-Sequenz `♫rn` (kleine Buchstaben) bzw. `♫RN` (große Buchstaben) verwendet. Beispielsweise erzeugt `♫rn74␣` die Zeichenfolge ⅼⅹⅹⅰⅴ, und `♫RN74␣` entsprechend ⅬⅩⅩⅠⅤ.


## Konfiguration

ReNeo kann mit zwei Konfigurationsdateien angepasst werden.

Die Datei `config.json` hat folgende Optionen:

  - `standaloneMode`:
    - **true** (Standard): Das native Layout (z. B. Qwertz) wird von ReNeo mit dem ausgewählten Neo-Layout ersetzt.
      
        !!! tip "Hinweis"
            Ist das native Layout bereits Neo-verwandt (wie kbdneo), verändert ReNeo das Layout nicht und schaltet stattdessen automatisch in den Erweiterungsmodus.
    
    - **false**: Ist das native Layout Neo-verwandt, schaltet ReNeo in den Erweiterungsmodus. Bei allen anderen Layouts deaktiviert sich ReNeo automatisch.

  - `standaloneLayout`: Das Layout, das für den Standalone-Modus genutzt werden soll. Dies lässt sich auch über das Traymenü auswählen, unter allen Layouts, in die `layouts.json` definiert sind.
  - `language`: Sprache des Programms. Zur Auswahl stehen `german` und `english`.
  - `osk`: Die folgenden Optionen beeinflussen die Darstellung der Bildschirmtastatur
    - `numpad`: Soll das Numpad in der Bildschirmtastatur angezeigt werden?
    - `numberRow`: Soll die Zahlenreihe angezeigt werden?
    - `theme`: Farbschema für Bildschirmtastatur. Mögliche Werte: `Grey` und `NeoBlue`
    - `layout`: `iso` oder `ansi`
    - `modifierNames`: `standard` (Mod3, Mod4 usw.) oder `three` (Sym, Cur) für das Three-Layout
  - `hotkeys`: Hotkeys für verschiedene Funktionen. Beispiel: `Ctrl+Alt+F5` oder `Shift+Alt+Key_A`. Erlaubte Modifier sind Shift, Ctrl, Alt, Win. Die Haupttaste ist ein beliebiger VK aus [dieser Auflistung](https://github.com/Rojetto/ReNeo/blob/5bd304a7c42c768ed45813095ab5fbc69103773c/source/mapping.d#L17), die auf der [Win32-Doku](https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes) basiert. Ist ein Wert `null`, wird kein globaler Hotkey angelegt.
    - `toggleActivation`: ReNeo aktivieren / deaktivieren
    - `toggleOSK`: Bildschirmtastatur öffnen / schließen. Zusätzlich zu dem hier konfigurierten Hotkey funktioniert immer ++Mod3+F1++.
    - `toggleOneHandedMode`: Einhandmodus (de)aktivieren. Zusätzlich funktioniert immer ++Mod3+F10++.

  - `blacklist`: Eine Liste von Programmen, für die ReNeo automatisch deaktiviert werden soll (z. B. X-Server, Remote-Clients oder Spiele, bei denen es sonst Konflikte gibt). Momentan wird nach dem Fenstertitel entschieden, für den man einen regulären Ausdruck.

    !!! example "Beispiel"
        Für Fenster, die "emacs" oder "Virtual Machine Manager" im Titel enthalten, soll ReNeo sich deaktivieren. Die Config enthält dann diesen Abschnitt:
``` json
"blacklist": [
    {
        "windowTitle": "emacs"
    },
    {
        "windowTitle": "Virtual Machine Manager"
    }
]
```

  - `autoNumlock`: Soll Numlock automatisch eingeschaltet werden? Wenn die Tastatur einen echten Ziffernblock besitzt, sollte diese Option für [beste Kompatibilität](https://github.com/Rojetto/ReNeo/issues/32) immer auf `true` gesetzt sein. Bei Laptops mit nativer Numpad-Ebene im Hauptfeld kann dieses Verhalten aber mit `false` deaktiviert werden.
  - `filterNeoModifiers`:
    - **true** (Standard): Die Tastenevents für ++Mod3++ und ++Mod4++ werden im Erweiterungsmodus von ReNeo weggefiltert, Anwendungen bekommen von diesen Tasten also nichts mit. Workaround für [diesen Bug](https://git.neo-layout.org/neo/neo-layout/issues/510).
    - **false**: Anwendungen sehen Mod3/Mod4. Dies ist notwendig, wenn man in den Anwendungen mit diesen Tasten Optionen verknüpfen will.
  - `oneHandedMode`:
    - `mirrorKey`: Scancode der Taste zum Spiegeln. Standardmäßig ist die Leertaste (Scancode 44) eingestellt.
    - `mirrorMap`: Zuordnung der gespiegelten Tasten nach Scancode in der Form `"[Originaltaste]": "[Spiegeltaste]"`. Muss für ergonomische oder Matrixtastaturen ggf. angepasst werden.    

## Für Fortgeschrittene und Bastler

!!! important "Hinweis"
    Die nachfolgenden Abschnitte sind nicht notwendig zur Verwendung von ReNeo. Sie sind dann von Interesse, wenn man Layouts nach eigenen Wünschen detailliert anpassen oder komplett eigene Layouts erstellen möchte.

### Layouts anpassen

In `layouts.json` können Layouts angepasst und hinzugefügt werden. Jeder Eintrag besitzt folgende Parameter:

  - `name`: Name des Layouts, so wie er im Menü angezeigt wird.
  - `dllName` (optional): Name der zugehörigen nativen Treiber-DLL. Existiert diese nicht, kann der Parameter weggelassen werden.
  - `modifiers`: Scancodes der Modifier Shift, Mod3 und Mod4 (links und rechts). Mit `+` am Ende wird das Extended-Bit gesetzt, zum Beispiel `36+` für die rechte Shift-Taste. Mögliche Modifier sind `LShift`, `LCtrl`, `LAlt`, `LMod3`, `LMod4` (jeweils auch rechte Variante) sowie weitere Mod-Tasten `Mod5` bis `Mod9`.
  - `layers`: Modifier-Kombinationen für jede Ebene. Die Ebenen werden zur Laufzeit nacheinander in der gegebenen Reihenfolge getestet. Es wird die erste Ebene übernommen, deren Modifier die spezifizierten Werte haben.
  - `capslockableKeys`: Array von Scancodes, die von Capslock beeinflusst werden sollen. Typischerweise sind das alle Buchstaben, inklusive „äöüß“.
  - `map`: Das tatsächliche Layout in Form von Arrays mit sechs Elementen (für die sechs Ebenen) für jeden Scancode. Jeder Eintrag enthält dabei
    - `keysym`: X11-Keysym der Taste, entweder aus `keysymdef.h` oder in der Form `U1234` für Unicode-Zeichen. Wird für Compose benutzt.
    - **Entweder** `vk`: Windows Virtual Key aus dem Enum `VKEY` in `mapping.d`. Nur genutzt für Steuertasten.
    - **Oder** `char`: Unicode-Zeichen, das mit der Taste erzeugt werden soll.
  - `label` (optional): Beschriftung für die Bildschirmtastatur. Als Fallback wird der Wert von `char` genutzt.
  - `mods`: (Optional, nur für VK-Mappings) Modifier, die gedrückt (`true`) oder losgelassen (`false`) werden sollen. Beispiel: `"mods": {"LCtrl": true, "LAlt": true}`. Mögliche Modifier sind `LShift`, `RShift`, `LCtrl`, `RCtrl`, `LAlt`.

Zum Erstellen neuer Layouts hat sich folgender Arbeitsablauf bewährt:

  1. Bestehendes Layout kopieren und neuen Namen eintragen
  1. Die Zeilen der Buchstabentasten (also ab Scancode `0C`) neu ordnen, sodass diese auf der Tastatur von oben links nach unten rechts gelesen in der richtigen Reihenfolge sind.
  1. Mit Blockauswahl die Scancodes eines bestehenden Layouts kopieren, und die (jetzt falsch geordneten) Scancodes des neuen Layouts überschreiben.
  1. Mit Blockauswahl Ebenen 3 und 4 eines bestehenden Layouts kopieren, und Ebenen 3 und 4 des neuen Layouts überschreiben.
  1. `modifiers` und `capslockableKeys` ggf. anpassen

So bleiben Ebenen 3 und 4 an der richtigen Stelle, und die anderen Ebenen werden nach der neuen Buchstabenanordnung permutiert.

!!! tip "Hinweis"
    Folgender regulärer Ausdruck kann beim Ausrichten der Spalten helfen: `"[\dA-Fa-f]+\+?": *\[(\{.*?\}, *){5}\{`

### Compose

ReNeo lädt beim Start automatisch alle Compose-Sequenzen, die sich im Verzeichnis `compose/` neben der .exe-Datei befinden. Das Format entspricht dem unter Linux üblichen Format von [XCompose](https://wiki.ubuntuusers.de/Sonderzeichen/#Eigene-Tastenkombinationen). Neben den `.module`-Dateien gibt es auch `.remove`-Dateien. Deren Inhalt _löscht_ eine identische Definition, was notwendig ist, falls mehrere Module-Dateien dieselbe Tastenkombination unterschiedlich belegen wollen. Die Dateien können nach Belieben verändert sowie neue Dateien hinzugefügt werden.

Mehr Information über tote Tasten und Compose-Sequnzen gibt es [hier](../Benutzerhandbuch/Tote-Tasten-und-Compose.md).


## Für Entwickler

Aktuelle Angaben zur Mitarbeit am Projekt finden sich auf der offiziellen [Projektseite](https://github.com/Rojetto/ReNeo/#f%C3%BCr-entwickler).
