From nobody Tue May 12 15:56:29 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gFLmz0G6kz6cfH2 for ; Tue, 12 May 2026 15:56:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gFLmy3zVDz3hT4 for ; Tue, 12 May 2026 15:56:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778601394; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=SUY1fTXY+rcioVxgZlZBOwucMMRXgKYwbE2ghlWidhg=; b=Z5MPetkl+n1KYRyvZsF7Nbybkt30cpXwHaepiZf6XKUWUgRsekJujPqjmSH76/cyL1sKUn dJ2VW/hMZ4AP8G/dT3V/Vr3gCVHXdvGWQ/C4iEMgBY9FUKzCN2sK9zjqXhssC7k+/l0Qmd WMxslwUMhni8NcuszoubRvNoBFpwEXcclk7ga1C74yDH1L5RivKZjMQM9CpjL9AKKnlmBI loKrowDu/ty/S/N8qkGnDYsSJU2D9Mfie23k36qwUAfUaYCAXw60FYWLa5VHHu5A+H9UTZ li0gZPFF6gM8K0QXeqZtxJcDpW2L1uGxipYhKStmtTD6L8ibdQ+6YFnz0TlLig== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1778601394; a=rsa-sha256; cv=none; b=xMqQcJxsIJuQBq7d2KQ1Od1VYKd7QwnJF5Ud7DAmgK+jEJSIr/wEvrfyOivNLTf9OY96Wy W8YtbHoJcN56DbJzeHALii7AbCoxahoie3Y9TsE6FN4lv0ZoAO9OI+MKUpN705H8R1cRit 7MkB0HAQrHWNv/d6je6UYEqseEzhutNp92j50ppXIJJuM3zXz2LPPW/bfoXkF8E1pHDJ2N WrA2rPbXJ2aNa+nxseHjQXkyBHKQXb09Ehmpz1FqfXamEYpwx2ivLne1vHqsFp4s4idmc6 nOxfzKmLMwcMKmcvCEnshaGFVSrgFUS7uLEyiGxttX9ub98iFeAcU7rhmppePQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778601394; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=SUY1fTXY+rcioVxgZlZBOwucMMRXgKYwbE2ghlWidhg=; b=BHV6Yt64nSd+DLPWKlK6qNWP5Y8R138x2CdiYXTZy6S0sKE4qYhBbV/Zikuv0qZ7Eih53E zvHp7SVpgW9fsSo+SoMVa601TxNK2y2ODF5LnxN7TNuBAKYKyC/UGCcriSIkROSPXIDYQf chHSjLd2ENMclt0r/T/czDj0BDYyfMH1PGpE08BBK09IIXMitIxZ61/VS519P3CzTPqS4b 3NsWvrf0Y5Ylt+OfvTS8nYyVGylQUXjGbOVx8EGoIw0sOtad/xmoeaBD7vopZA4k9ZEEr7 UjqgJXOaVGjULnoooq/m1YELSIKadtbrjyX0xPI3wcKGCRDtW2bmfrth0g7PAA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gFLmy36pZz18WD for ; Tue, 12 May 2026 15:56:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 376c9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 12 May 2026 15:56:29 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Aleksandr Rybalko Subject: git: 8db0553ed6d8 - main - vt: Clear cut-paste selection if the area intersects with the filled region List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ray X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8db0553ed6d8636d82a26896237099526b93be19 Auto-Submitted: auto-generated Date: Tue, 12 May 2026 15:56:29 +0000 Message-Id: <6a034dad.376c9.1b86bb2c@gitrepo.freebsd.org> The branch main has been updated by ray: URL: https://cgit.FreeBSD.org/src/commit/?id=8db0553ed6d8636d82a26896237099526b93be19 commit 8db0553ed6d8636d82a26896237099526b93be19 Author: Aleksandr Rybalko AuthorDate: 2026-05-12 15:56:20 +0000 Commit: Aleksandr Rybalko CommitDate: 2026-05-12 15:56:20 +0000 vt: Clear cut-paste selection if the area intersects with the filled region * cut-paste buffer stays unchanged PR: 260069 Reported by: emaste Reviewed by: imp Approved by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D56922 --- sys/dev/vt/vt.h | 2 ++ sys/dev/vt/vt_buf.c | 30 ++++++++++++++++++++++++++++++ sys/dev/vt/vt_core.c | 8 +++++--- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/sys/dev/vt/vt.h b/sys/dev/vt/vt.h index 4abe99e4ab13..6ff242562c87 100644 --- a/sys/dev/vt/vt.h +++ b/sys/dev/vt/vt.h @@ -248,6 +248,8 @@ void vtbuf_cursor_visibility(struct vt_buf *, int); int vtbuf_set_mark(struct vt_buf *vb, int type, int col, int row); int vtbuf_get_marked_len(struct vt_buf *vb); void vtbuf_extract_marked(struct vt_buf *vb, term_char_t *buf, int sz, int mark); +void vtbuf_unmark(struct vt_buf *vb); +void vtbuf_unmark_on_cross(struct vt_buf *vb, int target_begin, int target_end); #endif #define VTB_MARK_NONE 0 diff --git a/sys/dev/vt/vt_buf.c b/sys/dev/vt/vt_buf.c index e1e4ebc23491..8596342c139a 100644 --- a/sys/dev/vt/vt_buf.c +++ b/sys/dev/vt/vt_buf.c @@ -202,6 +202,36 @@ vtbuf_in_this_range(int begin, int test, int end, int sz) else return (test >= begin && test < end); } + +void +vtbuf_unmark(struct vt_buf *vb) +{ + + vtbuf_set_mark(vb, VTB_MARK_START, 0, 0); +} + +void +vtbuf_unmark_on_cross(struct vt_buf *vb, int target_begin, int target_end) +{ + int hsz, mb, me, tb, te; + + tb = vtbuf_wth(vb, target_begin); + te = vtbuf_wth(vb, target_end); + mb = vb->vb_mark_start.tp_row; + me = vb->vb_mark_end.tp_row; + hsz = vb->vb_history_size; + + /* + * Test intersection with vtbuf_in_this_range due to use of + * the circular buffer. + */ + if (vtbuf_in_this_range(tb, mb, te, hsz) || + vtbuf_in_this_range(tb, me, te, hsz) || + vtbuf_in_this_range(mb, tb, me, hsz) || + vtbuf_in_this_range(mb, te, me, hsz)) { + vtbuf_unmark(vb); + } +} #endif int diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c index 68e9f45cff56..641f6c014937 100644 --- a/sys/dev/vt/vt_core.c +++ b/sys/dev/vt/vt_core.c @@ -1197,6 +1197,10 @@ vtterm_fill(struct terminal *tm, const term_rect_t *r, term_char_t c) { struct vt_window *vw = tm->tm_softc; +#ifndef SC_NO_CUTPASTE + vtbuf_unmark_on_cross(&vw->vw_buf, r->tr_begin.tp_row, + r->tr_end.tp_row); +#endif vtbuf_fill(&vw->vw_buf, r, c); } @@ -2465,9 +2469,7 @@ vt_mouse_event(int type, int x, int y, int event, int cnt, int mlevel) default: vt_mouse_paste(); /* clear paste buffer selection after paste */ - vtbuf_set_mark(&vw->vw_buf, VTB_MARK_START, - vd->vd_mx / vf->vf_width, - vd->vd_my / vf->vf_height); + vtbuf_unmark(&vw->vw_buf); break; } return; /* Done */