From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id SGt2K0BGemimcxcAWB0awg (envelope-from ) for ; Fri, 18 Jul 2025 09:04:00 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=SLgDwhVK; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=imLu4EDa; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=SLgDwhVK; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=imLu4EDa; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id ACE071E11C; Fri, 18 Jul 2025 09:04:00 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-9.1 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL, RCVD_IN_VALIDITY_SAFE autolearn=ham autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 09A9C1E089 for ; Fri, 18 Jul 2025 09:04:00 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BD510385EC3F for ; Fri, 18 Jul 2025 13:03:59 +0000 (GMT) Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by sourceware.org (Postfix) with ESMTPS id CC6B4385E007 for ; Fri, 18 Jul 2025 13:01:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CC6B4385E007 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CC6B4385E007 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1752843716; cv=none; b=eZiU+haml9yHk6930xnmp2N811vP3FJA3HpO90DEfefQxCflIhIz69TM1um1x5kZpp4gLAR+O1oVPWfCHewIrjPbniSpAbMcGPd9gqKgPsf6FFfw0CP6MQGj8n/MRFjWGz7FlO5KQIQrfHWCvbZXzAgCe4tCz+EKB3TLlORyvmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1752843716; c=relaxed/simple; bh=lHDleN4nEMNO/rXYIQbJJa8Fz0VSCgBZX+dJOgPHfAg=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=i8MfG05/pusF1FbRyqGwhOiAweRf+CJXf2QcgqHiunNyorOAvDtAgLgR5wp7P9Q6ljmU/17yoAb6rBmrxZ7UQssYKRPK1G50lZaNEbAiYNsG3at/Kld/0qwsdk4lO9Vwa6jXF3qYq+NTlw8EW1wsl1Yc+fMwh65sbntRSFoEmbs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CC6B4385E007 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=SLgDwhVK; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=imLu4EDa; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=SLgDwhVK; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=imLu4EDa Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (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) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id DE55A21755 for ; Fri, 18 Jul 2025 13:01:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1752843715; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CE2rFZ11diSEvLbDqsnSVY458uS1NAdPY1mG3TtSLPM=; b=SLgDwhVKWsr3BAKfty9+T9ZC/vXGBrrpI4sFyUMBL+CPkFt8fNx16VYOE/7jmzZwZ1VRP9 a55Ca05idmu/vXZrZr+BdV5m2MVZQylY8ex1eUccjnm5hnL8IiRbrFlxAMDdEHa+uUaSk8 bpNXMsrkOPLqP9JaPXoVT8LhbORcye0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1752843715; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CE2rFZ11diSEvLbDqsnSVY458uS1NAdPY1mG3TtSLPM=; b=imLu4EDaWmzUHTQneq7uGnGrdyIXBA3kpufU64587Qg1ESG+zfSURFsCrh2Yvq6tAes4C7 EnxSTgBYEQSNp8Dw== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=SLgDwhVK; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=imLu4EDa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1752843715; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CE2rFZ11diSEvLbDqsnSVY458uS1NAdPY1mG3TtSLPM=; b=SLgDwhVKWsr3BAKfty9+T9ZC/vXGBrrpI4sFyUMBL+CPkFt8fNx16VYOE/7jmzZwZ1VRP9 a55Ca05idmu/vXZrZr+BdV5m2MVZQylY8ex1eUccjnm5hnL8IiRbrFlxAMDdEHa+uUaSk8 bpNXMsrkOPLqP9JaPXoVT8LhbORcye0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1752843715; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CE2rFZ11diSEvLbDqsnSVY458uS1NAdPY1mG3TtSLPM=; b=imLu4EDaWmzUHTQneq7uGnGrdyIXBA3kpufU64587Qg1ESG+zfSURFsCrh2Yvq6tAes4C7 EnxSTgBYEQSNp8Dw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (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) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id C138113ABE for ; Fri, 18 Jul 2025 13:01:55 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id sGK1LcNFemjOHAAAD6G6ig (envelope-from ) for ; Fri, 18 Jul 2025 13:01:55 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 4/7] [gdb/testsuite] Handle auto_left_margin in tuiterm Date: Fri, 18 Jul 2025 15:01:50 +0200 Message-ID: <20250718130153.24989-5-tdevries@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250718130153.24989-1-tdevries@suse.de> References: <20250718130153.24989-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: DE55A21755 X-Rspamd-Action: no action X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; MIME_TRACE(0.00)[0:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; TO_DN_NONE(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org The terminal capability bw (aka as auto_left_margin) controls whether a backspace at the start of a line wraps to the last column of the previous line. For tuiterm, we use TERM=ansi, and on linux at least that capability is off. Consequently the current implementation of Term::_ctl_0x08 doesn't wrap. Add this capability in Term::_ctl_0x08, and add a unit test. Tested on aarch64-linux. --- gdb/testsuite/gdb.tui/tuiterm.exp | 13 +++++++++++-- gdb/testsuite/lib/tuiterm.exp | 32 ++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/gdb.tui/tuiterm.exp b/gdb/testsuite/gdb.tui/tuiterm.exp index 0e03bfaa8ea..e58de688ef2 100644 --- a/gdb/testsuite/gdb.tui/tuiterm.exp +++ b/gdb/testsuite/gdb.tui/tuiterm.exp @@ -102,7 +102,7 @@ proc test_backspace {} { Term::_move_cursor 1 2 - Term::_ctl_0x08 + Term::_ctl_0x08 0 check "backspace one" { "abcdefgh" "ijklmnop" @@ -111,13 +111,22 @@ proc test_backspace {} { } 0 2 # Cursor should not move if it is already at column 0. - Term::_ctl_0x08 + Term::_ctl_0x08 0 check "backspace 2" { "abcdefgh" "ijklmnop" "qrstuvwx" "yz01234 " } 0 2 + + # Cursor should wrap to previous line. + Term::_ctl_0x08 1 + check "backspace 3" { + "abcdefgh" + "ijklmnop" + "qrstuvwx" + "yz01234 " + } 7 1 } proc test_linefeed { } { diff --git a/gdb/testsuite/lib/tuiterm.exp b/gdb/testsuite/lib/tuiterm.exp index 4364ff8d05c..451fccc6693 100644 --- a/gdb/testsuite/lib/tuiterm.exp +++ b/gdb/testsuite/lib/tuiterm.exp @@ -90,14 +90,40 @@ namespace eval Term { proc _ctl_0x07 {} { } + # Return 1 if tuiterm has the bw/auto_left_margin enabled. + proc _have_bw {} { + return 0 + } + # Backspace. - proc _ctl_0x08 {} { - _log_cur "Backspace" { + proc _ctl_0x08 { {bw -1} } { + if { $bw == -1 } { + set bw [_have_bw] + } + _log_cur "Backspace, bw == $bw" { variable _cur_col + variable _cur_row + variable _cols - if {$_cur_col > 0} { + if { $_cur_col > 0 } { + # No wrapping needed. incr _cur_col -1 + return } + + if { ! $bw } { + # Wrapping not enabled. + return + } + + if { $_cur_row == 0 } { + # Can't wrap. + return + } + + # Wrap to previous line. + set _cur_col [expr $_cols - 1] + incr _cur_row -1 } } -- 2.43.0