Hallo Freunde!
Wer genau schaut, wird feststellen, dass ich in r1808 die Grundlage für
eine individuelle Ebenen-Funktion gelegt habe. Der Grund war, damit die
Möglichkeit zum Experimentieren mit weiteren Ebenen rein über
custom.ahk, also ohne Änderungen am Vanilla neovars, zu haben.
Die Tastatur auf meinem Heim-PC hat 108 Tasten, d.h. 105 plus die drei
Tasten Power, Sleep und Wake. Auch wenn sie damit relativ komplett ist,
fehlen ihr damit immer noch so nützliche Tasten wie die
Lautstärkeeinstellung oder Web/Multimedia-Navigationstasten.
Aus der Not habe ich nun eine Tugend gemacht. Erst habe ich mir eine
zusätzliche Ebene (die Ebene 9) gebastelt, die aber erst von
EbeneAktualisieren() gebildet werden muss. Dafür gibt es die Variable
isModXPressed, welche direkt diese Ebene 9 aktiviert. Da die
Standard-Funktion nichts von dieser Ebene weiß und ich den
Standard-Neo-Code nicht (noch weiter … ;-)) versauen wollte, erfolgte
die angesprochene Adaptierung auf einen indirekten Aufruf dieser
Funktion, deren zu verwendender Name nunmehr in der Variable
%EbeneAktualisieren% steht und standardmäßig auf NEOEbeneAktualisieren()
zeigt. In meinem Skript custom.ahk setze ich dieses auf die erweiterte
Ebenen-Funktion VMNEOEbeneAktualisieren(), die ebenfalls im Skript
definiert ist und die Ebene 9 setzen kann.
Was bleibt ist die Frage, wie diese Ebene 9 nun aktiviert werden soll.
Ich habe zwei Varianten ausprobiert: Die bei laufendem Rechner relativ
unnötige WAKE-Taste als ModX verwenden, oder die
Ebene-1-Bindestrichtaste neben T2 als ModX, da ich für den Bindestrich
ausschließlich Mod3+T verwende. Beides funktioniert und ist recht
praktikabel, wobei die WAKE-Taste recht weit „vom Schuss“ ist, man also
die Hand recht weit weg bewegen muss, dafür ändert sich nichts am
Standard-Layout.
Im Ergebnis steht mir nun für die ganze Tastatur eine erweiterte Ebene
zur Verfügung, auf die ich Zeichen oder eben die angesprochenen
Multimedia-Tastendrücke legen kann. Bislang habe ich nur h-g-f mit
Vol-/Vol+/VolMute sowie n/r/t/d mit Prev/Play|Pause/Stop/Next belegt,
aber denkbar wäre auch, spezielle Shortcuts für das individuelle
technische Fachgebiet unterzubringen oder akzentuierte Buchstaben einer
favorisierten Fremdsprache über einen Modifier statt einen toten Präfix
zugänglich zu machen.
Ich habe mich schlussendlich für die QWERTZ-ß-Taste, also das
Ebene-1-Bindestrich als Modifier entschieden. Meine custom.ahk, die bei
mir unter »C:\Dokumente und Einstellungen\Matthias\Anwendungsdaten\NEO2«
liegt, habe ich exemplarisch in den Anhang gepackt, für die, die es
interessiert.
Mit wenigen geänderten Zeilen in dieser custom.ahk wäre die Ebene 9 auch
auf z.B. T3 gelegt, wobei man den Apostroph ersatzweise auf Ebene 2 von
T2 zugänglich machen könnte.
– Mœsi
; NEO-VM
; (c) 2009 Matthias Wächter
CharProc___VMt() {
global
; Custom Layout togglen
isVM := !(isVM)
if (isVM) {
CharProc___VM1()
if (zeigeModusBox)
TrayTip,NEO-VM-Belegungsvariante,Die Belegungsvariante wurde aktiviert.
Zum Deaktivieren`, Mod3+F12 drücken.,10,1
} else {
CharProc___VM0()
if (zeigeModusBox)
TrayTip,NEO-VM-Belegungsvariante,Die Belegungsvariante wurde
deaktiviert.,10,1
}
}
CharProc___VM1() {
global
; VM-Tastaturbelegungsvariante aktivieren
EDS("010",1,"U000079","U000059","U002026","U0022EE","U0003C5","U002207") ; y
EDS("011",1,"U00006F","U00004F","U00005F","U000008","U0003BF","U002208") ; o
EDS("012",1,"U000061","U000041","U00005B","S____Up","U0003B1","U002200") ; a
EDS("013",1,"U000070","U000050","U00005D","S___Del","U0003C0","U0003A0") ; p
EDS("01E",1,"U000069","U000049","U00005C","S__Home","U0003B9","U00222B") ; i
EDS("01F",1,"U000075","U000055","U00002F","S__Left","P___Uni","U0000B5") ; u
EDS("020",1,"U000065","U000045","U00007B","S__Down","U0003B5","U002203") ; e
EDS("021",1,"U000063","U000043","U00007D","S__Rght","U0003C7","U002102") ; c
EDS("022",1,"U00006C","U00004C","U00002A","S___End","U0003BB","U00039B") ; l
EDS("028",1,"U000078","U000058","U000040","U00002E","U0003BE","U00039E") ; x
EDS("02F",1,"U000076","U000056","U00007E","U00000D","" ,"U00222E") ; v
EDS("00C",0,"P___MXD","U002014","" ,"S__NSub","U002011","U0000AD") ; -
ED9("016", "S_VolDn")
ED9("017", "S_VolUp")
ED9("018", "S_VolMt")
ED9("024", "S_MPrev")
ED9("025", "S_MPlay")
ED9("026", "S_MStop")
ED9("027", "S_MNext")
}
CharProc___VM0() {
global
; VM-Tastaturbelegungsvariante deaktivieren
EDS("010",1,"U000078","U000058","U002026","U0022EE","U0003BE","U00039E") ; x
EDS("011",1,"U000076","U000056","U00005F","U000008","" ,"U00222E") ; v
EDS("012",1,"U00006C","U00004C","U00005B","S____Up","U0003BB","U00039B") ; l
EDS("013",1,"U000063","U000043","U00005D","S___Del","U0003C7","U002102") ; c
EDS("01E",1,"U000075","U000055","U00005C","S__Home","P___Uni","U0000B5") ; u
EDS("01F",1,"U000069","U000049","U00002F","S__Left","U0003B9","U00222B") ; i
EDS("020",1,"U000061","U000041","U00007B","S__Down","U0003B1","U002200") ; a
EDS("021",1,"U000065","U000045","U00007D","S__Rght","U0003B5","U002203") ; e
EDS("022",1,"U00006F","U00004F","U00002A","S___End","U0003BF","U002208") ; o
EDS("028",1,"U000079","U000059","U000040","U00002E","U0003C5","U002207") ; y
EDS("02F",1,"U000070","U000050","U00007E","U00000D","U0003C0","U0003A0") ; p
EDS("00C",0,"U00002D","U002014","" ,"S__NSub","U002011","U0000AD") ; -
}
CharProc___MXD() {
global
if (!isModXPressed) {
isModXPressed := 1
wasNonShiftKeyPressed := 0
%EbeneAktualisieren%()
PR%PhysKey% := "P___MXU"
}
}
CharProc___MXU() {
global
isModXPressed := 0
%EbeneAktualisieren%()
}
NEOVMEbeneAktualisieren() {
global
Modstate := IsMod4Active() . IsMod3Active()
Ebene7 := 0
Ebene8 := 0
if (isModXPressed) { ; Ebene X
EbeneC := 9
Ebene := 9
} else if (Modstate == "00") { ; Ebene 1 oder 2
if (IsShiftActive()) ; Ebene 2: Shift oder CapsLock
EbeneC := 2
else ; Ebene 1: Ohne Mod oder CapsLock mit Shift
EbeneC := 1
if (IsShiftPressed) ; NC: Ebene 2: Shift (ignoriert CapsLock)
EbeneNC := 2
else ; NC: Ebene 1: Ohne Mod (ignoriert CapsLock)
EbeneNC := 1
} else if (Modstate == "01") { ; Ebene 3 oder 5 (ignoriert CapsLock)
if (IsShiftPressed) ; Ebene 5: Shift+Mod3
EbeneC := 5
else ; Ebene 3: Mod3
EbeneC := 3
EbeneNC := EbeneC ; NC: gleich
} else if (Modstate == "10") { ; Ebene 4 (Mit Shift: Auch Ebene 7) (ignoriert
CapsLock)
EbeneC := 4
if (IsShiftPressed) ; Ebene 7: Shift+Mod4
Ebene7 := 1
EbeneNC := EbeneC ; NC: gleich
} else if (ModState == "11") { ; Ebene 6 (Mit Shift Xoder CapsLock: Auch
Ebene 8)
EbeneC := 6
if (IsShiftPressed) ; Ebene 8: Shift (ignoriert CapsLock)
Ebene8 := 1
EbeneNC := EbeneC ; NC: gleich
}
if (guiErstellt) {
if (striktesMod2Lock)
BSTSwitch(EbeneC)
else if ((EbeneNC < 3) and (EbeneNC != EbeneC))
BSTSwitch(EbeneNC . "C")
else
BSTSwitch(EbeneNC)
}
}
ED9(scpos,e9) {
global
pos := vksc%scpos%
if (pos != "")
SetKeyPos("CP9" . pos, e9)
}
ActivateNEOVM() {
global
EbeneAktualisieren := "NEOVMEbeneAktualisieren"
CSS_VolDn := "Volume_Down"
CSS_VolUp := "Volume_Up"
CSS_VolMt := "Volume_Mute"
CSS_MPrev := "Media_Prev"
CSS_MPlay := "Media_Play_Pause"
CSS_MStop := "Media_Stop"
CSS_MNext := "Media_Next"
CP3F12 := "P___VMt" ; M3+F12: Aktiviere/Deaktiviere NEO-VM
IniRead,isVM,%ini%,Global,isVM,0
if (isVM)
CharProc___VM1()
}
ActivateNEOVM()