From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by mx.groups.io with SMTP id smtpd.web11.104535.1680621145139291698 for ; Tue, 04 Apr 2023 08:12:25 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RalKEFJT; spf=pass (domain: kernel.org, ip: 139.178.84.217, mailfrom: ardb@kernel.org) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 8BC95635C0 for ; Tue, 4 Apr 2023 15:12:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F0A39C4339C for ; Tue, 4 Apr 2023 15:12:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1680621144; bh=X0PTmwQbmNej3a/w3guzGLDtARxArMH9SXbZ9dq0AIk=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=RalKEFJTVQDP2gxy695IOUbHv6KlnGoIe63eCR0O0K2lMULowYTRLw2IhqNkB6R5l 7xokhkYT0CfkAxc0/ICfdNd4r9jH6qShYmQbYqUv7UFL6BlYFnwwFXsgrRlniMZbOj IA5g+Jw0DCCUcufOrgPjDSmov//kD1ZtMlZngt2ZhnJkYc4OJZp0/smUzs+sqbbPUt yZ+kSqIaZ3385C9tojOtpykMRqGhxdzk9P6vfBkyoU5duURyNyuLaDsYTnagHy/WbS lgOwtBBzPvZaIodkmgUsnATqU8NtwhcPzamATdH3mC+heIWXFQEL2Zm+r9OYzrJDgi aAwkir26jiwrA== Received: by mail-lf1-f49.google.com with SMTP id x17so42816916lfu.5 for ; Tue, 04 Apr 2023 08:12:23 -0700 (PDT) X-Gm-Message-State: AAQBX9fuOAw18RVSscvd5ZTEklpOxlbffr96kl3Hsq3dHIuuHf9EEnVQ taa1n1WjhUZThCfTY9Fl/G0RLhuInvNwITYkqCg= X-Google-Smtp-Source: AKy350Z2nrpo8z9fymcyX3h9330HzgRXoObmq3YMrAcjDAEHlWI5oLBCZL3m5orTaPeIOXC7rWdVz1s1rqrfneluWAY= X-Received: by 2002:a05:6512:159e:b0:4e8:4409:bb76 with SMTP id bp30-20020a056512159e00b004e84409bb76mr9872292lfb.2.1680621141943; Tue, 04 Apr 2023 08:12:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: "Ard Biesheuvel" Date: Tue, 4 Apr 2023 17:12:11 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [edk2-devel] PATCH v3 1/3 MdeModulePkg: TerminalDxe: set xterm resolution on mode change To: devel@edk2.groups.io, ppolawsk@redhat.com Cc: Jian J Wang , Liming Gao Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 17 Feb 2023 at 14:02, Pawe=C5=82 Po=C5=82awski wrote: > > From: Laszlo Ersek > > TerminalDxe driver can send xterm control sequences. > Reference: > > This way it can trigger client window resize (xterm, > gnome-terminal etc.) accordingly, to a specified number > of rows and columns. It improves user experience > when handling text mode based operations. > > New PcdResizeXterm config switch has been added to enable > or disable this behaviour. > > Signed-off-by: Laszlo Ersek > > Pawel Polawski: Updated commit message for re-submission > > Cc: Jian J Wang > Cc: Liming Gao > > Signed-off-by: Pawe=C5=82 Po=C5=82awski Acked-by: Ard Biesheuvel > --- > MdeModulePkg/MdeModulePkg.dec | 4 +++ > MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf | 2 ++ > MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c | 29 +++++++= +++++++++++++ > 3 files changed, 35 insertions(+) > > diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.de= c > index 9605c617b7a8..76007e0af42a 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -2107,6 +2107,10 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDyna= mic, PcdsDynamicEx] > # @Prompt The shared bit mask when Intel Tdx is enabled. > gEfiMdeModulePkgTokenSpaceGuid.PcdTdxSharedBitMask|0x0|UINT64|0x100000= 25 > > + ## Controls whether TerminalDxe outputs an XTerm resize sequence on te= rminal > + # mode change. > + gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE|BOOLEAN|0x00010080 > + > [PcdsPatchableInModule] > ## Specify memory size with page number for PEI code when > # Loading Module at Fixed Address feature is enabled. > diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b= /MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf > index b2a8aeba8510..eff625346539 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf > @@ -55,6 +55,7 @@ [LibraryClasses] > DebugLib > PcdLib > BaseLib > + PrintLib > > [Guids] > ## SOMETIMES_PRODUCES ## Variable:L"ConInDev" > @@ -87,6 +88,7 @@ [Protocols] > [Pcd] > gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType ## SOMETIMES= _CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable ## CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm ## CONSUMES > > # [Event] > # # Relative timer event set by UnicodeToEfiKey(), used to be one 2 seco= nds input timeout. > diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c = b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > index 7809869e7d49..496849458db4 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > @@ -7,6 +7,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > +#include > + > #include "Terminal.h" > > // > @@ -80,6 +82,15 @@ CHAR16 mSetCursorPositionString[] =3D { ESC, '[', '0'= , '0', ';', '0', '0', 'H', 0 > CHAR16 mCursorForwardString[] =3D { ESC, '[', '0', '0', 'C', 0 }; > CHAR16 mCursorBackwardString[] =3D { ESC, '[', '0', '0', 'D', 0 }; > > +// > +// Note that this is an ASCII format string, taking two INT32 arguments: > +// rows, columns. > +// > +// A %d (INT32) format specification can expand to at most 11 characters= . > +// > +CHAR8 mResizeTextAreaFormatString[] =3D "\x1B[8;%d;%dt"; > +#define RESIZE_SEQ_SIZE (sizeof mResizeTextAreaFormatString + 2 * (11 -= 2)) > + > // > // Body of the ConOut functions > // > @@ -498,6 +509,24 @@ TerminalConOutSetMode ( > return EFI_DEVICE_ERROR; > } > > + if (PcdGetBool (PcdResizeXterm)) { > + CHAR16 ResizeSequence[RESIZE_SEQ_SIZE]; > + > + UnicodeSPrintAsciiFormat ( > + ResizeSequence, > + sizeof ResizeSequence, > + mResizeTextAreaFormatString, > + (INT32)TerminalDevice->TerminalConsoleModeData[ModeNumber].Rows, > + (INT32)TerminalDevice->TerminalConsoleModeData[ModeNumber].Columns > + ); > + TerminalDevice->OutputEscChar =3D TRUE; > + Status =3D This->OutputString (This, ResizeSe= quence); > + TerminalDevice->OutputEscChar =3D FALSE; > + if (EFI_ERROR (Status)) { > + return EFI_DEVICE_ERROR; > + } > + } > + > This->Mode->Mode =3D (INT32)ModeNumber; > > Status =3D This->ClearScreen (This); > -- > 2.39.1 > > > >=20 > >