| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | #!/bin/shif [[ $# -eq 0 ]] ; then    echo "i3-workspace-layout [ name workspace | list | define workspace name | edit name | dmenu ]"    exitfiLAYOUT=$1WORKSPACE=$2function define_workspace {    i3-save-tree --workspace ${WORKSPACE} > ~/.config/i3/layouts/${NAME}.json    emacsclient --alternate-editor="" -n ~/.config/i3/layouts/${NAME}.json}function edit_workspace {    emacsclient --alternate-editor="" -n ~/.config/i3/layouts/${WORKSPACE}.json}function list_workspaces {    for layout in ~/.config/i3/layouts/*.json ;    do        echo "$(basename -- ${layout} .json)"    done}function apply_workspace {    if [[ -e ~/.config/i3/layouts/${LAYOUT}.json ]] ; then        i3-msg "append_layout ~/.config/i3/layouts/${LAYOUT}.json"        [[ -e ~/.config/i3/layouts/${LAYOUT}.after ]] && sh ~/.config/i3/layouts/${LAYOUT}.after    else        i3-nagbar -m "${LAYOUT} not available" -t error    fi}function apply_workspace_number {    # i3-msg "workspace number ${WORKSPACENUMBER}"    if [[ -e ~/.config/i3/layouts/${LAYOUT}.json ]] ; then        i3-msg "workspace number ${WORKSPACE}; append_layout ~/.config/i3/layouts/${LAYOUT}.json"        [[ -e ~/.config/i3/layouts/${LAYOUT}.after ]] && sh ~/.config/i3/layouts/${LAYOUT}.after    else        i3-nagbar -m "${LAYOUT} not available" -t error    fi}function with_external_completion {    if [[ -e `which rofi` ]] ; then        LAYOUT=`list_workspaces | rofi -dmenu -p "workspace layout"`        [[ $LAYOUT != "" ]] && apply_workspace    else        LAYOUT=`list_workspaces | dmenu -p "workspace layout:"`        [[ $LAYOUT != "" ]] && apply_workspace    fi}case ${LAYOUT} in    define)        NAME=$3        define_workspace        ;;    edit)        edit_workspace        ;;    list)        list_workspaces        ;;    dmenu)        with_external_completion        ;;    *)        if [[ $WORKSPACE != "" ]] ; then            apply_workspace_number        else            apply_workspace        fiesac
 |