[edk2-devel] [PATCH v2 1/3] MdeModulePkg: TerminalDxe: set xterm resolution on mode change

Paweł Poławski ppolawsk at redhat.com
Mon Nov 28 04:35:20 UTC 2022


From: Laszlo Ersek <lersek at redhat.com>

Allow TerminalDxe outputs an XTerm resize sequence on
terminal mode change
Reference: <http://rtfm.etla.org/xterm/ctlseq.html>

Signed-off-by: Laszlo Ersek <lersek at redhat.com>

Pawel Polawski: Updated commit message for re-submission

Cc: Jian J Wang <jian.j.wang at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>

Signed-off-by: Paweł Poławski <ppolawsk at redhat.com>
---
 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 58e6ab004882..e8c011c1bafe 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -2102,6 +2102,10 @@
   # @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 @@
   DebugLib

   PcdLib

   BaseLib

+  PrintLib

 

 [Guids]

   ## SOMETIMES_PRODUCES ## Variable:L"ConInDev"

@@ -87,6 +88,7 @@
 [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 <Library/PrintLib.h>

+

 #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.38.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#96638): https://edk2.groups.io/g/devel/message/96638
Mute This Topic: https://groups.io/mt/95304210/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list