Source und Binaries für die AHK-Ergänzung in allen drei Layouts hinzugefügt

This commit is contained in:
qwertfisch 2020-05-26 00:35:30 +02:00
parent 131e7b59d7
commit 1fc92c6c96
33 changed files with 1706 additions and 30 deletions

View File

@ -1,30 +0,0 @@
Das AHK-Skript »ahk_kbdneo2.ahk« schließt die letzten Lücken vom nativen Treiber (kbdneo2)
== Erweiterungen ==
= Cap- und ModLock =
CapsLock durch Shift+Shift
Mod4Lock durch Mod4+Mod4
= Funktionstasten =
»Bild auf« Mod4+4
»Pfeil hoch« Mod4+L
»Entfernen« Mod4+C
»Einfügen« Mod4+W
»Pos 1« Mod4+U
»Pfeil links« Mod4+I
»Pfeil runter« Mod4+A
»Pfeil rechts« Mod4+E
»Ende« Mod4+O
»Bild runter« Mod4+Ä
== noch nicht umgesetzt ==
= Fehlende Ebenen des Numpads =

View File

@ -0,0 +1,23 @@
# AHK-Ergänzung für kbd-Layout
Das AHK-Skript »kbd*.ahk« (* steht für neo2, bone oder qwertz) schließt die letzten Lücken vom jeweils nativen Treiber (kbd*)
## Erweiterungen
### Caps- und ModLock
* CapsLock durch Shift+Shift
* Mod4Lock durch Mod4+Mod4
### Funktionstasten
| Funktionstaste | Ebene 4 |
| -------------- | ------- |
| »Bild auf« | Mod4+4
| »Pfeil hoch« | Mod4+L
| »Entfernen« | Mod4+C
| »Einfügen« | Mod4+W
| »Pos 1« | Mod4+U
| »Pfeil links« | Mod4+I
| »Pfeil runter« | Mod4+A
| »Pfeil rechts« | Mod4+E
| »Ende« | Mod4+O
| »Bild runter« | Mod4+Ä

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -0,0 +1,561 @@
;*********************
; Anfangsbedingungen *
;*********************
name=Bone (Erweiterung für nativen Treiber)
enable=Aktiviere %name%
disable=Deaktiviere %name%
#usehook on
SetKeyDelay -1
#LTrim
; *** Benutze Bilder, wenn sie im aktuellen Verzeichnis vorhanden sind ***
FileInstall,neo_enabled.ico,neo_enabled.ico,1
FileInstall,neo_disabled.ico,neo_disabled.ico,1
FileInstall,ebene1.png,ebene1.png,1
FileInstall,ebene2.png,ebene2.png,1
FileInstall,ebene3.png,ebene3.png,1
FileInstall,ebene4.png,ebene4.png,1
FileInstall,ebene5.png,ebene5.png,1
FileInstall,ebene6.png,ebene6.png,1
if (FileExist("ebene1.png")&&FileExist("ebene2.png")&&FileExist("ebene3.png")&&FileExist("ebene4.png")&&FileExist("ebene5.png")&&FileExist("ebene6.png"))
zeigeBildschirmTastatur = 1
if (FileExist("neo_enabled.ico")&&FileExist("neo_disabled.ico"))
iconBenutzen=1
;*************************
; Menü des Systray-Icons *
;*************************
if (iconBenutzen)
menu,tray,icon,neo_enabled.ico,,1
menu,tray,nostandard
menu,tray,add,AHK öffnen,open
menu,helpmenu,add,Info,about
menu,helpmenu,add
menu,helpmenu,add,http://autohotkey.com/,autohotkey
menu,helpmenu,add,http://www.neo-layout.org/,neo
menu,tray,add,Hilfe,:helpmenu
menu,tray,add
menu,tray,add,%disable%,togglesuspend
menu,tray,add
menu,tray,add,Skript bearbeiten,edit
menu,tray,add,Skript neu laden,reload
menu,tray,add,Bildschirmtastatur umschalten,Show
menu,tray,add
menu,tray,add,Nicht im Systray anzeigen,hide
menu,tray,add,%name% beenden,exitprogram
menu,tray,default,%disable%
menu,tray,tip,%name%
;******************
; Initialisierung *
;******************
isShiftRPressed := 0
isShiftLPressed := 0
isShiftPressed := 0
isMod2Locked := 0
isMod3RPressed := 0
isMod3LPressed := 0
isMod3Pressed := 0
isMod4RPressed := 0
isMod4LPressed := 0
isMod4Pressed := 0
isMod4Locked := 0
isMod4Active := 0
Ebene := 1
goto mapkeys
;***********************
; Fehlende Funktionen *
;***********************
; *** benötigte Modifier werden gehookt ***
~*SC136::
if (isShiftLPressed and !isShiftRPressed)
ToggleMod2Lock()
isShiftRPressed := 1
isShiftPressed := 1
goto modeToggled
return
~*SC136 up::
isShiftRPressed := 0
isShiftPressed := isShiftLPressed
goto modeToggled
return
~*SC02A::
if (isShiftRPressed and !isShiftLPressed)
ToggleMod2Lock()
isShiftLPressed := 1
isShiftPressed := 1
goto modeToggled
return
~*SC02A up::
isShiftLPressed := 0
isShiftPressed := isShiftRPressed
goto modeToggled
return
~*SC02B::
isMod3RPressed := 1
isMod3Pressed := 1
goto modeToggled
return
~*SC02B up::
isMod3RPressed := 0
isMod3Pressed := isMod3LPressed
goto modeToggled
return
~*SC03A::
isMod3LPressed := 1
isMod3Pressed := 1
goto modeToggled
return
~*SC03A up::
isMod3LPressed := 0
isMod3Pressed := isMod3RPressed
goto modeToggled
return
~*SC138::
if (isMod4LPressed and !isMod4RPressed)
ToggleMod4Lock()
isMod4RPressed := 1
isMod4Pressed := 1
doMod4()
goto modeToggled
return
~*SC138 up::
isMod4RPressed := 0
isMod4Pressed := isMod4LPressed
doMod4()
goto modeToggled
return
~*SC056::
if (isMod4RPressed and !isMod4LPressed)
ToggleMod4Lock()
isMod4LPressed := 1
isMod4Pressed := 1
doMod4()
goto modeToggled
return
~*SC056 up::
isMod4LPressed := 0
isMod4Pressed := isMod4RPressed
doMod4()
goto modeToggled
return
; *** Welcher Modifier ist aktiv und CapsLock und Mod4Lock ***
ToggleMod2Lock() {
global
if (isMod2Locked)
{
isMod2Locked := 0
SetCapslockState off
}
else
{
isMod2Locked := 1
SetCapslockState on
}
}
ToggleMod4Lock() {
global
if (isMod4Locked)
{
isMod4Locked := 0
send {vk15}
}
else
{
isMod4Locked := 1
send {vk15}
}
}
doMod4() {
global
if (isMod4Locked)
{
if (isMod4Pressed)
isMod4Active := 0
else
isMod4Active := 1
}
else
{
if (isMod4Pressed)
isMod4Active := 1
else
isMod4Active := 0
}
}
; Special Mapping only for ö (position for Strg-Z on Mod4+ö)
*ö::
if (isMod4Active and !isMod3Pressed) {
if (key_z_down){
Send {Blind}{ö up}
key_z_down := 0
}
Send {Blind}{Ctrl DownTemp}{z DownTemp}
key_z_down_mod := 1
} else {
if (key_z_down_mod){
Send {Blind}{Ctrl Up}{z Up}
key_z_down_mod := 0
}
Send {Blind}{ö DownTemp}
key_z_down := 1
}
return
*ö up::
if (key_z_down_mod){
Send {Blind}{Ctrl Up}{z Up}
key_z_down_mod := 0
}
if (key_z_down){
Send {Blind}{ö up}
key_z_down := 0
}
return
; *** Mappings ***
mapkeys:
OneLayer("j", 4, "pgup")
OneLayer("d", 4, "backspace")
OneLayer("u", 4, "up")
OneLayer("a", 4, "del")
OneLayer("x", 4, "pgdn")
OneLayer("c", 4, "home")
OneLayer("t", 4, "left")
OneLayer("i", 4, "down")
OneLayer("e", 4, "right")
OneLayer("o", 4, "end")
OneLayer("f", 4, "esc")
OneLayer("v", 4, "tab")
OneLayer("ü", 4, "ins")
OneLayer("ä", 4, "enter")
AllLayers("NumLock","tab","tab","=","","","") ; NumLock
AllLayers("NumpadDiv","NumpadDiv","NumpadDiv","÷","","","") ; NumpadDiv
AllLayers("NumpadMult","NumpadMult","NumpadMult","","×","","") ; NumpadMult
AllLayers("NumpadSub","NumpadSub","NumpadSub","","","","") ; NumpadSub
AllLayers("NumpadAdd","NumpadAdd","NumpadAdd","±","","","") ; NumpadAdd
AllLayers("Numpad7","Numpad7","","","NumpadHome","","") ; Numpad7
AllLayers("Numpad8","Numpad8","","","NumpadUp","","") ; Numpad8
AllLayers("Numpad9","Numpad9","","","NumpadPgUp","","") ; Numpad9
AllLayers("Numpad4","Numpad4","","","NumpadLeft","","") ; Numpad4
AllLayers("Numpad5","Numpad5","",":","LButton","","") ; Numpad5
AllLayers("Numpad6","Numpad6","","","NumpadRight","","") ; Numpad6
AllLayers("Numpad1","Numpad1","","","NumpadEnd","","") ; Numpad1
AllLayers("Numpad2","Numpad2","","","NumpadDown","","") ; Numpad2
AllLayers("Numpad3","Numpad3","","","NumpadPgDn","","") ; Numpad3
AllLayers("Numpad0","Numpad0","","%","NumpadIns","","") ; Numpad0
AllLayers("NumpadDot","NumpadDot",".",",","NumpadDel","","") ; NumpadDot
RemapKey("NumpadIns", "Numpad0")
RemapKey("NumpadEnd", "Numpad1")
RemapKey("NumpadDown", "Numpad2")
RemapKey("NumpadPgDn", "Numpad3")
RemapKey("NumpadLeft", "Numpad4")
RemapKey("NumpadClear", "Numpad5")
RemapKey("NumpadRight", "Numpad6")
RemapKey("NumpadHome", "Numpad7")
RemapKey("NumpadUp", "Numpad8")
RemapKey("NumpadPgUp", "Numpad9")
RemapKey("NumpadDel", "NumpadDot")
return
HookKey(key){
dnkey := "*" . key
upkey := dnkey . " up"
Hotkey,% dnkey,allstarhook
Hotkey,% upkey,allstarhook
}
OneLayer(key, layer, target){
global
HookKey(key)
CMCP%layer%%key% := target
}
AllLayers(key, e1, e2, e3, e4, e5, e6){
global
HookKey(key)
CMCP1%key% := e1
CMCP2%key% := e2
CMCP3%key% := e3
CMCP4%key% := e4
CMCP5%key% := e5
CMCP6%key% := e6
}
RemapKey(key, target){
global
HookKey(key)
KRM%key% := target
}
modeToggled:
if ((isMod3Pressed) && (isMod4Pressed || isMod4Locked)) {
Ebene := 6
} else if ((isMod3Pressed) && (isShiftPressed || isMod2Locked)) {
Ebene := 5
} else if (isMod4Active) {
Ebene := 4
} else if (isMod3Pressed) {
Ebene := 3
} else if (isShiftPressed || isMod2Locked) {
Ebene := 2
} else {
Ebene := 1
}
goto guiModeToggled
return
allstarhook:
AllStar(a_thishotkey)
return
AllStar(This_HotKey) {
global
PhysKey := This_HotKey
if (SubStr(PhysKey,1,1) == "*")
PhysKey := SubStr(PhysKey,2)
if (SubStr(PhysKey,-2) == " up") {
PhysKey := SubStr(PhysKey,1,StrLen(PhysKey)-3)
IsDown := 0
} else
IsDown := 1
RealEbene := Ebene
if (KRM%PhysKey% != ""){
PhysKey := KRM%PhysKey%
if (isMod3Pressed) {
RealEbene := 5
} else {
RealEbene := 2
}
}
Char = CP%RealEbene%%PhysKey%
if (IsDown == 1) {
CharStarDown(PhysKey, Char)
;MsgBox % This_HotKey . " -> " . PhysKey . " -> " . Char . " ---> " . "%CM" . Char . ": " . CM%Char%
} else {
CharStarUp(PhysKey)
}
}
CharStarDown(PhysKey, Char) {
global
if (CM%Char% != "") {
tosend := CM%Char%
} else {
tosend := PhysKey
}
if (PR%PhysKey% != "" && PR%PhysKey% != tosend){
CharOutUp(PR%PhysKey%)
}
CharOutDown(tosend)
PR%PhysKey% := tosend
}
CharStarUp(PhysKey) {
global
if (PR%PhysKey% != "") {
tosend := PR%PhysKey%
PR%PhysKey% := ""
CharOutUp(tosend)
}
}
CharOutDown(char){
send % "{blind}{" . char . " DownTemp}"
}
CharOutUp(char){
send % "{blind}{" . char . " Up}"
}
;*****************
; Menüfunktionen *
;*****************
togglesuspend:
if A_IsSuspended {
menu,tray,rename,%enable%,%disable%
menu,tray,tip,%name%
if (iconBenutzen)
menu,tray,icon,neo_enabled.ico,,1
suspend,off ; Schaltet Suspend aus
} else {
menu,tray,rename,%disable%, %enable%
menu,tray,tip,%name% : Deaktiviert
if (iconBenutzen)
menu,tray,icon,neo_disabled.ico,,1
suspend,on ; Schaltet Suspend ein
} return
about:
msgbox, 64, NEO 2.0 Ergonomische Tastaturbelegung,
(
%name%
`nDas Neo-Layout ist ein alternatives deutsches Tastaturlayout
Näheres finden Sie unter http://neo-layout.org/.
`nDieses Skript erweitert den nativen Tastaturtreiber um
einige fehlende Funktionen.
`nEs beinhaltet außerdem eine Bildschirmtastatur, die mit
Shift+Mod4+Tab geöffnet und geschlossen werden kann.
)
return
neo:
run http://neo-layout.org/
return
autohotkey:
run http://autohotkey.com/
return
open:
ListLines ; shows the Autohotkey window
return
edit:
edit
return
reload:
Reload
return
hide:
menu, tray, noicon
return
exitprogram:
exitapp
return
;*********************
; BildschirmTastatur *
;*********************
guiErstellt = 0
showingShift = 0
showShiftTimer = 0
showShift:
showingShift = 1
showShiftTimer = 0
goto modeToggled
return
guiModeToggled:
; This shift logic delays the display of layer 2,
; so the keyboard doesnt constantly flash during
; normal typing
if (isShiftPressed && !showingShift && !showShiftTimer){
SetTimer, showShift, -300
showShiftTimer = 1
} else if (!isShiftPressed){
SetTimer, showShift, Off
showShiftTimer = 0
showingShift = 0
}
if (guiErstellt) {
guiEbene := Ebene
if (guiEbene = 2 && !showingShift)
guiEbene = 1
goto UpdateImage
}
return
*F7::
if (isMod4Pressed && zeigeBildschirmTastatur)
goto Show
else send {blind}{F7}
return
Show:
if guiErstellt {
goto Close
} else {
if (Image = "") {
Image := "ebene1.png"
}
yPosition := A_ScreenHeight -270
Gui,Color,FFFFFF
Gui,Add,Picture, AltSubmit BackgroundTrans xm ym hwndHPIC vPicture,%Image% ;
Gui,+AlwaysOnTop
Gui +LastFound
WinSet, TransColor, FFFFFF
Gui -Caption +ToolWindow
Gui,Show,NA y%yposition% Autosize
OnMessage(0x201, "WM_LBUTTONDOWN")
OnMessage(0x203, "WM_LBUTTONDBLCLK")
GuiControlGet, P, Pos, Picture
loop, 6 {
HBITMAP%A_Index% := LoadImage("ebene" . A_Index . ".png", PW, PH)
}
guiErstellt = 1
}
Return
LoadImage(ImagePath, W, H) {
; Each GUI window may have up to 11,000 controls. However, use caution when creating more
; than 5000 controls because system instability may occur for certain control types.
Gui, 99:Add, Pic, w%W% h%H% AltSubmit hwndHPIC, %ImagePath%
SendMessage, 0x0173, 0, 0, , ahk_id %HPIC% ; STM_GETIMAGE
Return ErrorLevel
}
UpdateImage:
if (guiEbeneShown != guiEbene){
SendMessage, 0x0172, 0, HBITMAP%guiEbene%, , ahk_id %HPIC% ; STM_SETIMAGE
DeleteObject(ErrorLevel)
guiEbeneShown := guiEbene
}
Return
DeleteObject(hObject) {
return DllCall("DeleteObject", "uint", hObject)
}
WM_LBUTTONDOWN() {
PostMessage, 0xA1, 2
}
WM_LBUTTONDBLCLK() {
SetTimer, Close, -1
}
Close:
guiErstellt = 0
Gui,Destroy
Gui, 99:Destroy
Return

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View File

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -0,0 +1,561 @@
;*********************
; Anfangsbedingungen *
;*********************
name=Neo 2.0 (Erweiterung für nativen Treiber)
enable=Aktiviere %name%
disable=Deaktiviere %name%
#usehook on
SetKeyDelay -1
#LTrim
; *** Benutze Bilder, wenn sie im aktuellen Verzeichnis vorhanden sind ***
FileInstall,neo_enabled.ico,neo_enabled.ico,1
FileInstall,neo_disabled.ico,neo_disabled.ico,1
FileInstall,ebene1.png,ebene1.png,1
FileInstall,ebene2.png,ebene2.png,1
FileInstall,ebene3.png,ebene3.png,1
FileInstall,ebene4.png,ebene4.png,1
FileInstall,ebene5.png,ebene5.png,1
FileInstall,ebene6.png,ebene6.png,1
if (FileExist("ebene1.png")&&FileExist("ebene2.png")&&FileExist("ebene3.png")&&FileExist("ebene4.png")&&FileExist("ebene5.png")&&FileExist("ebene6.png"))
zeigeBildschirmTastatur = 1
if (FileExist("neo_enabled.ico")&&FileExist("neo_disabled.ico"))
iconBenutzen=1
;*************************
; Menü des Systray-Icons *
;*************************
if (iconBenutzen)
menu,tray,icon,neo_enabled.ico,,1
menu,tray,nostandard
menu,tray,add,AHK öffnen,open
menu,helpmenu,add,Info,about
menu,helpmenu,add
menu,helpmenu,add,http://autohotkey.com/,autohotkey
menu,helpmenu,add,http://www.neo-layout.org/,neo
menu,tray,add,Hilfe,:helpmenu
menu,tray,add
menu,tray,add,%disable%,togglesuspend
menu,tray,add
menu,tray,add,Skript bearbeiten,edit
menu,tray,add,Skript neu laden,reload
menu,tray,add,Bildschirmtastatur umschalten,Show
menu,tray,add
menu,tray,add,Nicht im Systray anzeigen,hide
menu,tray,add,%name% beenden,exitprogram
menu,tray,default,%disable%
menu,tray,tip,%name%
;******************
; Initialisierung *
;******************
isShiftRPressed := 0
isShiftLPressed := 0
isShiftPressed := 0
isMod2Locked := 0
isMod3RPressed := 0
isMod3LPressed := 0
isMod3Pressed := 0
isMod4RPressed := 0
isMod4LPressed := 0
isMod4Pressed := 0
isMod4Locked := 0
isMod4Active := 0
Ebene := 1
goto mapkeys
;***********************
; Fehlende Funktionen *
;***********************
; *** benötigte Modifier werden gehookt ***
~*SC136::
if (isShiftLPressed and !isShiftRPressed)
ToggleMod2Lock()
isShiftRPressed := 1
isShiftPressed := 1
goto modeToggled
return
~*SC136 up::
isShiftRPressed := 0
isShiftPressed := isShiftLPressed
goto modeToggled
return
~*SC02A::
if (isShiftRPressed and !isShiftLPressed)
ToggleMod2Lock()
isShiftLPressed := 1
isShiftPressed := 1
goto modeToggled
return
~*SC02A up::
isShiftLPressed := 0
isShiftPressed := isShiftRPressed
goto modeToggled
return
~*SC02B::
isMod3RPressed := 1
isMod3Pressed := 1
goto modeToggled
return
~*SC02B up::
isMod3RPressed := 0
isMod3Pressed := isMod3LPressed
goto modeToggled
return
~*SC03A::
isMod3LPressed := 1
isMod3Pressed := 1
goto modeToggled
return
~*SC03A up::
isMod3LPressed := 0
isMod3Pressed := isMod3RPressed
goto modeToggled
return
~*SC138::
if (isMod4LPressed and !isMod4RPressed)
ToggleMod4Lock()
isMod4RPressed := 1
isMod4Pressed := 1
doMod4()
goto modeToggled
return
~*SC138 up::
isMod4RPressed := 0
isMod4Pressed := isMod4LPressed
doMod4()
goto modeToggled
return
~*SC056::
if (isMod4RPressed and !isMod4LPressed)
ToggleMod4Lock()
isMod4LPressed := 1
isMod4Pressed := 1
doMod4()
goto modeToggled
return
~*SC056 up::
isMod4LPressed := 0
isMod4Pressed := isMod4RPressed
doMod4()
goto modeToggled
return
; *** Welcher Modifier ist aktiv und CapsLock und Mod4Lock ***
ToggleMod2Lock() {
global
if (isMod2Locked)
{
isMod2Locked := 0
SetCapslockState off
}
else
{
isMod2Locked := 1
SetCapslockState on
}
}
ToggleMod4Lock() {
global
if (isMod4Locked)
{
isMod4Locked := 0
send {vk15}
}
else
{
isMod4Locked := 1
send {vk15}
}
}
doMod4() {
global
if (isMod4Locked)
{
if (isMod4Pressed)
isMod4Active := 0
else
isMod4Active := 1
}
else
{
if (isMod4Pressed)
isMod4Active := 1
else
isMod4Active := 0
}
}
; Special Mapping only for z
*z::
if (isMod4Active and !isMod3Pressed) {
if (key_z_down){
Send {Blind}{z up}
key_z_down := 0
}
Send {Blind}{Ctrl DownTemp}{z DownTemp}
key_z_down_mod := 1
} else {
if (key_z_down_mod){
Send {Blind}{Ctrl Up}{z Up}
key_z_down_mod := 0
}
Send {Blind}{z DownTemp}
key_z_down := 1
}
return
*z up::
if (key_z_down_mod){
Send {Blind}{Ctrl Up}{z Up}
key_z_down_mod := 0
}
if (key_z_down){
Send {Blind}{z up}
key_z_down := 0
}
return
; *** Mappings ***
mapkeys:
OneLayer("x", 4, "pgup")
OneLayer("v", 4, "backspace")
OneLayer("l", 4, "up")
OneLayer("c", 4, "del")
OneLayer("w", 4, "pgdn")
OneLayer("u", 4, "home")
OneLayer("i", 4, "left")
OneLayer("a", 4, "down")
OneLayer("e", 4, "right")
OneLayer("o", 4, "end")
OneLayer("ü", 4, "esc")
OneLayer("ö", 4, "tab")
OneLayer("ä", 4, "ins")
OneLayer("p", 4, "enter")
AllLayers("NumLock","tab","tab","=","","","") ; NumLock
AllLayers("NumpadDiv","NumpadDiv","NumpadDiv","÷","","","") ; NumpadDiv
AllLayers("NumpadMult","NumpadMult","NumpadMult","","×","","") ; NumpadMult
AllLayers("NumpadSub","NumpadSub","NumpadSub","","","","") ; NumpadSub
AllLayers("NumpadAdd","NumpadAdd","NumpadAdd","±","","","") ; NumpadAdd
AllLayers("Numpad7","Numpad7","","","NumpadHome","","") ; Numpad7
AllLayers("Numpad8","Numpad8","","","NumpadUp","","") ; Numpad8
AllLayers("Numpad9","Numpad9","","","NumpadPgUp","","") ; Numpad9
AllLayers("Numpad4","Numpad4","","","NumpadLeft","","") ; Numpad4
AllLayers("Numpad5","Numpad5","",":","LButton","","") ; Numpad5
AllLayers("Numpad6","Numpad6","","","NumpadRight","","") ; Numpad6
AllLayers("Numpad1","Numpad1","","","NumpadEnd","","") ; Numpad1
AllLayers("Numpad2","Numpad2","","","NumpadDown","","") ; Numpad2
AllLayers("Numpad3","Numpad3","","","NumpadPgDn","","") ; Numpad3
AllLayers("Numpad0","Numpad0","","%","NumpadIns","","") ; Numpad0
AllLayers("NumpadDot","NumpadDot",".",",","NumpadDel","","") ; NumpadDot
RemapKey("NumpadIns", "Numpad0")
RemapKey("NumpadEnd", "Numpad1")
RemapKey("NumpadDown", "Numpad2")
RemapKey("NumpadPgDn", "Numpad3")
RemapKey("NumpadLeft", "Numpad4")
RemapKey("NumpadClear", "Numpad5")
RemapKey("NumpadRight", "Numpad6")
RemapKey("NumpadHome", "Numpad7")
RemapKey("NumpadUp", "Numpad8")
RemapKey("NumpadPgUp", "Numpad9")
RemapKey("NumpadDel", "NumpadDot")
return
HookKey(key){
dnkey := "*" . key
upkey := dnkey . " up"
Hotkey,% dnkey,allstarhook
Hotkey,% upkey,allstarhook
}
OneLayer(key, layer, target){
global
HookKey(key)
CMCP%layer%%key% := target
}
AllLayers(key, e1, e2, e3, e4, e5, e6){
global
HookKey(key)
CMCP1%key% := e1
CMCP2%key% := e2
CMCP3%key% := e3
CMCP4%key% := e4
CMCP5%key% := e5
CMCP6%key% := e6
}
RemapKey(key, target){
global
HookKey(key)
KRM%key% := target
}
modeToggled:
if ((isMod3Pressed) && (isMod4Pressed || isMod4Locked)) {
Ebene := 6
} else if ((isMod3Pressed) && (isShiftPressed || isMod2Locked)) {
Ebene := 5
} else if (isMod4Active) {
Ebene := 4
} else if (isMod3Pressed) {
Ebene := 3
} else if (isShiftPressed || isMod2Locked) {
Ebene := 2
} else {
Ebene := 1
}
goto guiModeToggled
return
allstarhook:
AllStar(a_thishotkey)
return
AllStar(This_HotKey) {
global
PhysKey := This_HotKey
if (SubStr(PhysKey,1,1) == "*")
PhysKey := SubStr(PhysKey,2)
if (SubStr(PhysKey,-2) == " up") {
PhysKey := SubStr(PhysKey,1,StrLen(PhysKey)-3)
IsDown := 0
} else
IsDown := 1
RealEbene := Ebene
if (KRM%PhysKey% != ""){
PhysKey := KRM%PhysKey%
if (isMod3Pressed) {
RealEbene := 5
} else {
RealEbene := 2
}
}
Char = CP%RealEbene%%PhysKey%
if (IsDown == 1) {
CharStarDown(PhysKey, Char)
;MsgBox % This_HotKey . " -> " . PhysKey . " -> " . Char . " ---> " . "%CM" . Char . ": " . CM%Char%
} else {
CharStarUp(PhysKey)
}
}
CharStarDown(PhysKey, Char) {
global
if (CM%Char% != "") {
tosend := CM%Char%
} else {
tosend := PhysKey
}
if (PR%PhysKey% != "" && PR%PhysKey% != tosend){
CharOutUp(PR%PhysKey%)
}
CharOutDown(tosend)
PR%PhysKey% := tosend
}
CharStarUp(PhysKey) {
global
if (PR%PhysKey% != "") {
tosend := PR%PhysKey%
PR%PhysKey% := ""
CharOutUp(tosend)
}
}
CharOutDown(char){
send % "{blind}{" . char . " DownTemp}"
}
CharOutUp(char){
send % "{blind}{" . char . " Up}"
}
;*****************
; Menüfunktionen *
;*****************
togglesuspend:
if A_IsSuspended {
menu,tray,rename,%enable%,%disable%
menu,tray,tip,%name%
if (iconBenutzen)
menu,tray,icon,neo_enabled.ico,,1
suspend,off ; Schaltet Suspend aus
} else {
menu,tray,rename,%disable%, %enable%
menu,tray,tip,%name% : Deaktiviert
if (iconBenutzen)
menu,tray,icon,neo_disabled.ico,,1
suspend,on ; Schaltet Suspend ein
} return
about:
msgbox, 64, NEO 2.0 Ergonomische Tastaturbelegung,
(
%name%
`nDas Neo-Layout ist ein alternatives deutsches Tastaturlayout
Näheres finden Sie unter http://neo-layout.org/.
`nDieses Skript erweitert den nativen Tastaturtreiber um
einige fehlende Funktionen.
`nEs beinhaltet außerdem eine Bildschirmtastatur, die mit
Shift+Mod4+Tab geöffnet und geschlossen werden kann.
)
return
neo:
run http://neo-layout.org/
return
autohotkey:
run http://autohotkey.com/
return
open:
ListLines ; shows the Autohotkey window
return
edit:
edit
return
reload:
Reload
return
hide:
menu, tray, noicon
return
exitprogram:
exitapp
return
;*********************
; BildschirmTastatur *
;*********************
guiErstellt = 0
showingShift = 0
showShiftTimer = 0
showShift:
showingShift = 1
showShiftTimer = 0
goto modeToggled
return
guiModeToggled:
; This shift logic delays the display of layer 2,
; so the keyboard doesnt constantly flash during
; normal typing
if (isShiftPressed && !showingShift && !showShiftTimer){
SetTimer, showShift, -300
showShiftTimer = 1
} else if (!isShiftPressed){
SetTimer, showShift, Off
showShiftTimer = 0
showingShift = 0
}
if (guiErstellt) {
guiEbene := Ebene
if (guiEbene = 2 && !showingShift)
guiEbene = 1
goto UpdateImage
}
return
*F7::
if (isMod4Pressed && zeigeBildschirmTastatur)
goto Show
else send {blind}{F7}
return
Show:
if guiErstellt {
goto Close
} else {
if (Image = "") {
Image := "ebene1.png"
}
yPosition := A_ScreenHeight -270
Gui,Color,FFFFFF
Gui,Add,Picture, AltSubmit BackgroundTrans xm ym hwndHPIC vPicture,%Image% ;
Gui,+AlwaysOnTop
Gui +LastFound
WinSet, TransColor, FFFFFF
Gui -Caption +ToolWindow
Gui,Show,NA y%yposition% Autosize
OnMessage(0x201, "WM_LBUTTONDOWN")
OnMessage(0x203, "WM_LBUTTONDBLCLK")
GuiControlGet, P, Pos, Picture
loop, 6 {
HBITMAP%A_Index% := LoadImage("ebene" . A_Index . ".png", PW, PH)
}
guiErstellt = 1
}
Return
LoadImage(ImagePath, W, H) {
; Each GUI window may have up to 11,000 controls. However, use caution when creating more
; than 5000 controls because system instability may occur for certain control types.
Gui, 99:Add, Pic, w%W% h%H% AltSubmit hwndHPIC, %ImagePath%
SendMessage, 0x0173, 0, 0, , ahk_id %HPIC% ; STM_GETIMAGE
Return ErrorLevel
}
UpdateImage:
if (guiEbeneShown != guiEbene){
SendMessage, 0x0172, 0, HBITMAP%guiEbene%, , ahk_id %HPIC% ; STM_SETIMAGE
DeleteObject(ErrorLevel)
guiEbeneShown := guiEbene
}
Return
DeleteObject(hObject) {
return DllCall("DeleteObject", "uint", hObject)
}
WM_LBUTTONDOWN() {
PostMessage, 0xA1, 2
}
WM_LBUTTONDBLCLK() {
SetTimer, Close, -1
}
Close:
guiErstellt = 0
Gui,Destroy
Gui, 99:Destroy
Return

View File

@ -0,0 +1,561 @@
;*********************
; Anfangsbedingungen *
;*********************
name=Neo/qwertz (Erweiterung für nativen Treiber)
enable=Aktiviere %name%
disable=Deaktiviere %name%
#usehook on
SetKeyDelay -1
#LTrim
; *** Benutze Bilder, wenn sie im aktuellen Verzeichnis vorhanden sind ***
FileInstall,neo_enabled.ico,neo_enabled.ico,1
FileInstall,neo_disabled.ico,neo_disabled.ico,1
FileInstall,ebene1.png,ebene1.png,1
FileInstall,ebene2.png,ebene2.png,1
FileInstall,ebene3.png,ebene3.png,1
FileInstall,ebene4.png,ebene4.png,1
FileInstall,ebene5.png,ebene5.png,1
FileInstall,ebene6.png,ebene6.png,1
if (FileExist("ebene1.png")&&FileExist("ebene2.png")&&FileExist("ebene3.png")&&FileExist("ebene4.png")&&FileExist("ebene5.png")&&FileExist("ebene6.png"))
zeigeBildschirmTastatur = 1
if (FileExist("neo_enabled.ico")&&FileExist("neo_disabled.ico"))
iconBenutzen=1
;*************************
; Menü des Systray-Icons *
;*************************
if (iconBenutzen)
menu,tray,icon,neo_enabled.ico,,1
menu,tray,nostandard
menu,tray,add,AHK öffnen,open
menu,helpmenu,add,Info,about
menu,helpmenu,add
menu,helpmenu,add,http://autohotkey.com/,autohotkey
menu,helpmenu,add,http://www.neo-layout.org/,neo
menu,tray,add,Hilfe,:helpmenu
menu,tray,add
menu,tray,add,%disable%,togglesuspend
menu,tray,add
menu,tray,add,Skript bearbeiten,edit
menu,tray,add,Skript neu laden,reload
menu,tray,add,Bildschirmtastatur umschalten,Show
menu,tray,add
menu,tray,add,Nicht im Systray anzeigen,hide
menu,tray,add,%name% beenden,exitprogram
menu,tray,default,%disable%
menu,tray,tip,%name%
;******************
; Initialisierung *
;******************
isShiftRPressed := 0
isShiftLPressed := 0
isShiftPressed := 0
isMod2Locked := 0
isMod3RPressed := 0
isMod3LPressed := 0
isMod3Pressed := 0
isMod4RPressed := 0
isMod4LPressed := 0
isMod4Pressed := 0
isMod4Locked := 0
isMod4Active := 0
Ebene := 1
goto mapkeys
;***********************
; Fehlende Funktionen *
;***********************
; *** benötigte Modifier werden gehookt ***
~*SC136::
if (isShiftLPressed and !isShiftRPressed)
ToggleMod2Lock()
isShiftRPressed := 1
isShiftPressed := 1
goto modeToggled
return
~*SC136 up::
isShiftRPressed := 0
isShiftPressed := isShiftLPressed
goto modeToggled
return
~*SC02A::
if (isShiftRPressed and !isShiftLPressed)
ToggleMod2Lock()
isShiftLPressed := 1
isShiftPressed := 1
goto modeToggled
return
~*SC02A up::
isShiftLPressed := 0
isShiftPressed := isShiftRPressed
goto modeToggled
return
~*SC02B::
isMod3RPressed := 1
isMod3Pressed := 1
goto modeToggled
return
~*SC02B up::
isMod3RPressed := 0
isMod3Pressed := isMod3LPressed
goto modeToggled
return
~*SC03A::
isMod3LPressed := 1
isMod3Pressed := 1
goto modeToggled
return
~*SC03A up::
isMod3LPressed := 0
isMod3Pressed := isMod3RPressed
goto modeToggled
return
~*SC138::
if (isMod4LPressed and !isMod4RPressed)
ToggleMod4Lock()
isMod4RPressed := 1
isMod4Pressed := 1
doMod4()
goto modeToggled
return
~*SC138 up::
isMod4RPressed := 0
isMod4Pressed := isMod4LPressed
doMod4()
goto modeToggled
return
~*SC056::
if (isMod4RPressed and !isMod4LPressed)
ToggleMod4Lock()
isMod4LPressed := 1
isMod4Pressed := 1
doMod4()
goto modeToggled
return
~*SC056 up::
isMod4LPressed := 0
isMod4Pressed := isMod4RPressed
doMod4()
goto modeToggled
return
; *** Welcher Modifier ist aktiv und CapsLock und Mod4Lock ***
ToggleMod2Lock() {
global
if (isMod2Locked)
{
isMod2Locked := 0
SetCapslockState off
}
else
{
isMod2Locked := 1
SetCapslockState on
}
}
ToggleMod4Lock() {
global
if (isMod4Locked)
{
isMod4Locked := 0
send {vk15}
}
else
{
isMod4Locked := 1
send {vk15}
}
}
doMod4() {
global
if (isMod4Locked)
{
if (isMod4Pressed)
isMod4Active := 0
else
isMod4Active := 1
}
else
{
if (isMod4Pressed)
isMod4Active := 1
else
isMod4Active := 0
}
}
; Special Mapping only for z
*b::
if (isMod4Active and !isMod3Pressed) {
if (key_z_down){
Send {Blind}{b up}
key_z_down := 0
}
Send {Blind}{Ctrl DownTemp}{z DownTemp}
key_z_down_mod := 1
} else {
if (key_z_down_mod){
Send {Blind}{Ctrl Up}{z Up}
key_z_down_mod := 0
}
Send {Blind}{b DownTemp}
key_z_down := 1
}
return
*b up::
if (key_z_down_mod){
Send {Blind}{Ctrl Up}{z Up}
key_z_down_mod := 0
}
if (key_z_down){
Send {Blind}{b up}
key_z_down := 0
}
return
; *** Mappings ***
mapkeys:
OneLayer("q", 4, "pgup")
OneLayer("w", 4, "backspace")
OneLayer("e", 4, "up")
OneLayer("r", 4, "del")
OneLayer("t", 4, "pgdn")
OneLayer("a", 4, "home")
OneLayer("s", 4, "left")
OneLayer("d", 4, "down")
OneLayer("f", 4, "right")
OneLayer("g", 4, "end")
OneLayer("y", 4, "esc")
OneLayer("x", 4, "tab")
OneLayer("c", 4, "ins")
OneLayer("v", 4, "enter")
AllLayers("NumLock","tab","tab","=","","","") ; NumLock
AllLayers("NumpadDiv","NumpadDiv","NumpadDiv","÷","","","") ; NumpadDiv
AllLayers("NumpadMult","NumpadMult","NumpadMult","","×","","") ; NumpadMult
AllLayers("NumpadSub","NumpadSub","NumpadSub","","","","") ; NumpadSub
AllLayers("NumpadAdd","NumpadAdd","NumpadAdd","±","","","") ; NumpadAdd
AllLayers("Numpad7","Numpad7","","","NumpadHome","","") ; Numpad7
AllLayers("Numpad8","Numpad8","","","NumpadUp","","") ; Numpad8
AllLayers("Numpad9","Numpad9","","","NumpadPgUp","","") ; Numpad9
AllLayers("Numpad4","Numpad4","","","NumpadLeft","","") ; Numpad4
AllLayers("Numpad5","Numpad5","",":","LButton","","") ; Numpad5
AllLayers("Numpad6","Numpad6","","","NumpadRight","","") ; Numpad6
AllLayers("Numpad1","Numpad1","","","NumpadEnd","","") ; Numpad1
AllLayers("Numpad2","Numpad2","","","NumpadDown","","") ; Numpad2
AllLayers("Numpad3","Numpad3","","","NumpadPgDn","","") ; Numpad3
AllLayers("Numpad0","Numpad0","","%","NumpadIns","","") ; Numpad0
AllLayers("NumpadDot","NumpadDot",".",",","NumpadDel","","") ; NumpadDot
RemapKey("NumpadIns", "Numpad0")
RemapKey("NumpadEnd", "Numpad1")
RemapKey("NumpadDown", "Numpad2")
RemapKey("NumpadPgDn", "Numpad3")
RemapKey("NumpadLeft", "Numpad4")
RemapKey("NumpadClear", "Numpad5")
RemapKey("NumpadRight", "Numpad6")
RemapKey("NumpadHome", "Numpad7")
RemapKey("NumpadUp", "Numpad8")
RemapKey("NumpadPgUp", "Numpad9")
RemapKey("NumpadDel", "NumpadDot")
return
HookKey(key){
dnkey := "*" . key
upkey := dnkey . " up"
Hotkey,% dnkey,allstarhook
Hotkey,% upkey,allstarhook
}
OneLayer(key, layer, target){
global
HookKey(key)
CMCP%layer%%key% := target
}
AllLayers(key, e1, e2, e3, e4, e5, e6){
global
HookKey(key)
CMCP1%key% := e1
CMCP2%key% := e2
CMCP3%key% := e3
CMCP4%key% := e4
CMCP5%key% := e5
CMCP6%key% := e6
}
RemapKey(key, target){
global
HookKey(key)
KRM%key% := target
}
modeToggled:
if ((isMod3Pressed) && (isMod4Pressed || isMod4Locked)) {
Ebene := 6
} else if ((isMod3Pressed) && (isShiftPressed || isMod2Locked)) {
Ebene := 5
} else if (isMod4Active) {
Ebene := 4
} else if (isMod3Pressed) {
Ebene := 3
} else if (isShiftPressed || isMod2Locked) {
Ebene := 2
} else {
Ebene := 1
}
goto guiModeToggled
return
allstarhook:
AllStar(a_thishotkey)
return
AllStar(This_HotKey) {
global
PhysKey := This_HotKey
if (SubStr(PhysKey,1,1) == "*")
PhysKey := SubStr(PhysKey,2)
if (SubStr(PhysKey,-2) == " up") {
PhysKey := SubStr(PhysKey,1,StrLen(PhysKey)-3)
IsDown := 0
} else
IsDown := 1
RealEbene := Ebene
if (KRM%PhysKey% != ""){
PhysKey := KRM%PhysKey%
if (isMod3Pressed) {
RealEbene := 5
} else {
RealEbene := 2
}
}
Char = CP%RealEbene%%PhysKey%
if (IsDown == 1) {
CharStarDown(PhysKey, Char)
;MsgBox % This_HotKey . " -> " . PhysKey . " -> " . Char . " ---> " . "%CM" . Char . ": " . CM%Char%
} else {
CharStarUp(PhysKey)
}
}
CharStarDown(PhysKey, Char) {
global
if (CM%Char% != "") {
tosend := CM%Char%
} else {
tosend := PhysKey
}
if (PR%PhysKey% != "" && PR%PhysKey% != tosend){
CharOutUp(PR%PhysKey%)
}
CharOutDown(tosend)
PR%PhysKey% := tosend
}
CharStarUp(PhysKey) {
global
if (PR%PhysKey% != "") {
tosend := PR%PhysKey%
PR%PhysKey% := ""
CharOutUp(tosend)
}
}
CharOutDown(char){
send % "{blind}{" . char . " DownTemp}"
}
CharOutUp(char){
send % "{blind}{" . char . " Up}"
}
;*****************
; Menüfunktionen *
;*****************
togglesuspend:
if A_IsSuspended {
menu,tray,rename,%enable%,%disable%
menu,tray,tip,%name%
if (iconBenutzen)
menu,tray,icon,neo_enabled.ico,,1
suspend,off ; Schaltet Suspend aus
} else {
menu,tray,rename,%disable%, %enable%
menu,tray,tip,%name% : Deaktiviert
if (iconBenutzen)
menu,tray,icon,neo_disabled.ico,,1
suspend,on ; Schaltet Suspend ein
} return
about:
msgbox, 64, NEO 2.0 Ergonomische Tastaturbelegung,
(
%name%
`nDas Neo-Layout ist ein alternatives deutsches Tastaturlayout
Näheres finden Sie unter http://neo-layout.org/.
`nDieses Skript erweitert den nativen Tastaturtreiber um
einige fehlende Funktionen.
`nEs beinhaltet außerdem eine Bildschirmtastatur, die mit
Shift+Mod4+Tab geöffnet und geschlossen werden kann.
)
return
neo:
run http://neo-layout.org/
return
autohotkey:
run http://autohotkey.com/
return
open:
ListLines ; shows the Autohotkey window
return
edit:
edit
return
reload:
Reload
return
hide:
menu, tray, noicon
return
exitprogram:
exitapp
return
;*********************
; BildschirmTastatur *
;*********************
guiErstellt = 0
showingShift = 0
showShiftTimer = 0
showShift:
showingShift = 1
showShiftTimer = 0
goto modeToggled
return
guiModeToggled:
; This shift logic delays the display of layer 2,
; so the keyboard doesnt constantly flash during
; normal typing
if (isShiftPressed && !showingShift && !showShiftTimer){
SetTimer, showShift, -300
showShiftTimer = 1
} else if (!isShiftPressed){
SetTimer, showShift, Off
showShiftTimer = 0
showingShift = 0
}
if (guiErstellt) {
guiEbene := Ebene
if (guiEbene = 2 && !showingShift)
guiEbene = 1
goto UpdateImage
}
return
*F7::
if (isMod4Pressed && zeigeBildschirmTastatur)
goto Show
else send {blind}{F7}
return
Show:
if guiErstellt {
goto Close
} else {
if (Image = "") {
Image := "ebene1.png"
}
yPosition := A_ScreenHeight -270
Gui,Color,FFFFFF
Gui,Add,Picture, AltSubmit BackgroundTrans xm ym hwndHPIC vPicture,%Image% ;
Gui,+AlwaysOnTop
Gui +LastFound
WinSet, TransColor, FFFFFF
Gui -Caption +ToolWindow
Gui,Show,NA y%yposition% Autosize
OnMessage(0x201, "WM_LBUTTONDOWN")
OnMessage(0x203, "WM_LBUTTONDBLCLK")
GuiControlGet, P, Pos, Picture
loop, 6 {
HBITMAP%A_Index% := LoadImage("ebene" . A_Index . ".png", PW, PH)
}
guiErstellt = 1
}
Return
LoadImage(ImagePath, W, H) {
; Each GUI window may have up to 11,000 controls. However, use caution when creating more
; than 5000 controls because system instability may occur for certain control types.
Gui, 99:Add, Pic, w%W% h%H% AltSubmit hwndHPIC, %ImagePath%
SendMessage, 0x0173, 0, 0, , ahk_id %HPIC% ; STM_GETIMAGE
Return ErrorLevel
}
UpdateImage:
if (guiEbeneShown != guiEbene){
SendMessage, 0x0172, 0, HBITMAP%guiEbene%, , ahk_id %HPIC% ; STM_SETIMAGE
DeleteObject(ErrorLevel)
guiEbeneShown := guiEbene
}
Return
DeleteObject(hObject) {
return DllCall("DeleteObject", "uint", hObject)
}
WM_LBUTTONDOWN() {
PostMessage, 0xA1, 2
}
WM_LBUTTONDBLCLK() {
SetTimer, Close, -1
}
Close:
guiErstellt = 0
Gui,Destroy
Gui, 99:Destroy
Return

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.