Releases: fermat-tech/winless
Release list
v1.2.7 — Fix: Down/Up couldn't reach the last line(s) for yank
What's fixed
Follow-up to v1.2.6: Ng/NG yanking the wrong line was fixed there, but
plain single-line scrolling (Down/j, Up/k) had the same underlying
issue. On a file short enough to fit on one screen — or once you reached
the final page of a longer file — the viewport has nothing left to scroll
into, so Down became a no-op and y kept yanking whatever line was
already on screen instead of the one you pressed Down to reach.
Example: on a 2-line file, g (top) then Down then y always yanked
line 1, never line 2.
Fix: a single-line scroll that can't move the viewport now advances the
yank target directly within the already-visible remainder, so g, Down,
y (and repeated Down through a file's final page) reach the correct
line. Down/Up still scroll exactly one line at a time on longer files
— unchanged.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.6 — Fix: y yanked the wrong line near a file's end
What's fixed
-
y(yank current line) copied the wrong line whenever the target line fell within the document's final page — including any file shorter than one screen.Ng/NG(jump to line N) and search matches could set the intended target line, but the pager's scroll clamp (which correctly prevents scrolling past the point where content runs out) silently snapped the view back, andyread whatever was left at the top instead of the line you actually navigated to.Example: on a 2-line file,
2gthenyalways yanked line 1, never line 2, because the whole file already fits on screen and the view can never scroll further.Fix: the pager now tracks the exact navigation target separately from the (correctly) clamped scroll position, and
yyanks that target. Verified with new tests exercising the real key-handling and scroll/search code against tcell'"'"'s own simulation-screen test backend, including the exact short-file case, a long-file final-page case, and a regression guard that ordinary scrolling still yanks the top-of-screen line as before.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.5 — Fix: multi-line clipboard copy joined into one line on paste
What's fixed
- Copying multiple lines with the mouse and pasting elsewhere joined everything into one line. winless was writing bare
\nbetween selected lines to the clipboard, but Windows'CF_UNICODETEXTformat is conventionally CRLF-terminated — some paste consumers (confirmed with pasting into a WSL bash prompt) drop or mishandle a lone LF. winless now writes proper CRLF line endings. - Occasional "Copy failed: Access is denied."
OpenClipboardhad no retry, so a transient clipboard holder (Windows' own clipboard history, PowerToys, other clipboard managers) could make a copy fail outright. winless now retries briefly (up to ~200ms) before giving up.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.4 — Fix: garbled/uncopyable text from native Windows tools
What's fixed
- Garbled, letter-spaced text and failed clipboard copy when paging output from native Windows console tools (e.g.
wsl --help | winless). Root cause: some Windows tools write raw UTF-16LE to a redirected/piped stdout with no byte-order mark, which winless previously read byte-for-byte as UTF-8 — every character showed with a stray gap, and copying such a line crashed withCopy failed: invalid argumentbecause the embedded NUL bytes are rejected by the clipboard API. winless now sniffs for a UTF-16 BOM and, failing that, a heuristic that detects BOM-less UTF-16 text, and transcodes it to UTF-8 before display. --versionnow reports the real release tag. Converted from aconstto avarso the build stamps the actual version (-X main.version=) instead of silently keeping whatever was hardcoded at commit time.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.3 — Fix: -- end-of-options marker
What's fixed
--end-of-options marker — like Linuxless,winless -- -wnow correctly opens a file literally named-winstead of erroring withunknown flag "-w". All arguments after--are treated as filenames, regardless of a leading-.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.2 — Version flag
What's new
-V/--version— like Linuxless, prints the version and exits (winless v1.2.2).
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.1 — Fix unsafe.Pointer vet warnings
What's fixed
go vetclean — the two "possible misuse of unsafe.Pointer" warnings in the clipboard code (clipboard_windows.go) are resolved by usingunsafe.Addinstead of a directuintptr→unsafe.Pointerconversion, which vet cannot statically verify as safe even though the underlying memory (Win32 global heap) is not GC-managed.- Added a clipboard round-trip regression test (write + read back, including Unicode) to guard this code path going forward.
No behavior changes — copy/paste still works exactly as before.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.2.0 — Multi-file navigation, half-page scroll, line/percent jumps, case toggle
What's new
- Half-page scroll —
d/Ctrl+Ddown,u/Ctrl+Uup. - Jump to line number —
NgorNG(type a number, thengorG). - Jump to percentage —
NporN%(e.g.50pjumps to the midpoint). - Case-insensitive toggle —
-i/--ignore-caseflag (on by default) andIkey to flip at runtime; the status bar shows a(case)tag when case-sensitive. - Multi-file navigation — pass multiple files on the command line; move between them with
:n(next),:p(previous),:x(first),:d(remove current),:e <file>(open another file).
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.1.2 — MIT license; full pkg.go.dev documentation
What's new
- MIT license added — pkg.go.dev now displays full documentation (previously hidden due to missing license).
- Expanded documentation — package doc comment covers install, all options, navigation, search, copy, syntax highlighting, follow mode, and the rename-friendly binary name.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |
v1.1.1 — Clipboard paste in search; fix long-line crash
What's new
- Paste into search — while typing a
/or?pattern, paste the clipboard withCtrl+V,Insert(Shift+Insert), or right-click. - Fix: token too long — files with lines longer than 1 MB no longer crash with
bufio.Scanner: token too long. Line length is now unlimited.
Binaries
| File | Target |
|---|---|
winless_windows_amd64.exe |
Windows x64 (most PCs) |
winless_windows_arm64.exe |
Windows on ARM (Surface Pro X, Copilot+ PCs) |