Mover el foco a otra pantalla con el teclado

Estoy usando Yosemite. Tengo dos pantallas externas con varios espacios (me gusta la idea de una aplicación por espacio). A veces quiero mover el foco a otra pantalla sin usar un mouse. Tengo pocas soluciones pero no son ideales.

  • cmd+ F4 Mover el foco a la siguiente ventana o a otra ventana en Preferencias del sistema: mueve el foco pero el mouse aún permanece en la pantalla anterior, por lo que mover espacios no funciona correctamente ( ctrl+ o mueve espacios en la pantalla anterior)

  • BetterTouchTool puede mover el mouse, pero la posición del mouse debe estar codificada. Lo que es más, mover un mouse no hace que se mueva el foco, debe hacer clic adicionalmente y no siempre es bueno

  • ctrl+ npuede moverse a un espacio, pero no funciona si el espacio está abierto en otra pantalla, por ejemplo, si el espacio 1 está enfocado en la pantalla 1 y el espacio 2 está abierto en la pantalla 2, luego presionar + no mueve el enfoque, pero ctrlpresionar 2+ ctrly 3luego ctrl+ 2hace (si se crea el espacio 3 en la pantalla 2)

¿Tienes alguna idea?

Respuestas (2)

Resumen:

  1. Instalar cuchara martillo
  2. Copie el siguiente código en init.lua y ejecute hammerspoon
  3. Presione Cmd+1 para alternar entre pantallas

Para las personas que buscan otra solución a esto, considere usar hammerspoon (que es una gran aplicación que le permite escribir scripts para automatizar osx usando lua). Incluí el siguiente código en mi archivo init.lua para implementar el cambio de pantalla al presionar Cmd+1.

local function focus_other_screen() -- focuses the other screen 
   local screen = hs.mouse.getCurrentScreen()
   local nextScreen = screen:next()
   local rect = nextScreen:fullFrame()
   local center = hs.geometry.rectMidPoint(rect)
   hs.mouse.setAbsolutePosition(center)
end 

function get_window_under_mouse() -- from https://gist.github.com/kizzx2/e542fa74b80b7563045a 
   local my_pos = hs.geometry.new(hs.mouse.getAbsolutePosition())
   local my_screen = hs.mouse.getCurrentScreen()
   return hs.fnutils.find(hs.window.orderedWindows(), function(w)
                 return my_screen == w:screen() and my_pos:inside(w:frame())
   end)
end

function activate_other_screen()
   focus_other_screen() 
   local win = get_window_under_mouse() 
   -- now activate that window 
   win:focus() 
end 

hs.hotkey.bind({"cmd"}, "1", function() -- does the keybinding
      activate_other_screen()
end)

Esto funciona moviendo el mouse a la otra pantalla y luego enfocando la aplicación que está directamente debajo del mouse. El código está en lua. Consulte hammerspoon para obtener más detalles.

No importa, encontré una aplicación que lo hace: Amethyst . He estado buscando algo así durante años.