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