1. 외부 프로그램을 사용하여 작업 공간을 동적으로 생성하고 액세스합니다.

1. 외부 프로그램을 사용하여 작업 공간을 동적으로 생성하고 액세스합니다.

최근에 나는 그것을 사용하기 시작했고 i3wm그것과 사랑에 빠졌습니다. 하지만 한 가지 귀찮은 점은 10개 이상의 작업 공간을 제어한다는 것입니다.

내 구성에서는 작업 공간 1에서 9(및 10) 사이를 전환 $mod+1하지만 때로는 10개의 작업 공간으로는 충분하지 않습니다.$mod+9$mod+0

현재 나는 클릭을 $mod+mod1+1통해 작업공간 11~20에 도달합니다 . 물론 별 문제는 없지만 이렇게 작업공간을 전환하는 것은 키를 쉽게 누를 수 없기 때문에 상당히 번거롭습니다. 또한 작업 공간 11과 20 사이에서 앱을 이동하는 데 시간이 많이 걸립니다. -> 보기 흉합니다.$mod+mod1+0mod+alt+numbermod+shift+alt+number

Vim바인딩(플러그인이 많이 있음)에서 나는 modkey + r플러그인1 및 modkey + modkey + r플러그인2와 같은 이중 수정자 단축키를 사용하기 시작했습니다. 이렇게 하면 각 키를 두 번 바인딩할 수 있고 모드 키를 두 번 누르는 것이 쉽고 빠릅니다.

비슷한 일을 할 수 있나요 i3wm?

10개가 넘는 작업 공간을 어떻게 활용하시나요 i3wm? 다른 해결책이 있나요?

답변1

i3실제로 이와 같은 키 시퀀스를 지원하지 않습니다. 모든 키 바인딩은 단일 키와 그 앞에 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

두 예 모두에서 workspaceor 명령은 move다음과 mode "default"연결 됩니다.i3각 명령 후에 자동으로 기본 키 바인딩 매핑으로 돌아갑니다.

답변2

내 해결책은 더 많은 키를 사용하는 것이었습니다.

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

답변3

내 솔루션은 Lucas의 답변을 기반으로 합니다.

# win principal, alt secondary
# set $mod Mod4
# set $mod2 Mod1
#
# # alt principal, win secondary
set $mod Mod1
set $mod2 Mod4

# switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
# Workspaces 11-20, with mod2
bindsym $mod2+1 workspace 11
bindsym $mod2+2 workspace 12
bindsym $mod2+3 workspace 13
bindsym $mod2+4 workspace 14
bindsym $mod2+5 workspace 15
bindsym $mod2+6 workspace 16
bindsym $mod2+7 workspace 17
bindsym $mod2+8 workspace 18
bindsym $mod2+9 workspace 19
bindsym $mod2+0 workspace 20

# move focused container to workspace, keeping focus
bindsym $mod+Shift+1 move workspace 1; workspace 1
bindsym $mod+Shift+2 move workspace 2; workspace 2
bindsym $mod+Shift+3 move workspace 3; workspace 3
bindsym $mod+Shift+4 move workspace 4; workspace 4
bindsym $mod+Shift+5 move workspace 5; workspace 5
bindsym $mod+Shift+6 move workspace 6; workspace 6
bindsym $mod+Shift+7 move workspace 7; workspace 7
bindsym $mod+Shift+8 move workspace 8; workspace 8
bindsym $mod+Shift+9 move workspace 9; workspace 9
bindsym $mod+Shift+0 move workspace 10; workspace 10

bindsym $mod2+Shift+1 move workspace 11; workspace 11
bindsym $mod2+Shift+2 move workspace 12; workspace 12
bindsym $mod2+Shift+3 move workspace 13; workspace 13
bindsym $mod2+Shift+4 move workspace 14; workspace 14
bindsym $mod2+Shift+5 move workspace 15; workspace 15
bindsym $mod2+Shift+6 move workspace 16; workspace 16
bindsym $mod2+Shift+7 move workspace 17; workspace 17
bindsym $mod2+Shift+8 move workspace 18; workspace 18
bindsym $mod2+Shift+9 move workspace 19; workspace 19
bindsym $mod2+Shift+0 move workspace 20; workspace 20

답변4

"toggle" 변수 를 /tmp. bindsym exec대부분의 배포판에서는 RAM에 저장 /tmp되므로 tmpfs여전히 사용 속도가 상당히 빠릅니다.

Mod+ =각 작업 공간 번호에 10을 추가하는 "작업 공간 수정자"를 추가했습니다.

Mod+ -각 작업 공간 번호에서 10을 빼서 "작업 공간 수정자"를 줄입니다.

일반적으로 Mod+를 1누르면작업공간 1. Mod+를 누른 후 =다음으로 이동합니다.작업공간 11.

구성은 다음과 같습니다.

#Increase workspace modifier
bindsym $mod+equal exec echo $(( `cat /tmp/workspace_modifier` + 1 )) > /tmp/workspace_modifier

#Decrease workspace modifier
bindsym $mod+minus exec n=$(( `cat /tmp/workspace_modifier` - 1 )) && echo `[ $n -le 0 ] && echo '' || echo $n` > /tmp/workspace_modifier

#Switch to workspace
bindsym $mod+0 exec i3-msg workspace number `cat /tmp/workspace_modifier`0
bindsym $mod+1 exec i3-msg workspace number `cat /tmp/workspace_modifier`1
bindsym $mod+2 exec i3-msg workspace number `cat /tmp/workspace_modifier`2
bindsym $mod+3 exec i3-msg workspace number `cat /tmp/workspace_modifier`3
bindsym $mod+4 exec i3-msg workspace number `cat /tmp/workspace_modifier`4
bindsym $mod+5 exec i3-msg workspace number `cat /tmp/workspace_modifier`5
bindsym $mod+6 exec i3-msg workspace number `cat /tmp/workspace_modifier`6
bindsym $mod+7 exec i3-msg workspace number `cat /tmp/workspace_modifier`7
bindsym $mod+8 exec i3-msg workspace number `cat /tmp/workspace_modifier`8
bindsym $mod+9 exec i3-msg workspace number `cat /tmp/workspace_modifier`9

#Move focused container to workspace
bindsym $mod+Shift+0 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`0
bindsym $mod+Shift+1 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`1
bindsym $mod+Shift+2 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`2
bindsym $mod+Shift+3 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`3
bindsym $mod+Shift+4 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`4
bindsym $mod+Shift+5 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`5
bindsym $mod+Shift+6 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`6
bindsym $mod+Shift+7 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`7
bindsym $mod+Shift+8 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`8
bindsym $mod+Shift+9 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`9

이 구성에서는 Mod+가 0다음으로 이동되었습니다.작업공간 0바꾸다작업공간 10. 이것이 중요한 경우 다음 바인딩을 사용할 수 있습니다.

bindsym $mod+0 exec n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` && i3-msg workspace number `echo "$w*10 + 10" | bc`
bindsym $mod+Shift+0 exec n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` && i3-msg move container to workspace number `echo "$w*10 + 10" | bc`

작업 공간 이름을 보존하는 것은 i3 config가 변수를 처리하는 방식으로 인해 복잡합니다. 변수를 exec 명령 환경에 주입하지 않고 직접 대체하므로 exec 명령에서 값을 다시 선언하지 않고 동적으로 값을 검색하는 것은 불가능합니다. 이는 빠르게 혼란스러울 수 있습니다.

set $ws1 "1: one"
set $ws2 "2: two"
set $ws1 "11: eleven"
set $ws2 "12: twelve"

bindsym $mod+Shift+1 exec key=1 ws1=$ws1 ws2=$ws2 ws11=$ws11 ws12=$ws12 && i=`cat /tmp/workspace_modifier` && dynamic=ws${i}${key} && text=${!dynamic} && workspace=$(echo `[ "$text" ] && echo "$text" || echo ${i}${key}` ) && i3-msg move container to workspace number $workspace

set이는 exec 명령에서 해당 명령으로 명명된 작업 공간 만 선언하는 한 작동합니다. 예를 들어 정의했지만 set $ws1 "1: text"설정하지 않은 $ws11다음 이를 ws11=$ws11exec 명령에 포함하면 i3 config는 에서 일치하는 대로 ws11=$ws11확장 됩니다 . 그렇지 않으면 잘 작동합니다.ws11="1: one"1$ws1$ws11

Mod작업 공간 이름과 함께 유지 + 0설정을 사용하려면작업공간 10, 다음 바인딩 기호를 사용하세요.

bindsym $mod+0 exec key=0 ws1=$ws1 ws2=$ws2 ws3=$ws3 ws4=$ws4 ws5=$ws5 ws6=$ws6 ws7=$ws7 ws8=$ws8 ws9=$ws9 ws10=$ws10 && n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` i=`echo "$w*10 + 10" | bc` && dynamic=ws${i} && text=${!dynamic} && workspace=$(echo `[ "$text" ] && echo "$text" || echo ${i}` ) && i3-msg workspace number $workspace
bindsym $mod+Shift+0 exec key=0 ws0=$ws0 ws1=$ws1 ws2=$ws2 ws3=$ws3 ws4=$ws4 ws5=$ws5 ws6=$ws6 ws7=$ws7 ws8=$ws8 ws9=$ws9 ws10=$ws10 && n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` i=`echo "$w*10 + 10" | bc` && dynamic=ws${i} && text=${!dynamic} && workspace=$(echo `[ "$text" ] && echo "$text" || echo ${i}` ) && i3-msg move container to workspace number "$workspace"

관련 정보