Releases: vezel-dev/cathode
Releases · vezel-dev/cathode
v0.14.17
v0.13.25
v0.12.42
- Added Black Box, Contour, Guake, Tilix, tmux, Xfce Terminal, and Yakuake to the list of supported terminal emulators.
- Vezel.Cathode
- Improvements to child process APIs.
- Added some extra
Run()
andRunIn()
convenience methods toChildProcess
. - Added a new
ChildProcessErrorException
type, derived fromChildProcessException
.- Changed
ChildProcess
to throwChildProcessErrorException
for non-zero exit codes ifChildProcessBuilder.ThrowOnError
is set. - Changed
ChildProcess
APIs to throwChildProcessException
if something goes wrong with starting or killing a process.
- Changed
- Changed
ChildProcess.Kill()
to handle the broaderSystemException
instead ofInvalidOperationException
, preventing various unhelpful OS exceptions from bubbling up. - Changed
ChildProcessReader
to not bubble upIOException
s resulting from the child process somehow closing the pipe. - Fixed
ChildProcessReader
to properly cancel its read loop when cancellation is requested for the child process.
- Added some extra
- Improvements to child process APIs.
- Vezel.Cathode.Native
- Reimplemented terminal drivers in a helper library written in C.
- The library is currently available for
linux-arm
,linux-arm64
,linux-x64
,osx-arm64
,osx-x64
,win-arm64
,win-x86
, andwin-x64
.- Support for
linux-musl-arm
,linux-musl-arm64
, andlinux-musl-x64
will come in a future release.
- Support for
- Added support for proper read cancellation on Windows, but only in raw mode for now.
- Changed the Unix driver to support cancellation for writes too.
- Changed the drivers to reliably restore terminal state on normal process exit.
- The library is currently available for
- Reimplemented terminal drivers in a helper library written in C.
- Vezel.Cathode.Hosting
- Removed this library as Vezel.Cathode.Native has obviated the need for it.
v0.11.1
- Updated to .NET 8.0.0.
- Changed required target framework to
net8.0
. - Updated library dependencies.
- Updated Microsoft.Extensions.Hosting to 8.0.0.
- Updated Microsoft.Extensions.Hosting.Systemd to 8.0.0.
- Updated System.IO.Pipelines to 8.0.0.
- Updated Wcwidth to 2.0.0.
- Dropped support for the Windows console host as Windows Terminal is now the default for Windows 11 22H2+.
- Vezel.Cathode
- Applied
[DisableRuntimeMarshalling]
to the library. - Applied
ValueTask
pooling optimizations in more places. - Improvements to and refactoring of I/O APIs.
- Added output method overloads for
char[]?
,string?
, andbyte[]?
to avoid these types binding to the generic overloads. - Replaced
TerminalSize
type withSystem.Drawing.Size
. - Dropped the UTF-16 input workaround as Windows Terminal now properly supports UTF-8 input.
- Added output method overloads for
- Improvements to child process APIs.
- Fixed a case where
ChildProcess.Kill(bool)
could throw an unexpectedInvalidOperationException
.
- Fixed a case where
- Improvements to control sequence construction.
- Added support for
OSC 7
andOSC 9 ; 9
. - Added support for
OSC 133
. - Added missing
SetUnderlineColor
method toControlSequences
. - Switched to
System.Drawing.Color
for all APIs taking RGB values.
- Added support for
- Applied
- Vezel.Cathode.Extensions
- Switched to
System.Drawing.Color
for all APIs taking RGB values.
- Switched to
v0.10.40
- Updated library dependencies.
- Updated Microsoft.CodeAnalysis.BannedApiAnalyzers to 3.3.4.
- Updated Microsoft.Extensions.Hosting to 7.0.1.
- Vezel.Cathode
- Improvements to I/O APIs.
- Implemented
IEqualityOperators<TerminalSize, TerminalSize, bool>
onTerminalSize
.
- Implemented
- Improvements to child process APIs.
- Cleaned up and improved
ChildProcessBuilder
API surface to be friendlier.
- Cleaned up and improved
- Improvements to I/O APIs.
- Vezel.Cathode.Hosting
- Changed
ProgramHost
to print the unhandled exception if noUnhandledException
handler is installed.
- Changed
v0.9.156
- Updated to .NET 7.0.0.
- Changed required target framework to
net7.0
. - Updated library dependencies.
- Updated System.IO.Pipelines to 7.0.0.
- Updated Microsoft.Extensions.Hosting to 7.0.0.
- Updated Microsoft.Extensions.Hosting.Systemd to 7.0.0.
- Updated Wcwidth to 1.0.0.
- Applied
[SkipLocalsInit]
to all libraries. - Applied
[DisableRuntimeMarshalling]
to all libraries except Vezel.Cathode (core library). - Switched to
[ThreadStatic]
instead ofThreadLocal<T>
throughout the project. - Applied
scoped
parameter annotations throughout the project. - Vezel.Cathode
- Bundled analyzers library (Vezel.Cathode.Analyzers) with the core library.
- Referenced Microsoft.CodeAnalysis.CSharp instead of Microsoft.CodeAnalysis.CSharp.Workspaces in the analyzers.
- Eliminated some allocations in thread pool and cancellation callbacks.
- Improvements and refactoring to I/O APIs.
- Added cancellation support in
TerminalReader.ReadLineAsync()
. - Removed (broken) cancellation support from all synchronous APIs.
- Added missing buffer validation to
TerminalStream.Read()
. - Fixed some unsafe
SafeHandle
manipulation inUnixCancellationPipe
. - Added
[NotNullWhen(true)]
attribute toTerminalSize.Equals()
. - Implemented
ToString()
onTerminalSize
. - Applied
[UnsupportedOSPlatform("windows")]
onTerminal.GenerateSignal()
.
- Added cancellation support in
- Improvements to child process APIs.
- Kill entire process tree on cancellation.
- Reject null array argument in
ChildProcessBuilder.WithArguments()
.
- Improvements to control sequence construction.
- Added support for
DECARM
. - Added support for
DECPS
. - Added support for
DECSCA
,DECSED
, andDECSEL
. - Fixed incorrect argument order in
CUP
construction. - Eliminated most allocations in
ControlSequences
.
- Added support for
- Improvements to rune/string measurement API.
- Updated to Unicode 15.0.0.
- Removed an unnecessary
MonospaceWidth.Measure(string?)
overload.
- Vezel.Cathode.Hosting
- Added a
CancellationToken
property toProgramContext
that is wired up to terminal signals. - Converted
EntryPointGenerator
to an incremental source generator. - Switched to
file
accessibility for the generated entry point type. - Use fully-qualified name of the
IProgram
implementation inEntryPointGenerator
. - Added support for struct implementations of
IProgram
.
- Added a
- Vezel.Cathode.Extensions
- Updates in line with .NET 7.
- Fixed
TerminalLoggerOptions.LogToStandardErrorThreshold
defaulting toLogLevel.Trace
instead ofLogLevel.None
.
v0.8.23
v0.7.40
- Renamed the project from System.Terminal to Cathode.
- Relicensed from ISC to 0BSD.
- Improvements and refactoring to I/O APIs.
Stream
,TextReader
, andTextWriter
instances exposed by the library are now fully synchronized.TextReader
/TextWriter
properties onTerminalReader
/TerminalWriter
are now abstract.
- Improvements to child process APIs.
- Overhauled the APIs and moved them to the
Cathode.Processes
namespace. - Renamed
TerminalProcess
toChildProcess
(ditto for related types). - Added clean integration with
async
/await
and cancellation. - Changed a number of options to have more intuitive defaults.
- Added background buffering of process output with an optional buffer size limit.
- Removed the
SendSignal
method as it cannot be implemented sanely on Windows at the moment. - Removed support for inspecting running processes and enumerating threads, modules, etc.
- Overhauled the APIs and moved them to the
- Improvements to control sequence construction.
- Added support for rapid blink.
- Added support for underline colors and styles.
- Renamed bold decoration to intense.
- Various platform-specific driver improvements.
- Added upfront cancellation checks in
TerminalReader
implementations. - Switched to
SemaphoreSlim
for locking so that cancellation causes a lock acquisition to be canceled. - Windows console code page is now changed/restored alongside console modes.
- Throw
PlatformNotSupportedException
when a signal cannot be generated.
- Added upfront cancellation checks in
- Updates to Cathode.Extensions functionality.
- Fixed
UseColors
property onTerminalLoggerOptions
beingfalse
by default.
- Fixed
v0.6.15
- Improvements and refactoring to I/O APIs.
- Lazily create
PosixSignalRegistration
instances for termination-type signals.- This makes System.Terminal consistent with
System.Console.CancelKeyPress
behavior in the Visual Studio debugger.
- This makes System.Terminal consistent with
- Renamed
ReadBuffer
andWriteBuffer
methods onSystem.IO.TerminalReader
andSystem.IO.TerminalWriter
toReadPartial
andWritePartial
, respectively. - Removed the
ReadRaw
method from the API surface and added a newRead
method onSystem.Terminal
andSystem.VirtualTerminal
. - Optimized
System.TerminalControl
a bit with nested types.
- Lazily create
- Various platform-specific driver improvements.
- Removed read cancellation support from the Windows driver as it was causing too many issues.
- Only perform partial writes in the Unix driver, rather than aggressively writing the entire buffer.
- Disable
ONOEOT
bit on macOS. - Correctly disable
ALTWERASE
bit on macOS.
- Updates to Terminal.Extensions functionality.
- Added Systemd logging and notification support.
- Added
SingleLine
property toTerminalLoggerOptions
. - Moved some of the formatting work from the writer method to the
TerminalLogger
class. - Moved most of the message processing work out of the log processor thread.
- Renamed
DisableColors
property onTerminalLoggerOptions
toUseColors
and inverted its meaning. - Renamed
TerminalLoggerEntry
toTerminalLoggerMessage
.
- Added a new project icon and package details page.
v0.5.39
- Improvements and refactoring to I/O APIs.
- Added asynchronous API surface.
- This currently just wraps the synchronous APIs; full asynchronous support may be a future possibility.
- Pooling of
System.Threading.Tasks.ValueTask
instances is used where possible.
- Added cancellation token support throughout all APIs.
- This currently only performs actual cancellation for read operations, not write operations.
- Added a
Resumed
event toSystem.VirtualTerminal
for handlingSIGCONT
. - Added a new
System.TerminalControl
API for acquiring exclusive terminal control. - Refactored exception types.
- Moved
TerminalException
fromSystem
toSystem.IO
and changed base type toSystem.IO.IOException
. - Added new
System.IO.TerminalNotAttachedException
which derives fromSystem.IO.TerminalException
. - Added new
System.IO.TerminalConfigurationException
which derives fromSystem.IO.TerminalException
.
- Moved
- Renamed
Reader
andWriter
properties onSystem.IO.TerminalReader
andSystem.IO.TerminalWriter
toTextReader
andTextWriter
, respectively. - Removed superfluous I/O API surface (e.g. methods that perform formatting).
- Moved
Instance
property fromSystem.SystemVirtualTerminal
toSystem.Terminal
and renamed it toSystem
. - Changed core methods on
System.IO.TerminalReader
andSystem.IO.TerminalWriter
to have Unix-like semantics.- Number of bytes written is now returned rather being an
out
parameter. - An exception must only be thrown if zero bytes were processed.
- Number of bytes written is now returned rather being an
- Added asynchronous API surface.
- Improvements to control sequence construction.
System.Text.Control.ControlBuilder
now uses an interpolated string handler to efficiently append interpolated strings.- Added
DECSCNM
support. - Added
Null
method toSystem.Text.Control.ControlBuilder
. - Added some missing C0 control constants to
System.Text.Control.ControlConstants
. - Changed C0 control constants in
System.Text.Control.ControlConstants
to be typed aschar
. - Reduced allocations a bit in
System.Text.Control.ControlSequences
.
- Various platform-specific driver improvements.
- Suppress suspension by
SIGTTOU
while switching to cooked mode on Unix. - Set
TOSTOP
bit when switching to raw mode on Unix. - Fixed some cases where the value of
errno
was fetched too late on Unix. - Revert console modes if flushing the input buffer fails on Windows.
- Suppress suspension by
- Improvements to the process APIs.
- Added
Refresh
andSendSignal
methods toSystem.Diagnostics.TerminalProcess
. - Exposed various properties available on the underlying
System.Diagnostics.Process
.
- Added
- Changed
System.Diagnostics.TerminalTraceListener
to take aTerminalWriter
instance. - Optimized various areas of the library to avoid bounds checks on spans and arrays.