╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1151 const file_path = pathValue(segments.rest()) orelse return null; │ │1126 - return forkFilesRoute(identity, id, oid, file_path, line); │ │1152 + var route = forkFilesRoute(identity, id, oid, file_path, line) orelse return null; │ │1153 + if (params.values.get(.find)) |find| route.fork_files.find = Array(find_route_max_len).from(find) orelse return null;│ │1154 + return route; │ │1155 } │ │1156 if (std.mem.eql(u8, tab, commits_seg)) { │ │1157 params.scanPairs(&segments) catch return null; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1467 if (!params.only(&.{ .line, .patchrev })) return null; │ │1468 return repoPatchRevFilesRoute(pair, id, pathValue(segments.rest()) orelse return null, params.line() orelse return null);│ │1469 } │ │1442 - if (!params.only(&.{ .line, .branch, .tag, .object })) return null; │ │1470 + if (!params.only(&.{ .line, .branch, .tag, .object, .find })) return null; │ │1471 const line = params.line() orelse return null; │ │1472 const dir = pathValue(segments.rest()) orelse return null; │ │1445 - const ref = (params.ref() catch return null) orelse │ │1446 - return if (dir.len == 0) repoFilesRoute(pair, null, "", "", line) else null; │ │1447 - return repoFilesRoute(pair, ref.kind, ref.value, dir, line); │ │1473 + const find = params.values.get(.find) orelse ""; │ │1474 + const ref = params.ref() catch return null; │ │1475 + // a find route's `path` names the selected result, so unlike a │ │1476 + // directory path it doesn't need a ref beside it │ │1477 + var route = if (ref) |r| │ │1478 + repoFilesRoute(pair, r.kind, r.value, dir, line) orelse return null │ │1479 + else if (dir.len == 0 or find.len != 0) │ │1480 + repoFilesRoute(pair, null, "", "", line) orelse return null │ │1481 + else │ │1482 + return null; │ │1483 + if (find.len != 0) { │ │1484 + route.repo_files.find = Array(find_route_max_len).from(find) orelse return null; │ │1485 + route.repo_files.path = Array(repo_route_max_len).from(dir) orelse return null; │ │1486 + } │ │1487 + return route; │ │1488 } │ │1489 if (std.mem.eql(u8, tab, commits_seg)) { │ │1490 params.scanPairs(&segments) catch return null; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1530 a_f.ref_kind == b.repo_files.ref_kind and │ │1531 std.mem.eql(u8, a_f.ref_value.slice(), b.repo_files.ref_value.slice()) and │ │1532 std.mem.eql(u8, a_f.patchrev_id.slice(), b.repo_files.patchrev_id.slice()) and │ │1533 + std.mem.eql(u8, a_f.find.slice(), b.repo_files.find.slice()) and │ │1534 std.mem.eql(u8, a_f.path.slice(), b.repo_files.path.slice()) and │ │1535 a_f.line == b.repo_files.line, │ │1536 .repo_commits => |a_c| std.mem.eql(u8, a_c.name.slice(), b.repo_commits.name.slice()) and│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1584 .fork_files => |a_f| std.mem.eql(u8, a_f.fork.name.slice(), b.fork_files.fork.name.slice()) and │ │1585 std.mem.eql(u8, a_f.fork.id.slice(), b.fork_files.fork.id.slice()) and │ │1586 std.mem.eql(u8, a_f.oid.slice(), b.fork_files.oid.slice()) and │ │1587 + std.mem.eql(u8, a_f.find.slice(), b.fork_files.find.slice()) and │ │1588 std.mem.eql(u8, a_f.path.slice(), b.fork_files.path.slice()) and │ │1589 a_f.line == b.fork_files.line, │ │1590 .fork_commits => |a_c| std.mem.eql(u8, a_c.fork.name.slice(), b.fork_commits.fork.name.slice()) and│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯