Skip to content

Releases: vezel-dev/cathode

v0.14.17

28 Apr 20:26
v0.14.17
e02d328
Compare
Choose a tag to compare
v0.14.17 Pre-release
Pre-release
  • Vezel.Cathode.Native
    • Added support for linux-musl-arm, linux-musl-arm64, and linux-musl-x64.

v0.13.25

31 Mar 23:49
v0.13.25
3c35f5e
Compare
Choose a tag to compare
v0.13.25 Pre-release
Pre-release
  • Added Warp to the list of supported terminal emulators.
  • Vezel.Cathode.Native
    • Fixed Windows console mode DISABLE_NEWLINE_AUTO_RETURN to be set in raw mode instead of cooked mode.

v0.12.42

18 Jan 16:45
v0.12.42
d7b7967
Compare
Choose a tag to compare
v0.12.42 Pre-release
Pre-release
  • 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() and RunIn() convenience methods to ChildProcess.
      • Added a new ChildProcessErrorException type, derived from ChildProcessException.
        • Changed ChildProcess to throw ChildProcessErrorException for non-zero exit codes if ChildProcessBuilder.ThrowOnError is set.
        • Changed ChildProcess APIs to throw ChildProcessException if something goes wrong with starting or killing a process.
      • Changed ChildProcess.Kill() to handle the broader SystemException instead of InvalidOperationException, preventing various unhelpful OS exceptions from bubbling up.
      • Changed ChildProcessReader to not bubble up IOExceptions 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.
  • 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, and win-x64.
        • Support for linux-musl-arm, linux-musl-arm64, and linux-musl-x64 will come in a future release.
      • 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.
  • Vezel.Cathode.Hosting
    • Removed this library as Vezel.Cathode.Native has obviated the need for it.

v0.11.1

01 Jan 18:29
v0.11.1
524bf31
Compare
Choose a tag to compare
v0.11.1 Pre-release
Pre-release
  • 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?, and byte[]? to avoid these types binding to the generic overloads.
      • Replaced TerminalSize type with System.Drawing.Size.
      • Dropped the UTF-16 input workaround as Windows Terminal now properly supports UTF-8 input.
    • Improvements to child process APIs.
      • Fixed a case where ChildProcess.Kill(bool) could throw an unexpected InvalidOperationException.
    • Improvements to control sequence construction.
      • Added support for OSC 7 and OSC 9 ; 9.
      • Added support for OSC 133.
      • Added missing SetUnderlineColor method to ControlSequences.
      • Switched to System.Drawing.Color for all APIs taking RGB values.
  • Vezel.Cathode.Extensions
    • Switched to System.Drawing.Color for all APIs taking RGB values.

v0.10.40

17 Mar 04:58
v0.10.40
4701a87
Compare
Choose a tag to compare
v0.10.40 Pre-release
Pre-release
  • 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> on TerminalSize.
    • Improvements to child process APIs.
      • Cleaned up and improved ChildProcessBuilder API surface to be friendlier.
  • Vezel.Cathode.Hosting
    • Changed ProgramHost to print the unhandled exception if no UnhandledException handler is installed.

v0.9.156

09 Jan 20:52
v0.9.156
fb9de2e
Compare
Choose a tag to compare
v0.9.156 Pre-release
Pre-release
  • 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 of ThreadLocal<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 in UnixCancellationPipe.
      • Added [NotNullWhen(true)] attribute to TerminalSize.Equals().
      • Implemented ToString() on TerminalSize.
      • Applied [UnsupportedOSPlatform("windows")] on Terminal.GenerateSignal().
    • 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, and DECSEL.
      • Fixed incorrect argument order in CUP construction.
      • Eliminated most allocations in ControlSequences.
    • 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 to ProgramContext 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 in EntryPointGenerator.
    • Added support for struct implementations of IProgram.
  • Vezel.Cathode.Extensions
    • Updates in line with .NET 7.
    • Fixed TerminalLoggerOptions.LogToStandardErrorThreshold defaulting to LogLevel.Trace instead of LogLevel.None.

v0.8.23

08 Apr 22:23
v0.8.23
Compare
Choose a tag to compare
v0.8.23 Pre-release
Pre-release
  • Renamed packages/namespaces from Cathode to Vezel.Cathode.
  • No functional changes.

v0.7.40

13 Mar 19:08
v0.7.40
Compare
Choose a tag to compare
v0.7.40 Pre-release
Pre-release
  • Renamed the project from System.Terminal to Cathode.
  • Relicensed from ISC to 0BSD.
  • Improvements and refactoring to I/O APIs.
    • Stream, TextReader, and TextWriter instances exposed by the library are now fully synchronized.
    • TextReader/TextWriter properties on TerminalReader/TerminalWriter are now abstract.
  • Improvements to child process APIs.
    • Overhauled the APIs and moved them to the Cathode.Processes namespace.
    • Renamed TerminalProcess to ChildProcess (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.
  • 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.
  • Updates to Cathode.Extensions functionality.
    • Fixed UseColors property on TerminalLoggerOptions being false by default.

v0.6.15

01 Jan 13:27
v0.6.15
Compare
Choose a tag to compare
v0.6.15 Pre-release
Pre-release
  • 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.
    • Renamed ReadBuffer and WriteBuffer methods on System.IO.TerminalReader and System.IO.TerminalWriter to ReadPartial and WritePartial, respectively.
    • Removed the ReadRaw method from the API surface and added a new Read method on System.Terminal and System.VirtualTerminal.
    • Optimized System.TerminalControl a bit with nested types.
  • 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 to TerminalLoggerOptions.
    • 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 on TerminalLoggerOptions to UseColors and inverted its meaning.
    • Renamed TerminalLoggerEntry to TerminalLoggerMessage.
  • Added a new project icon and package details page.

v0.5.39

28 Dec 17:56
v0.5.39
Compare
Choose a tag to compare
v0.5.39 Pre-release
Pre-release
  • 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 to System.VirtualTerminal for handling SIGCONT.
    • Added a new System.TerminalControl API for acquiring exclusive terminal control.
    • Refactored exception types.
      • Moved TerminalException from System to System.IO and changed base type to System.IO.IOException.
      • Added new System.IO.TerminalNotAttachedException which derives from System.IO.TerminalException.
      • Added new System.IO.TerminalConfigurationException which derives from System.IO.TerminalException.
    • Renamed Reader and Writer properties on System.IO.TerminalReader and System.IO.TerminalWriter to TextReader and TextWriter, respectively.
    • Removed superfluous I/O API surface (e.g. methods that perform formatting).
    • Moved Instance property from System.SystemVirtualTerminal to System.Terminal and renamed it to System.
    • Changed core methods on System.IO.TerminalReader and System.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.
  • 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 to System.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 as char.
    • 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.
  • Improvements to the process APIs.
    • Added Refresh and SendSignal methods to System.Diagnostics.TerminalProcess.
    • Exposed various properties available on the underlying System.Diagnostics.Process.
  • Changed System.Diagnostics.TerminalTraceListener to take a TerminalWriter instance.
  • Optimized various areas of the library to avoid bounds checks on spans and arrays.