Impresionante: cambio de distribución del teclado

Impresionante: cambio 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 grave con el comportamiento del teclado. Cuando cambio al diseño ru, ninguna de las combinaciones de mi teclado funciona. Las fijaciones impresionantes no funcionan. Por ejemplo, los atajos de vim tampoco funcionan, etc. ¿Cómo puedo resolver este problema?

Respuesta1

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

Si desea que, por ejemplo, Alt+ Fhaga algo, entonces necesita "F" en alguna clave. Pero si cargas "ru"solo, entonces no hay ninguna "F" (ni ninguna letra latina).

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

También puedes 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 "nosotros" se apilará encima del "ru" cuando se cargue, y los sistemas de teclas del diseño "nosotros", aunque todavía no se pueden escribir directamente, serán vistos por la capa X11 que maneja las combinaciones de teclas. .

Respuesta2

Acerca de AwesomeWM, desde suPreguntas más frecuentes:

Deberías usar códigos clave, en lugar de nombres clave, como este:

  1. Correr xev.
  2. Pulse Printla tecla.
  3. Leer 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 ~/screenshots, 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 puedes probar que puedes crear capturas de pantalla con cualquier distribución de teclado.

Respuesta3

Tuve que abordar el mismo problema y la solución enumerada aquí no funcionó. finalmente encontréinterruptor xkbque funcionó correctamente con Awesome. Tiene la ventaja adicional de tener un código simplificado en el rc.luaarchivo.

-- 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

Respuesta4

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

He decidido llevarlo al siguiente nivel, parcheando xkb-switch para permitir los indicadores -n y -p, y con eso hacer posible cambiar al siguiente diseño e imprimirlo.hasta que la fusión se pueda clonar desdeaquí.finalmente fusionado! se puede encontrar sobreaquí.

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 cambio 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.

información relacionada