#!/bin/bash # Use either X keyboard extension layouts (setxkbmap), or fcitx (or both). # # At first I configured this to use setxkbmap, it works fine. # # fcitx already provides keybindings, but I wanted to display # the current input method in dwmblocks immediatly. So I'm # adding such support through fcitx5-remote. signal=20 # signal dwmblocks to update block send_signal() { pkill -RTMIN+$signal dwmblocks } # Cycle X keyboard extension layouts cycle_layouts() { layouts=(us latam) # X keyboard extension STATE_FILE="$XDG_STATE_HOME/keyboard_layout_state" if [ -f "$STATE_FILE" ]; then index=$(cat "$STATE_FILE") else index=0 fi next_index=$(( (index + 1) % ${#layouts[@]} )) echo $next_index > "$STATE_FILE" setxkbmap ${layouts[$index]} } fcitx_control() { # For this to correctly reflect the state of the system "Share Input State" # should be set to "All" in fcitx5-configtool. case $1 in en) fcitx5-remote -g Default fcitx5-remote -c # Closed ;; es) fcitx5-remote -g Spanish fcitx5-remote -c # Closed ;; ja) fcitx5-remote -g Default fcitx5-remote -o # Open ;; *) fcitx5-remote -q # fcitx5-remote -n fcitx5-remote ;; esac } #cycle_layouts fcitx_control $1 send_signal