Niesamowite: przełącznik układu klawiatury

Używam awesome jako menedżera okien pod gnome (system debian) i stworzyłem widżet do zmiany układu klawiatury za pomocą tego kodu:

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

Działa, jednak występuje poważny problem z zachowaniem klawiatury. Kiedy przełączam się na układ ru, żadne z moich powiązań klawiatury nie działa. Niesamowite wiązania nie działają. Na przykład skróty do Vima też nie działają itd. Jak mogę rozwiązać ten problem?

Odpowiedz

Wiązania klawiatury nie działają, ponieważ twoja klawiatura nie ma już tych klawiszy.

Jeśli chcesz mieć na przykład Alt + F zrób coś, wtedy potrzebujesz „F” w jakimś klawiszu. Ale jeśli załadujesz „ru” sam , wtedy nie ma żadnego „F” (ani żadnej litery łacińskiej).

Myślę, że szczególnie, gdy musisz obsługiwać wiele układów , że znacznie lepiej jest pozwolić X11 (poprzez setxkbmap) wykonać pracę za Ciebie; sposób, w jaki robią to menedżerowie okien, jest znacznie bardziej ograniczony, niż odkryłeś.

Możesz także spróbować, ponieważ okropny widget wydaje się wywoływać setxkbmap, zmienić „ru” na „ru, us”, np. :

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

w ten sposób układ „us” zostanie umieszczony na wierzchu układu „ru” po załadowaniu, a klucze kluczy układu „us” układ, choć nadal nie jest możliwy do bezpośredniego wpisywania, będzie widoczny dla warstwy X11, która obsługuje przypisania klawiszy.

Odpowiedź

O AwesomeWM , z FAQ :

Powinieneś używać kodów klawiszy zamiast nazw kluczy, na przykład:

  1. Uruchom xev.
  2. Naciśnij klawisz Print .
  3. Przeczytaj dane wyjściowe

    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. Utwórz ~ / zrzuty ekranu, zainstaluj mosznę i dodaj następujące elementy do rc.lua:

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

Teraz możesz sprawdzić, czy możesz tworzyć zrzuty ekranu z dowolnym układem klawiatury.

Komentarze

  • To ' to tylko działający przykład. Chodzi o to, aby użyć kodów klawiszy

Odpowiedź

Właśnie musiałem zmierzyć się z tym samym problemem, rozwiązanie wymienione tutaj nie działa. W końcu znalazłem xkb-switch , który działał poprawnie z awesome. Ma dodatkową zaletę w postaci uproszczonego kodu w pliku 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 

Odpowiedź

Nie jestem pewien, czy ma to być komentarz, czy nie: po przeczytaniu i użyciu komentarza @yotam „ (dziękuję! Masz moje głosy za).

Zdecydowałem się przenieść to na wyższy poziom, poprawiając przełącznik xkb-tak, aby zezwalał zarówno na flagi -n, jak i -p, i dzięki temu można przejść do następnego układu i wydrukować go. do momentu scalenia można sklonować z tutaj . ostatecznie scalone! można znaleźć ponad tutaj .

Teraz można sprawić, by przełącznik był trochę czystszy i szybszy 🙂

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

EDYTUJ: aby setxkbmap nie przeszkadzał w przełączaniu układu przez niesamowite powiązania klawiszy, użyj tego rodzaju polecenia, aby skonfigurować swój układ:

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

Dzięki temu nie pozostaną żadne dodatkowe opcje z poprzedniej konfiguracji jon.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *