Fantastiskt: tangentbordslayout switch

Jag använder fantastisk som fönsterhanterare under gnome (debian system) och jag skapade en widget för att växla tangentbordslayout med den här koden: / p>

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

Det fungerar, men det finns ett allvarligt problem med tangentbordets beteende. När jag byter till ru-layout fungerar inte mina tangentbordsbindningar. Fantastiska bindningar fungerar inte. Exempelvis fungerar inte vim-genvägar och osv. Hur kan jag lösa detta problem?

Svar

Dina tangentbordsbindningar fungerar inte eftersom tangentbordet inte längre har dessa nyckelsymboler.

Om du till exempel vill ha Alt + F gör något, då behöver du ”F” i någon nyckel. Men om du laddar ”ru” ensam så finns det inget ”F” alls (eller någon latinsk bokstav).

Jag tror, speciellt när du behöver hantera flera layouter , att det är mycket bättre att låta X11 (genom setxkbmap) göra jobbet åt dig; hur fönsterhanterare gör det är mycket mer begränsat som du har upptäckt.

Du kan också försöka, eftersom den fulla widgeten verkar kalla setxkbmap, att ändra ”ru” med ”ru, oss”, t.ex. :

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

på det sättet kommer ”us” -layouten att staplas ovanpå ”ru” när den är laddad, och nyckelsymbolen för ”oss” layout, även om den fortfarande inte kan skrivas direkt, kommer att ses av X11-lagret som hanterar nyckelbindningarna.

Svar

Om AwesomeWM , från dess FAQ :

Du bör använda tangentkoder istället för nyckelnamn så här:

  1. Kör xev.
  2. Tryck på Skriv ut -tangenten.
  3. Läs utdata

    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. Skapa ~ / skärmdumpar, installera scrot och lägg till följande till rc.lua:

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

Nu kan du testa att du kan skapa skärmdumpar med vilken tangentbordslayout som helst.

Kommentarer

  • Att ' bara är ett fungerande exempel. Poängen är att använda nyckelkoder

Svar

Jag måste bara ta itu med samma problem, och den lösning som listas här fungerade inte. Så småningom hittade jag xkb-switch som fungerade ordentligt med fantastiskt. Den har den extra bonusen för förenklad kod i rc.lua -filen.

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

Svar

Inte säker på om det antar att vara kommentar eller inte, dock: efter att ha läst och använt @yotam ”s kommentar (tack! du har fått min röst).

Jag har bestämt mig för att ta det till nästa nivå genom att lappa xkb-switch för att tillåta både -n och -p flaggor, och genom att göra det är möjligt att växla till nästa layout och skriva ut den. tills sammanfogning kan klonas från här . slutligen sammanslagna! kan hittas över här .

Nu är det möjligt att göra switchern lite renare och snabbare 🙂

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

EDIT: för att göra setxkbmap för att inte störa växlingslayout med fantastiska tangentbindningar, använd den här typen av kommando för att ställa in din layout:

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

Det ser till att inga extra alternativ finns kvar från tidigare konfiguration jon.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *