summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/builtins.zig17
-rw-r--r--src/shell.zig2
2 files changed, 16 insertions, 3 deletions
diff --git a/src/builtins.zig b/src/builtins.zig
index 011a923..18e1840 100644
--- a/src/builtins.zig
+++ b/src/builtins.zig
@@ -116,8 +116,21 @@ pub fn executeType(allocator: std.mem.Allocator, stdout: anytype, args: ?[]const
}
}
-pub fn executeHistory(stdout: anytype, history_list: []const []const u8) !void {
- for (history_list, 1..) |cmd, idx| {
+pub fn executeHistory(stdout: anytype, history_list: []const []const u8, args: ?[]const u8) !void {
+ var limit: usize = history_list.len;
+
+ if (args) |a| {
+ const trimmed = std.mem.trim(u8, a, " ");
+ if (trimmed.len > 0) {
+ limit = std.fmt.parseInt(usize, trimmed, 10) catch {
+ try stdout.print("history: invalid argument\n", .{});
+ return;
+ };
+ }
+ }
+
+ const start = if (limit < history_list.len) history_list.len - limit else 0;
+ for (history_list[start..], start + 1..) |cmd, idx| {
try stdout.print(" {d} {s}\n", .{ idx, cmd });
}
}
diff --git a/src/shell.zig b/src/shell.zig
index 6f8bfef..bd50ff1 100644
--- a/src/shell.zig
+++ b/src/shell.zig
@@ -24,7 +24,7 @@ pub fn executeCommand(
if (std.mem.eql(u8, cmd_name, "exit")) return builtins.executeExit();
if (std.mem.eql(u8, cmd_name, "history")) {
- try builtins.executeHistory(stdout, history_list);
+ try builtins.executeHistory(stdout, history_list, args);
return .continue_loop;
}