Fantastisch: Tastaturlayout-Schalter

Ich verwende Awesome als Fenstermanager unter gnome (Debian-System) und habe ein Widget erstellt, um das Tastaturlayout mit diesem Code zu wechseln:

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

Es funktioniert, es gibt jedoch ein ernstes Problem mit dem Tastaturverhalten. Wenn ich zum Ru-Layout wechsle, funktioniert keine meiner Tastaturbindungen. Fantastische Bindungen funktionieren nicht. Zum Beispiel funktionieren vim-Verknüpfungen nicht und so weiter. Wie kann ich dieses Problem lösen?

Antwort

Ihre Tastaturbindungen funktionieren nicht, weil Ihre Tastatur diese Schlüsselsymbole nicht mehr hat.

Wenn Sie beispielsweise Alt + F etwas tun, dann brauchst du "F" in einer Taste. Aber wenn Sie "ru" alleine laden, gibt es überhaupt kein "F" (noch einen lateinischen Buchstaben).

Ich denke, besonders wenn Sie mehrere Layouts verarbeiten müssen , dass es viel besser ist, X11 (über setxkbmap) die Arbeit für Sie erledigen zu lassen; Die Art und Weise, wie die Fenstermanager dies tun, ist viel eingeschränkter, wie Sie festgestellt haben.

Sie können auch versuchen, "ru" durch "ru, us" zu ändern, z. B. setxkbmap :

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

Auf diese Weise wird das "us" -Layout beim Laden auf das "ru" -Layout und die Keysysmen des "us" gestapelt. Obwohl das Layout noch nicht direkt typisierbar ist, wird es von der X11-Ebene angezeigt, die die Tastenkombinationen verarbeitet.

Antwort

Über AwesomeWM , aus der FAQ :

Sie sollten Schlüsselcodes anstelle von Schlüsselnamen wie diesen verwenden:

  1. Führen Sie xev aus.
  2. Drücken Sie die Taste Print .
  3. Lesen Sie die Ausgabe

    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. Erstellen Sie ~ / Screenshots, installieren Sie scrot und fügen Sie rc.lua Folgendes hinzu:

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

Jetzt können Sie testen, ob Sie Screenshots mit jedem Tastaturlayout erstellen können.

Kommentare

  • Das ' ist nur ein funktionierendes Beispiel. Es geht darum, Schlüsselcodes zu verwenden.

Antwort

Ich musste nur das gleiche Problem angehen, und das Die hier aufgeführte Lösung hat nicht funktioniert. Ich fand schließlich xkb-switch , der mit awesome richtig funktionierte. Es hat den zusätzlichen Vorteil von vereinfachtem Code in der Datei 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 

Antwort

Ich bin mir jedoch nicht sicher, ob es sich um einen Kommentar handelt oder nicht: nach dem Lesen und Verwenden des Kommentars von @yotam (danke! du hast meine Gegenstimme).

Ich habe beschlossen, es auf die nächste Stufe zu bringen, indem ich den xkb-Schalter gepatcht habe, um sowohl -n- als auch -p-Flags zuzulassen, und auf diese Weise Es ist möglich, zum nächsten Layout zu wechseln und es zu drucken. bis die Zusammenführung von hier geklont werden kann. endlich zusammengeführt! hier .

Jetzt ist es möglich, den Switcher ein bisschen sauberer und schneller zu machen 🙂

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

BEARBEITEN: Damit setxkbmap das Schaltlayout nicht durch fantastische Tastenkombinationen stört, können Sie Ihr Layout mit diesem Befehl einrichten:

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

Dadurch wird sichergestellt, dass keine zusätzlichen Optionen aus der vorherigen Konfiguration übrig bleiben ion.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.