summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorLucas Faria Mendes <lucas.fariamo08@gmail.com>2026-03-23 12:40:27 +0000
committerLucas Faria Mendes <lucas.fariamo08@gmail.com>2026-03-23 12:40:27 +0000
commite5d25ac22f9bab707d2107fc5a502f6b291ebc98 (patch)
treee3f136cebdd5a7ce377cee8137ea384e4731bfd7 /src/main.zig
parentc437b0681420882e57ae81d7a55ceb995ae72b88 (diff)
downloadshell-zig-e5d25ac22f9bab707d2107fc5a502f6b291ebc98.tar.gz
shell-zig-e5d25ac22f9bab707d2107fc5a502f6b291ebc98.zip
dir comp
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/main.zig b/src/main.zig
index 328207f..1267f34 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -346,11 +346,15 @@ fn readCommand(allocator: std.mem.Allocator, history: std.ArrayList([]const u8))
var iter = dir.iterate();
while (iter.next() catch null) |entry| {
if (std.mem.startsWith(u8, entry.name, search_prefix)) {
- if (allocator.dupe(u8, entry.name)) |duped| {
- matches.append(allocator, duped) catch {
- allocator.free(duped);
- };
- } else |_| {}
+ const is_dir = (entry.kind == .directory);
+ const duped = if (is_dir)
+ std.fmt.allocPrint(allocator, "{s}/", .{entry.name}) catch continue
+ else
+ allocator.dupe(u8, entry.name) catch continue;
+
+ matches.append(allocator, duped) catch {
+ allocator.free(duped);
+ };
}
}
} else |_| {}
@@ -364,8 +368,11 @@ fn readCommand(allocator: std.mem.Allocator, history: std.ArrayList([]const u8))
try stdout.writeAll(remaining);
try buffer.appendSlice(allocator, remaining);
}
- try stdout.writeAll(" ");
- try buffer.append(allocator, ' ');
+ if (!std.mem.endsWith(u8, completion, "/")) {
+ try stdout.writeAll(" ");
+ try buffer.append(allocator, ' ');
+ }
+
last_was_tab = false;
if (last_tab_partial) |p| allocator.free(p);