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()