Skip to content

Releases: Abs313a/dwmterm

DWM-Terminal v0.2.1

Choose a tag to compare

@Abs313a Abs313a released this 19 Sep 22:54

Changes in v0.2.1:

  • Fix: Bound CSI L (IL) and CSI M (DL) line editing to DECSTBM scrolling margins.
  • Fix: Memory allocation hardening for selection buffer, scrollback history, and flight logging.
  • Fix: Unified resource teardown on early startup failure paths and normal exit.
  • Build: Dynamic version tag detection in Makefile and -fsanitize=address,undefined test target.
  • Quality: Replaced magic mouse mode literals with enum and eliminated compiler truncation warnings.

Full Changelog: v0.2...v0.2.1

DWM-Terminal v0.2

Choose a tag to compare

@github-actions github-actions released this 19 Sep 18:34
5439df3

What's Changed in v0.2

Features & Protocol Improvements

  • DECSTBM Scrolling Margins: Added ANSI margin bounds (\e[top;bottomr), bounded linefeed, and CSI S / T sequence handlers to support modern fixed-footer TUI applications and status bars.
  • Two-Pass Row Rendering: Decoupled cell backgrounds and mouse selection highlights from glyph and overlay drawing in render_frame(), preventing adjacent backgrounds from clipping wide Nerd Font icons.
  • Multi-Click Mouse Selection: Double-click expands across word/token boundaries and triple-click selects the full row, with automatic PRIMARY and CLIPBOARD synchronization.
  • Modifier Keypress Isolation: Standalone modifier presses (Super, Shift, Ctrl, Alt) no longer clear active selections or reset scrollback before key combinations (such as Super+C) are completed.
  • ECMA-48 Private CSI Handling: Parser now recognizes private prefixes (?, >, <, =) and guards SGR dispatch, preventing sequences like \e[>4m (modifyOtherKeys) from triggering stray underlines.
  • Configurable Keybindings & Styling: Support for custom key combinations, configurable cursor shapes (block, bar, underline), blinking toggles, and asymmetric padding via ~/.config/dwmterm/config.

Testing & Verification

  • Test suite expanded to 39/39 passing unit & integration tests (make test).

Full Changelog: v0.1...v0.2

DWM-Terminal v0.1

Choose a tag to compare

@github-actions github-actions released this 07 Sep 01:00

DWM-Terminal v0.1: Initial Release

An ultra-minimal, sub-millisecond latency CPU-framebuffer terminal engineered for dynamic window managers, Suckless dwm, and dwm-titus.

Highlights & Core Architecture

  • Zero GPU Overhead (MIT-SHM Shared Memory): Direct CPU-framebuffer rendering via XShmPutImage, bypassing X11 socket bottlenecking and achieving >45,000 lines/sec ingestion while eliminating GPU context switches and compositor latency.
  • Microscopic Footprint: ~12 MB Resident Set Size (RSS) and a static binary footprint under 60 KB.
  • Native DWM Swallowing: Pre-configured WM_CLASS (dwmterm / Dwmterm) for instantaneous, zero-friction window swallowing in dwm (isterminal = 1).
  • Interactive PTY Flight Recorder ("Time Machine"): On-screen HUD scrubber triggered with F1 or Ctrl+Shift+R to rewind and inspect session output, with built-in export to asciinema v2 (.cast) format.
  • Bundled Meslo Nerd Font: Ships with official MesloLGS Nerd Font and automatic system-wide fontconfig installation to /usr/local/share/fonts/TTF/.
  • DPI-Aware Typography: Dynamic display DPI calculation for true typographical point scaling with strict monospace fallback resolution.
  • Dynamic Theming & Truecolor: Full 24-bit RGB truecolor, standard 16-color ANSI palette on pitch black (#000000), runtime hot-reloading via SIGUSR1, and integration with dwm-titus themes.
  • Clipboard & Alternate Screen: Primary selection, middle-click paste, bidirectional OSC 52 clipboard syncing, and clean DECSET 1049/1047/47 alternate buffer handling for nvim, tmux, and htop.
  • Persistent Configuration: User preferences in ~/.config/dwmterm/config and command-line overrides (-s, -f, -p, -d, -T, -e).

Build & Test Suite

  • Automated CI pipeline with dual GCC and Clang matrix running under -Wall -Wextra -pedantic -Werror.
  • Initial unit and integration test harness covering parser state machines, VT sequence handling, and configuration loading.