mirror of
https://github.com/tmux/tmux.git
synced 2026-09-05 21:20:45 +00:00
Merge branch 'master' into 4902-image-support
This commit is contained in:
1
.github/workflows/lock.yml
vendored
1
.github/workflows/lock.yml
vendored
@@ -16,6 +16,7 @@ concurrency:
|
||||
jobs:
|
||||
action:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'tmux/tmux'
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v6
|
||||
with:
|
||||
|
||||
1
.github/workflows/regress.yml
vendored
1
.github/workflows/regress.yml
vendored
@@ -16,6 +16,7 @@ jobs:
|
||||
regress:
|
||||
name: ${{ matrix.name }}
|
||||
runs-on: ${{ matrix.runner }}
|
||||
if: github.repository == 'tmux/tmux'
|
||||
timeout-minutes: 45
|
||||
|
||||
strategy:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: cmd-split-window.c,v 1.146 2026/07/21 12:28:43 nicm Exp $ */
|
||||
/* $OpenBSD: cmd-split-window.c,v 1.148 2026/08/07 08:10:53 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||
@@ -99,6 +99,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
|
||||
if (cmd_get_entry(self) == &cmd_new_pane_entry)
|
||||
is_floating = !args_has(args, 'L');
|
||||
else {
|
||||
window_unzoom(w, 1);
|
||||
is_floating = window_pane_is_floating(wp);
|
||||
flags |= SPAWN_SPLIT;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: key-bindings.c,v 1.190 2026/07/22 19:23:59 nicm Exp $ */
|
||||
/* $OpenBSD: key-bindings.c,v 1.192 2026/08/06 09:05:04 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||
@@ -421,6 +421,7 @@ key_bindings_init(void)
|
||||
"bind -N 'Spread panes out evenly' E { select-layout -E }",
|
||||
"bind -N 'Switch to the last client' L { switch-client -l }",
|
||||
"bind -N 'Clear the marked pane' M { select-pane -M }",
|
||||
"bind -N 'Change the pane title' T { command-prompt -I'#T' { select-pane -T '%%' } }",
|
||||
"bind -N 'Enter copy mode' [ { copy-mode }",
|
||||
"bind -N 'Paste the most recent paste buffer' ] { paste-buffer -p }",
|
||||
"bind -N 'Create a new window' c { new-window }",
|
||||
@@ -595,7 +596,7 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode g { command-prompt -P -p'(goto line)' { send -X goto-line -- '%%' } }",
|
||||
"bind -Tcopy-mode n { send -X search-again }",
|
||||
"bind -Tcopy-mode q { send -X cancel }",
|
||||
"bind -Tcopy-mode r { send -X refresh-toggle }",
|
||||
"bind -Tcopy-mode r { send -X refresh-now }",
|
||||
"bind -Tcopy-mode t { command-prompt -P -1p'(jump to forward)' { send -X jump-to-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode Home { send -X start-of-line }",
|
||||
"bind -Tcopy-mode End { send -X end-of-line }",
|
||||
@@ -705,7 +706,7 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode-vi n { send -X search-again }",
|
||||
"bind -Tcopy-mode-vi o { send -X other-end }",
|
||||
"bind -Tcopy-mode-vi q { send -X cancel }",
|
||||
"bind -Tcopy-mode-vi r { send -X refresh-toggle }",
|
||||
"bind -Tcopy-mode-vi r { send -X refresh-now }",
|
||||
"bind -Tcopy-mode-vi t { command-prompt -P -1p'(jump to forward)' { send -X jump-to-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi v { send -X rectangle-toggle }",
|
||||
"bind -Tcopy-mode-vi w { send -X next-word }",
|
||||
|
||||
12
tmux.1
12
tmux.1
@@ -1,4 +1,4 @@
|
||||
.\" $OpenBSD: tmux.1,v 1.1153 2026/08/05 07:31:08 nicm Exp $
|
||||
.\" $OpenBSD: tmux.1,v 1.1155 2026/08/06 09:05:04 nicm Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||
.\"
|
||||
@@ -14,7 +14,7 @@
|
||||
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.Dd $Mdocdate: August 5 2026 $
|
||||
.Dd $Mdocdate: August 6 2026 $
|
||||
.Dt TMUX 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@@ -356,6 +356,8 @@ Force redraw of the attached client.
|
||||
Select a new session for the attached client interactively.
|
||||
.It t
|
||||
Show the time.
|
||||
.It T
|
||||
Change the current pane title.
|
||||
.It w
|
||||
Choose the current window interactively.
|
||||
.It x
|
||||
@@ -2319,10 +2321,14 @@ the bottom and is paused while a selection is in progress.
|
||||
.Xc
|
||||
Turn off automatic refresh of the content from the pane.
|
||||
.It Xo
|
||||
.Ic refresh\-toggle
|
||||
.Ic refresh\-now
|
||||
(vi: r)
|
||||
(emacs: r)
|
||||
.Xc
|
||||
Refresh the content from the pane once.
|
||||
.It Xo
|
||||
.Ic refresh\-toggle
|
||||
.Xc
|
||||
Toggle automatic refresh of the content from the pane.
|
||||
.It Xo
|
||||
.Ic scroll\-bottom
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: window-copy.c,v 1.424 2026/07/29 17:42:56 nicm Exp $ */
|
||||
/* $OpenBSD: window-copy.c,v 1.425 2026/08/05 12:23:25 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||
@@ -54,6 +54,7 @@ static void window_copy_redraw_screen(struct window_mode_entry *);
|
||||
static void window_copy_do_refresh(struct window_mode_entry *, int);
|
||||
static void window_copy_refresh_timer(int, short, void *);
|
||||
static void window_copy_refresh_arm(struct window_mode_entry *);
|
||||
static int window_copy_refresh_allowed(struct window_mode_entry *);
|
||||
static void window_copy_refresh_start(struct window_mode_entry *);
|
||||
static void window_copy_refresh_stop(struct window_mode_entry *);
|
||||
static void window_copy_style_changed(struct window_mode_entry *);
|
||||
@@ -3036,6 +3037,20 @@ window_copy_refresh_arm(struct window_mode_entry *wme)
|
||||
evtimer_add(&data->refresh_timer, &tv);
|
||||
}
|
||||
|
||||
static int
|
||||
window_copy_refresh_allowed(struct window_mode_entry *wme)
|
||||
{
|
||||
struct window_copy_mode_data *data = wme->data;
|
||||
|
||||
/*
|
||||
* Do not refresh a view of another pane (copy-mode -s): the source may
|
||||
* disappear and changes are not tracked on this pane.
|
||||
*/
|
||||
if (data->viewmode || wme->swp != wme->wp)
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void
|
||||
window_copy_refresh_timer(__unused int fd, __unused short events, void *arg)
|
||||
{
|
||||
@@ -3070,11 +3085,7 @@ window_copy_refresh_start(struct window_mode_entry *wme)
|
||||
{
|
||||
struct window_copy_mode_data *data = wme->data;
|
||||
|
||||
/*
|
||||
* Do not refresh a view of another pane (copy-mode -s): the source may
|
||||
* disappear and changes are not tracked on this pane.
|
||||
*/
|
||||
if (data->viewmode || wme->swp != wme->wp || data->refresh_active)
|
||||
if (!window_copy_refresh_allowed(wme) || data->refresh_active)
|
||||
return;
|
||||
data->refresh_active = 1;
|
||||
window_copy_refresh_arm(wme);
|
||||
@@ -3089,6 +3100,25 @@ window_copy_refresh_stop(struct window_mode_entry *wme)
|
||||
evtimer_del(&data->refresh_timer);
|
||||
}
|
||||
|
||||
static enum window_copy_cmd_action
|
||||
window_copy_cmd_refresh_now(struct window_copy_cmd_state *cs)
|
||||
{
|
||||
struct window_mode_entry *wme = cs->wme;
|
||||
struct window_copy_mode_data *data = wme->data;
|
||||
struct window_pane *wp = wme->wp;
|
||||
int follow;
|
||||
|
||||
if (!window_copy_refresh_allowed(wme))
|
||||
return (WINDOW_COPY_CMD_NOTHING);
|
||||
|
||||
follow = (data->oy == 0 &&
|
||||
data->cy == screen_size_y(&data->screen) - 1);
|
||||
window_copy_do_refresh(wme, follow);
|
||||
wp->flags &= ~PANE_UNSEENCHANGES;
|
||||
|
||||
return (WINDOW_COPY_CMD_REDRAW);
|
||||
}
|
||||
|
||||
static enum window_copy_cmd_action
|
||||
window_copy_cmd_refresh_on(struct window_copy_cmd_state *cs)
|
||||
{
|
||||
@@ -3631,6 +3661,12 @@ static const struct {
|
||||
.clear = WINDOW_COPY_CMD_CLEAR_NEVER,
|
||||
.f = window_copy_cmd_refresh_off
|
||||
},
|
||||
{ .command = "refresh-now",
|
||||
.args = { "", 0, 0, NULL },
|
||||
.flags = WINDOW_COPY_CMD_FLAG_READONLY,
|
||||
.clear = WINDOW_COPY_CMD_CLEAR_NEVER,
|
||||
.f = window_copy_cmd_refresh_now
|
||||
},
|
||||
{ .command = "refresh-toggle",
|
||||
.args = { "", 0, 0, NULL },
|
||||
.flags = WINDOW_COPY_CMD_FLAG_READONLY,
|
||||
|
||||
Reference in New Issue
Block a user