From aa376f9b14135ff2679705d6d47d4a96ea32d742 Mon Sep 17 00:00:00 2001 From: James Dugan <43224155+jdugan6240@users.noreply.github.com> Date: Sat, 20 Apr 2024 17:04:24 -0600 Subject: [PATCH] feat: cat implementation now uses chunk reading (#290) --- CHANGELOG.md | 7 +++++++ nature/commands/cat.lua | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b52101a..4401297 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # 🎀 Changelog +## Unreleased +### Fixed +- `cat` command no longer prints extra newline at end of each file + +### Added +- `cat` command now reads files in chunks, allowing for reading large files + ## [2.2.2] - 2024-04-16 ### Fixed - Line refresh fixes (less flicker) diff --git a/nature/commands/cat.lua b/nature/commands/cat.lua index 06df507..a2375e9 100644 --- a/nature/commands/cat.lua +++ b/nature/commands/cat.lua @@ -9,6 +9,8 @@ commander.register('cat', function(args, sinks) usage: cat [file]...]] end + local chunkSize = 2^13 -- 8K buffer size + for _, fName in ipairs(args) do local f = io.open(fName) if f == nil then @@ -17,7 +19,11 @@ usage: cat [file]...]] goto continue end - sinks.out:writeln(f:read '*a') + while true do + local block = f:read(chunkSize) + if not block then break end + sinks.out:write(block) + end ::continue:: end io.flush()