3 votos

¿Cómo se crean los atajos de teclado estilo emacs en hammerspoon?

Descubrí Hammerspoon hoy, una herramienta de automatización de teclas y escritorio reminiscente de i3wm o awesonewm para linux, pero combinada con algo como xdotool.

Soy un usuario de emacs, y encuentro útil la solución de emacs (y similarmente la de vim) de usar teclas de "prefijo" para admitir más combinaciones de teclas.

En emacs (y vim) puedes admitir teclas de "prefijo", que una vez presionadas seleccionan un mapa diferente de combinaciones de teclas. Así por ejemplo:

C-x seguido de , seguido de v podría estar enlazado a una combinación de teclas única que es diferente de v.

¿Existe alguna forma de lograr esto en hammerspoon (sin tener que escribir mi propia biblioteca que active y desactive las combinaciones de teclas a medida que presiono teclas)?

Investigación

2voto

NethumL Puntos 11

Si todavía te preguntas cómo hacer esto, entonces el RecursiveBinder Spoon para Hammerspoon lo hará. Escribí un artículo en Medium sobre cómo usarlo para crear una tecla de acceso directo para macOS.

Aquí tienes un fragmento de lua mínimo sobre cómo usarlo.

hs.loadSpoon("RecursiveBinder")  -- Cargar el spoon 

spoon.RecursiveBinder.escapeKey = {{}, 'escape'}  -- Presiona escape para abortar

-- singleKey es una función de conveniencia proporcionada en el Spoon
local singleKey = spoon.RecursiveBinder.singleKey

local keyMap = {
  [singleKey('b', 'navegador')] = function() hs.application.launchOrFocus("Firefox") end,  -- 'b' es el atajo de teclado, 'navegador' es el texto mostrado en la ayuda en pantalla
  [singleKey('t', 'terminal')] = function() hs.application.launchOrFocus("Terminal") end,
  [singleKey('d', 'domínio+')] = {  -- Capa separada
    [singleKey('g', 'github')] = function() hs.urlevent.openURL("github.com") end,
    [singleKey('y', 'youtube')] = function() hs.urlevent.openURL("youtube.com") end
  }
}

-- Llamar a recursiveBind devuelve la función de activación, y aquí está vinculado a opción+espacio
hs.hotkey.bind({'option'}, 'space', spoon.RecursiveBinder.recursiveBind(keyMap))  

Aquí, al presionar opción+espacio se activa la primera capa con b, t, d (navegador, terminal, dominio respectivamente) Al presionar d se activará la capa con g e y.

En cada nivel, se muestra un texto de ayuda, como en which-key en emacs.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X