diff options
| author | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-23 12:40:27 +0000 |
|---|---|---|
| committer | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-23 12:40:27 +0000 |
| commit | e5d25ac22f9bab707d2107fc5a502f6b291ebc98 (patch) | |
| tree | e3f136cebdd5a7ce377cee8137ea384e4731bfd7 | |
| parent | c437b0681420882e57ae81d7a55ceb995ae72b88 (diff) | |
| download | shell-zig-e5d25ac22f9bab707d2107fc5a502f6b291ebc98.tar.gz shell-zig-e5d25ac22f9bab707d2107fc5a502f6b291ebc98.zip | |
dir comp
| -rw-r--r-- | src/main.zig | 21 |
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); |