Skip to content

TCDir 5.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Jun 18:16

[5.6.0] - 2026-06-21

Added

  • --Install-NerdFonts: download and install CaskaydiaCove Nerd Font system-wide, then optionally configure terminal profiles
    • Fetches the latest release from the Nerd Fonts GitHub repository
    • Installs the font files to the system Fonts folder and registers them with GDI and the system font registry, tracked via an uninstall manifest
    • Interactive Windows Terminal profile selection; sets the profile font face and disables ligatures (calt/liga) by default
  • --Uninstall-NerdFonts: remove Nerd Font terminal configuration and optionally remove the installed font files

Changed

  • Adopted manual MAJOR.MINOR.PATCH semantic versioning; removed the auto-incrementing build counter and pre-build increment hook (minor bump 5.5 → 5.6)

[5.5.1619] - 2026-04-19

Added

  • Variable-width columns in wide mode (/W): per-column widths based on actual entry display widths instead of uniform width
    • GNU ls-style column-fitting algorithm maximizes column count
    • Outlier filenames > 2× median display width auto-truncated with (only when it improves layout)
    • Truncation respects --Ellipsize- opt-out
    • Leftover horizontal space distributed evenly across inter-column gaps
    • Column-major ordering preserved
  • 34 new unit tests including end-to-end scenario tests with mocked console (618 total)

Changed

  • Minor version bump from 5.4 to 5.5

[5.4.1549] - 2026-04-19

Added

  • Ellipsize long link target paths: middle-truncate with to prevent line wrapping in normal and tree modes
    • Preserves drive/root prefix and leaf filename; intermediate directory components replaced with
    • --Ellipsize switch (default: on), --Ellipsize- to disable
    • Configurable via .tcdirconfig and TCDIR environment variable
  • 17 new unit tests for path truncation logic (568 total)

[5.4.1461] - 2026-04-18

Added

  • Symlink, junction, and AppExecLink target display: → target_path shown after filenames in normal and tree modes
    • Supports junctions, file/directory symlinks, and Windows Store app execution aliases
    • Target paths displayed as-stored; \??\ device prefix stripped automatically
    • Wide and bare modes unaffected
  • ReparsePointResolver module for reading NTFS reparse data
  • 23 new unit tests (555 total, up from 532)

Changed

  • Minor version bump from 5.3 to 5.4

[5.3.1443] - 2026-04-07

Added

  • Config file support: ~\.tcdirconfig for persistent settings
    • One setting per line, same Key=Value syntax as the TCDIR environment variable
    • Comments (# full-line and inline), blank lines, leading/trailing whitespace all handled
    • Supports all switches, color overrides, icon overrides, Depth=N, TreeIndent=N, Size=Auto|Bytes
    • UTF-8 encoding (with or without BOM); UTF-16 rejected with diagnostic
    • Syntax errors reported with file path and line number via --Settings
    • Precedence: defaults < config file < TCDIR env var < CLI switches
  • CAutoHandleT<> template class in AutoHandle.h — RAII Win32 handle wrapper with implicit HANDLE conversion

Changed

  • Minor version bump from 5.2 to 5.3

[5.2.1346] - 2026-03-28

Added

  • --set-aliases: interactive TUI wizard for configuring PowerShell aliases
    • Root alias name (1-4 chars, default d) with derived sub-aliases (dt, dw, dd, ds, dsb)
    • Sub-alias checkbox selection (tree view, wide, directories-only, recursive, recursive bare)
    • Profile location radio selection (4 PS profile scopes + session-only)
    • Alias block preview with confirmation before writing
    • Conflict detection against existing PowerShell commands/aliases
    • Auto-detection of calling PowerShell version (7+ or 5.1) via parent process inspection
    • AllUsers profile paths resolved from $PSHOME (PS install directory)
    • CurrentUser profile paths resolved via SHGetKnownFolderPath with OneDrive KFM support
    • Spinner animation during profile scanning
    • Timestamped .bak backups before modifying profile files
  • --get-aliases: non-interactive display of all configured tcdir aliases across profile files
  • --remove-aliases: interactive checkbox-based removal from one or more profiles (opt-in selection)
  • --whatif: dry-run modifier for --set-aliases and --remove-aliases (preview without file changes)
  • TUI widget infrastructure: text input, checkbox list, radio button list, confirmation prompt
    • Multi-line label support with blank-line separators
    • In-place re-rendering via cursor movement (no screen flicker)
    • RAII console mode/cursor restore on Ctrl+C or Escape
  • 464 unit tests (up from 408)

Changed

  • Minor version bump from 5.1 to 5.2

[5.1.1149] - 2026-03-05

Fixed

  • tcdir foo now lists contents of the foo subdirectory instead of treating it as a filename pattern — behavior matches tcdir .\foo

Changed

  • Refactored SplitMaskIntoDirAndFileSpec into SplitPureMask and SplitQualifiedMask helpers
  • Updated winget manifest templates from schema 1.10.0 to 1.12.0

[5.1.1106] - 2026-02-21

Added

  • --Tree switch: hierarchical directory tree view with Unicode box-drawing connectors (├──, └──, )
  • --Depth=N switch: limit tree recursion depth (e.g., --Depth=2 shows two levels)
  • --TreeIndent=N switch: configurable indent width per tree level (1–8, default 4)
  • --Size=Auto switch: Explorer-style abbreviated file sizes (e.g., 8.90 KB, 1.00 MB, 2.38 GB) with fixed 7-character width — default in tree mode
  • --Size=Bytes switch: explicit opt-in for exact comma-separated sizes (existing default for non-tree modes)
  • Tree connector color (TreeConnector) configurable via TCDIR environment variable
  • TCDIR env var support for Tree, Tree-, Depth=N, TreeIndent=N, Size=Auto, Size=Bytes
  • Thread-safe empty subdirectory pruning when file masks are active (producer-side upward propagation via parent back-pointers and condition variables)
  • Reparse-point cycle guard: junction/symlink directories are listed but not expanded, preventing infinite loops in both -S and --Tree modes
  • Interleaved sort in tree mode: directories and files sorted together (not grouped)
  • Per-directory summary at each tree level plus grand total at end
  • Comprehensive test suite: 408 tests covering tree connectors, depth limiting, pruning, streams, icons, reparse points, and column alignment

Changed

  • Minor version bump from 5.0 to 5.1
  • Column spacing adjustment: added 1 space between attributes and size column, reduced gap between size and icon from 3 to 2
  • <DIR> shifted left within its field for better visual alignment with abbreviated sizes

Incompatibilities

  • --Tree cannot be combined with -W (wide), -B (bare), -S (recurse), or --Owner
  • --Size=Bytes cannot be used with --Tree (tree mode requires fixed-width sizes)
  • --Depth and --TreeIndent require --Tree

[5.0.1038] - 2026-02-15

Added

  • Nerd Font file and folder icons in directory listings (normal, wide, and bare modes)
  • ~200 file extension icon mappings aligned with Terminal-Icons default theme
  • ~65 well-known directory icon mappings (Terminal-Icons aligned with 5 intentional deviations)
  • Auto-detection of Nerd Font availability via GDI glyph canary probe and system font enumeration
  • WezTerm auto-detection (bundles Nerd Font symbols natively)
  • ConPTY terminal detection (Windows Terminal, VS Code, etc.)
  • /Icons and /Icons- CLI switches for manual icon override
  • TCDIR=Icons / TCDIR=Icons- env var switch for persistent icon preference
  • TCDIR=.ext=Color,U+XXXX icon override syntax for per-extension custom icons
  • Cloud status Nerd Font glyph upgrade (☁/✓/📌 → nf-md glyphs when NF available)
  • Icon display in /config and /env diagnostics
  • Rust language support (.rs, .toml, .cargo)
  • IconMapping module (IconMapping.h/cpp) with compile-time sorted lookup tables
  • NerdFontDetector module (NerdFontDetector.h/cpp) with GDI and heuristic detection
  • Comprehensive icon tests: mapping lookups, NF detection, display integration (307 total tests)

Changed

  • Major version bump from 4.x to 5.0

Fixed

  • Nerd Font suffix detection now matches abbreviated suffixes (NF, NFM, NFP)

[4.2.1436] - 2026-02-13

Fixed

  • TCDIR env var: entries with invalid background color (e.g., Chartreuse) now reject the entire entry instead of falling back to black-on-black
  • TCDIR env var: entries where foreground and background are the same color (e.g., Blue on Blue) are now rejected as unreadable
  • --config now shows validation errors after the configuration table, matching --env convention
  • Foreground colors matching the terminal background are now auto-corrected with a contrasting background in all display paths (listing, --config, --env)

[4.2.1414] - 2026-02-05

Changed

  • Multi-mask processing: masks targeting the same directory are now grouped and processed together with deduplication
  • Directory counts (both per-directory and grand total) now reflect subdirectories whose names match the pattern, not all traversed directories
  • CDirectoryInfo simplified with in-class member initializers

Added

  • Comprehensive directory count and mask matching tests

[4.2.1322] - 2026-02-01

Fixed

  • TCDIR env var error message now uses correct switch prefix (--env vs /env) based on user's choice
  • TCDIR env var error "see --env for help" hint no longer shown when already viewing --env output

[4.2.1318] - 2026-02-01

Changed

  • Refactored console output to use ColorPrintf/ColorPuts with embedded color markers ({EAttributeName})
  • --env help text now uses {Information}/{InformationHighlight} colors consistently with -? output
  • Wide listing: GetWideFormattedName now returns wstring_view with caller-provided stack buffer (thread-safe)
  • Cloud status display refactored to use lookup table instead of switch statement

Fixed

  • ColorPrintf no longer appends trailing newline (use ColorPuts for that)

[4.2.1284] - 2026-01-31

Added

  • Colorized help output: /? now displays switches, attribute letters, and cloud status symbols in color

[4.2.1195] - 2026-01-29

Fixed

  • Cloud status symbols no longer appear for files outside cloud sync roots (e.g., files copied from OneDrive that retained stale attributes)
  • IncrementVersion.ps1: Add robustness with atomic writes, retry logic, and auto-recovery from git for corrupted Version.h

[4.2] - 2026-01-28

Added

  • Cloud file visualization: ○/◐/● symbols show sync status for OneDrive, iCloud, etc.
  • Cloud attribute filters: /A:O (cloud-only), /A:L (local), /A:V (pinned/always available)
  • Extended attribute filters: /A:X (not indexed), /A:I (integrity), /A:B (no scrub), /A:F (sparse), /A:U (unpinned)
  • /T: switch to select time field for display and sorting (Creation, Access, Write)
  • --owner switch to display file ownership (DOMAIN\User)
  • --streams switch to display NTFS alternate data streams
  • --debug switch for raw hex attribute display (debug builds only)
  • Decoded settings display in --env output

Changed

  • TCDIR env var: switch names no longer require prefix (W instead of -W)

[4.1] - 2026-01-15

Added

  • /B switch for bare listing format (filenames only, no headers/footers)
  • Seamless support for - or / switch prefix (reflects user's choice in help)

[4.0] - 2026-01-16

Added

  • Multi-threaded directory enumeration (/M, enabled by default)
  • ARM64 native support
  • --env switch to display TCDIR environment variable help and current value
  • --config switch to display current color configuration
  • TCDIR env var: support for default switches (W, S, P, M)
  • TCDIR env var: file attribute color overrides (Attr:H=DarkGrey)
  • Structured error reporting with visual underlining for TCDIR parsing errors

Changed

  • Split configuration display from env var help (--env vs --config)