i3wm: более 10 рабочих пространств с двойным ключом-модификатором?

11

Недавно я начал пользоваться i3wmи влюбился в него. Однако меня беспокоит одна вещь: управление более чем 10 рабочими пространствами.

В моем конфиге $mod+1для $mod+9переключения между рабочими пространствами от 1 до 9 (и $mod+0для 10), но иногда 10 рабочих областей просто недостаточно.

На данный момент я достучаться до рабочих 11 до 20 с $mod+mod1+1до $mod+mod1+0, т.е. удара mod+alt+number. Конечно, это работает без каких-либо проблем, но переключать подобные рабочие места довольно сложно, поскольку клавиши не легко нажимаются. Кроме того, перемещение приложений между рабочими пространствами с 11 по 20 требует mod+shift+alt+number-> безобразно.

В моих Vimпривязках (у меня много плагинов) я начал использовать двойные ярлыки модификаторов, как modkey + rдля плагина 1 и modkey + modkey + rдля плагина 2. Таким образом, я могу связывать каждую клавишу дважды, а нажатие клавиши модификации дважды - легко и быстро.

Могу ли я сделать что-то подобное в i3wm?

Как вы используете более 10 рабочих пространств в i3wm? Любые другие решения?

daniel451
источник
Я не знаю, какая у вас раскладка клавиатуры, но не могли бы вы использовать некоторые / все клавиши внизу и справа от цифр в верхней части? т. е. $ mod + q - это рабочее пространство 11 и т. д. Конечно, вам придется переназначить любой из тех ключей, которые используются.
Аэрофотосъемка
Да, но это эффективно уменьшает количество ярлыков, доступных для i3действий. Желательно, чтобы у меня было что-то похожее $mod + $mod + 1на рабочее пространство 11, чтобы быстрое двойное нажатие клавиши «мод» напрямую позволяло мне перейти на рабочее пространство 11-20 с помощью цифровых клавиш 1, 2, ..., 9, 0. В VimУ меня такое поведение: leader + rсопоставляется с другим действием, чем leader + leader + r, таким образом, я могу запускать различные действия с одной и той же горячей клавишей, просто нажав клавишу лидера один или два раза.
daniel451

Ответы:

14

i3 на самом деле не поддерживает последовательности клавиш, такие как vim . Любая привязка ключа состоит из одного ключа, которому предшествует необязательный список различных (поэтому нет Shift+Shift) модификаторов. И все модификаторы должны быть нажаты в то время, когда нажата основная клавиша.

При этом есть два основных способа иметь много рабочих пространств, не связывая их с длинными списками модификаторов:

1. Динамически создавать и получать доступ к рабочим пространствам с помощью внешних программ

Вам не нужно определять ярлык для каждой отдельной рабочей области, вы можете просто создать их на лету, отправив workspace NEW_WSв i3 , например, с помощью i3-msgпрограммы:

i3-msg workspace NEW_WS
i3-msg move container to workspace NEW_WS

i3 также поставляется с i3-inputкомандой, которая открывает небольшое поле ввода, а затем запускает команду с заданным входом в качестве параметра

i3-input -F 'workspace %s' -P 'go to workspace: '
i3-input -F 'move container to workspace %s' -P 'move to workspace: '

Свяжите эти две команды с ярлыками, и вы можете получить доступ к произвольному количеству рабочих пространств, просто нажав ярлык, а затем введя имя (или номер) требуемой рабочей области. (Если вы работаете только с пронумерованными рабочими пространствами, вы можете использовать workspace number %sвместо просто workspace %s)

2. Статически привязывать рабочие пространства к простым сочетаниям клавиш в режимах привязки клавиш.

Кроме того, для более статического подхода вы можете использовать режимы в конфигурации i3 . Вы можете иметь отдельные режимы для фокусировки и перемещения в рабочие области:

set $mode_workspace "goto_ws"
mode $mode_workspace {
    bindsym 1 workspace 1; mode "default"
    bindsym 2 workspace 2; mode "default"
    # […]
    bindsym a workspace a; mode "default"
    bindsym b workspace b; mode "default"
    # […]
    bindsym Escape mode "default"
}
bindsym $mod+w mode $mode_workspace

set $mode_move_to_workspace "moveto_ws"
mode $mode_move_to_workspace {
    bindsym 1 move container to workspace 1; mode "default"
    bindsym 2 move container to workspace 2; mode "default"
    # […]
    bindsym a move container to workspace a; mode "default"
    bindsym b move container to workspace b; mode "default"
    # […]
    bindsym Escape mode "default"
}
bindsym $mod+shift+w mode $mode_move_to_workspace

Или вы можете иметь отдельные привязки для фокусировки и перемещения в одном режиме:

set $mode_ws "workspaces"
mode $mode_ws {
    bindsym 1 workspace 1; mode "default"
    bindsym Shift+1 move container to workspace 1; mode "default"
    bindsym 2 workspace 2; mode "default"
    bindsym Shift+2 move container to workspace 2; mode "default"
    # […]
    bindsym a workspace a; mode "default"
    bindsym Shift+a move container to workspace a; mode "default"
    bindsym b workspace b; mode "default"
    bindsym Shift+b move container to workspace b; mode "default"
    # […]
    bindsym Escape mode "default"
}
bindsym $mod+shift+w mode $mode_move_to_workspace

В обоих примерах команды workspaceили объединены moveв цепочку mode "default", так что i3 автоматически возвращается к карте привязки клавиш по умолчанию после каждой команды.

Adaephon
источник
1

Мое решение этого заключается в использовании большего количества ключей:

set $ws0 "0:`:www"
set $ws1 "1:1"
set $ws2 "2:2"
set $ws3 "3:3:fm"
set $ws4 "4:4"
set $ws5 "5:5"
set $ws6 "6:6:dev"
set $ws7 "7:7"
set $ws8 "8:8"
set $ws9 "9:9"
set $ws10 "10:0:music"
set $ws11 "11:-:jd"
set $ws12 "12:=:comm"
set $ws13 "13:B"
set $ws14 "14:H"
set $ws15 "15:E"
set $ws16 "16:I"
set $ws17 "17:D:upwork"


bindsym $mod+grave workspace $ws0
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
bindsym $mod+minus workspace $ws11
bindsym $mod+equal workspace $ws12
bindsym $mod+BackSpace workspace $ws13
bindsym $mod+Home workspace $ws14
bindsym $mod+End workspace $ws15
bindsym $mod+Insert workspace $ws16
bindsym $mod+Delete workspace $ws17

for_window [class="Upwork"] move container to workspace $ws17
for_window [class="Spotify"] move container to workspace $ws10
for_window [class="Brave-browser"] move container to workspace $ws0
for_window [class="TelegramDesktop"] move container to workspace $ws12
for_window [class="jetbrains-pycharm"] move container to workspace $ws6
for_window [class="Caja"] move container to workspace $ws3
for_window [class="JDownloader"] move container to workspace $ws11
Лукас Эльснер
источник