Merge remote-tracking branch 'refs/remotes/tmux-openbsd/master'

* refs/remotes/tmux-openbsd/master:
  Use ACS arrows for tree mode.
  Do not crash when synchronizing groups and there is no current window. GitHub issue 5467 from Ju-an Zhang.
  Add pane_private_modes format with list of DEC private modes, from George Nachman.
  Do not log when logging is off, from Michael Grant.
This commit is contained in:
tmux update bot
2026-08-05 09:10:55 +00:00
4 changed files with 69 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: format.c,v 1.410 2026/07/29 20:43:20 nicm Exp $ */ /* $OpenBSD: format.c,v 1.412 2026/08/05 07:31:08 nicm Exp $ */
/* /*
* Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com> * Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -2101,6 +2101,60 @@ format_cb_synchronized_output_flag(struct format_tree *ft)
return (NULL); return (NULL);
} }
/* Callback for pane_private_modes. */
static void *
format_cb_pane_private_modes(struct format_tree *ft)
{
static const struct {
int mode;
int number;
} table[] = {
{ MODE_KCURSOR, 1 }, /* DECCKM */
{ MODE_ORIGIN, 6 }, /* DECOM */
{ MODE_WRAP, 7 }, /* DECAWM */
{ MODE_CURSOR_BLINKING, 12 }, /* cursor blinking */
{ MODE_CURSOR, 25 }, /* DECTCEM */
{ MODE_MOUSE_STANDARD, 1000 }, /* mouse normal tracking */
{ MODE_MOUSE_BUTTON, 1002 }, /* mouse button tracking */
{ MODE_MOUSE_ALL, 1003 }, /* mouse any tracking */
{ MODE_FOCUSON, 1004 }, /* focus reporting */
{ MODE_MOUSE_UTF8, 1005 }, /* mouse: UTF-8 */
{ MODE_MOUSE_SGR, 1006 }, /* mouse: SGR */
{ MODE_BRACKETPASTE, 2004 }, /* bracketed paste */
{ MODE_SYNC, 2026 }, /* synchronized output */
{ MODE_THEME_UPDATES, 2031 }, /* theme update notifications */
};
int mode;
char *value = NULL, *tmp;
u_int i;
if (ft->wp == NULL)
return (NULL);
mode = ft->wp->base.mode;
for (i = 0; i < nitems(table); i++) {
if (~mode & table[i].mode)
continue;
/*
* Only report cursor blinking when set by the application, not
* when it comes from the cursor-style option.
*/
if (table[i].mode == MODE_CURSOR_BLINKING &&
(~mode & MODE_CURSOR_BLINKING_SET))
continue;
if (value == NULL)
xasprintf(&value, "%d", table[i].number);
else {
xasprintf(&tmp, "%s,%d", value, table[i].number);
free(value);
value = tmp;
}
}
if (value == NULL)
return (xstrdup(""));
return (value);
}
/* Callback for pane_active. */ /* Callback for pane_active. */
static void * static void *
format_cb_pane_active(struct format_tree *ft) format_cb_pane_active(struct format_tree *ft)
@@ -3813,6 +3867,9 @@ static const struct format_table_entry format_table[] = {
{ "pane_pipe_pid", FORMAT_TABLE_STRING, { "pane_pipe_pid", FORMAT_TABLE_STRING,
format_cb_pane_pipe_pid format_cb_pane_pipe_pid
}, },
{ "pane_private_modes", FORMAT_TABLE_STRING,
format_cb_pane_private_modes
},
{ "pane_right", FORMAT_TABLE_STRING, { "pane_right", FORMAT_TABLE_STRING,
format_cb_pane_right format_cb_pane_right
}, },
@@ -4200,6 +4257,8 @@ format_log_debug_cb(const char *key, const char *value, void *arg)
void void
format_log_debug(struct format_tree *ft, const char *prefix) format_log_debug(struct format_tree *ft, const char *prefix)
{ {
if (log_get_level() == 0)
return;
format_each(ft, format_log_debug_cb, (void *)prefix); format_each(ft, format_log_debug_cb, (void *)prefix);
} }

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: mode-tree.c,v 1.100 2026/07/14 19:07:03 nicm Exp $ */ /* $OpenBSD: mode-tree.c,v 1.101 2026/08/05 07:50:21 nicm Exp $ */
/* /*
* Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com> * Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -47,7 +47,7 @@ enum mode_tree_preview {
"#[acs]x" MODE_TREE_PREFIX_STYLE " }," \ "#[acs]x" MODE_TREE_PREFIX_STYLE " }," \
"#{mode_tree_repeat}}" \ "#{mode_tree_repeat}}" \
"#{?mode_tree_branch," \ "#{?mode_tree_branch," \
"#[acs]#{?mode_tree_last,mq,tq}" MODE_TREE_PREFIX_STYLE "> ,}" \ "#[acs]#{?mode_tree_last,mq,tq}+" MODE_TREE_PREFIX_STYLE " ,}" \
"#{?mode_tree_has_children," \ "#{?mode_tree_has_children," \
"#{?mode_tree_expanded,#[fg=themered]-" MODE_TREE_PREFIX_STYLE " ," \ "#{?mode_tree_expanded,#[fg=themered]-" MODE_TREE_PREFIX_STYLE " ," \
"#[fg=themegreen]+" MODE_TREE_PREFIX_STYLE " }," \ "#[fg=themegreen]+" MODE_TREE_PREFIX_STYLE " }," \

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: session.c,v 1.106 2026/07/13 13:01:14 nicm Exp $ */ /* $OpenBSD: session.c,v 1.107 2026/08/05 07:35:35 nicm Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -709,8 +709,10 @@ session_group_synchronize1(struct session *target, struct session *s)
/* Fix up the current window. */ /* Fix up the current window. */
if (s->curw != NULL) if (s->curw != NULL)
s->curw = winlink_find_by_index(&s->windows, s->curw->idx); s->curw = winlink_find_by_index(&s->windows, s->curw->idx);
else else if (target->curw != NULL)
s->curw = winlink_find_by_index(&s->windows, target->curw->idx); s->curw = winlink_find_by_index(&s->windows, target->curw->idx);
if (s->curw == NULL)
s->curw = RB_MIN(winlinks, &s->windows);
/* Fix up the last window stack. */ /* Fix up the last window stack. */
memcpy(&old_lastw, &s->lastw, sizeof old_lastw); memcpy(&old_lastw, &s->lastw, sizeof old_lastw);

5
tmux.1
View File

@@ -1,4 +1,4 @@
.\" $OpenBSD: tmux.1,v 1.1152 2026/07/29 08:58:33 nicm Exp $ .\" $OpenBSD: tmux.1,v 1.1153 2026/08/05 07:31:08 nicm Exp $
.\" .\"
.\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
.\" .\"
@@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: July 29 2026 $ .Dd $Mdocdate: August 5 2026 $
.Dt TMUX 1 .Dt TMUX 1
.Os .Os
.Sh NAME .Sh NAME
@@ -7397,6 +7397,7 @@ The following variables are available, where appropriate:
.It Li "pane_pid" Ta "" Ta "PID of first process in pane" .It Li "pane_pid" Ta "" Ta "PID of first process in pane"
.It Li "pane_pipe" Ta "" Ta "1 if pane is being piped" .It Li "pane_pipe" Ta "" Ta "1 if pane is being piped"
.It Li "pane_pipe_pid" Ta "" Ta "PID of pipe process, if any" .It Li "pane_pipe_pid" Ta "" Ta "PID of pipe process, if any"
.It Li "pane_private_modes" Ta "" Ta "List of enabled DECSET private modes"
.It Li "pane_pb_state" Ta "" Ta "Pane progress bar state, one of hidden, normal, error, indeterminate, paused (can be set by application)" .It Li "pane_pb_state" Ta "" Ta "Pane progress bar state, one of hidden, normal, error, indeterminate, paused (can be set by application)"
.It Li "pane_pb_progress" Ta "" Ta "Pane progress bar progress percentage (can be set by application)" .It Li "pane_pb_progress" Ta "" Ta "Pane progress bar progress percentage (can be set by application)"
.It Li "pane_right" Ta "" Ta "Right of pane" .It Li "pane_right" Ta "" Ta "Right of pane"