我可以找到要放在 i3-config 文件中的解决方案,我可以在特定工作区(不一定是特定监视器)上专门打开一个具有特定类名的窗口,我当然不能(原文如此?)给它焦点在那之后。
(注意:这里的“不是”是错字吗?我有点困惑)。
就配置文件的解决方案而言,您已经成功了一半。您唯一需要做的就是在您选择的显示器上拥有该工作区。
这是一个完整的解决方案(带有配置文件),包括您已经解决的步骤:
1. 为您的游戏指定一个工作空间
由于您可以根据需要创建任意数量的工作区,因此没有任何缺点。
assign [class="MyGame"] game
2. 将此工作区分配给您的左侧屏幕
首先,您需要知道屏幕的名称xrandr
( Arch 上的xorg-xrandr包)。
这是我的设置中的示例输出:
$ 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 script”并将焦点和鼠标移动到你的游戏工作区
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>
- 并且我将有一个简单的键绑定可以转到该工作区(以及其他人可以转到我的其他工作区。所以我也将有键绑定返回到 or ,具体取决于您是希望每个工作区有一个应用程序还是只有一个每个监视器的工作区等)
bindsym <bind1> workspaceleft
bindsym <bind2> workspacevim
所以我会在 vim 中工作并使用 vim 热键。如果编译成功,由于我们的早期设置,游戏将在正确的显示器上运行。然后我会按下<bind1>
它(并<bind2>
在我想要的时候回到右侧的监视器)。
我认为这可能比全能键绑定更方便。
另外,能够通过按键跳转到任何应用程序,并且默认情况下我的所有应用程序都位于我想要的位置以及我想要的方式是我真正喜欢 i3 的事情之一。所以设置这样的东西可能会让你的工作流程在这个特定的应用程序旁边更好。
或者,您可以使用键绑定在监视器之间切换:
bindsym <bind> focus output left
(请注意,这里的“left”不是工作区名称,而是方向。这将在彼此相邻的监视器之间切换。如果它们彼此重叠,则将“left”替换为“up”)。