detached dbe8671

fix(web): serve a favicon and keep tree, refs and README code within narrow screens

commit
dbe8671c353d80720b097270e462827579e28037
author
brice · · 2026-10-10 14:16 UTC
parent
c83fe67
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
37 files · +209 -153
M cmd/ermite/testdata/web/blob-binary.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>data.bin · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>data.bin · files · example.test</title>7 <title>data.bin · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-code.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>main.go · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>main.go · files · example.test</title>7 <title>main.go · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-empty.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>empty.txt · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>empty.txt · files · example.test</title>7 <title>empty.txt · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-image.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>pic.png · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>pic.png · files · example.test</title>7 <title>pic.png · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-markdown.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>docs/guide.md · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>docs/guide.md · files · example.test</title>7 <title>docs/guide.md · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-svg.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>logo.svg · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>logo.svg · files · example.test</title>7 <title>logo.svg · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-text.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>notes.txt · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>notes.txt · files · example.test</title>7 <title>notes.txt · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-too-large.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>big.txt · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>big.txt · files · example.test</title>7 <title>big.txt · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/blob-trojan.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>evil.go · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>evil.go · files · example.test</title>7 <title>evil.go · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-big.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 add a very large file · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 add a very large file · diffs · example.test</title>7 <title>SHA7 add a very large file · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-binary.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 change a binary file · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 change a binary file · diffs · example.test</title>7 <title>SHA7 change a binary file · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-merge.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 merge the side branch · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 merge the side branch · diffs · example.test</title>7 <title>SHA7 merge the side branch · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-modify-split.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-modify.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>7 <title>SHA7 modify a file and make a script executable · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-rename.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 rename a file and delete another · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 rename a file and delete another · diffs · example.test</title>7 <title>SHA7 rename a file and delete another · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-root.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 root: the first files · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 root: the first files · diffs · example.test</title>7 <title>SHA7 root: the first files · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commit-trojan.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>SHA7 add evil.go · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>SHA7 add evil.go · diffs · example.test</title>7 <title>SHA7 add evil.go · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commits-page2.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>commits · long · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>commits · long · example.test</title>7 <title>commits · long · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commits-path.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>history of a.txt · long · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>history of a.txt · long · example.test</title>7 <title>history of a.txt · long · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commits-root.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>commits · long · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>commits · long · example.test</title>7 <title>commits · long · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/commits-small.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>commits · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>commits · diffs · example.test</title>7 <title>commits · diffs · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/empty.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>quiet · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>quiet · example.test</title>7 <title>quiet · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/home.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>example.test</title>7 <title>example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/not-found-page.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>404 · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>404 · example.test</title>7 <title>404 · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/not-found.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>404 · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>404 · example.test</title>7 <title>404 · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/refs.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>refs · demo · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>refs · demo · example.test</title>7 <title>refs · demo · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/summary.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>demo · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>demo · example.test</title>7 <title>demo · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/tree-nested.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>src/lib · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>src/lib · files · example.test</title>7 <title>src/lib · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/tree-root.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>tree · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>tree · files · example.test</title>7 <title>tree · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/tree-slash-ref.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>x · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>x · files · example.test</title>7 <title>x · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M cmd/ermite/testdata/web/tree-subdir.html +1 -0
@@ -5,6 +5,7 @@
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta name="color-scheme" content="light dark">
77 <title>docs · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
89 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
910 <script src="/-/static/js/htmx.min.HASH.js" defer>
1011 </script>
@@ -5,6 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1">5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="color-scheme" content="light dark">6 <meta name="color-scheme" content="light dark">
7 <title>docs · files · example.test</title>7 <title>docs · files · example.test</title>
8+<link rel="icon" type="image/svg+xml" href="/-/static/img/icon.HASH.svg">
8 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">9 <link rel="stylesheet" href="/-/static/css/ermite.HASH.css">
9 <script src="/-/static/js/htmx.min.HASH.js" defer>10 <script src="/-/static/js/htmx.min.HASH.js" defer>
10 </script>11 </script>
M internal/adapters/web/assets.go +7 -1
@@ -22,7 +22,7 @@ const StaticPrefix = "/-/static/"
2222 // Assets are the URLs of the assets a page loads. Their names carry a hash of
2323 // the content, so they can be cached for ever.
2424 type Assets struct {
25- CSS, HTMX, Live, SSE, App string
25+ CSS, HTMX, Live, SSE, App, Icon string
2626 }
2727
2828 // asset is one embedded file under its content-hashed name.
@@ -84,6 +84,12 @@ func loadAssets() (*assetSet, error) {
8484 }
8585 sc.set(&s.urls, put("js", sc.file, b, "text/javascript; charset=utf-8"))
8686 }
87+
88+ icon, err := staticFS.ReadFile("static/icon.svg")
89+ if err != nil {
90+ return nil, err
91+ }
92+ s.urls.Icon = put("img", "icon.svg", icon, "image/svg+xml")
8793 return s, nil
8894 }
8995
@@ -22,7 +22,7 @@ const StaticPrefix = "/-/static/"
22 // Assets are the URLs of the assets a page loads. Their names carry a hash of22 // Assets are the URLs of the assets a page loads. Their names carry a hash of
23 // the content, so they can be cached for ever.23 // the content, so they can be cached for ever.
24 type Assets struct {24 type Assets struct {
25- CSS, HTMX, Live, SSE, App string25+ CSS, HTMX, Live, SSE, App, Icon string
26 }26 }
27 27
28 // asset is one embedded file under its content-hashed name.28 // asset is one embedded file under its content-hashed name.
@@ -84,6 +84,12 @@ func loadAssets() (*assetSet, error) {
84 }84 }
85 sc.set(&s.urls, put("js", sc.file, b, "text/javascript; charset=utf-8"))85 sc.set(&s.urls, put("js", sc.file, b, "text/javascript; charset=utf-8"))
86 }86 }
87+
88+ icon, err := staticFS.ReadFile("static/icon.svg")
89+ if err != nil {
90+ return nil, err
91+ }
92+ s.urls.Icon = put("img", "icon.svg", icon, "image/svg+xml")
87 return s, nil93 return s, nil
88 }94 }
89 95
M internal/adapters/web/shell.templ +1 -0
@@ -12,6 +12,7 @@ templ Shell(l Layout, rail templ.Component) {
1212 <meta name="viewport" content="width=device-width, initial-scale=1"/>
1313 <meta name="color-scheme" content="light dark"/>
1414 <title>{ l.Title }</title>
15+ <link rel="icon" type="image/svg+xml" href={ templ.SafeURL(l.Assets.Icon) }/>
1516 <link rel="stylesheet" href={ templ.SafeURL(l.Assets.CSS) }/>
1617 <script src={ l.Assets.HTMX } defer></script>
1718 <script src={ l.Assets.Live } defer></script>
@@ -12,6 +12,7 @@ templ Shell(l Layout, rail templ.Component) {
12 <meta name="viewport" content="width=device-width, initial-scale=1"/>12 <meta name="viewport" content="width=device-width, initial-scale=1"/>
13 <meta name="color-scheme" content="light dark"/>13 <meta name="color-scheme" content="light dark"/>
14 <title>{ l.Title }</title>14 <title>{ l.Title }</title>
15+ <link rel="icon" type="image/svg+xml" href={ templ.SafeURL(l.Assets.Icon) }/>
15 <link rel="stylesheet" href={ templ.SafeURL(l.Assets.CSS) }/>16 <link rel="stylesheet" href={ templ.SafeURL(l.Assets.CSS) }/>
16 <script src={ l.Assets.HTMX } defer></script>17 <script src={ l.Assets.HTMX } defer></script>
17 <script src={ l.Assets.Live } defer></script>18 <script src={ l.Assets.Live } defer></script>
M internal/adapters/web/shell_templ.go +164 -151 generated file: collapsed
M internal/adapters/web/static/css/40-summary.css +1 -1
@@ -27,7 +27,7 @@
2727 & ol { list-style: decimal; }
2828 & li > ul, & li > ol, & li > p { margin-top: 0; }
2929 & pre { padding: 0 1ch; border-left: 1px solid var(--ink-mute); overflow-x: auto; font-size: var(--fs-code); line-height: var(--lh-code); }
30- & :not(pre) > code { border-bottom: 1px dotted var(--ink-mute); }
30+ & :not(pre) > code { border-bottom: 1px dotted var(--ink-mute); overflow-wrap: anywhere; }
3131 & blockquote { padding-left: 2ch; border-left: 1px solid var(--rule); color: var(--ink-dim); }
3232 & table { border-collapse: collapse; display: block; overflow-x: auto; }
3333 & th, & td { padding: 0 2ch 0 0; white-space: nowrap; vertical-align: top; }
@@ -27,7 +27,7 @@
27 & ol { list-style: decimal; }27 & ol { list-style: decimal; }
28 & li > ul, & li > ol, & li > p { margin-top: 0; }28 & li > ul, & li > ol, & li > p { margin-top: 0; }
29 & pre { padding: 0 1ch; border-left: 1px solid var(--ink-mute); overflow-x: auto; font-size: var(--fs-code); line-height: var(--lh-code); }29 & pre { padding: 0 1ch; border-left: 1px solid var(--ink-mute); overflow-x: auto; font-size: var(--fs-code); line-height: var(--lh-code); }
30- & :not(pre) > code { border-bottom: 1px dotted var(--ink-mute); }30+ & :not(pre) > code { border-bottom: 1px dotted var(--ink-mute); overflow-wrap: anywhere; }
31 & blockquote { padding-left: 2ch; border-left: 1px solid var(--rule); color: var(--ink-dim); }31 & blockquote { padding-left: 2ch; border-left: 1px solid var(--rule); color: var(--ink-dim); }
32 & table { border-collapse: collapse; display: block; overflow-x: auto; }32 & table { border-collapse: collapse; display: block; overflow-x: auto; }
33 & th, & td { padding: 0 2ch 0 0; white-space: nowrap; vertical-align: top; }33 & th, & td { padding: 0 2ch 0 0; white-space: nowrap; vertical-align: top; }
M internal/adapters/web/static/css/50-code.css +4 -0
@@ -111,6 +111,10 @@
111111 }
112112 .rail p + p { margin-top: 0; }
113113 .rail section > p { overflow-wrap: anywhere; }
114+ @media (max-width: 700px) {
115+ /* the name takes what the fixed columns leave */
116+ .list.tree .c-name, .list.refs .c-name { width: auto; }
117+ }
114118 }
115119
116120 @layer components {
@@ -111,6 +111,10 @@
111 }111 }
112 .rail p + p { margin-top: 0; }112 .rail p + p { margin-top: 0; }
113 .rail section > p { overflow-wrap: anywhere; }113 .rail section > p { overflow-wrap: anywhere; }
114+ @media (max-width: 700px) {
115+ /* the name takes what the fixed columns leave */
116+ .list.tree .c-name, .list.refs .c-name { width: auto; }
117+ }
114 }118 }
115 119
116 @layer components {120 @layer components {
A internal/adapters/web/static/icon.svg +1 -0
@@ -0,0 +1,1 @@
1+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect width="16" height="16" fill="#161616"/><path d="M4 4h8M4 8h6M4 12h8M4 4v8" stroke="#d0d0d0" stroke-width="2" fill="none"/></svg>
@@ -0,0 +1,1 @@
1+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect width="16" height="16" fill="#161616"/><path d="M4 4h8M4 8h6M4 12h8M4 4v8" stroke="#d0d0d0" stroke-width="2" fill="none"/></svg>

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 3

Tags 44

↑↓ moveenter openesc close