#!/bin/sh

# merge of all bakends (sysfont syskbd syslang) of alterator-sysconfig

alterator_api_version=1
po_domain="alterator-sysconfig"

. alterator-sh-functions
. shell-config
. alterator-sysconfig-functions

export DISPLAY=${DISPLAY:-:0}

# sysconfig-kbd stuff

write_layout(){
  case "$1" in
    alt_sh_toggle) echo "`_ "Alt+Shift key"`";;
    caps_toggle) echo "`_ "CapsLock key"`";;
    ctrl_shift_toggle) echo "`_ "Control+Shift keys"`";;
    ctrl_toggle) echo "`_ "Control key"`";;
    toggle) echo "`_ "Alt key"`";;
    ctrl_shift_toggle_ru_ua) echo "`_ "Control+Shift keys (UK,RU,EN)"`";;
    default) echo "`_ "Default"`";;
    nodeadkeys) echo "`_ "Without dead keys"`";;
    win_space_toggle) echo "`_ "Win+Space keys"`";;
    *) echo "$1";;
  esac
}

write_kbd(){
  while read name;do
    name="${name##*/}"
    name="${name%%.xkb}"
    write_enum_item "$name" "$(write_layout "$name")"
  done
}

### message loop

on_message(){
  case $in__objects in
    kbd)
      case "$in_action" in
        read)
          write_string_param layout "$(default_kbd "$in_language")"
        ;;
        list)
          local language="${in_language%%;*}"
          [ -d "$KBDDIR/$language" ] &&
            find "$KBDDIR/$language" -name '*.xkb' | LC_ALL=C.UTF-8 sort | write_kbd
        ;;
        write)
          write_keymap "$in_language" "$in_layout"
        ;;
      esac
    ;;
    language)
      case "$in_action" in
        list)
          local lang_file="$langlist.${in_language%%;*}"
          [ -s "$lang_file" ] || lang_file="$langlist.all"
          write_enum <"$lang_file"
        ;;
        write)
        write_language "$in_lang" "$in_language"
        ;;
      esac
    ;;
  esac
}

message_loop
