download patch
commit 04afb15cde9d571d6da4544d6e6485cc739c486e
Author: tri <tri@thac.loan>
Date: Sat Oct 4 13:48:51 2025 +0700
highlight diffs
diff --git a/README.md b/README.md
index e21e0a8..fceaed0 100644
--- a/README.md
+++ b/README.md
Outdated pages, if not overwritten, are left as-is. Since git itself is an appen
- [ ] Add CLI arg to choose which repo to regen
- [x] Browse tree at HEAD
-- [ ] Browse commits from main history. May wait for [libghostty-vt][2], or just pipe to [aha][3]. We'll see.
+- [x] Browse commits from main history
## Contribute
diff --git a/src/assets/style.css b/src/assets/style.css
index 0920a99..7cb1499 100644
--- a/src/assets/style.css
+++ b/src/assets/style.css
--pre-bg: whitesmoke;
--pre-border-color: gainsboro;
+ --diff-hunk-header-bg: blanchedalmond;
+ --diff-added-fg: darkgreen;
+ --diff-added-bg: transparent;
+ --diff-removed-fg: brown;
+ --diff-removed-bg: transparent;
+
--serif-fonts: Charter, "Bitstream Charter", "Sitka Text", Cambria, serif;
--sans-serif-fonts: system-ui, sans-serif;
--monospace-fonts:
div.readme-content {
overflow-x: auto;
border: 1px solid var(--fg);
padding: 1rem;
+
+ .bold {
+ font-weight: bold;
+ }
+ .hunk-header {
+ background-color: var(--diff-hunk-header-bg);
+ }
+ .added {
+ color: var(--diff-added-fg);
+ background-color: var(--diff-added-bg);
+ }
+ .removed {
+ color: var(--diff-removed-fg);
+ background-color: var(--diff-removed-bg);
+ }
}
@media screen and (max-width: 600px) {
div.readme-content {
@media (prefers-color-scheme: dark) {
:root {
- --bg: #222;
+ --bg: #111;
--fg: #ddd;
+ --diff-hunk-header-bg: #444;
+ --diff-added-fg: lightgreen;
+ --diff-added-bg: transparent;
+ --diff-removed-fg: lightcoral;
+ --diff-removed-bg: transparent;
+
--table-border-color: #444;
--table-row-hover-bg: #444;
--table-border-color: #ddd;
diff --git a/src/main.zig b/src/main.zig
index 6e8eb32..c67d5ac 100644
--- a/src/main.zig
+++ b/src/main.zig
pub fn writeCommitPage(
);
const commit_text = try git.show(arena, args.in_repo_dir, commit.hash);
- try html.escape(writer, commit_text);
+ const escaped_text = try html.escapeAlloc(arena, commit_text);
+ var lines = mem.splitScalar(u8, escaped_text, '\n');
+ while (lines.next()) |line| {
+ if (mem.startsWith(u8, line, "diff") or
+ mem.startsWith(u8, line, "index") or
+ mem.startsWith(u8, line, "+++") or
+ mem.startsWith(u8, line, "---"))
+ {
+ try writer.writeAll("<span class='bold'>");
+ try writer.writeAll(line);
+ try writer.writeAll("</span>\n");
+ } else if (mem.startsWith(u8, line, "@@")) {
+ const hunk_header_end = mem.indexOf(u8, line[2..], "@@").? + 4;
+ const hunk_header = line[0..hunk_header_end];
+ const rest = line[hunk_header_end..];
+ try writer.writeAll("<span class='hunk-header'>");
+ try writer.writeAll(hunk_header);
+ try writer.writeAll("</span>");
+ try writer.writeAll(rest);
+ try writer.writeAll("\n");
+ } else if (mem.startsWith(u8, line, "+")) {
+ try writer.writeAll("<span class='added'>");
+ try writer.writeAll(line);
+ try writer.writeAll("</span>\n");
+ } else if (mem.startsWith(u8, line, "-")) {
+ try writer.writeAll("<span class='removed'>");
+ try writer.writeAll(line);
+ try writer.writeAll("</span>\n");
+ } else {
+ try writer.writeAll(line);
+ try writer.writeAll("\n");
+ }
+ }
try writer.writeAll(
\\</pre>