This adds support for indicating in the status line whether a given window
has been referenced more than once.  In the case of grouped sessions this is
likely always going to be the case, but this also helps in showing which
windows in a session have been included via linkw, for example.  Currently,
the window printable flag for this is '+'.

Also, add the corresponding #{window_references} flag for returning the
number of references on the window.
---
 format.c  |  2 ++
 session.c | 15 +++++++++++++++
 tmux.1    |  2 ++
 tmux.h    |  1 +
 window.c  |  2 ++
 5 files changed, 22 insertions(+)

diff --git a/format.c b/format.c
index 9e9b6c8..a388a9a 100644
--- a/format.c
+++ b/format.c
@@ -589,6 +589,8 @@ format_defaults_window(struct format_tree *ft, struct 
window *w)
        format_add(ft, "window_height", "%u", w->sy);
        format_add(ft, "window_layout", "%s", layout);
        format_add(ft, "window_panes", "%u", window_count_panes(w));
+       format_add(ft, "window_references", "%u",
+           session_count_window_refs(ft->s, ft->s->curw));
        format_add(ft, "window_zoomed_flag", "%d",
            !!(w->flags & WINDOW_ZOOMED));
 
diff --git a/session.c b/session.c
index 7d86f68..4076053 100644
--- a/session.c
+++ b/session.c
@@ -659,3 +659,18 @@ session_renumber_windows(struct session *s)
        RB_FOREACH_SAFE(wl, winlinks, &old_wins, wl1)
                winlink_remove(&old_wins, wl);
 }
+
+/*
+ * Returns the number of refences on a window, which may be across a session
+ * group.
+ */
+u_int
+session_count_window_refs(struct session *s, struct winlink *wl)
+{
+       struct session_group    *sg;
+
+       if ((sg = session_group_find(s)) != NULL)
+               return (session_group_count(sg));
+       else
+               return (wl->window->references);
+}
diff --git a/tmux.1 b/tmux.1
index b97fd8a..3e186d2 100644
--- a/tmux.1
+++ b/tmux.1
@@ -3352,6 +3352,7 @@ The following variables are available, where appropriate:
 .It Li "window_layout" Ta "" Ta "Window layout description"
 .It Li "window_name" Ta "#W" Ta "Name of window"
 .It Li "window_panes" Ta "" Ta "Number of panes in window"
+.It Li "window_references" Ta "" Ta "Number of references a window has"
 .It Li "window_silence_flag" Ta "" Ta "1 if window has silence alert"
 .It Li "window_width" Ta "" Ta "Width of window"
 .It Li "window_zoomed_flag" Ta "" Ta "1 if window is zoomed"
@@ -3508,6 +3509,7 @@ The flag is one of the following symbols appended to the 
window name:
 .It Li "!" Ta "A bell has occurred in the window."
 .It Li "~" Ta "The window has been silent for the monitor-silence interval."
 .It Li "Z" Ta "The window's active pane is zoomed."
+.It Li "+" Ta "The window has been linked from another session."
 .El
 .Pp
 The # symbol relates to the
diff --git a/tmux.h b/tmux.h
index dddd4f8..012f7f8 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2340,6 +2340,7 @@ void               session_group_synchronize_to(struct 
session *);
 void            session_group_synchronize_from(struct session *);
 void            session_group_synchronize1(struct session *, struct session *);
 void            session_renumber_windows(struct session *);
+u_int           session_count_window_refs(struct session *, struct winlink *);
 
 /* utf8.c */
 void            utf8_build(void);
diff --git a/window.c b/window.c
index 57e8ae4..57db62a 100644
--- a/window.c
+++ b/window.c
@@ -662,6 +662,8 @@ window_printable_flags(struct session *s, struct winlink 
*wl)
                flags[pos++] = '-';
        if (wl->window->flags & WINDOW_ZOOMED)
                flags[pos++] = 'Z';
+       if (session_count_window_refs(s, wl) > 1)
+               flags[pos++] = '+';
        if (pos == 0)
                flags[pos++] = ' ';
        flags[pos] = '\0';
-- 
2.1.4


------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to