web-dev-qa-db-ja.com

プレーンなXMonadでウィンドウごとのキーボードレイアウトを作成するにはどうすればよいですか?

私はしばらくの間プレーンXMonadを使用しています(KDE/GNomeと組み合わせていません)。現在、グローバルにキーの組み合わせだけでキーボードレイアウトを切り替えています。

[ ((modMask , xK_Scroll_Lock ),
    spawn "setxkbmap -layout us ; xmodmap ~/.Xmodmap")
, ((modMask .|. shiftMask, xK_Scroll_Lock),
    spawn "setxkbmap -layout cz ; xmodmap ~/.Xmodmap") ]

しかし、それは少し不便です。多くのウィンドウ(ブラウザ、ターミナルなど)では、ほとんどの場合、米国のレイアウトを維持する必要があります。 99%の場合、テキストエディタにのみローカライズされたレイアウトが必要です。また、ウィンドウやワークスペースを頻繁に切り替えるため、切り替えるたびに手動でレイアウトを切り替える必要があります。

理想的には、次のことを達成したいと思います。

  • キーの組み合わせを押すことで、現在フォーカスされているウィンドウに何らかのフラグを設定しました。
  • XMonadは、ウィンドウフォーカスが変更されると、フラグに従ってspawnコマンドを自動的に呼び出します。

それを行う方法(可能であれば)?手伝ってくれてありがとう。

(ボーナス:スクリプトからのある種のコマンドによって外部からフラグを管理します。)

6
Petr Pudlák

インストールkbddジョブを実行するデーモン。

起動時にこれを実行します。

kbdd
setxkbmap "us,ua" -option grp:scroll_toggle

それで全部です!

ウィジェットにレイアウトを表示するには、次のRubyコードが役立ちます:

  interface = 'ru.gentoo.KbddService'
  member = 'layoutChanged'
  mon = open "| dbus-monitor --monitor \"sender='#{interface}',member='#{member}'\""
  loop do
    str = mon.gets
    if str =~ /layoutChanged/
      lang = mon.gets[/.\Z/] # lang is now either 0 or 1 depending on the current layout
    end
  end
5
defhlt

scim および/または ibus を確認することをお勧めします。両方のデーモンは.Xsessionで起動できます。私の経験から、ibusは進むべき道ですが、入力メソッドをサポートしていない可能性があります。

xfce の設定例が文書化されています。

免責事項:これを回答ではなくコメントとして追加しました。

2
romanofski