Fantastico: switch layout di tastiera

Uso awesome come window manager sotto gnome (sistema Debian) e ho creato un widget per cambiare layout di tastiera con questo codice:

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

Funziona, tuttavia cè un serio problema con il comportamento della tastiera. Quando passo al layout ru, nessuna delle mie associazioni di tastiera funziona. Le associazioni fantastiche non funzionano. Ad esempio le scorciatoie di vim non funzionano e così via. Come posso risolvere questo problema?

Risposta

Le associazioni della tastiera non funzionano perché la tua tastiera non ha più quei tasti.

Se desideri, ad esempio, Alt + F fai qualcosa, quindi hai bisogno di “F” in una chiave. Ma se carichi “ru” da solo , allora non cè affatto “F” (né alcuna lettera latina).

Penso, specialmente quando devi gestire più layout , che è molto meglio lasciare che X11 (tramite setxkbmap) faccia il lavoro per te; il modo in cui lo fanno i gestori di finestre è molto più limitato come hai scoperto.

Puoi anche provare, poiché lorribile widget sembra chiamare setxkbmap, a cambiare “ru” con “ru, us”, ad es. :

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

in questo modo, il layout “us” verrà impilato sopra quello “ru” una volta caricato, e il keysysms di “us” il layout, sebbene non sia ancora direttamente scrivibile, sarà visto dal livello X11 che gestisce le associazioni di tasti.

Risposta

Informazioni su AwesomeWM , dalle sue FAQ :

Dovresti usare i codici chiave, invece dei nomi chiave, in questo modo:

  1. Esegui xev.
  2. Premi il tasto Print .
  3. Leggi loutput

    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. Crea ~ / screenshot, installa scrot e aggiungi quanto segue a rc.lua:

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

Ora puoi provare che puoi creare screenshot con qualsiasi layout di tastiera.

Commenti

  • Questo ' è solo un esempio funzionante. Il punto è usare i codici chiave

Answer

Ho dovuto affrontare lo stesso problema e il la soluzione qui elencata non ha funzionato. Alla fine ho trovato xkb-switch che funzionava correttamente con awesome. Ha il vantaggio aggiuntivo del codice semplificato nel file 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 

Risposta

Non sono sicuro che si tratti di un commento o meno, tuttavia: dopo aver letto e utilizzato il commento di @yotam “ (grazie! hai ricevuto il mio voto positivo).

Ho deciso di portarlo al livello successivo, correggendo xkb-switch per consentire sia i flag -n che -p, e così facendo è possibile passare al layout successivo e stamparlo. fino a quando lunione può essere clonata da qui . finalmente unito! può essere trovato sopra qui .

Ora è possibile rendere lo switcher un po più pulito e veloce 🙂

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

MODIFICA: per fare in modo che setxkbmap non disturbi il layout di commutazione con fantastiche combinazioni di tasti, utilizza questo tipo di comando per impostare il layout:

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

Ciò assicurerà che non rimangano opzioni extra dalla configurazione precedente ione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *