From 861fd8cac1234dad1a558004274101c51b5f08dc Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 04:49:50 +0200 Subject: [PATCH 01/14] in progress --- scripts/power_zoom.sh | 136 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 0bd8155..3aff756 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -14,12 +14,148 @@ CURRENT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) # shellcheck disable=SC1091 . "$CURRENT_DIR/utils.sh" +IS_ZOOMED="is_zoomed" +GET_ORIGIN="get_origin" +GET_ZOOMED="get_zoomed" +set_pz_status() { + local value="$1" + [[ -z $value ]] && error_msg "set_pz() missing param" + + $TMUX_BIN set-option @power_zoom_state "$value" +} + +get_pz_status() { + echo "$($TMUX_BIN show-option -q @power_zoom_state)" +} + +pz_status() { + case $1 in + + $IS_ZOOMED | $GET_ORIGIN | $GET_ZOOMED ) ;; + + *) + error_msg "ERROR: examine_pz_status - invalid param: [$1]" + ;; + esac + + current_pane_id="$($TMUX_BIN display -p '#D')" + updated_values="" + do_update=false + pow_zoomed_panes=get_pz_status + for pzp in "${pow_zoomed_panes[@]}" ; do + id="$(echo $pzp | cut -d= -f 1)" + source="$(echo $pzp | cut -d= -f 2)" + if [[ $id = $current_pane_id ]]; then + [[ $1 = $IS_ZOOMED ]] && return true + if [[ $1 = $GET_ORIGIN ]]; then + result=$source + do_update=true + fi + fi + if [[ $source = $current_pane_id ]]; then + result=$id + do_update=true + fi + updated_values="$updated_values $id=$source" + done + if do_update; then + set_pz "$updated_values" + fi + if [[ -n $result ]]; then + return $result + else + return false + fi +} + power_zoom() { + if pz_status $IS_ZOOMED ; then + # + # Is a zoomed pane, un-zoom it + # + origin=pz_status $GET_ORIGIN + if [[ -z $origin ]]; then + error_msg "ERROR: Original location for pane is not present" + fi + log_it "Found a matching place-holder, move this pane there and delete place-holder" + $TMUX_BIN join-pane -b -t "$origin" + $TMUX_BIN kill-pane -t "$origin" + return + fi + zoomed_pane=pz_status $GET_ZOOMED + if [[ -n $zoomed_pane ]]l then + unzoom_it_here + else + # + # Zoom it! + # + if [[ "$($TMUX_BIN list-panes | wc -l)" -eq 1 ]]; then + error_msg "Can't zoom only pane in a window" + return 0 + fi + current_pane_id="$($TMUX_BIN display -p '#D')" + # + # the place-holder pane will close when it's process is terminated, + # so keep a long sleep going for ever in a loop. + # Ctrl-C would exit script and pane would close in case the zoomed pane + # is killed and the place-holder is left hanging. + # + log_it "Zoom active pane to new window" + # shellcheck disable=SC2154 + trigger_key=$(get_tmux_option "@power_zoom_trigger" "$default_key") + $TMUX_BIN split-window -b "echo; echo \" $placeholder_title\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" + $TMUX_BIN select-pane -T "$placeholder_title" + $TMUX_BIN select-pane -t "$current_pane_id" + $TMUX_BIN break-pane # move it to new window + $TMUX_BIN rename-window "**POWER ZOOM** $primary_pane_title ($primary_pane_id)" + + fi +} + + + +unzoom_it_here() { + # + # Not done! + # + # + # Is placeholder for a power-zoomed pane, unzom it into this location + # + # shellcheck disable=SC2154 + log_it "This is a $plugin_name place-holder!" + # + # go to the referred pane, and run power_zoom again to restore it. + # + if [[ "$recursion" -ne "" ]]; then + error_msg "power_zoom is entering repeated recursion, aborting" + return 0 + fi + pane_id="$($TMUX_BIN display -p '#T'| awk '{print $8}')" + log_it "pane_id: [$pane_id]" + if ! $TMUX_BIN select-window -t "$pane_id"; then + error_msg "Failed to find window with Zoomed pane: $pane_id" + return 0 + fi + + if ! $TMUX_BIN select-pane -t "$pane_id"; then + error_msg "Failed to find Zoomed pane: $pane_id" + return 0 + fi + power_zoom recursion + return 0 +} + + + +old_power_zoom() { recursion="$1" [[ "$recursion" != "" ]] && log_it "power_zoom($recursion) triggered" + # + # Format "z1=o1 z2=o2" + # # shellcheck disable=SC2154 primary_pane_id="$($TMUX_BIN display -p '#D')" primary_pane_title="$($TMUX_BIN display -p '#T')" From cee0a2842ba93f7a1a0353f4c382e422edcbb786 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:16:23 +0200 Subject: [PATCH 02/14] kind of works --- power-zoom.tmux | 5 + scripts/power_zoom.sh | 221 ++++++++++++++---------------------------- scripts/utils.sh | 2 +- 3 files changed, 77 insertions(+), 151 deletions(-) diff --git a/power-zoom.tmux b/power-zoom.tmux index d01ff1d..cbeed70 100755 --- a/power-zoom.tmux +++ b/power-zoom.tmux @@ -80,5 +80,10 @@ if bool_param "$(get_tmux_option "@power_zoom_without_prefix" "No")"; then log_it "Not using prefix" fi +# +# Debug - clear list of zoomed panes +# +$TMUX_BIN set-option -U @power_zoom_state + # shellcheck disable=SC2086 #options cant be quoted $TMUX_BIN bind $options "$trigger_key" run-shell "$SCRIPTS_DIR"/power_zoom.sh diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 3aff756..62094bd 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -8,6 +8,9 @@ # Tracking the placeholder pane by its pane title, this works regardless # if pane titles are displayed or not. # +# shellcheck disable=SC2154 + + # shellcheck disable=SC1007 CURRENT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) @@ -15,85 +18,110 @@ CURRENT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) . "$CURRENT_DIR/utils.sh" IS_ZOOMED="is_zoomed" -GET_ORIGIN="get_origin" +GET_PLACEHOLDER="get_placeholder" GET_ZOOMED="get_zoomed" - set_pz_status() { local value="$1" - [[ -z $value ]] && error_msg "set_pz() missing param" - - $TMUX_BIN set-option @power_zoom_state "$value" + log_it ">> new @power_zoom_state [$value]" + if [[ -n $value ]]; then + $TMUX_BIN set-option @power_zoom_state "$value" + else + $TMUX_BIN set-option -U @power_zoom_state + fi } -get_pz_status() { - echo "$($TMUX_BIN show-option -q @power_zoom_state)" +read_pz_status() { + statuses="$($TMUX_BIN show-option -qv @power_zoom_state)" + echo "$statuses" } -pz_status() { +check_pz_status() { case $1 in - $IS_ZOOMED | $GET_ORIGIN | $GET_ZOOMED ) ;; + $IS_ZOOMED | $GET_PLACEHOLDER | $GET_ZOOMED ) ;; *) - error_msg "ERROR: examine_pz_status - invalid param: [$1]" + error_msg "ERROR: check_pz_status - invalid param: [$1]" ;; esac current_pane_id="$($TMUX_BIN display -p '#D')" + log_it "check_pz_status($1) on $current_pane_id" updated_values="" do_update=false - pow_zoomed_panes=get_pz_status + result="" + pow_zoomed_panes=( $(read_pz_status) ) + #log_it "iterate over: [$pow_zoomed_panes]" for pzp in "${pow_zoomed_panes[@]}" ; do - id="$(echo $pzp | cut -d= -f 1)" - source="$(echo $pzp | cut -d= -f 2)" - if [[ $id = $current_pane_id ]]; then - [[ $1 = $IS_ZOOMED ]] && return true - if [[ $1 = $GET_ORIGIN ]]; then - result=$source + placeholder="$(echo $pzp | cut -d= -f 1)" + zoomed="$(echo $pzp | cut -d= -f 2)" + #log_it ">> loop pzp[$pzp] - placeholder[$placeholder] zoomed[$zoomed]" + if [[ $zoomed = $current_pane_id ]]; then + if [[ $1 = $IS_ZOOMED ]]; then + # Since this check won't update the list of zoomed panes + # its ok to return early + log_it ">> this is zoomed" + return # implicit true + elif [[ $1 = $GET_PLACEHOLDER ]]; then + result=$placeholder do_update=true + + log_it "get placeholder, found it" + continue # dont save current pair in the update fi + elif [[ $placeholder = $current_pane_id ]] && [[ $1 = $GET_ZOOMED ]]; then + log_it "this is a placeholder for $zoomed" + result=$zoomed + break fi - if [[ $source = $current_pane_id ]]; then - result=$id - do_update=true - fi - updated_values="$updated_values $id=$source" + # when unzooming + #if [[ $placeholder = $current_pane_id ]]; then + updated_values="$updated_values $placeholder=$zoomed" done - if do_update; then - set_pz "$updated_values" + if $do_update; then + set_pz_status "$updated_values" fi - if [[ -n $result ]]; then - return $result + if [[ -n "$result" ]]; then + # In this case a string is expected, so the implicit true return + # has no significance + echo "$result" else - return false + false fi } power_zoom() { - if pz_status $IS_ZOOMED ; then + if check_pz_status $IS_ZOOMED ; then # # Is a zoomed pane, un-zoom it # - origin=pz_status $GET_ORIGIN - if [[ -z $origin ]]; then - error_msg "ERROR: Original location for pane is not present" + placeholder="$(check_pz_status $GET_PLACEHOLDER)" + + if [[ -z $placeholder ]]; then + error_msg "Placeholder for pane is not listed" fi - log_it "Found a matching place-holder, move this pane there and delete place-holder" - $TMUX_BIN join-pane -b -t "$origin" - $TMUX_BIN kill-pane -t "$origin" + $TMUX_BIN join-pane -b -t "$placeholder" + $TMUX_BIN kill-pane -t "$placeholder" return fi - zoomed_pane=pz_status $GET_ZOOMED - if [[ -n $zoomed_pane ]]l then - unzoom_it_here + zoomed="$(check_pz_status $GET_ZOOMED)" + if [[ -n "$zoomed" ]]; then + if [[ -n "$1" ]]; then + error_msg "Recursion detected when unzooming" + exit 1 + fi + # + # Keep code simple, only use one unzoom procedure + # + $TMUX_BIN select-window -t $zoomed + power_zoom recursion else # # Zoom it! # if [[ "$($TMUX_BIN list-panes | wc -l)" -eq 1 ]]; then - error_msg "Can't zoom only pane in a window" - return 0 + error_msg "Can't zoom only pane in a window" fi current_pane_id="$($TMUX_BIN display -p '#D')" # @@ -102,126 +130,19 @@ power_zoom() { # Ctrl-C would exit script and pane would close in case the zoomed pane # is killed and the place-holder is left hanging. # - log_it "Zoom active pane to new window" # shellcheck disable=SC2154 trigger_key=$(get_tmux_option "@power_zoom_trigger" "$default_key") $TMUX_BIN split-window -b "echo; echo \" $placeholder_title\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" $TMUX_BIN select-pane -T "$placeholder_title" - $TMUX_BIN select-pane -t "$current_pane_id" + placholder_pane_id="$($TMUX_BIN display -p '#D')" + set_pz_status "$(read_pz_status) $placholder_pane_id=$current_pane_id" + $TMUX_BIN select-pane -t $current_pane_id $TMUX_BIN break-pane # move it to new window - $TMUX_BIN rename-window "**POWER ZOOM** $primary_pane_title ($primary_pane_id)" - + $TMUX_BIN rename-window "**POWER ZOOM** ($primary_pane_id)" fi } -unzoom_it_here() { - # - # Not done! - # - # - # Is placeholder for a power-zoomed pane, unzom it into this location - # - # shellcheck disable=SC2154 - log_it "This is a $plugin_name place-holder!" - # - # go to the referred pane, and run power_zoom again to restore it. - # - if [[ "$recursion" -ne "" ]]; then - error_msg "power_zoom is entering repeated recursion, aborting" - return 0 - fi - pane_id="$($TMUX_BIN display -p '#T'| awk '{print $8}')" - log_it "pane_id: [$pane_id]" - if ! $TMUX_BIN select-window -t "$pane_id"; then - error_msg "Failed to find window with Zoomed pane: $pane_id" - return 0 - fi - - if ! $TMUX_BIN select-pane -t "$pane_id"; then - error_msg "Failed to find Zoomed pane: $pane_id" - return 0 - fi - power_zoom recursion - return 0 -} - - - -old_power_zoom() { - recursion="$1" - [[ "$recursion" != "" ]] && log_it "power_zoom($recursion) triggered" - - # - # Format "z1=o1 z2=o2" - # - # shellcheck disable=SC2154 - primary_pane_id="$($TMUX_BIN display -p '#D')" - primary_pane_title="$($TMUX_BIN display -p '#T')" - - placeholder_stub="=== POWER ZOOM === place-holder for pane:" - placeholder_title="$placeholder_stub $primary_pane_id" - - log_it "Checking for this place-holder: [$placeholder_title]" - placeholder_pane=$($TMUX_BIN list-panes -a -F "#D #T" | grep "$placeholder_title" | awk '{ print $1 }') - - if [[ -n "$placeholder_pane" ]]; then - # - # Found a place-holder for current pane, move it there and delete - # the place-holder - # - log_it "Found a matching place-holder, move this pane there and delete place-holder" - $TMUX_BIN join-pane -b -t "$placeholder_pane" - $TMUX_BIN kill-pane -t "$placeholder_pane" - else - # - # Zoom this to new window - # - if [[ "$($TMUX_BIN list-panes | wc -l)" -eq 1 ]]; then - error_msg "Can't zoom only pane in a window" - return 0 - fi - if [[ "$($TMUX_BIN display -p '#T' | grep "$placeholder_stub")" != "" ]]; then - # shellcheck disable=SC2154 - log_it "This is a $plugin_name place-holder!" - # - # go to the referred pane, and run power_zoom again to restore it. - # - if [[ "$recursion" -ne "" ]]; then - error_msg "power_zoom is entering repeated recursion, aborting" - return 0 - fi - pane_id="$($TMUX_BIN display -p '#T'| awk '{print $8}')" - log_it "pane_id: [$pane_id]" - if ! $TMUX_BIN select-window -t "$pane_id"; then - error_msg "Failed to find window with Zoomed pane: $pane_id" - return 0 - fi - - if ! $TMUX_BIN select-pane -t "$pane_id"; then - error_msg "Failed to find Zoomed pane: $pane_id" - return 0 - fi - power_zoom recursion - return 0 - fi - # - # the place-holder pane will close when it's process is terminated, - # so keep a long sleep going for ever in a loop. - # Ctrl-C would exit script and pane would close in case the zoomed pane - # is killed and the place-holder is left hanging. - # - log_it "Zoom active pane to new window" - # shellcheck disable=SC2154 - trigger_key=$(get_tmux_option "@power_zoom_trigger" "$default_key") - $TMUX_BIN split-window -b "echo; echo \" $placeholder_title\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" - $TMUX_BIN select-pane -T "$placeholder_title" - $TMUX_BIN select-pane -t "$primary_pane_id" - $TMUX_BIN break-pane # move it to new window - $TMUX_BIN rename-window "**POWER ZOOM** $primary_pane_title ($primary_pane_id)" - fi - return 0 -} power_zoom diff --git a/scripts/utils.sh b/scripts/utils.sh index ddf90e8..bbfe7af 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -34,7 +34,7 @@ plugin_name="tmux-power-zoom" # If log_file is empty or undefined, no logging will occur, # so comment it out for normal usage. # -# log_file="/tmp/$plugin_name.log" # Trigger LF to separate runs of this script + log_file="/tmp/$plugin_name.log" # Trigger LF to separate runs of this script # From 3bc42cde9d80f2d07789fd0fac1249ca3b1bc7d1 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:18:11 +0200 Subject: [PATCH 03/14] linting --- scripts/power_zoom.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 62094bd..fb60a0e 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -39,7 +39,7 @@ read_pz_status() { check_pz_status() { case $1 in - $IS_ZOOMED | $GET_PLACEHOLDER | $GET_ZOOMED ) ;; + "$IS_ZOOMED" | "$GET_PLACEHOLDER" | "$GET_ZOOMED" ) ;; *) error_msg "ERROR: check_pz_status - invalid param: [$1]" From 14078f7a8bca903d0ba75f57f6de08c01e0bdd85 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:21:03 +0200 Subject: [PATCH 04/14] linting --- scripts/power_zoom.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index fb60a0e..ccf36f9 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -54,11 +54,11 @@ check_pz_status() { pow_zoomed_panes=( $(read_pz_status) ) #log_it "iterate over: [$pow_zoomed_panes]" for pzp in "${pow_zoomed_panes[@]}" ; do - placeholder="$(echo $pzp | cut -d= -f 1)" - zoomed="$(echo $pzp | cut -d= -f 2)" + placeholder="$(echo "$pzp" | cut -d= -f 1)" + zoomed="$(echo "$pzp" | cut -d= -f 2)" #log_it ">> loop pzp[$pzp] - placeholder[$placeholder] zoomed[$zoomed]" - if [[ $zoomed = $current_pane_id ]]; then - if [[ $1 = $IS_ZOOMED ]]; then + if [[ $zoomed = "$current_pane_id" ]]; then + if [[ $1 = "$IS_ZOOMED" ]]; then # Since this check won't update the list of zoomed panes # its ok to return early log_it ">> this is zoomed" From 185687d6ce0b68293f4bc0c73e91f0edc8ee981f Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:22:24 +0200 Subject: [PATCH 05/14] linting --- scripts/power_zoom.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index ccf36f9..8f91a47 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -63,14 +63,14 @@ check_pz_status() { # its ok to return early log_it ">> this is zoomed" return # implicit true - elif [[ $1 = $GET_PLACEHOLDER ]]; then + elif [[ $1 = "$GET_PLACEHOLDER" ]]; then result=$placeholder do_update=true log_it "get placeholder, found it" continue # dont save current pair in the update fi - elif [[ $placeholder = $current_pane_id ]] && [[ $1 = $GET_ZOOMED ]]; then + elif [[ $placeholder = "$current_pane_id" ]] && [[ $1 = "$GET_ZOOMED" ]]; then log_it "this is a placeholder for $zoomed" result=$zoomed break From 2bf354fea5c4c9496622955fec9a4081b11e413b Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:26:31 +0200 Subject: [PATCH 06/14] linting --- scripts/power_zoom.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 8f91a47..3218c7f 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -92,11 +92,11 @@ check_pz_status() { } power_zoom() { - if check_pz_status $IS_ZOOMED ; then + if check_pz_status "$IS_ZOOMED" ; then # # Is a zoomed pane, un-zoom it # - placeholder="$(check_pz_status $GET_PLACEHOLDER)" + placeholder="$(check_pz_status "$GET_PLACEHOLDER")" if [[ -z $placeholder ]]; then error_msg "Placeholder for pane is not listed" @@ -105,7 +105,7 @@ power_zoom() { $TMUX_BIN kill-pane -t "$placeholder" return fi - zoomed="$(check_pz_status $GET_ZOOMED)" + zoomed="$(check_pz_status "$GET_ZOOMED")" if [[ -n "$zoomed" ]]; then if [[ -n "$1" ]]; then error_msg "Recursion detected when unzooming" From c565b632bf002e26169826cc4dc1c86d9bb87bdc Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:28:49 +0200 Subject: [PATCH 07/14] linting --- scripts/power_zoom.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 3218c7f..0cfae94 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -114,7 +114,7 @@ power_zoom() { # # Keep code simple, only use one unzoom procedure # - $TMUX_BIN select-window -t $zoomed + $TMUX_BIN select-window -t "$zoomed" power_zoom recursion else # @@ -136,7 +136,7 @@ power_zoom() { $TMUX_BIN select-pane -T "$placeholder_title" placholder_pane_id="$($TMUX_BIN display -p '#D')" set_pz_status "$(read_pz_status) $placholder_pane_id=$current_pane_id" - $TMUX_BIN select-pane -t $current_pane_id + $TMUX_BIN select-pane -t "$current_pane_id" $TMUX_BIN break-pane # move it to new window $TMUX_BIN rename-window "**POWER ZOOM** ($primary_pane_id)" fi From c986ff2e3e7f255436167043496314b47a1b8e2b Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:35:22 +0200 Subject: [PATCH 08/14] linting --- scripts/utils.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/utils.sh b/scripts/utils.sh index bbfe7af..9bb5a34 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # # Copyright (c) 2022: Jacob.Lundqvist@gmail.com # License: MIT @@ -27,7 +27,7 @@ plugin_name="tmux-power-zoom" # impact. In all calls to tmux I use $TMUX_BIN instead in the rest of this # plugin. # -[ -z "$TMUX_BIN" ] && TMUX_BIN="tmux" +[[ -z "$TMUX_BIN" ]] && TMUX_BIN="tmux" # @@ -41,7 +41,7 @@ plugin_name="tmux-power-zoom" # If $log_file is empty or undefined, no logging will occur. # log_it() { - if [ -z "$log_file" ]; then + if [[ -z "$log_file" ]]; then return fi printf "[%s] %s\n" "$(date '+%H:%M:%S')" "$@" >> "$log_file" @@ -58,7 +58,7 @@ error_msg() { log_it "$msg" $TMUX_BIN display-message "$plugin_name $msg" - [ "$exit_code" -ne 0 ] && exit "$exit_code" + [[ "$exit_code" -ne 0 ]] && exit "$exit_code" } @@ -97,7 +97,7 @@ get_tmux_option() { gto_option=$1 gto_default_value=$2 gto_value=$($TMUX_BIN show-option -gqv "$gto_option") - if [ -z "$gto_value" ]; then + if [[ -z "$gto_value" ]]; then echo "$gto_default_value" else echo "$gto_value" From ff28b1ddba434f64d443b5860bd0de491b3a8a1b Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 09:53:23 +0200 Subject: [PATCH 09/14] linting --- scripts/power_zoom.sh | 31 +++++++++++++------------------ scripts/utils.sh | 1 - 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 0cfae94..b8443ae 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -37,6 +37,12 @@ read_pz_status() { } check_pz_status() { + local this_id + local updated_values + local do_update + local result + local pow_zoomed_panes + local placeholder case $1 in "$IS_ZOOMED" | "$GET_PLACEHOLDER" | "$GET_ZOOMED" ) ;; @@ -46,37 +52,28 @@ check_pz_status() { ;; esac - current_pane_id="$($TMUX_BIN display -p '#D')" - log_it "check_pz_status($1) on $current_pane_id" + this_id="$($TMUX_BIN display -p '#D')" updated_values="" do_update=false result="" pow_zoomed_panes=( $(read_pz_status) ) - #log_it "iterate over: [$pow_zoomed_panes]" for pzp in "${pow_zoomed_panes[@]}" ; do placeholder="$(echo "$pzp" | cut -d= -f 1)" zoomed="$(echo "$pzp" | cut -d= -f 2)" - #log_it ">> loop pzp[$pzp] - placeholder[$placeholder] zoomed[$zoomed]" - if [[ $zoomed = "$current_pane_id" ]]; then + if [[ $zoomed = "$this_id" ]]; then if [[ $1 = "$IS_ZOOMED" ]]; then # Since this check won't update the list of zoomed panes # its ok to return early - log_it ">> this is zoomed" return # implicit true elif [[ $1 = "$GET_PLACEHOLDER" ]]; then result=$placeholder do_update=true - - log_it "get placeholder, found it" continue # dont save current pair in the update fi - elif [[ $placeholder = "$current_pane_id" ]] && [[ $1 = "$GET_ZOOMED" ]]; then - log_it "this is a placeholder for $zoomed" + elif [[ $placeholder = "$this_id" ]] && [[ $1 = "$GET_ZOOMED" ]]; then result=$zoomed break fi - # when unzooming - #if [[ $placeholder = $current_pane_id ]]; then updated_values="$updated_values $placeholder=$zoomed" done if $do_update; then @@ -91,6 +88,7 @@ check_pz_status() { fi } + power_zoom() { if check_pz_status "$IS_ZOOMED" ; then # @@ -123,7 +121,7 @@ power_zoom() { if [[ "$($TMUX_BIN list-panes | wc -l)" -eq 1 ]]; then error_msg "Can't zoom only pane in a window" fi - current_pane_id="$($TMUX_BIN display -p '#D')" + this_id="$($TMUX_BIN display -p '#D')" # # the place-holder pane will close when it's process is terminated, # so keep a long sleep going for ever in a loop. @@ -135,14 +133,11 @@ power_zoom() { $TMUX_BIN split-window -b "echo; echo \" $placeholder_title\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" $TMUX_BIN select-pane -T "$placeholder_title" placholder_pane_id="$($TMUX_BIN display -p '#D')" - set_pz_status "$(read_pz_status) $placholder_pane_id=$current_pane_id" - $TMUX_BIN select-pane -t "$current_pane_id" + set_pz_status "$(read_pz_status) $placholder_pane_id=$this_id" + $TMUX_BIN select-pane -t "$this_id" $TMUX_BIN break-pane # move it to new window $TMUX_BIN rename-window "**POWER ZOOM** ($primary_pane_id)" fi } - - - power_zoom diff --git a/scripts/utils.sh b/scripts/utils.sh index 9bb5a34..6e35f90 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -22,7 +22,6 @@ plugin_name="tmux-power-zoom" # # I use an env var TMUX_BIN to point at the current tmux, defined in my # tmux.conf, in order to pick the version matching the server running. -# This is needed when checking backwards compatability with various versions. # If not found, it is set to whatever is in path, so should have no negative # impact. In all calls to tmux I use $TMUX_BIN instead in the rest of this # plugin. From f2b40806c06be47a5cc2cdccf0395f6e71efbda2 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 10:06:45 +0200 Subject: [PATCH 10/14] code cleamup --- scripts/power_zoom.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index b8443ae..4ef3674 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -43,6 +43,9 @@ check_pz_status() { local result local pow_zoomed_panes local placeholder + local zoomed + local sune + case $1 in "$IS_ZOOMED" | "$GET_PLACEHOLDER" | "$GET_ZOOMED" ) ;; @@ -130,13 +133,13 @@ power_zoom() { # # shellcheck disable=SC2154 trigger_key=$(get_tmux_option "@power_zoom_trigger" "$default_key") - $TMUX_BIN split-window -b "echo; echo \" $placeholder_title\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" + $TMUX_BIN split-window -b "echo; echo \" placeholder for zoomed pane $this_id\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" $TMUX_BIN select-pane -T "$placeholder_title" placholder_pane_id="$($TMUX_BIN display -p '#D')" set_pz_status "$(read_pz_status) $placholder_pane_id=$this_id" $TMUX_BIN select-pane -t "$this_id" $TMUX_BIN break-pane # move it to new window - $TMUX_BIN rename-window "**POWER ZOOM** ($primary_pane_id)" + $TMUX_BIN rename-window "ZOOMED $this_id" fi } From 40ccadb33a172212ea78a35b7059068f1762f5d9 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 10:13:33 +0200 Subject: [PATCH 11/14] code clenup --- scripts/power_zoom.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 4ef3674..36801fd 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -44,7 +44,6 @@ check_pz_status() { local pow_zoomed_panes local placeholder local zoomed - local sune case $1 in From bcbab9b8f3e9e2f4bdb5e3a31009bd99aa7dbc3a Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 15:00:54 +0200 Subject: [PATCH 12/14] fish ready --- scripts/power_zoom.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 36801fd..7f83e7e 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -23,16 +23,16 @@ GET_ZOOMED="get_zoomed" set_pz_status() { local value="$1" - log_it ">> new @power_zoom_state [$value]" + log_it "new @power_zoom_states [$value]" if [[ -n $value ]]; then - $TMUX_BIN set-option @power_zoom_state "$value" + $TMUX_BIN set-option @power_zoom_states "$value" else - $TMUX_BIN set-option -U @power_zoom_state + $TMUX_BIN set-option -U @power_zoom_states fi } read_pz_status() { - statuses="$($TMUX_BIN show-option -qv @power_zoom_state)" + statuses="$($TMUX_BIN show-option -qv @power_zoom_states)" echo "$statuses" } From 951c7bf3c0644f133e353f8c8dee3523716796f7 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 15:05:40 +0200 Subject: [PATCH 13/14] moved default_key --- power-zoom.tmux | 7 ------- scripts/utils.sh | 6 ++++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/power-zoom.tmux b/power-zoom.tmux index cbeed70..c06abf8 100755 --- a/power-zoom.tmux +++ b/power-zoom.tmux @@ -19,13 +19,6 @@ SCRIPTS_DIR="$CURRENT_DIR/scripts" . "$SCRIPTS_DIR/utils.sh" -# -# By using Z as default we don't overwrite the default zoom binding (z) -# unless the caller actually want this to happen. -# -default_key="Z" - - # # By printing a NL and date, its easier to keep separate runs apart # diff --git a/scripts/utils.sh b/scripts/utils.sh index 6e35f90..abeb796 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -19,6 +19,12 @@ plugin_name="tmux-power-zoom" +# +# By using Z as default we don't overwrite the default zoom binding (z) +# unless the caller actually want this to happen. +# +default_key="Z" + # # I use an env var TMUX_BIN to point at the current tmux, defined in my # tmux.conf, in order to pick the version matching the server running. From f3b1d6eddecd4d429f680d1f0d3ceb602e95ec23 Mon Sep 17 00:00:00 2001 From: jaclu Date: Fri, 28 Oct 2022 15:05:54 +0200 Subject: [PATCH 14/14] fishified --- scripts/power_zoom.sh | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/scripts/power_zoom.sh b/scripts/power_zoom.sh index 7f83e7e..852e8c3 100755 --- a/scripts/power_zoom.sh +++ b/scripts/power_zoom.sh @@ -23,16 +23,16 @@ GET_ZOOMED="get_zoomed" set_pz_status() { local value="$1" - log_it "new @power_zoom_states [$value]" + log_it ">> new @power_zoom_state [$value]" if [[ -n $value ]]; then - $TMUX_BIN set-option @power_zoom_states "$value" + $TMUX_BIN set-option @power_zoom_state "$value" else - $TMUX_BIN set-option -U @power_zoom_states + $TMUX_BIN set-option -U @power_zoom_state fi } read_pz_status() { - statuses="$($TMUX_BIN show-option -qv @power_zoom_states)" + statuses="$($TMUX_BIN show-option -qv @power_zoom_state)" echo "$statuses" } @@ -93,6 +93,7 @@ check_pz_status() { power_zoom() { if check_pz_status "$IS_ZOOMED" ; then + log_it "was zoomed" # # Is a zoomed pane, un-zoom it # @@ -107,6 +108,7 @@ power_zoom() { fi zoomed="$(check_pz_status "$GET_ZOOMED")" if [[ -n "$zoomed" ]]; then + log_it "was placeholder" if [[ -n "$1" ]]; then error_msg "Recursion detected when unzooming" exit 1 @@ -120,6 +122,7 @@ power_zoom() { # # Zoom it! # + log_it "will zoom" if [[ "$($TMUX_BIN list-panes | wc -l)" -eq 1 ]]; then error_msg "Can't zoom only pane in a window" fi @@ -132,9 +135,15 @@ power_zoom() { # # shellcheck disable=SC2154 trigger_key=$(get_tmux_option "@power_zoom_trigger" "$default_key") - $TMUX_BIN split-window -b "echo; echo \" placeholder for zoomed pane $this_id\n Press [ $trigger_key] in this pane to restore it back here...\"; while true ; do sleep 30; done" + log_it ">> trigger: $trigger_key" + + $TMUX_BIN split-window -b "echo; \ + echo \" placeholder for zoomed pane ${this_id}\"; \ + echo ; echo \" You can press $trigger_key\"; \ + echo \" in this pane to restore it back here...\"; \ + bash -c \"while true ; do sleep 6; done\"" $TMUX_BIN select-pane -T "$placeholder_title" - placholder_pane_id="$($TMUX_BIN display -p '#D')" + placholder_pane_id="$($TMUX_BIN display -p '#D')" set_pz_status "$(read_pz_status) $placholder_pane_id=$this_id" $TMUX_BIN select-pane -t "$this_id" $TMUX_BIN break-pane # move it to new window