#{} inside #() inside #{} won't work because the parser does not know to
handle #() so the } for the #{} inside the #() terminates the first #{}.
If you do not use #{} inside your #() it does run, but then you can't
get format variable values for the right window.
I don't think there is a way to do this easily.
> Index: format.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/format.c,v
> retrieving revision 1.277
> diff -u -p -r1.277 format.c
> --- format.c 24 Feb 2021 09:22:15 -0000 1.277
> +++ format.c 25 Feb 2021 19:40:53 -0000
> @@ -2099,6 +2099,28 @@ format_cb_version(__unused struct format
> return (xstrdup(getversion()));
> }
>
> +/* Callback for active_window_index. */
> +static void *
> +format_cb_active_window_index(struct format_tree *ft)
> +{
> + if (ft->s != NULL)
> + return (format_printf("%u", ft->s->curw->idx));
> + return (NULL);
> +}
> +
> +/* Callback for last_window_index. */
> +static void *
> +format_cb_last_window_index(struct format_tree *ft)
> +{
> + struct winlink *wl;
> +
> + if (ft->s != NULL) {
> + wl = RB_MAX(winlinks, &ft->s->windows);
> + return (format_printf("%u", wl->idx));
> + }
> + return (NULL);
> +}
> +
> /* Callback for window_active. */
> static void *
> format_cb_window_active(struct format_tree *ft)
> @@ -2496,6 +2518,9 @@ struct format_table_entry {
> * Only variables which are added by the caller go into the tree.
> */
> static const struct format_table_entry format_table[] = {
> + { "active_window_index", FORMAT_TABLE_STRING,
> + format_cb_active_window_index
> + },
> { "alternate_on", FORMAT_TABLE_STRING,
> format_cb_alternate_on
> },
> @@ -2630,6 +2655,9 @@ static const struct format_table_entry f
> },
> { "keypad_flag", FORMAT_TABLE_STRING,
> format_cb_keypad_flag
> + },
> + { "last_window_index", FORMAT_TABLE_STRING,
> + format_cb_last_window_index
> },
> { "mouse_all_flag", FORMAT_TABLE_STRING,
> format_cb_mouse_all_flag
> Index: tmux.1
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/tmux.1,v
> retrieving revision 1.823
> diff -u -p -r1.823 tmux.1
> --- tmux.1 22 Feb 2021 08:18:13 -0000 1.823
> +++ tmux.1 25 Feb 2021 19:40:54 -0000
> @@ -4756,6 +4756,7 @@ will be replaced by
> The following variables are available, where appropriate:
> .Bl -column "XXXXXXXXXXXXXXXXXXX" "XXXXX"
> .It Sy "Variable name" Ta Sy "Alias" Ta Sy "Replaced with"
> +.It Li "active_window_index" Ta "" Ta "Index of active window in session"
> .It Li "alternate_on" Ta "" Ta "1 if pane is in alternate screen"
> .It Li "alternate_saved_x" Ta "" Ta "Saved cursor X in alternate screen"
> .It Li "alternate_saved_y" Ta "" Ta "Saved cursor Y in alternate screen"
> @@ -4763,7 +4764,6 @@ The following variables are available, w
> .It Li "buffer_name" Ta "" Ta "Name of buffer"
> .It Li "buffer_sample" Ta "" Ta "Sample of start of buffer"
> .It Li "buffer_size" Ta "" Ta "Size of the specified buffer in bytes"
> -.It Li "config_files" Ta "" Ta "List of configuration files loaded"
> .It Li "client_activity" Ta "" Ta "Time client last had activity"
> .It Li "client_cell_height" Ta "" Ta "Height of each client cell in pixels"
> .It Li "client_cell_width" Ta "" Ta "Width of each client cell in pixels"
> @@ -4790,6 +4790,7 @@ The following variables are available, w
> .It Li "command_list_alias" Ta "" Ta "Command alias if listing commands"
> .It Li "command_list_name" Ta "" Ta "Command name if listing commands"
> .It Li "command_list_usage" Ta "" Ta "Command usage if listing commands"
> +.It Li "config_files" Ta "" Ta "List of configuration files loaded"
> .It Li "copy_cursor_line" Ta "" Ta "Line the cursor is on in copy mode"
> .It Li "copy_cursor_word" Ta "" Ta "Word under cursor in copy mode"
> .It Li "copy_cursor_x" Ta "" Ta "Cursor X position in copy mode"
> @@ -4812,6 +4813,7 @@ The following variables are available, w
> .It Li "insert_flag" Ta "" Ta "Pane insert flag"
> .It Li "keypad_cursor_flag" Ta "" Ta "Pane keypad cursor flag"
> .It Li "keypad_flag" Ta "" Ta "Pane keypad flag"
> +.It Li "last_window_index" Ta "" Ta "Index of last window in session"
> .It Li "line" Ta "" Ta "Line number in the list"
> .It Li "mouse_all_flag" Ta "" Ta "Pane mouse all flag"
> .It Li "mouse_any_flag" Ta "" Ta "Pane mouse any flag"
> @@ -4867,8 +4869,8 @@ The following variables are available, w
> .It Li "scroll_position" Ta "" Ta "Scroll position in copy mode"
> .It Li "scroll_region_lower" Ta "" Ta "Bottom of scroll region in pane"
> .It Li "scroll_region_upper" Ta "" Ta "Top of scroll region in pane"
> -.It Li "search_present" Ta "" Ta "1 if search started in copy mode"
> .It Li "search_match" Ta "" Ta "Search match if any"
> +.It Li "search_present" Ta "" Ta "1 if search started in copy mode"
> .It Li "selection_active" Ta "" Ta "1 if selection started and changes with the cursor in copy mode"
> .It Li "selection_end_x" Ta "" Ta "X position of the end of the selection"
> .It Li "selection_end_y" Ta "" Ta "Y position of the end of the selection"