Hi all, As a new stable version has been released recently and the freeze is over, if there is a chance for review of this set of patches? They have been already reviewed in the past and the last request was to make commit messages more meaningful for the end user. Best regards, Pawel On Fri, Feb 17, 2023 at 2:02 PM Paweł Poławski 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ł Poławski > --- > 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.dec > index 9605c617b7a8..76007e0af42a 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -2107,6 +2107,10 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, > PcdsDynamic, PcdsDynamicEx] > # @Prompt The shared bit mask when Intel Tdx is enabled. > gEfiMdeModulePkgTokenSpaceGuid.PcdTdxSharedBitMask|0x0|UINT64|0x10000025 > > + ## Controls whether TerminalDxe outputs an XTerm resize sequence on > terminal > + # 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 > seconds 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[] = { ESC, '[', '0', > '0', ';', '0', '0', 'H', 0 > CHAR16 mCursorForwardString[] = { ESC, '[', '0', '0', 'C', 0 }; > CHAR16 mCursorBackwardString[] = { 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[] = "\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 = TRUE; > + Status = This->OutputString (This, > ResizeSequence); > + TerminalDevice->OutputEscChar = FALSE; > + if (EFI_ERROR (Status)) { > + return EFI_DEVICE_ERROR; > + } > + } > + > This->Mode->Mode = (INT32)ModeNumber; > > Status = This->ClearScreen (This); > -- > 2.39.1 > > > > > > > -- Paweł Poławski Red Hat Virtualization ppolawsk@redhat.com @RedHat Red Hat Red Hat