素晴らしい:キーボードレイアウトスイッチ

gnome(debianシステム)でウィンドウマネージャーとして素晴らしいを使用し、次のコードでキーボードレイアウトを切り替えるウィジェットを作成しました:

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

動作しますが、キーボードの動作に深刻な問題があります。 ruレイアウトに切り替えると、キーボードバインディングが機能しません。素晴らしいバインディングが機能しません。たとえば、vimショートカットも機能しません。この問題を解決するにはどうすればよいですか?

回答

キーボードにこれらのキーシムがないため、キーボードバインディングが機能していません。

たとえば、 Alt + F 何かをするなら、いくつかのキーに「F」が必要です。ただし、「ru」を単独でロードすると、「F」はまったく表示されません(ラテン文字も表示されません)。

特に、複数のレイアウトを処理する必要がある場合はそうです。 、X11(setxkbmapを介して)に仕事を任せる方がはるかに良いこと。ウィンドウマネージャーのやり方は、あなたが発見したようにはるかに制限されています。

awfullウィジェットがsetxkbmapを呼び出しているように見えるので、「ru」を「ru、us」に変更してみることもできます。 :

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

このようにすると、「us」レイアウトは、ロード時に「ru」レイアウトと「us」のkeysysmsの上にスタックされます。レイアウトはまだ直接入力できませんが、キーバインディングを処理するX11レイヤーに表示されます。

回答

AwesomeWMについて、 FAQ から:

次のように、キー名の代わりにキーコードを使用する必要があります:

  1. xevを実行します。
  2. 印刷キーを押します。
  3. 出力を読み取ります

    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. 〜/ screenshotsを作成し、scrotをインストールして、rc.luaに以下を追加します。

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

これで、任意のキーボードレイアウトでスクリーンショットを作成できることをテストできます。

コメント

  • 'は単なる実用的な例です。重要なのは、キーコードを使用することです

回答

同じ問題に取り組む必要がありましたが、ここにリストされている解決策は機能しませんでした。最終的に、 xkb-switch が正常に機能することがわかりました。 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 

回答

ただし、コメントであるかどうかはわかりません。 @yotamのコメントを読んで使用した後(ありがとうございます!あなたは私の賛成票を獲得しました。)

xkb-switchにパッチを適用して-nフラグと-pフラグの両方を許可し、それによって次のレベルに引き上げることにしました。次のレイアウトに切り替えて印刷することができます。マージがここから複製できるようになるまで。最後にマージされました! ここ

これで、スイッチャーを少しクリーンで高速にすることができます:)

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

編集:setxkbmapを作成して、すばらしいキーバインディングによってレイアウトの切り替えを妨げないようにするには、次の種類のコマンドを使用してレイアウトを設定します。

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

これにより、前の構成から余分なオプションが残らないようになりますイオン。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です