|
1 | | -# Indicator of pressing TMUX prefix, copy and insert modes. |
| 1 | +# Segment that indicates status of various tmux modes. The list of supported |
| 2 | +# modes & a brief description of each is as follows: |
| 3 | +# |
| 4 | +# - Normal mode: The default mode when you are simply using tmux. |
| 5 | +# |
| 6 | +# - Prefix mode: The mode when the tmux prefix key is pressed. |
| 7 | +# |
| 8 | +# - Mouse mode: While not definitionally a mode according to `man tmux`, this is |
| 9 | +# a mode in the sense that it changes the behavior of tmux, & can be toggled |
| 10 | +# on & off via the `tmux set-option -g mouse {on,off}` command; see `man tmux` |
| 11 | +# for more details. |
| 12 | +# |
| 13 | +# - Copy mode: The mode when text is being copied. By default this is triggered |
| 14 | +# by pressing the prefix key followed by '['; see `man tmux` for more details. |
| 15 | +# |
| 16 | +# Normal & prefix modes toggle between each other, so they occupy the same |
| 17 | +# section of this segment. The other modes are independent of each other, so |
| 18 | +# they each have their own part of the segment. By default, all modes are |
| 19 | +# enabled, the text color for each node defaults to whatever foreground color is |
| 20 | +# set in the user's theme, & the below list defines the default text for each |
| 21 | +# mode & separator. These can all be overridden in `config.sh`. |
2 | 22 |
|
3 | | -prefix_pressed_text="PREFIX PRESSED" |
4 | | -insert_mode_text="INSERT" |
5 | | -copy_mode_text="COPY" |
6 | | -normal_mode_text="NORMAL" |
7 | | -separator="✤" |
| 23 | +# Default values for the settings that this segment supports. |
| 24 | +NORMAL_AND_PREFIX_MODE_ENABLED_DEFAULT="true" |
8 | 25 |
|
9 | | -prefix_mode_fg="colour226" |
10 | | -normal_mode_fg="colour16" |
11 | | -copy_mode_fg="colour82" |
12 | | -bg="colour33" |
| 26 | +NORMAL_MODE_TEXT_DEFAULT="normal" |
| 27 | +NORMAL_MODE_TEXT_COLOR_DEFAULT="$TMUX_POWERLINE_CUR_SEGMENT_FG" |
| 28 | + |
| 29 | +PREFIX_MODE_TEXT_DEFAULT="prefix" |
| 30 | +PREFIX_MODE_TEXT_COLOR_DEFAULT="$TMUX_POWERLINE_CUR_SEGMENT_FG" |
| 31 | + |
| 32 | +MOUSE_MODE_ENABLED_DEFAULT="true" |
| 33 | + |
| 34 | +MOUSE_MODE_TEXT_DEFAULT="mouse" |
| 35 | +MOUSE_MODE_TEXT_COLOR_DEFAULT="$TMUX_POWERLINE_CUR_SEGMENT_FG" |
| 36 | + |
| 37 | +COPY_MODE_ENABLED_DEFAULT="true" |
| 38 | + |
| 39 | +COPY_MODE_TEXT_DEFAULT="copy" |
| 40 | +COPY_MODE_TEXT_COLOR_DEFAULT="$TMUX_POWERLINE_CUR_SEGMENT_FG" |
| 41 | + |
| 42 | +SEPARATOR_TEXT_DEFAULT=" • " |
| 43 | + |
| 44 | +generate_segmentrc() { |
| 45 | + read -d '' rccontents <<EORC |
| 46 | +# Whether the normal & prefix mode section should be enabled. Should be {"true, "false"}. |
| 47 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_AND_PREFIX_MODE_ENABLED="${NORMAL_AND_PREFIX_MODE_ENABLED_DEFAULT}" |
| 48 | +# Normal mode text & color overrides. Defaults to "normal" & the segment foreground color set in the theme used. |
| 49 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT="${NORMAL_MODE_TEXT_DEFAULT}" |
| 50 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT_COLOR="" |
| 51 | +# Prefix mode text & color overrides. Defaults to "prefix" & the segment foreground color set in the theme used. |
| 52 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT="${PREFIX_MODE_TEXT_DEFAULT}" |
| 53 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT_COLOR="" |
| 54 | +# Whether the mouse mode section should be enabled. Should be {"true, "false"}. |
| 55 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_ENABLED="${MOUSE_MODE_ENABLED_DEFAULT}" |
| 56 | +# Mouse mode text & color overrides. Defaults to "mouse" & the segment foreground color set in the theme used. |
| 57 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT="${MOUSE_MODE_TEXT_DEFAULT}" |
| 58 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT_COLOR="" |
| 59 | +# Whether the copy mode section should be enabled. Should be {"true, "false"}. |
| 60 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_ENABLED="${COPY_MODE_ENABLED_DEFAULT}" |
| 61 | +# Copy mode text & color overrides. Defaults to "copy" & the segment foreground color set in the theme used. |
| 62 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT="${COPY_MODE_TEXT_DEFAULT}" |
| 63 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT_COLOR="" |
| 64 | +# Separator text override. Defaults to " • ". |
| 65 | +export TMUX_POWERLINE_SEG_MODE_INDICATOR_SEPARATOR_TEXT="${SEPARATOR_TEXT_DEFAULT}" |
| 66 | +EORC |
| 67 | + echo "$rccontents" |
| 68 | +} |
13 | 69 |
|
14 | 70 | run_segment() { |
15 | | - prefix_indicator="#[bg=${bg}]#{?client_prefix,#[fg=${prefix_mode_fg}]${prefix_pressed_text},#[fg=${normal_mode_fg}]${normal_mode_text}}" |
16 | | - normal_or_copy_indicator="#[bg=${bg}]#{?pane_in_mode,#[fg=${copy_mode_fg}]${copy_mode_text},#[fg=${normal_mode_fg}]${insert_mode_text}}"; |
17 | | - echo $prefix_indicator "#[fg=${normal_mode_fg}]${separator}" $normal_or_copy_indicator |
| 71 | + __process_settings |
| 72 | + |
| 73 | + # Colors. |
| 74 | + normal_text_color="#[fg=$TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT_COLOR]" |
| 75 | + prefix_text_color="#[fg=$TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT_COLOR]" |
| 76 | + mouse_text_color="#[fg=$TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT_COLOR]" |
| 77 | + copy_text_color="#[fg=$TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT_COLOR]" |
| 78 | + |
| 79 | + # Separator. |
| 80 | + separator="#[fg=$TMUX_POWERLINE_CUR_SEGMENT_FG]$TMUX_POWERLINE_SEG_MODE_INDICATOR_SEPARATOR_TEXT" |
| 81 | + |
| 82 | + # Populate segment. |
| 83 | + segment="" |
| 84 | + __normal_and_prefix_mode_indicator |
| 85 | + __mouse_mode_indicator |
| 86 | + # Copy mode should always be populated last; see comments in |
| 87 | + # __copy_mode_indicator for more details. |
| 88 | + __copy_mode_indicator |
| 89 | + |
| 90 | + echo $segment |
| 91 | + return 0 |
| 92 | +} |
| 93 | + |
| 94 | +__normal_and_prefix_mode_indicator() { |
| 95 | + if [ "$TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_AND_PREFIX_MODE_ENABLED" != "true" ]; then |
| 96 | + return 0 |
| 97 | + fi |
| 98 | + |
| 99 | + normal_mode="$normal_text_color$TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT" |
| 100 | + prefix_mode="$prefix_text_color$TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT" |
| 101 | + normal_and_prefix_indicator="#{?client_prefix,$prefix_mode,$normal_mode}" |
| 102 | + |
| 103 | + if [ -z "$segment" ]; then |
| 104 | + segment+="$normal_and_prefix_indicator" |
| 105 | + else |
| 106 | + segment+="$separator$normal_and_prefix_indicator" |
| 107 | + fi |
| 108 | +} |
| 109 | + |
| 110 | +__mouse_mode_indicator() { |
| 111 | + if [ "$TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_ENABLED" != "true" ]; then |
18 | 112 | return 0 |
| 113 | + fi |
| 114 | + |
| 115 | + # Mouse mode status - check window, then session, then global settings. |
| 116 | + mouse_mode_status=$(tmux show-options -w | grep mouse | cut -d ' ' -f2) # Window-level options |
| 117 | + if [ -z "$mouse_mode_status" ]; then |
| 118 | + mouse_mode_status=$(tmux show-options | grep mouse | cut -d ' ' -f2) # Session-level options |
| 119 | + if [ -z "$mouse_mode_status" ]; then |
| 120 | + mouse_mode_status=$(tmux show-options -g | grep mouse | cut -d ' ' -f2) # Global options |
| 121 | + fi |
| 122 | + fi |
| 123 | + |
| 124 | + if [ "$mouse_mode_status" != "on" ]; then |
| 125 | + return 0 |
| 126 | + fi |
| 127 | + |
| 128 | + mouse_indicator="$mouse_text_color$TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT" |
| 129 | + |
| 130 | + if [ -z "$segment" ]; then |
| 131 | + segment+="$mouse_indicator" |
| 132 | + else |
| 133 | + segment+="$separator$mouse_indicator" |
| 134 | + fi |
| 135 | +} |
| 136 | + |
| 137 | +__copy_mode_indicator() { |
| 138 | + if [ "$TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_ENABLED" != "true" ]; then |
| 139 | + return 0 |
| 140 | + fi |
| 141 | + |
| 142 | + # Note that so long as the *_COPY_MODE_ENABLED flag is set, this will always |
| 143 | + # add a non-empty section to the segment, regardless of whether copy mode is |
| 144 | + # actually active. This is because this block of code uses tmux's #()/#{} |
| 145 | + # syntax for command substitution that doesn't get evaluated until runtime, |
| 146 | + # so for the purposes of this shell script it's always non-empty. |
| 147 | + # |
| 148 | + # Because of this, __copy_mode_indicator should always be called last |
| 149 | + # (i.e. it will always be the rightmost section of the segment), otherwise |
| 150 | + # the separator will be printed even if copy mode isn't active. |
| 151 | + copy_mode="$copy_text_color$TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT" |
| 152 | + if [ -z "$segment" ]; then |
| 153 | + segment+="#{?pane_in_mode,$copy_mode,}" |
| 154 | + else |
| 155 | + segment+="#{?pane_in_mode,$separator$copy_mode,}" |
| 156 | + fi |
| 157 | +} |
| 158 | + |
| 159 | +__process_settings() { |
| 160 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_AND_PREFIX_MODE_ENABLED" ]; then |
| 161 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_AND_PREFIX_MODE_ENABLED="${NORMAL_AND_PREFIX_MODE_ENABLED_DEFAULT}" |
| 162 | + fi |
| 163 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT" ]; then |
| 164 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT="${NORMAL_MODE_TEXT_DEFAULT}" |
| 165 | + fi |
| 166 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT_COLOR" ]; then |
| 167 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_NORMAL_MODE_TEXT_COLOR="${NORMAL_MODE_TEXT_COLOR_DEFAULT}" |
| 168 | + fi |
| 169 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT" ]; then |
| 170 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT="${PREFIX_MODE_TEXT_DEFAULT}" |
| 171 | + fi |
| 172 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT_COLOR" ]; then |
| 173 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_PREFIX_MODE_TEXT_COLOR="${PREFIX_MODE_TEXT_COLOR_DEFAULT}" |
| 174 | + fi |
| 175 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_ENABLED" ]; then |
| 176 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_ENABLED="${MOUSE_MODE_ENABLED_DEFAULT}" |
| 177 | + fi |
| 178 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT" ]; then |
| 179 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT="${MOUSE_MODE_TEXT_DEFAULT}" |
| 180 | + fi |
| 181 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT_COLOR" ]; then |
| 182 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_MOUSE_MODE_TEXT_COLOR="${MOUSE_MODE_TEXT_COLOR_DEFAULT}" |
| 183 | + fi |
| 184 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_ENABLED" ]; then |
| 185 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_ENABLED="${COPY_MODE_ENABLED_DEFAULT}" |
| 186 | + fi |
| 187 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT" ]; then |
| 188 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT="${COPY_MODE_TEXT_DEFAULT}" |
| 189 | + fi |
| 190 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT_COLOR" ]; then |
| 191 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_COPY_MODE_TEXT_COLOR="${COPY_MODE_TEXT_COLOR_DEFAULT}" |
| 192 | + fi |
| 193 | + if [ -z "$TMUX_POWERLINE_SEG_MODE_INDICATOR_SEPARATOR_TEXT" ]; then |
| 194 | + export TMUX_POWERLINE_SEG_MODE_INDICATOR_SEPARATOR_TEXT="${SEPARATOR_TEXT_DEFAULT}" |
| 195 | + fi |
19 | 196 | } |
0 commit comments