diff --git a/ReactiveExample/ReactiveExample.csproj b/ReactiveExample/ReactiveExample.csproj
index e903b9b67..b2823cfe4 100644
--- a/ReactiveExample/ReactiveExample.csproj
+++ b/ReactiveExample/ReactiveExample.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs b/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
index 0abcc6024..9a9deccee 100644
--- a/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
+++ b/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
@@ -18,6 +18,7 @@ namespace Terminal.Gui {
public const int STD_ERROR_HANDLE = -12;
internal IntPtr InputHandle, OutputHandle;
+ IntPtr screenBuffer;
readonly uint originalConsoleMode;
CursorVisibility? initialCursorVisibility = null;
CursorVisibility? currentCursorVisibility = null;
@@ -39,47 +40,47 @@ namespace Terminal.Gui {
public bool WriteToConsole (Size size, CharInfo [] charInfoBuffer, Coord coords, SmallRect window)
{
- //if (OutputHandle == IntPtr.Zero) {
- // ReadFromConsoleOutput (size, coords, ref window);
- //}
+ if (!IsWindowsTerminal && screenBuffer == IntPtr.Zero) {
+ ReadFromConsoleOutput (size, coords, ref window);
+ }
- return WriteConsoleOutput (OutputHandle, charInfoBuffer, coords, new Coord () { X = window.Left, Y = window.Top }, ref window);
+ if (!initialCursorVisibility.HasValue && GetCursorVisibility (out CursorVisibility visibility)) {
+ initialCursorVisibility = visibility;
+ }
+
+ return WriteConsoleOutput (IsWindowsTerminal ? OutputHandle : screenBuffer, charInfoBuffer, coords, new Coord () { X = window.Left, Y = window.Top }, ref window);
}
- //public void ReadFromConsoleOutput (Size size, Coord coords, ref SmallRect window)
- //{
- // OutputHandle = CreateConsoleScreenBuffer (
- // DesiredAccess.GenericRead | DesiredAccess.GenericWrite,
- // ShareMode.FileShareRead | ShareMode.FileShareWrite,
- // IntPtr.Zero,
- // 1,
- // IntPtr.Zero
- // );
- // if (ScreenBuffer == INVALID_HANDLE_VALUE) {
- // var err = Marshal.GetLastWin32Error ();
+ public void ReadFromConsoleOutput (Size size, Coord coords, ref SmallRect window)
+ {
+ screenBuffer = CreateConsoleScreenBuffer (
+ DesiredAccess.GenericRead | DesiredAccess.GenericWrite,
+ ShareMode.FileShareRead | ShareMode.FileShareWrite,
+ IntPtr.Zero,
+ 1,
+ IntPtr.Zero
+ );
+ if (screenBuffer == INVALID_HANDLE_VALUE) {
+ var err = Marshal.GetLastWin32Error ();
- // if (err != 0)
- // throw new System.ComponentModel.Win32Exception (err);
- // }
+ if (err != 0)
+ throw new System.ComponentModel.Win32Exception (err);
+ }
- // if (!initialCursorVisibility.HasValue && GetCursorVisibility (out CursorVisibility visibility)) {
- // initialCursorVisibility = visibility;
- // }
+ if (!SetConsoleActiveScreenBuffer (screenBuffer)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
- // if (!SetConsoleActiveScreenBuffer (ScreenBuffer)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
+ OriginalStdOutChars = new CharInfo [size.Height * size.Width];
- // OriginalStdOutChars = new CharInfo [size.Height * size.Width];
-
- // if (!ReadConsoleOutput (ScreenBuffer, OriginalStdOutChars, coords, new Coord () { X = 0, Y = 0 }, ref window)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
- //}
+ if (!ReadConsoleOutput (screenBuffer, OriginalStdOutChars, coords, new Coord () { X = 0, Y = 0 }, ref window)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
+ }
public bool SetCursorPosition (Coord position)
{
- return SetConsoleCursorPosition (OutputHandle, position);
+ return SetConsoleCursorPosition (IsWindowsTerminal ? OutputHandle : screenBuffer, position);
}
public void SetInitialCursorVisibility ()
@@ -91,11 +92,11 @@ namespace Terminal.Gui {
public bool GetCursorVisibility (out CursorVisibility visibility)
{
- if (OutputHandle == IntPtr.Zero) {
+ if ((IsWindowsTerminal ? OutputHandle : screenBuffer) == IntPtr.Zero) {
visibility = CursorVisibility.Invisible;
return false;
}
- if (!GetConsoleCursorInfo (OutputHandle, out ConsoleCursorInfo info)) {
+ if (!GetConsoleCursorInfo (IsWindowsTerminal ? OutputHandle : screenBuffer, out ConsoleCursorInfo info)) {
var err = Marshal.GetLastWin32Error ();
if (err != 0) {
throw new System.ComponentModel.Win32Exception (err);
@@ -148,7 +149,7 @@ namespace Terminal.Gui {
bVisible = ((uint)visibility & 0xFF00) != 0
};
- if (!SetConsoleCursorInfo (OutputHandle, ref info))
+ if (!SetConsoleCursorInfo (IsWindowsTerminal ? OutputHandle : screenBuffer, ref info))
return false;
currentCursorVisibility = visibility;
@@ -164,28 +165,28 @@ namespace Terminal.Gui {
}
ConsoleMode = originalConsoleMode;
- //if (!SetConsoleActiveScreenBuffer (OutputHandle)) {
- // var err = Marshal.GetLastWin32Error ();
- // Console.WriteLine ("Error: {0}", err);
- //}
+ if (!SetConsoleActiveScreenBuffer (OutputHandle)) {
+ var err = Marshal.GetLastWin32Error ();
+ Console.WriteLine ("Error: {0}", err);
+ }
- //if (ScreenBuffer != IntPtr.Zero) {
- // CloseHandle (ScreenBuffer);
- //}
+ if (screenBuffer != IntPtr.Zero) {
+ CloseHandle (screenBuffer);
+ }
- //ScreenBuffer = IntPtr.Zero;
+ screenBuffer = IntPtr.Zero;
}
internal Size GetConsoleBufferWindow (out Point position)
{
- if (OutputHandle == IntPtr.Zero) {
+ if ((IsWindowsTerminal ? OutputHandle : screenBuffer) == IntPtr.Zero) {
position = Point.Empty;
return Size.Empty;
}
var csbi = new CONSOLE_SCREEN_BUFFER_INFOEX ();
csbi.cbSize = (uint)Marshal.SizeOf (csbi);
- if (!GetConsoleScreenBufferInfoEx (OutputHandle, ref csbi)) {
+ if (!GetConsoleScreenBufferInfoEx ((IsWindowsTerminal ? OutputHandle : screenBuffer), ref csbi)) {
//throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
position = Point.Empty;
return Size.Empty;
@@ -211,68 +212,70 @@ namespace Terminal.Gui {
return sz;
}
- //internal Size SetConsoleWindow (short cols, short rows)
- //{
- // var csbi = new CONSOLE_SCREEN_BUFFER_INFOEX ();
- // csbi.cbSize = (uint)Marshal.SizeOf (csbi);
+ internal Size SetConsoleWindow (short cols, short rows)
+ {
+ var csbi = new CONSOLE_SCREEN_BUFFER_INFOEX ();
+ csbi.cbSize = (uint)Marshal.SizeOf (csbi);
- // if (!GetConsoleScreenBufferInfoEx (ScreenBuffer, ref csbi)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
- // var maxWinSize = GetLargestConsoleWindowSize (ScreenBuffer);
- // var newCols = Math.Min (cols, maxWinSize.X);
- // var newRows = Math.Min (rows, maxWinSize.Y);
- // csbi.dwSize = new Coord (newCols, Math.Max (newRows, (short)1));
- // csbi.srWindow = new SmallRect (0, 0, newCols, newRows);
- // csbi.dwMaximumWindowSize = new Coord (newCols, newRows);
- // if (!SetConsoleScreenBufferInfoEx (ScreenBuffer, ref csbi)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
- // var winRect = new SmallRect (0, 0, (short)(newCols - 1), (short)Math.Max (newRows - 1, 0));
- // if (!SetConsoleWindowInfo (OutputHandle, true, ref winRect)) {
- // //throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // return new Size (cols, rows);
- // }
- // SetConsoleOutputWindow (csbi);
- // return new Size (winRect.Right + 1, newRows - 1 < 0 ? 0 : winRect.Bottom + 1);
- //}
+ if (!GetConsoleScreenBufferInfoEx (IsWindowsTerminal ? OutputHandle : screenBuffer, ref csbi)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
+ var maxWinSize = GetLargestConsoleWindowSize (IsWindowsTerminal ? OutputHandle : screenBuffer);
+ var newCols = Math.Min (cols, maxWinSize.X);
+ var newRows = Math.Min (rows, maxWinSize.Y);
+ csbi.dwSize = new Coord (newCols, Math.Max (newRows, (short)1));
+ csbi.srWindow = new SmallRect (0, 0, newCols, newRows);
+ csbi.dwMaximumWindowSize = new Coord (newCols, newRows);
+ if (!SetConsoleScreenBufferInfoEx (IsWindowsTerminal ? OutputHandle : screenBuffer, ref csbi)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
+ var winRect = new SmallRect (0, 0, (short)(newCols - 1), (short)Math.Max (newRows - 1, 0));
+ if (!SetConsoleWindowInfo (OutputHandle, true, ref winRect)) {
+ //throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ return new Size (cols, rows);
+ }
+ SetConsoleOutputWindow (csbi);
+ return new Size (winRect.Right + 1, newRows - 1 < 0 ? 0 : winRect.Bottom + 1);
+ }
- //void SetConsoleOutputWindow (CONSOLE_SCREEN_BUFFER_INFOEX csbi)
- //{
- // if (ScreenBuffer != IntPtr.Zero && !SetConsoleScreenBufferInfoEx (ScreenBuffer, ref csbi)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
- //}
+ void SetConsoleOutputWindow (CONSOLE_SCREEN_BUFFER_INFOEX csbi)
+ {
+ if ((IsWindowsTerminal ? OutputHandle : screenBuffer) != IntPtr.Zero && !SetConsoleScreenBufferInfoEx (IsWindowsTerminal ? OutputHandle : screenBuffer, ref csbi)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
+ }
- //internal Size SetConsoleOutputWindow (out Point position)
- //{
- // if (ScreenBuffer == IntPtr.Zero) {
- // position = Point.Empty;
- // return Size.Empty;
- // }
+ internal Size SetConsoleOutputWindow (out Point position)
+ {
+ if ((IsWindowsTerminal ? OutputHandle : screenBuffer) == IntPtr.Zero) {
+ position = Point.Empty;
+ return Size.Empty;
+ }
- // var csbi = new CONSOLE_SCREEN_BUFFER_INFOEX ();
- // csbi.cbSize = (uint)Marshal.SizeOf (csbi);
- // if (!GetConsoleScreenBufferInfoEx (ScreenBuffer, ref csbi)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
- // var sz = new Size (csbi.srWindow.Right - csbi.srWindow.Left + 1,
- // Math.Max (csbi.srWindow.Bottom - csbi.srWindow.Top + 1, 0));
- // position = new Point (csbi.srWindow.Left, csbi.srWindow.Top);
- // SetConsoleOutputWindow (csbi);
- // var winRect = new SmallRect (0, 0, (short)(sz.Width - 1), (short)Math.Max (sz.Height - 1, 0));
- // if (!SetConsoleScreenBufferInfoEx (OutputHandle, ref csbi)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
- // if (!SetConsoleWindowInfo (OutputHandle, true, ref winRect)) {
- // throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
- // }
+ var csbi = new CONSOLE_SCREEN_BUFFER_INFOEX ();
+ csbi.cbSize = (uint)Marshal.SizeOf (csbi);
+ if (!GetConsoleScreenBufferInfoEx (IsWindowsTerminal ? OutputHandle : screenBuffer, ref csbi)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
+ var sz = new Size (csbi.srWindow.Right - csbi.srWindow.Left + 1,
+ Math.Max (csbi.srWindow.Bottom - csbi.srWindow.Top + 1, 0));
+ position = new Point (csbi.srWindow.Left, csbi.srWindow.Top);
+ SetConsoleOutputWindow (csbi);
+ var winRect = new SmallRect (0, 0, (short)(sz.Width - 1), (short)Math.Max (sz.Height - 1, 0));
+ if (!SetConsoleScreenBufferInfoEx (OutputHandle, ref csbi)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
+ if (!SetConsoleWindowInfo (OutputHandle, true, ref winRect)) {
+ throw new System.ComponentModel.Win32Exception (Marshal.GetLastWin32Error ());
+ }
- // return sz;
- //}
+ return sz;
+ }
//bool ContinueListeningForConsoleEvents = true;
+ internal bool IsWindowsTerminal { get; set; }
+
public uint ConsoleMode {
get {
GetConsoleMode (InputHandle, out uint v);
@@ -733,7 +736,7 @@ namespace Terminal.Gui {
WinConsole = new WindowsConsole ();
clipboard = new WindowsClipboard ();
- isWindowsTerminal = Environment.GetEnvironmentVariable ("WT_SESSION") != null || Environment.GetEnvironmentVariable ("VSAPPIDNAME") != null;
+ WinConsole.IsWindowsTerminal = isWindowsTerminal = Environment.GetEnvironmentVariable ("WT_SESSION") != null || Environment.GetEnvironmentVariable ("VSAPPIDNAME") != null;
}
public override void PrepareToRun (MainLoop mainLoop, Action keyHandler, Action keyDownHandler, Action keyUpHandler, Action mouseHandler)
@@ -747,28 +750,28 @@ namespace Terminal.Gui {
mLoop.ProcessInput = (e) => ProcessInput (e);
- //mLoop.WinChanged = (e) => {
- // ChangeWin (e);
- //};
+ mLoop.WinChanged = (e) => {
+ ChangeWin (e);
+ };
}
- //private void ChangeWin (Size e)
- //{
- // var w = e.Width;
- // if (w == cols - 3 && e.Height < rows) {
- // w += 3;
- // }
- // var newSize = WinConsole.SetConsoleWindow (
- // (short)Math.Max (w, 16), (short)Math.Max (e.Height, 0));
+ private void ChangeWin (Size e)
+ {
+ var w = e.Width;
+ if (w == cols - 3 && e.Height < rows) {
+ w += 3;
+ }
+ var newSize = WinConsole.SetConsoleWindow (
+ (short)Math.Max (w, 16), (short)Math.Max (e.Height, 0));
- // left = 0;
- // top = 0;
- // cols = newSize.Width;
- // rows = newSize.Height;
- // ResizeScreen ();
- // UpdateOffScreen ();
- // TerminalResized.Invoke ();
- //}
+ left = 0;
+ top = 0;
+ cols = newSize.Width;
+ rows = newSize.Height;
+ ResizeScreen ();
+ UpdateOffScreen ();
+ TerminalResized.Invoke ();
+ }
void ProcessInput (WindowsConsole.InputRecord inputEvent)
{
@@ -892,14 +895,6 @@ namespace Terminal.Gui {
case WindowsConsole.EventType.Focus:
keyModifiers = null;
break;
-
- case WindowsConsole.EventType.WindowBufferSize:
- cols = inputEvent.WindowBufferSizeEvent.size.X;
- rows = inputEvent.WindowBufferSizeEvent.size.Y;
-
- ResizeScreen ();
- TerminalResized.Invoke ();
- break;
}
}
diff --git a/Terminal.Gui/Resources/Strings.ja-JP.resx b/Terminal.Gui/Resources/Strings.ja-JP.resx
index 68b15dda8..06e33fab4 100644
--- a/Terminal.Gui/Resources/Strings.ja-JP.resx
+++ b/Terminal.Gui/Resources/Strings.ja-JP.resx
@@ -166,6 +166,6 @@
終える
- 次に
+ 次に...
\ No newline at end of file
diff --git a/Terminal.Gui/Resources/Strings.pt-PT.resx b/Terminal.Gui/Resources/Strings.pt-PT.resx
index a8385c556..3a8519a6c 100644
--- a/Terminal.Gui/Resources/Strings.pt-PT.resx
+++ b/Terminal.Gui/Resources/Strings.pt-PT.resx
@@ -166,6 +166,6 @@
Acabam_ento
- S_eguir
+ S_eguir...
\ No newline at end of file
diff --git a/Terminal.Gui/Terminal.Gui.csproj b/Terminal.Gui/Terminal.Gui.csproj
index bd919e2aa..61f50d0f0 100644
--- a/Terminal.Gui/Terminal.Gui.csproj
+++ b/Terminal.Gui/Terminal.Gui.csproj
@@ -20,7 +20,7 @@
portable
- net472;netstandard2.0;netstandard2.1;net6.0;net7.0;net8.0
+ net472;netstandard2.0;netstandard2.1;net6.0;net8.0
Terminal.Gui
Terminal.Gui
true
@@ -30,7 +30,7 @@
-
+
diff --git a/UICatalog/UICatalog.csproj b/UICatalog/UICatalog.csproj
index a05ebdf02..cea5148d8 100644
--- a/UICatalog/UICatalog.csproj
+++ b/UICatalog/UICatalog.csproj
@@ -1,4 +1,4 @@
-
+
Exe
net8.0
@@ -9,6 +9,8 @@
1.0.0.0
1.0.0
+ True
+ UICatalog.snk
TRACE
@@ -20,8 +22,7 @@
-
-
+
diff --git a/UICatalog/UICatalog.snk b/UICatalog/UICatalog.snk
new file mode 100644
index 000000000..a6fc18ff3
Binary files /dev/null and b/UICatalog/UICatalog.snk differ
diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj
index 63f2ba107..c687f1b45 100644
--- a/UnitTests/UnitTests.csproj
+++ b/UnitTests/UnitTests.csproj
@@ -18,15 +18,15 @@
TRACE;DEBUG_IDISPOSABLE
-
-
+
+
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive