From 58725b379ee04908987a0519c5ce08caf26896cc Mon Sep 17 00:00:00 2001 From: Munif Tanjim Date: Fri, 13 Mar 2020 00:25:33 +0600 Subject: [PATCH] Cleanup, Fixes & Refactor --- prefix_highlight.tmux | 119 +++++++++++++----------------------------- 1 file changed, 37 insertions(+), 82 deletions(-) diff --git a/prefix_highlight.tmux b/prefix_highlight.tmux index a85d803..5da9128 100755 --- a/prefix_highlight.tmux +++ b/prefix_highlight.tmux @@ -32,9 +32,8 @@ tmux_option() { fi } -escape_symbols() { - local -r string="$1" - echo "$string" | sed -e 's/,/#,/g' -e 's/}/#}/g' +format_style() { + echo "#[${1}]" | sed -e 's/,/]#[/g' } # Defaults @@ -48,50 +47,6 @@ default_copy_prompt='Copy' default_sync_prompt='Sync' default_empty_prompt='' -highlight() { - local -r \ - status="$1" \ - prefix="$(escape_symbols "$2")" \ - prefix_highlight="$(escape_symbols "$3")" \ - show_copy_mode="$4" \ - show_sync_mode="$5" \ - copy_highlight="$(escape_symbols "$6")" \ - sync_highlight="$(escape_symbols "$7")" \ - output_prefix="$(escape_symbols "$8")" \ - output_suffix="$(escape_symbols "$9")" \ - copy="$(escape_symbols "${10}")" \ - sync="$(escape_symbols "${11}")" \ - empty="$(escape_symbols "${12}")" - - local -r status_value="$(tmux_option "$status")" - local -r prefix_with_optional_affixes="$prefix_highlight$output_prefix$prefix$output_suffix" - local -r copy_with_optional_affixes="$copy_highlight$output_prefix$copy$output_suffix" - local -r sync_with_optional_affixes="$sync_highlight$output_prefix$sync$output_suffix" - - if [[ "on" = "$empty_has_affixes" ]]; then - local -r empty_with_optional_affixes="$empty_highlight$output_prefix$empty$output_suffix" - else - local -r empty_with_optional_affixes="$empty_highlight$empty" - fi - - if [[ "on" = "$show_copy_mode" ]]; then - if [[ "on" = "$show_sync_mode" ]]; then - local -r fallback="#{?pane_in_mode,$copy_with_optional_affixes,#{?synchronize-panes,$sync_with_optional_affixes,$empty_with_optional_affixes}}" - else - local -r fallback="#{?pane_in_mode,$copy_with_optional_affixes,$empty_with_optional_affixes}" - fi - else - if [[ "on" = "$show_sync_mode" ]]; then - local -r fallback="#{?synchronize-panes,$sync_with_optional_affixes,$empty_with_optional_affixes}" - else - local -r fallback="$empty_with_optional_affixes" - fi - fi - - local -r highlight_on_prefix="#{?client_prefix,$prefix_with_optional_affixes,$fallback}#[default]" - tmux set-option -gq "$status" "${status_value/$place_holder/$highlight_on_prefix}" -} - main() { local -r \ fg_color=$(tmux_option "$fg_color_config" "$default_fg") \ @@ -109,41 +64,41 @@ main() { empty_attr=$(tmux_option "$empty_attr_config" "$default_empty_attr") \ empty_has_affixes=$(tmux_option "$empty_has_affixes" "off") - local -r \ - prefix_highlight="#[fg=$fg_color,bg=$bg_color]" \ - copy_highlight="${copy_attr:+#[default,$copy_attr]}" \ - sync_highlight="${sync_attr:+#[default,$sync_attr]}" \ - empty_highlight="${empty_attr:+#[default,$empty_attr]}" - - highlight "status-right" \ - "$prefix_prompt" \ - "$prefix_highlight" \ - "$show_copy_mode" \ - "$show_sync_mode" \ - "$copy_highlight" \ - "$sync_highlight" \ - "$output_prefix" \ - "$output_suffix" \ - "$copy_prompt" \ - "$sync_prompt" \ - "$empty_prompt" \ - "$empty_highlight" \ - "$empty_has_affixes" - - highlight "status-left" \ - "$prefix_prompt" \ - "$prefix_highlight" \ - "$show_copy_mode" \ - "$show_sync_mode" \ - "$copy_highlight" \ - "$sync_highlight" \ - "$output_prefix" \ - "$output_suffix" \ - "$copy_prompt" \ - "$sync_prompt" \ - "$empty_prompt" \ - "$empty_highlight" \ - "$empty_has_affixes" + local -r prefix_highlight="#[fg=$fg_color]#[bg=$bg_color]" + local -r prefix_mode="$prefix_highlight$output_prefix$prefix_prompt$output_suffix" + + local -r copy_highlight="$(format_style "${copy_attr:+default,$copy_attr}")" + local -r copy_mode="$copy_highlight$output_prefix$copy_prompt$output_suffix" + + local -r sync_highlight="$(format_style "${sync_attr:+default,$sync_attr}")" + local -r sync_mode="$sync_highlight$output_prefix$sync_prompt$output_suffix" + + local -r empty_highlight="$(format_style "${empty_attr:+default,$empty_attr}")" + if [[ "on" = "$empty_has_affixes" ]]; then + local -r empty_mode="$empty_highlight$output_prefix$empty_prompt$output_suffix" + else + local -r empty_mode="$empty_highlight$empty_prompt" + fi + + if [[ "on" = "$show_copy_mode" ]]; then + if [[ "on" = "$show_sync_mode" ]]; then + local -r fallback="#{?pane_in_mode,$copy_mode,#{?synchronize-panes,$sync_mode,$empty_mode}}" + else + local -r fallback="#{?pane_in_mode,$copy_mode,$empty_mode}" + fi + elif [[ "on" = "$show_sync_mode" ]]; then + local -r fallback="#{?synchronize-panes,$sync_mode,$empty_mode}" + else + local -r fallback="$empty_mode" + fi + + local -r highlight="#{?client_prefix,$prefix_mode,$fallback}#[default]" + + local -r status_left_value="$(tmux_option "status-left")" + tmux set-option -gq "status-left" "${status_left_value/$place_holder/$highlight}" + + local -r status_right_value="$(tmux_option "status-right")" + tmux set-option -gq "status-right" "${status_right_value/$place_holder/$highlight}" } main