LINUX.ORG.RU

Переключение раскадки

 ,


0

1

Привет. Хочу забайндить в «свей» клавиши на переключение раскладки (для отправки сигнала значку в панельке), т.е назначить в стиле input * xkb_options «grp:win_space_toggle» не пройдёт. В репах у арча что-то нет всяких xkb-switch, собирать такую элементарщину из исходников? Да в общем-то сделал, но как-то костыльно вышло:

#/bin/bash

cur_layout=$(swaymsg -rt get_inputs | sed -En 's/"xkb_active_layout_index":[[:blank:]]*([0-9]*).*/\1/p' | head -n1)
if test ${cur_layout} != 0; then
    next_layout=0
else
    next_layout=1
fi
swaymsg input \* xkb_switch_layout ${next_layout}

Может я туплю и есть какая-то вейлендовская утилита чтобы сделать вот так просто: xkb-switch -n?

★★

В репах у арча что-то нет всяких xkb-switch,

да она бы и не завелась.

pavlick ★★
() автор топика

Нету. Только костыли. У меня вот так:

swaymsg \
  --type get_inputs | \
  jq \
    --raw-output \ '
      [
        .[] |
          select(.type == "keyboard") |
          .xkb_active_layout_name |
          select(contains("English (US)") | not)
      ] |
        first // "En"
    '

swaymsg \
  --type subscribe \
  --monitor \
  --raw \
  '["input"]' | \
  jq \
    --raw-output \
    --unbuffered \ '
      select(.change == "xkb_layout") |
        .input.xkb_active_layout_name |
        sub("English \\(US\\)"; "En") | sub("Russian"; "Ru")'

Sunderland93 ★★★★★
()

Хотя, не назвал бы я подход в sway костыльным, мне даже больше нравится, чем в i3 (там надо было слать сообщения или постоянно дергать xkb-switch, а тут всё из коробки). Делюсь своим решением, может кто заюзает (важно, us - первая раскладка в xkb_layout):

# ~/.config/sway/config
input * xkb_layout "us,ru"
input * xkb_options "grp:win_space_toggle"
...
bar {
    status_command my_langid
    ...
}

# /usr/local/bin/my_langid
#/bin/sh
swaymsg -rt get_inputs | sed -nE 's/.*"xkb_active_layout_index":[[:blank:]]*([0-9]*).*/\1/p' | sed 's/0/US/; s/1/RU/; q'
while swaymsg -rt subscribe '["input"]' | sed -E 's/.*"xkb_active_layout_index":[[:blank:]]*([0-9]*).*/\1/; s/0/US/; s/1/RU/'; do true; done
pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)

Кстати, ещё полезная штука - автоматическая смена раскладки на US при смене активного окна. Почему? Потому что там консоль/vim/emacs со своей собственной переключалкой ожидающей US, мне удобно. Небольшой костылик, запущу как сервис:

while swaymsg -rt subscribe '["window"]'; do swaymsg input \* xkb_switch_layout 0; done
pavlick ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.