In the screenshot above it shows that I have 2 keyboard layouts: American English (us) and Ukrainian (ua) and currently the first one is active.
Display part is implemented by this script. It depends on xkblayout-state utility. Save this script and compiled version of xkblayout-state to your ~/bin/ directory.
In your ~/.config/i3status/config add "output_format = i3bar" line to general section:
general {
colors = true
interval = 5
output_format = i3bar
}
In ~/.config/i3/config add:
bar {
status_command ~/bin/i3status.sh
output primary
tray_output primary
}
and
exec_always "setxkbmap -layout us,ua -option 'grp:alt_space_toggle'"
This will allow you to switch keyboard with Alt+SPACE, and the indicator will display the current status.
So far, so good, but the problem is that the status bar is updated every 5 seconds. We would want keyboard layout indicator to update immediately. This could be done. It will require another command line utility: xkb-switch (available via apt on Ubuntu Linux). The idea is to implement switching via i3 hotkey, which will also trigger an instant status bar update. Here is a section of i3 config:
So far, so good, but the problem is that the status bar is updated every 5 seconds. We would want keyboard layout indicator to update immediately. This could be done. It will require another command line utility: xkb-switch (available via apt on Ubuntu Linux). The idea is to implement switching via i3 hotkey, which will also trigger an instant status bar update. Here is a section of i3 config:
exec_always "setxkbmap -layout us,ua"
bindsym Mod1+space exec "xkb-switch -n; pkill -x --signal=SIGUSR1 i3status"
We removed ALT+SPACE toggle option from setxkbmap, and implemented it as bindsym. Sending USR1 signal to i3status triggers the immediate update.
thank you!!
ReplyDelete