Zuordnung der Feststelltaste zu Escape und Strg unter Windows 7

Zuordnung der Feststelltaste zu Escape und Strg unter Windows 7

Ich möchte die Feststelltaste mit Escape belegen können, wenn sie nicht mit einer anderen Taste gedrückt ist, und mit Control, wenn sie gedrückt ist. Wie kann ich das unter Windows 7 machen?

Antwort1

Dies erschien möglicherweise auf dem zuvor erwähntenVim-Wikia-Seitenach Richs Lösung oben.

; Author: fwompner gmail com
#InstallKeybdHook
SetCapsLockState, alwaysoff
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
    Send {Esc}
}
return

Das ist nicht meine Arbeit, aber ich habe angefangen, es zu verwenden, und es funktioniert genau wie beschrieben, ohne wirkliche Einschränkungen, und weil es nicht versucht, Ausnahmen zuzuordnen (weil sie unnötig sind), verhält es sich in Chrome ganz gut (ich wollte es unbedingt für Vimium).

Antwort2

Sie können es mit Escape neu zuordnenSharpKeys

Mir ist allerdings keine realistische Möglichkeit bekannt, eine bedingte Neuzuordnung durchzuführen, außer einen Tastaturtreiber zu schreiben.

Antwort3

Das ist zwar nicht ganz das, was Sie wollen, aber es ist sehr nah dran, wenn Sie mit einigen Mängeln leben können. Hier ist einAutoHotKeySkript:

$CapsLock::LControl
$CapsLock Up::Send {Escape}
return

Es ordnet die Feststelltaste der Strg-Taste zu und sendet Escape, wenn Sie die Taste loslassen. Ich habe eine Weile gebraucht, um mich daran zu gewöhnen, dass die Escape-Taste jedes Mal gedrückt wird, wenn ich die Feststelltaste loslasse. In Textbereichen von Websites ist es jedoch ziemlich nutzlos, da durch Drücken von Escape der Fokus auf dem Textbereich verloren geht.

Ich suche jedoch nach einer Lösung dafür. Ich könnte sogar so weit gehen, bei Bedarf eine Art Treiber-/Tastatur-Hook in C zu schreiben, haha.

Vim-spezifische Ärgernisse: Es macht das Eintippen von Digraphen mit der Kombination Strg-K unmöglich und ist generell einfach nur nervig, bevor man sich daran gewöhnt hat. Für mich funktioniert es jedoch gut, weil ich alles tun würde, um die Tasten Esc und Strg so weit wie möglich zu vermeiden.

Antwort4

Ich verwende folgendesAutoHotkeySkript hierfür, adaptiert voneine, die ich im Vim Tips Wiki gefunden habe. Die Implementierung ist ein bisschen hackig, aber sie „funktioniert für mich“. (Und anders als die anderen Antworten auf dieser Seite vom 19.09.2016 löst sie das Problem vollständig, ohne dass mir irgendwelche Einschränkungen bekannt wären.)

Der ursprüngliche Programmierer bemerkte:

Das Skript versucht auch, „Falschpositive“ zu erkennen und zu vermeiden, bei denen Sie die Strg-Taste und eine andere Taste drücken und beide zu schnell, d. h. vor Ablauf der Zeitüberschreitung, loslassen.

Passen Sie den Wert von 250 ms unbedingt an die Qualität Ihrer Tastatur und Ihre eigene Reaktionszeit an. Dies können Sie wahrscheinlich experimentell nach Ihren eigenen Wünschen anpassen.

CapsLockCtrlEscape.ahk gist:

g_LastCtrlKeyDownTime := 0
g_AbortSendEsc := false
g_ControlRepeatDetected := false

*CapsLock::
    if (g_ControlRepeatDetected)
    {
        return
    }

    send,{Ctrl down}
    g_LastCtrlKeyDownTime := A_TickCount
    g_AbortSendEsc := false
    g_ControlRepeatDetected := true

    return

*CapsLock Up::
    send,{Ctrl up}
    g_ControlRepeatDetected := false
    if (g_AbortSendEsc)
    {
        return
    }
    current_time := A_TickCount
    time_elapsed := current_time - g_LastCtrlKeyDownTime
    if (time_elapsed <= 250)
    {
        SendInput {Esc}
    }
    return

~*^a::
~*^b::
~*^c::
~*^d::
~*^e::
~*^f::
~*^g::
~*^h::
~*^i::
~*^j::
~*^k::
~*^l::
~*^m::
~*^n::
~*^o::
~*^p::
~*^q::
~*^r::
~*^s::
~*^t::
~*^u::
~*^v::
~*^w::
~*^x::
~*^y::
~*^z::
~*^1::
~*^2::
~*^3::
~*^4::
~*^5::
~*^6::
~*^7::
~*^8::
~*^9::
~*^0::
~*^Space::
~*^Backspace::
~*^Delete::
~*^Insert::
~*^Home::
~*^End::
~*^PgUp::
~*^PgDn::
~*^Tab::
~*^Return::
~*^,::
~*^.::
~*^/::
~*^;::
~*^'::
~*^[::
~*^]::
~*^\::
~*^-::
~*^=::
~*^`::
~*^F1::
~*^F2::
~*^F3::
~*^F4::
~*^F5::
~*^F6::
~*^F7::
~*^F8::
~*^F9::
~*^F10::
~*^F11::
~*^F12::
    g_AbortSendEsc := true
    return

verwandte Informationen