Geweldig: schakelaar toetsenbordindeling

Ik gebruik awesome als vensterbeheerder onder gnome (debian-systeem) en ik heb een widget gemaakt om de toetsenbordindeling te veranderen met deze code:

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

Het werkt, maar er is een ernstig probleem met het toetsenbordgedrag. Wanneer ik overschak naar de ru-indeling, werkt niets van mijn toetsenbordbindingen. Geweldige bindingen werken niet. Vim-snelkoppelingen werken bijvoorbeeld ook niet, enz. Hoe kan ik dit probleem oplossen?

Antwoord

Uw toetsenbordbindingen werken niet omdat uw toetsenbord niet langer deze toetsenwoorden heeft.

Als u bijvoorbeeld Alt + F doe iets, dan heb je "F" nodig in een bepaalde toonsoort. Maar als je "ru" alleen laadt, dan is er helemaal geen "F" (en ook geen Latijnse letter).

Ik denk, vooral als je meerdere lay-outs moet verwerken , dat het veel beter is om X11 (via setxkbmap) het werk voor je te laten doen; de manier waarop de vensterbeheerders het doen is veel beperkter, zoals je hebt ontdekt.

Je kunt ook proberen, aangezien de vreselijke widget setxkbmap lijkt aan te roepen, "ru" te veranderen met "ru, us", bijv. :

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

op die manier wordt de "us" -lay-out bovenop de "ru" gestapeld wanneer deze wordt geladen, en de keysysms van de "us" lay-out, hoewel nog steeds niet direct typeerbaar, zal worden gezien door de X11-laag die de toetsverbindingen afhandelt.

Antwoord

Over AwesomeWM , uit de FAQ :

Je zou keycodes moeten gebruiken in plaats van keynames, zoals deze:

  1. Voer xev uit.
  2. Druk op de toets Afdrukken .
  3. Lees de uitvoer

    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. Maak ~ / screenshots, installeer scrot en voeg het volgende toe aan rc.lua:

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

Nu kun je testen of je screenshots kunt maken met elke toetsenbordindeling.

Reacties

  • Dat ' is slechts een werkend voorbeeld. Het punt is om sleutelcodes te gebruiken.

Answer

Ik heb net hetzelfde probleem moeten aanpakken, en de hier vermelde oplossing werkte niet. Ik vond uiteindelijk xkb-switch die goed werkte met awesome. Het heeft de toegevoegde bonus van vereenvoudigde code in het rc.lua -bestand.

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

Antwoord

Weet echter niet zeker of het commentaar moet zijn of niet: na het lezen en gebruiken van @yotam "s commentaar (bedankt! je hebt mijn upvote gekregen).

Ik heb besloten om het naar een hoger niveau te tillen, door xkb-switch te patchen om zowel -n als -p vlaggen toe te staan, en door dat het is mogelijk om over te schakelen naar de volgende lay-out en deze af te drukken. tot het samenvoegen kan worden gekloond van hier . eindelijk samengevoegd! kan worden gevonden via hier .

Nu is het mogelijk om de switcher een beetje schoner en sneller te maken 🙂

-- 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: om ervoor te zorgen dat setxkbmap het wisselen van lay-out niet verstoort door geweldige sneltoetsen, gebruik je dit soort commando om je lay-out in te stellen:

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

Dat zorgt ervoor dat er geen extra opties overblijven van de vorige configuratie ion.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *