summaryrefslogtreecommitdiff
path: root/bin/workspace
blob: a22511e43ff8cd55893635f60702cd782517e6d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/zsh

# Command to use
[[ $1 = 'n' ]] && cmd="workspace"
[[ $1 = 'm' ]] && cmd="move container to workspace"

# List of workspaces
workspaces=$(i3-msg -t get_workspaces | grep -Po '"name":.*?[^\\]"' | sed 's/"name":"\([^"]\+\)"/\1/g')

# Keep only the ones containing :
workspaces=$(echo $workspaces | sed '/:/!d')

# Get desired workspace
target=$(echo $workspaces | dmenu -i -sf green -p "Go to workspace:")

# Exit if empty
[[ -z $target ]] && exit

# If new workspace has to be created
if [[ ! $target = [0-9]* ]]; then

    # Calculate number for new workspace
    used_numbers=$(echo $workspaces | awk 'BEGIN { FS = ":" } ; { print $1 }')
    max_number=$(echo $used_numbers | tail -1)
    lowest_gap=$(echo $used_numbers | awk '$1!=p+1{print p+1}{p=$1}' | head -1)
    [[ -z $lowest_gap ]] && new_number=$(($max_number +  1)) || new_number=$lowest_gap

    # Add number to workspace name
    target=$new_number:$target
fi

# Execute command
exec i3-msg $cmd $target