Mapeando Caps Lock para Escape e Controle no Windows 7

Mapeando Caps Lock para Escape e Controle no Windows 7

Quero poder mapear a tecla Caps Lock para Escape se ela não for pressionada com nenhuma outra tecla e Control se estiver. Como posso fazer isso no Windows 7?

Responder1

Isso pode ter aparecido no mencionado anteriormentepágina wikia do vimapós a solução de Rich acima.

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

Este não é meu trabalho, mas comecei a usá-lo e funciona exatamente como descrito, sem ressalvas reais, e como não tenta mapear nenhuma exceção (porque são desnecessárias), ele se comporta muito bem no Chrome (eu realmente queria isso para o Vimium).

Responder2

Você pode remapear para Escape comSharpKeys

No entanto, não conheço uma maneira realista de realizar o remapeamento condicional, além de escrever um driver de teclado.

Responder3

Isso não é exatamente o que você deseja, mas muito próximo se você conseguir conviver com algumas falhas. Aqui está umAutoHotKeyroteiro:

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

Ele remapeia Caps Lock para Ctrl e envia Escape quando você solta a tecla. Demorei um pouco para me acostumar com a tecla Escape sendo pressionada toda vez que eu soltava a tecla Caps Lock. No entanto, é praticamente inútil em áreas de texto de sites porque pressionar Escape perde o foco na área de texto.

Estou procurando uma solução para isso. Eu poderia ir mais longe e escrever algum tipo de gancho de driver/teclado em C, se necessário, haha.

Aborrecimentos específicos do Vim: torna impossível digitar dígrafos usando a combinação Ctrl-K e geralmente é irritante antes de você se acostumar. Funciona bem para mim porque eu faria qualquer coisa para evitar as teclas Esc e Ctrl tanto quanto possível.

Responder4

Eu uso o seguinteAutoHotkeyroteiro para isso, adaptado deum que encontrei no Vim Tips Wiki. A implementação é um pouco hackeada, mas “funciona para mim”. (E, ao contrário das outras respostas nesta página em 19/09/2016, ela resolve totalmente o problema, sem quaisquer ressalvas que eu saiba.)

O codificador original observou:

O script também tenta detectar e evitar "falsos positivos" quando você pressiona Control e outra tecla e solta ambas muito rapidamente, ou seja, antes do período de tempo limite.

Certifique-se de ajustar o valor de 250 ms dependendo de quão bom ou ruim é o seu teclado e do seu próprio tempo de reação. Provavelmente é algo para ajustar experimentalmente de acordo com sua preferência.

CapsLockCtrlEscape.ahk essência:

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

informação relacionada