Private/Invoke-DFPagerExe.ps1

#Requires -Version 7.0

function Invoke-DFPagerExe {
    <#
    .SYNOPSIS
        Thin wrapper around an external pager command.
        Exists as a separate function so tests can mock it without spawning a real pager.
    .PARAMETER Lines
        Lines of text to pipe into the pager.
    .PARAMETER Pager
        The pager command string (e.g. 'less', 'less -R', 'bat --paging=always').
        Arguments with spaces (e.g. --theme "Dracula") are not supported; use
        --key=value form instead (e.g. --theme=Dracula).
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)][string[]]$Lines,
        [Parameter(Mandatory)][string]$Pager
    )
    if ($Pager -match '["\x27]') {
        Write-Warning "DotForge: Quoted arguments in `$Env:Pager are not supported. Use --key=value form (e.g. bat --theme=Dracula)."
    }
    $parts                  = $Pager -split '\s+', 2
    [string[]] $pagerArgs  = if ($parts.Count -gt 1) { $parts[1] -split '\s+' } else { }
    $Lines | & $parts[0] @pagerArgs
}