Я могу найти решения, которые нужно поместить в файл i3-config, где я могу специально открыть окно с определенным именем класса в определенной рабочей области (которая не обязательно является конкретным монитором), и я, конечно, не могу (sic?) дать ему фокус после того.
(примечание: "не" здесь опечатка? Я немного запутался).
Что касается решения с конфигурационным файлом, то вы уже на полпути. Единственное, что вам нужно сделать, это иметь это рабочее пространство на мониторе по вашему выбору.
Вот полное решение (с файлом конфигурации), включая шаги, которые вы уже решили:
1. Выделите рабочее пространство для своей игры
Поскольку вы можете создать столько рабочих областей, сколько захотите, в этом нет недостатка.
assign [class="MyGame"] game
2. Назначьте это рабочее пространство левому экрану.
Во-первых, вам нужно узнать имя экрана с xrandr
(xorg-xrandr в Arch).
Вот пример вывода в моих настройках:
$ xrandr
Screen 0: minimum 8 x 8, current 2560 x 2520, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+1440 (normal left inverted right x axis y axis) 310mm x 170mm
1920x1080 60.00*+ 59.93 48.00
1680x1050 59.95 59.88
1400x1050 59.98
1600x900 60.00 59.95 59.82
1280x1024 60.02
1400x900 59.96 59.88
1280x960 60.00
1368x768 60.00 59.88 59.85
1280x800 59.81 59.91
1280x720 59.86 60.00 59.74
1024x768 60.00
1024x576 60.00 59.90 59.82
960x540 60.00 59.63 59.82
800x600 60.32 56.25
864x486 60.00 59.92 59.57
640x480 59.94
720x405 59.51 60.00 58.99
640x360 59.84 59.32 60.00
DP1 disconnected (normal left inverted right x axis y axis)
DP2 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 550mm x 310mm
2560x1440 59.95*+
2048x1080 60.00 24.00
1920x1080 60.00 50.00 59.94
1920x1080i 60.00 50.00 59.94
1600x1200 60.00
1280x1024 75.02 60.02
1152x864 75.00
1280x720 60.00 50.00 59.94
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 60.00 59.94
640x480 75.00 60.00 59.94
720x400 70.08
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
В моем случае eDP1
— это мой основной (ноутбук) монитор, а DP2
— мой внешний монитор.
Если бы мне нужно было рабочее пространство game
на моем внешнем мониторе, я бы использовал:
workspace game output DP2
3. Создайте привязку клавиш, которая запустит ваш «скрипт make&run» и переместит фокус и мышь в рабочую область игры.
bindsym <my-bind> exec --no-startup-id <make&run script>; workspace game
Вместо использования горячей клавиши vim вы используете привязку клавиш i3 как для запуска сценария (который откроет приложение, и приложение откроется на правильном мониторе благодаря настройкам выше), так и для перемещения фокуса на этот монитор:
Легко заставить i3 выполнять команды, в то время как очень сложно заставить команду перемещать мышь и фокусироваться (поскольку это задача среды wm или рабочего стола).
Я могу придумать недостаток этого метода:
Когда вы столкнетесь с ошибкой компилятора, ваш фокус и мышь все равно переместятся на левый монитор. Это может вас раздражать, если это происходит часто.
Способ, которым я перескакиваю из рабочей области в рабочую область, заключается в том, что у меня есть список именованных рабочих областей и простые мнемонические сочетания клавиш, чтобы добраться до них.
Поэтому я бы справился с этим немного иначе, чем с одной привязкой клавиш (или командой, как вы просили), выполняющей все это:
- У меня было бы рабочее пространство с кучей приложений, которые я всегда хочу видеть на левом мониторе.
assign [class="MyGame"] workspaceleft
assign [class="App1"] workspaceleft
assign [class="App2"] workspaceleft
assign [class="App3"] workspaceleft
workspace workspaceleft output <left-monitor-name-given-by-xrandr>
workspace workspacevim output <right-monitor-name-given-by-xrandr>
- и у меня была бы простая привязка клавиш для перехода к этой рабочей области (и другие для перехода к другим моим рабочим областям. Так что у меня также были бы привязки клавиш для возврата к или , в зависимости от того, предпочитаете ли вы иметь одно приложение для каждой рабочей области или только одно рабочее пространство на каждый монитор и т. д.)
bindsym <bind1> workspaceleft
bindsym <bind2> workspacevim
Поэтому я бы работал в vim и использовал горячую клавишу vim. Если компиляция сработает, игра появится на правильном мониторе благодаря нашим ранним настройкам. Затем я нажимал <bind1>
, чтобы перейти к нему (и <bind2>
, чтобы вернуться к правому боковому монитору, когда захочу).
Я думаю, что это может быть удобнее, чем универсальная привязка клавиш.
Кроме того, возможность перейти к любому приложению нажатием клавиши и заставить все мои приложения по умолчанию загружаться туда, куда я хочу и так, как я хочу, — это одна из вещей, которые мне очень нравятся в i3. Таким образом, установка таких вещей может сделать ваш рабочий процесс намного приятнее для этого конкретного приложения.
В качестве альтернативы вы можете использовать привязку клавиш для переключения между вашими мониторами:
bindsym <bind> focus output left
(Обратите внимание, что здесь «влево» — это не имя рабочей области, а направление. Это позволит переключаться между мониторами, установленными рядом друг с другом. Замените «влево» на «вверх», если они находятся друг над другом).
person
prosoitos
schedule
13.01.2020