i3wm:超过10个带双修饰键的工作区?


11

最近,我开始使用它i3wm并爱上了它。但是,有一件事困扰着我:控制10个以上的工作区。

在我的配置中,$mod+1可以$mod+9在工作区1到9(以及$mod+010)之间切换,但是有时候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。这样,我可以将每个键绑定两次,并两次按下mod键既方便又快捷。

我可以在其中做类似的事情i3wm吗?

您如何利用中的10个以上工作空间i3wm?还有其他解决方案吗?


我不知道您使用的是哪种键盘布局,但是您可以使用下方和上方数字右侧的部分/全部按键吗?即$ mod + q是工作区11,依此类推。当然,您必须重新分配任何正在使用的密钥。
airhuff

是的,但这有效地减少了可用于i3操作的快捷方式的数量。最好是,我希望有一个类似于$mod + $mod + 1工作区11的东西,以便快速按mod键的双键可以直接使我进入带有数字键1、2,...,9、0的工作区11-20。Vim我有这种行为:leader + r映射到以外的其他动作leader + leader + r,因此我可以通过按一次或两次领导键来使用同一热键触发不同的动作。
daniel451 '17

Answers:


14

i3并不真正支持vim之类的键序列。任何键绑定都由单个键组成,其后是一个可选的不同(所以没有Shift+Shift)修饰符的列表。并且在按下主键时需要按下所有修饰符。

话虽这么说,有两种主要方法可以拥有很多工作空间,而不必将它们绑定到长长的修饰符列表:

1.使用外部程序动态创建和访问工作区

您不必为每个工作空间都定义一个快捷方式,您只需通过向i3发送a workspace NEW_WS即可即时创建它们,例如使用以下程序: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

在两个示例中,workspaceor move命令都与链接mode "default",因此i3在每个命令之后自动返回到默认的键绑定映射。


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.