Impresionante: interruptor de distribución del teclado

Utilizo awesome como administrador de ventanas en gnome (sistema debian) e hice un widget para cambiar la distribución del teclado con este código:

-- Keyboard map indicator and changer kbdcfg = {} kbdcfg.cmd = "setxkbmap" kbdcfg.layout = { { "us", "" }, { "ru", "phonetic" } } kbdcfg.current = 1 -- us is our default layout kbdcfg.widget = widget({ type = "textbox", align = "right" }) kbdcfg.widget.text = " " .. kbdcfg.layout[kbdcfg.current][1] .. " " kbdcfg.switch = function () kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1 local t = kbdcfg.layout[kbdcfg.current] kbdcfg.widget.text = " " .. t[1] .. " " os.execute( kbdcfg.cmd .. " " .. t[1] .. " " .. t[2] ) end -- Mouse bindings kbdcfg.widget:buttons(awful.util.table.join( awful.button({ }, 1, function () kbdcfg.switch() end) )) -- Alt + Right Shift switches the current keyboard layout awful.key({ "Mod1" }, "Shift_R", function () kbdcfg.switch() end), 

Funciona, sin embargo, hay un problema serio con el comportamiento del teclado. Cuando cambio a la disposición ru, ninguna de las combinaciones de mi teclado funciona. Los enlaces impresionantes no funcionan. Por ejemplo, los atajos de vim tampoco funcionan, etc. ¿Cómo puedo resolver este problema?

Respuesta

Las asociaciones de su teclado no funcionan porque su teclado ya no tiene esos símbolos de teclas.

Si desea tener, por ejemplo, Alt + F hacer algo, entonces necesita «F» en alguna tecla. Pero si carga «ru» solo , entonces no hay «F» en absoluto (ni ninguna letra latina).

Creo que, especialmente cuando necesita manejar múltiples diseños , que es mucho mejor dejar que X11 (a través de setxkbmap) haga el trabajo por usted; la forma en que lo hacen los administradores de ventanas es mucho más limitada, como ha descubierto.

También puede intentar, ya que el horrible widget parece llamar a setxkbmap, cambiar «ru» por «ru, us», por ejemplo :

kbdcfg.layout = { { "us", "" }, { "ru,us", "phonetic" } } 

de esa manera, el diseño «us» se apilará encima del «ru» cuando se cargue, y los sistemas de claves del «us» el diseño, aunque todavía no se puede escribir directamente, será visto por la capa X11 que maneja las combinaciones de teclas.

Respuesta

Acerca de AwesomeWM , de sus Preguntas frecuentes :

Debe usar códigos clave, en lugar de nombres clave, como este:

  1. Ejecute xev.
  2. Presione la tecla Imprimir .
  3. Lea el resultado

    KeyPress event, serial 34, synthetic NO, window 0x1200002, root 0x291, subw 0x0, time 1510129, (471,293), root:(472,316), state 0x0, keycode **107** (keysym 0xff61, Print), same_screen YES, ... 
  4. Cree ~ / capturas de pantalla, instale scrot y agregue lo siguiente a rc.lua:

    awful.key({ }, "#107", function () awful.util.spawn("scrot -e "mv $f ~/screenshots/ 2>/dev/null"") end), 

Ahora puede probar que puede crear capturas de pantalla con cualquier distribución de teclado.

Comentarios

  • Ese ' es solo un ejemplo funcional. El punto es usar códigos clave

Respuesta

Acabo de abordar el mismo problema, y La solución enumerada aquí no funcionó. Finalmente encontré xkb-switch que funcionó correctamente con awesome. Tiene la ventaja adicional de un código simplificado en el archivo rc.lua.

-- language switcher kbdcfg = {} kbdcfg.cmd = "xkb-switch -n" kbdcfg.widget = wibox.widget.textbox() kbdcfg.current = io.popen("xkb-switch"):read("*a") kbdcfg.widget:set_text(kbdcfg.current) kbdcfg.switch = function() os.execute(kbdcfg.cmd) kbdcfg.current = io.popen("xkb-switch"):read("*a") kbdcfg.widget:set_text(kbdcfg.current) end 

Respuesta

Sin embargo, no estoy seguro de si se supone que es un comentario o no: después de leer y usar el comentario de @yotam (¡gracias! Tienes mi voto a favor).

He decidido llevarlo al siguiente nivel, parcheando xkb-switch para permitir las banderas -n y -p, y de esa manera hacer es posible cambiar al siguiente diseño e imprimirlo. hasta que se pueda clonar la combinación desde aquí . ¡finalmente se fusionó! aquí .

Ahora es posible hacer que el conmutador sea un poco más limpio y rápido 🙂

-- Language switcher kbdcfg = {} kbdcfg.widget = wibox.widget.textbox() kbdcfg.switch = function () current_kb = io.popen("xkb-switch -p -n"):read("*a") kbdcfg.widget:set_text(current_kb) end kbdcfg.switch() 

EDITAR: para hacer que setxkbmap no perturbe el diseño de conmutación mediante combinaciones de teclas increíbles, use este tipo de comando para configurar su diseño:

setxkbmap -layout "us,il" -option "" 

Eso asegurará que no queden opciones adicionales de la configuración anterior ion.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *