detached 54492fc

test(app): update web goldens for g sequence shortcuts

commit
54492fcb267da627a98f8ee54e678a109ff95bd1
author
brice · · 2026-10-22 08:17 UTC
parent
4e3b6b3
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
31 files · +939 -846
M internal/app/testdata/web/blob-binary.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -226,14 +226,16 @@
226226 </div>
227227 <div>
228228 <dt>
229-<kbd>s</kbd>
230-<kbd>t</kbd>
231-<kbd>c</kbd>
232-<kbd>r</kbd>
233-<kbd>m</kbd>
234-<kbd>i</kbd>
229+<kbd>g s</kbd>
230+<kbd>g f</kbd>
231+<kbd>g c</kbd>
232+<kbd>g b</kbd>
233+<kbd>g m</kbd>
234+<kbd>g i</kbd>
235+<kbd>g r</kbd>
236+<kbd>g a</kbd>
235237 </dt>
236-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
238+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
237239 </div>
238240 <div>
239241 <dt>
@@ -332,45 +334,45 @@
332334 <span class="k">go</span>
333335 </a>
334336 </li>
335-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
337+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
336338 <a href="/files" tabindex="-1">
337-<span class="lbl">summary</span>
339+<span class="lbl">summary (g s)</span>
338340 <span class="k">section</span>
339341 </a>
340342 </li>
341-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
343+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
342344 <a href="/files/tree/main" tabindex="-1">
343-<span class="lbl">files</span>
345+<span class="lbl">files (g f)</span>
344346 <span class="k">section</span>
345347 </a>
346348 </li>
347-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
349+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
348350 <a href="/files/commits/main" tabindex="-1">
349-<span class="lbl">commits</span>
351+<span class="lbl">commits (g c)</span>
350352 <span class="k">section</span>
351353 </a>
352354 </li>
353-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
355+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
354356 <a href="/files/refs" tabindex="-1">
355-<span class="lbl">branches &amp; tags</span>
357+<span class="lbl">branches &amp; tags (g b)</span>
356358 <span class="k">section</span>
357359 </a>
358360 </li>
359-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
361+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
360362 <a href="/files/merge-requests" tabindex="-1">
361-<span class="lbl">merge requests</span>
363+<span class="lbl">merge requests (g m)</span>
362364 <span class="k">section</span>
363365 </a>
364366 </li>
365-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
367+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
366368 <a href="/files/releases" tabindex="-1">
367-<span class="lbl">releases</span>
369+<span class="lbl">releases (g r)</span>
368370 <span class="k">section</span>
369371 </a>
370372 </li>
371-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
373+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
372374 <a href="/files/actions" tabindex="-1">
373-<span class="lbl">actions</span>
375+<span class="lbl">actions (g a)</span>
374376 <span class="k">section</span>
375377 </a>
376378 </li>
@@ -423,7 +425,9 @@
423425 k-filter from:body -> ermite.focusFilter();
424426 k-gh from:body -> ermite.go('.brand');
425427 k-s from:body -> ermite.tab('s');
426- k-t from:body -> ermite.tab('t');
428+ k-f from:body -> ermite.tab('f');
429+ k-b from:body -> ermite.tab('b');
430+ k-a from:body -> ermite.tab('a');
427431 k-c from:body -> ermite.tab('c');
428432 k-r from:body -> ermite.tab('r');
429433 k-m from:body -> ermite.tab('m');
@@ -439,7 +443,6 @@
439443 k-permalink from:body -> ermite.permalink();
440444 k-merge from:body -> window.ermiteMR?.openMerge();
441445 k-read from:body -> window.ermiteMR?.markRead();
442- k-gf from:body -> window.ermiteMR?.focusFiles();
443446 k-keys from:body -> ermite.toggleKeys()">
444447 </div>
445448 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -226,14 +226,16 @@
226 </div>226 </div>
227 <div>227 <div>
228 <dt>228 <dt>
229-<kbd>s</kbd>229+<kbd>g s</kbd>
230-<kbd>t</kbd>230+<kbd>g f</kbd>
231-<kbd>c</kbd>231+<kbd>g c</kbd>
232-<kbd>r</kbd>232+<kbd>g b</kbd>
233-<kbd>m</kbd>233+<kbd>g m</kbd>
234-<kbd>i</kbd>234+<kbd>g i</kbd>
235+<kbd>g r</kbd>
236+<kbd>g a</kbd>
235 </dt>237 </dt>
236-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>238+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
237 </div>239 </div>
238 <div>240 <div>
239 <dt>241 <dt>
@@ -332,45 +334,45 @@
332 <span class="k">go</span>334 <span class="k">go</span>
333 </a>335 </a>
334 </li>336 </li>
335-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">337+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
336 <a href="/files" tabindex="-1">338 <a href="/files" tabindex="-1">
337-<span class="lbl">summary</span>339+<span class="lbl">summary (g s)</span>
338 <span class="k">section</span>340 <span class="k">section</span>
339 </a>341 </a>
340 </li>342 </li>
341-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">343+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
342 <a href="/files/tree/main" tabindex="-1">344 <a href="/files/tree/main" tabindex="-1">
343-<span class="lbl">files</span>345+<span class="lbl">files (g f)</span>
344 <span class="k">section</span>346 <span class="k">section</span>
345 </a>347 </a>
346 </li>348 </li>
347-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">349+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
348 <a href="/files/commits/main" tabindex="-1">350 <a href="/files/commits/main" tabindex="-1">
349-<span class="lbl">commits</span>351+<span class="lbl">commits (g c)</span>
350 <span class="k">section</span>352 <span class="k">section</span>
351 </a>353 </a>
352 </li>354 </li>
353-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">355+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
354 <a href="/files/refs" tabindex="-1">356 <a href="/files/refs" tabindex="-1">
355-<span class="lbl">branches &amp; tags</span>357+<span class="lbl">branches &amp; tags (g b)</span>
356 <span class="k">section</span>358 <span class="k">section</span>
357 </a>359 </a>
358 </li>360 </li>
359-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">361+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
360 <a href="/files/merge-requests" tabindex="-1">362 <a href="/files/merge-requests" tabindex="-1">
361-<span class="lbl">merge requests</span>363+<span class="lbl">merge requests (g m)</span>
362 <span class="k">section</span>364 <span class="k">section</span>
363 </a>365 </a>
364 </li>366 </li>
365-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">367+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
366 <a href="/files/releases" tabindex="-1">368 <a href="/files/releases" tabindex="-1">
367-<span class="lbl">releases</span>369+<span class="lbl">releases (g r)</span>
368 <span class="k">section</span>370 <span class="k">section</span>
369 </a>371 </a>
370 </li>372 </li>
371-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">373+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
372 <a href="/files/actions" tabindex="-1">374 <a href="/files/actions" tabindex="-1">
373-<span class="lbl">actions</span>375+<span class="lbl">actions (g a)</span>
374 <span class="k">section</span>376 <span class="k">section</span>
375 </a>377 </a>
376 </li>378 </li>
@@ -423,7 +425,9 @@
423 k-filter from:body -> ermite.focusFilter();425 k-filter from:body -> ermite.focusFilter();
424 k-gh from:body -> ermite.go('.brand');426 k-gh from:body -> ermite.go('.brand');
425 k-s from:body -> ermite.tab('s');427 k-s from:body -> ermite.tab('s');
426- k-t from:body -> ermite.tab('t');428+ k-f from:body -> ermite.tab('f');
429+ k-b from:body -> ermite.tab('b');
430+ k-a from:body -> ermite.tab('a');
427 k-c from:body -> ermite.tab('c');431 k-c from:body -> ermite.tab('c');
428 k-r from:body -> ermite.tab('r');432 k-r from:body -> ermite.tab('r');
429 k-m from:body -> ermite.tab('m');433 k-m from:body -> ermite.tab('m');
@@ -439,7 +443,6 @@
439 k-permalink from:body -> ermite.permalink();443 k-permalink from:body -> ermite.permalink();
440 k-merge from:body -> window.ermiteMR?.openMerge();444 k-merge from:body -> window.ermiteMR?.openMerge();
441 k-read from:body -> window.ermiteMR?.markRead();445 k-read from:body -> window.ermiteMR?.markRead();
442- k-gf from:body -> window.ermiteMR?.focusFiles();
443 k-keys from:body -> ermite.toggleKeys()">446 k-keys from:body -> ermite.toggleKeys()">
444 </div>447 </div>
445 </body>448 </body>
M internal/app/testdata/web/blob-code.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -296,14 +296,16 @@
296296 </div>
297297 <div>
298298 <dt>
299-<kbd>s</kbd>
300-<kbd>t</kbd>
301-<kbd>c</kbd>
302-<kbd>r</kbd>
303-<kbd>m</kbd>
304-<kbd>i</kbd>
299+<kbd>g s</kbd>
300+<kbd>g f</kbd>
301+<kbd>g c</kbd>
302+<kbd>g b</kbd>
303+<kbd>g m</kbd>
304+<kbd>g i</kbd>
305+<kbd>g r</kbd>
306+<kbd>g a</kbd>
305307 </dt>
306-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
308+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
307309 </div>
308310 <div>
309311 <dt>
@@ -402,45 +404,45 @@
402404 <span class="k">go</span>
403405 </a>
404406 </li>
405-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
407+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
406408 <a href="/files" tabindex="-1">
407-<span class="lbl">summary</span>
409+<span class="lbl">summary (g s)</span>
408410 <span class="k">section</span>
409411 </a>
410412 </li>
411-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
413+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
412414 <a href="/files/tree/main" tabindex="-1">
413-<span class="lbl">files</span>
415+<span class="lbl">files (g f)</span>
414416 <span class="k">section</span>
415417 </a>
416418 </li>
417-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
419+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
418420 <a href="/files/commits/main" tabindex="-1">
419-<span class="lbl">commits</span>
421+<span class="lbl">commits (g c)</span>
420422 <span class="k">section</span>
421423 </a>
422424 </li>
423-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
425+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
424426 <a href="/files/refs" tabindex="-1">
425-<span class="lbl">branches &amp; tags</span>
427+<span class="lbl">branches &amp; tags (g b)</span>
426428 <span class="k">section</span>
427429 </a>
428430 </li>
429-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
431+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
430432 <a href="/files/merge-requests" tabindex="-1">
431-<span class="lbl">merge requests</span>
433+<span class="lbl">merge requests (g m)</span>
432434 <span class="k">section</span>
433435 </a>
434436 </li>
435-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
437+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
436438 <a href="/files/releases" tabindex="-1">
437-<span class="lbl">releases</span>
439+<span class="lbl">releases (g r)</span>
438440 <span class="k">section</span>
439441 </a>
440442 </li>
441-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
443+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
442444 <a href="/files/actions" tabindex="-1">
443-<span class="lbl">actions</span>
445+<span class="lbl">actions (g a)</span>
444446 <span class="k">section</span>
445447 </a>
446448 </li>
@@ -493,7 +495,9 @@
493495 k-filter from:body -> ermite.focusFilter();
494496 k-gh from:body -> ermite.go('.brand');
495497 k-s from:body -> ermite.tab('s');
496- k-t from:body -> ermite.tab('t');
498+ k-f from:body -> ermite.tab('f');
499+ k-b from:body -> ermite.tab('b');
500+ k-a from:body -> ermite.tab('a');
497501 k-c from:body -> ermite.tab('c');
498502 k-r from:body -> ermite.tab('r');
499503 k-m from:body -> ermite.tab('m');
@@ -509,7 +513,6 @@
509513 k-permalink from:body -> ermite.permalink();
510514 k-merge from:body -> window.ermiteMR?.openMerge();
511515 k-read from:body -> window.ermiteMR?.markRead();
512- k-gf from:body -> window.ermiteMR?.focusFiles();
513516 k-keys from:body -> ermite.toggleKeys()">
514517 </div>
515518 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -296,14 +296,16 @@
296 </div>296 </div>
297 <div>297 <div>
298 <dt>298 <dt>
299-<kbd>s</kbd>299+<kbd>g s</kbd>
300-<kbd>t</kbd>300+<kbd>g f</kbd>
301-<kbd>c</kbd>301+<kbd>g c</kbd>
302-<kbd>r</kbd>302+<kbd>g b</kbd>
303-<kbd>m</kbd>303+<kbd>g m</kbd>
304-<kbd>i</kbd>304+<kbd>g i</kbd>
305+<kbd>g r</kbd>
306+<kbd>g a</kbd>
305 </dt>307 </dt>
306-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>308+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
307 </div>309 </div>
308 <div>310 <div>
309 <dt>311 <dt>
@@ -402,45 +404,45 @@
402 <span class="k">go</span>404 <span class="k">go</span>
403 </a>405 </a>
404 </li>406 </li>
405-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">407+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
406 <a href="/files" tabindex="-1">408 <a href="/files" tabindex="-1">
407-<span class="lbl">summary</span>409+<span class="lbl">summary (g s)</span>
408 <span class="k">section</span>410 <span class="k">section</span>
409 </a>411 </a>
410 </li>412 </li>
411-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">413+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
412 <a href="/files/tree/main" tabindex="-1">414 <a href="/files/tree/main" tabindex="-1">
413-<span class="lbl">files</span>415+<span class="lbl">files (g f)</span>
414 <span class="k">section</span>416 <span class="k">section</span>
415 </a>417 </a>
416 </li>418 </li>
417-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">419+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
418 <a href="/files/commits/main" tabindex="-1">420 <a href="/files/commits/main" tabindex="-1">
419-<span class="lbl">commits</span>421+<span class="lbl">commits (g c)</span>
420 <span class="k">section</span>422 <span class="k">section</span>
421 </a>423 </a>
422 </li>424 </li>
423-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">425+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
424 <a href="/files/refs" tabindex="-1">426 <a href="/files/refs" tabindex="-1">
425-<span class="lbl">branches &amp; tags</span>427+<span class="lbl">branches &amp; tags (g b)</span>
426 <span class="k">section</span>428 <span class="k">section</span>
427 </a>429 </a>
428 </li>430 </li>
429-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">431+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
430 <a href="/files/merge-requests" tabindex="-1">432 <a href="/files/merge-requests" tabindex="-1">
431-<span class="lbl">merge requests</span>433+<span class="lbl">merge requests (g m)</span>
432 <span class="k">section</span>434 <span class="k">section</span>
433 </a>435 </a>
434 </li>436 </li>
435-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">437+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
436 <a href="/files/releases" tabindex="-1">438 <a href="/files/releases" tabindex="-1">
437-<span class="lbl">releases</span>439+<span class="lbl">releases (g r)</span>
438 <span class="k">section</span>440 <span class="k">section</span>
439 </a>441 </a>
440 </li>442 </li>
441-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">443+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
442 <a href="/files/actions" tabindex="-1">444 <a href="/files/actions" tabindex="-1">
443-<span class="lbl">actions</span>445+<span class="lbl">actions (g a)</span>
444 <span class="k">section</span>446 <span class="k">section</span>
445 </a>447 </a>
446 </li>448 </li>
@@ -493,7 +495,9 @@
493 k-filter from:body -> ermite.focusFilter();495 k-filter from:body -> ermite.focusFilter();
494 k-gh from:body -> ermite.go('.brand');496 k-gh from:body -> ermite.go('.brand');
495 k-s from:body -> ermite.tab('s');497 k-s from:body -> ermite.tab('s');
496- k-t from:body -> ermite.tab('t');498+ k-f from:body -> ermite.tab('f');
499+ k-b from:body -> ermite.tab('b');
500+ k-a from:body -> ermite.tab('a');
497 k-c from:body -> ermite.tab('c');501 k-c from:body -> ermite.tab('c');
498 k-r from:body -> ermite.tab('r');502 k-r from:body -> ermite.tab('r');
499 k-m from:body -> ermite.tab('m');503 k-m from:body -> ermite.tab('m');
@@ -509,7 +513,6 @@
509 k-permalink from:body -> ermite.permalink();513 k-permalink from:body -> ermite.permalink();
510 k-merge from:body -> window.ermiteMR?.openMerge();514 k-merge from:body -> window.ermiteMR?.openMerge();
511 k-read from:body -> window.ermiteMR?.markRead();515 k-read from:body -> window.ermiteMR?.markRead();
512- k-gf from:body -> window.ermiteMR?.focusFiles();
513 k-keys from:body -> ermite.toggleKeys()">516 k-keys from:body -> ermite.toggleKeys()">
514 </div>517 </div>
515 </body>518 </body>
M internal/app/testdata/web/blob-empty.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -226,14 +226,16 @@
226226 </div>
227227 <div>
228228 <dt>
229-<kbd>s</kbd>
230-<kbd>t</kbd>
231-<kbd>c</kbd>
232-<kbd>r</kbd>
233-<kbd>m</kbd>
234-<kbd>i</kbd>
229+<kbd>g s</kbd>
230+<kbd>g f</kbd>
231+<kbd>g c</kbd>
232+<kbd>g b</kbd>
233+<kbd>g m</kbd>
234+<kbd>g i</kbd>
235+<kbd>g r</kbd>
236+<kbd>g a</kbd>
235237 </dt>
236-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
238+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
237239 </div>
238240 <div>
239241 <dt>
@@ -332,45 +334,45 @@
332334 <span class="k">go</span>
333335 </a>
334336 </li>
335-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
337+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
336338 <a href="/files" tabindex="-1">
337-<span class="lbl">summary</span>
339+<span class="lbl">summary (g s)</span>
338340 <span class="k">section</span>
339341 </a>
340342 </li>
341-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
343+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
342344 <a href="/files/tree/main" tabindex="-1">
343-<span class="lbl">files</span>
345+<span class="lbl">files (g f)</span>
344346 <span class="k">section</span>
345347 </a>
346348 </li>
347-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
349+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
348350 <a href="/files/commits/main" tabindex="-1">
349-<span class="lbl">commits</span>
351+<span class="lbl">commits (g c)</span>
350352 <span class="k">section</span>
351353 </a>
352354 </li>
353-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
355+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
354356 <a href="/files/refs" tabindex="-1">
355-<span class="lbl">branches &amp; tags</span>
357+<span class="lbl">branches &amp; tags (g b)</span>
356358 <span class="k">section</span>
357359 </a>
358360 </li>
359-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
361+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
360362 <a href="/files/merge-requests" tabindex="-1">
361-<span class="lbl">merge requests</span>
363+<span class="lbl">merge requests (g m)</span>
362364 <span class="k">section</span>
363365 </a>
364366 </li>
365-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
367+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
366368 <a href="/files/releases" tabindex="-1">
367-<span class="lbl">releases</span>
369+<span class="lbl">releases (g r)</span>
368370 <span class="k">section</span>
369371 </a>
370372 </li>
371-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
373+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
372374 <a href="/files/actions" tabindex="-1">
373-<span class="lbl">actions</span>
375+<span class="lbl">actions (g a)</span>
374376 <span class="k">section</span>
375377 </a>
376378 </li>
@@ -423,7 +425,9 @@
423425 k-filter from:body -> ermite.focusFilter();
424426 k-gh from:body -> ermite.go('.brand');
425427 k-s from:body -> ermite.tab('s');
426- k-t from:body -> ermite.tab('t');
428+ k-f from:body -> ermite.tab('f');
429+ k-b from:body -> ermite.tab('b');
430+ k-a from:body -> ermite.tab('a');
427431 k-c from:body -> ermite.tab('c');
428432 k-r from:body -> ermite.tab('r');
429433 k-m from:body -> ermite.tab('m');
@@ -439,7 +443,6 @@
439443 k-permalink from:body -> ermite.permalink();
440444 k-merge from:body -> window.ermiteMR?.openMerge();
441445 k-read from:body -> window.ermiteMR?.markRead();
442- k-gf from:body -> window.ermiteMR?.focusFiles();
443446 k-keys from:body -> ermite.toggleKeys()">
444447 </div>
445448 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -226,14 +226,16 @@
226 </div>226 </div>
227 <div>227 <div>
228 <dt>228 <dt>
229-<kbd>s</kbd>229+<kbd>g s</kbd>
230-<kbd>t</kbd>230+<kbd>g f</kbd>
231-<kbd>c</kbd>231+<kbd>g c</kbd>
232-<kbd>r</kbd>232+<kbd>g b</kbd>
233-<kbd>m</kbd>233+<kbd>g m</kbd>
234-<kbd>i</kbd>234+<kbd>g i</kbd>
235+<kbd>g r</kbd>
236+<kbd>g a</kbd>
235 </dt>237 </dt>
236-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>238+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
237 </div>239 </div>
238 <div>240 <div>
239 <dt>241 <dt>
@@ -332,45 +334,45 @@
332 <span class="k">go</span>334 <span class="k">go</span>
333 </a>335 </a>
334 </li>336 </li>
335-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">337+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
336 <a href="/files" tabindex="-1">338 <a href="/files" tabindex="-1">
337-<span class="lbl">summary</span>339+<span class="lbl">summary (g s)</span>
338 <span class="k">section</span>340 <span class="k">section</span>
339 </a>341 </a>
340 </li>342 </li>
341-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">343+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
342 <a href="/files/tree/main" tabindex="-1">344 <a href="/files/tree/main" tabindex="-1">
343-<span class="lbl">files</span>345+<span class="lbl">files (g f)</span>
344 <span class="k">section</span>346 <span class="k">section</span>
345 </a>347 </a>
346 </li>348 </li>
347-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">349+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
348 <a href="/files/commits/main" tabindex="-1">350 <a href="/files/commits/main" tabindex="-1">
349-<span class="lbl">commits</span>351+<span class="lbl">commits (g c)</span>
350 <span class="k">section</span>352 <span class="k">section</span>
351 </a>353 </a>
352 </li>354 </li>
353-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">355+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
354 <a href="/files/refs" tabindex="-1">356 <a href="/files/refs" tabindex="-1">
355-<span class="lbl">branches &amp; tags</span>357+<span class="lbl">branches &amp; tags (g b)</span>
356 <span class="k">section</span>358 <span class="k">section</span>
357 </a>359 </a>
358 </li>360 </li>
359-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">361+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
360 <a href="/files/merge-requests" tabindex="-1">362 <a href="/files/merge-requests" tabindex="-1">
361-<span class="lbl">merge requests</span>363+<span class="lbl">merge requests (g m)</span>
362 <span class="k">section</span>364 <span class="k">section</span>
363 </a>365 </a>
364 </li>366 </li>
365-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">367+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
366 <a href="/files/releases" tabindex="-1">368 <a href="/files/releases" tabindex="-1">
367-<span class="lbl">releases</span>369+<span class="lbl">releases (g r)</span>
368 <span class="k">section</span>370 <span class="k">section</span>
369 </a>371 </a>
370 </li>372 </li>
371-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">373+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
372 <a href="/files/actions" tabindex="-1">374 <a href="/files/actions" tabindex="-1">
373-<span class="lbl">actions</span>375+<span class="lbl">actions (g a)</span>
374 <span class="k">section</span>376 <span class="k">section</span>
375 </a>377 </a>
376 </li>378 </li>
@@ -423,7 +425,9 @@
423 k-filter from:body -> ermite.focusFilter();425 k-filter from:body -> ermite.focusFilter();
424 k-gh from:body -> ermite.go('.brand');426 k-gh from:body -> ermite.go('.brand');
425 k-s from:body -> ermite.tab('s');427 k-s from:body -> ermite.tab('s');
426- k-t from:body -> ermite.tab('t');428+ k-f from:body -> ermite.tab('f');
429+ k-b from:body -> ermite.tab('b');
430+ k-a from:body -> ermite.tab('a');
427 k-c from:body -> ermite.tab('c');431 k-c from:body -> ermite.tab('c');
428 k-r from:body -> ermite.tab('r');432 k-r from:body -> ermite.tab('r');
429 k-m from:body -> ermite.tab('m');433 k-m from:body -> ermite.tab('m');
@@ -439,7 +443,6 @@
439 k-permalink from:body -> ermite.permalink();443 k-permalink from:body -> ermite.permalink();
440 k-merge from:body -> window.ermiteMR?.openMerge();444 k-merge from:body -> window.ermiteMR?.openMerge();
441 k-read from:body -> window.ermiteMR?.markRead();445 k-read from:body -> window.ermiteMR?.markRead();
442- k-gf from:body -> window.ermiteMR?.focusFiles();
443 k-keys from:body -> ermite.toggleKeys()">446 k-keys from:body -> ermite.toggleKeys()">
444 </div>447 </div>
445 </body>448 </body>
M internal/app/testdata/web/blob-image.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -228,14 +228,16 @@
228228 </div>
229229 <div>
230230 <dt>
231-<kbd>s</kbd>
232-<kbd>t</kbd>
233-<kbd>c</kbd>
234-<kbd>r</kbd>
235-<kbd>m</kbd>
236-<kbd>i</kbd>
231+<kbd>g s</kbd>
232+<kbd>g f</kbd>
233+<kbd>g c</kbd>
234+<kbd>g b</kbd>
235+<kbd>g m</kbd>
236+<kbd>g i</kbd>
237+<kbd>g r</kbd>
238+<kbd>g a</kbd>
237239 </dt>
238-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
240+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
239241 </div>
240242 <div>
241243 <dt>
@@ -334,45 +336,45 @@
334336 <span class="k">go</span>
335337 </a>
336338 </li>
337-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
339+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
338340 <a href="/files" tabindex="-1">
339-<span class="lbl">summary</span>
341+<span class="lbl">summary (g s)</span>
340342 <span class="k">section</span>
341343 </a>
342344 </li>
343-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
345+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
344346 <a href="/files/tree/main" tabindex="-1">
345-<span class="lbl">files</span>
347+<span class="lbl">files (g f)</span>
346348 <span class="k">section</span>
347349 </a>
348350 </li>
349-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
351+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
350352 <a href="/files/commits/main" tabindex="-1">
351-<span class="lbl">commits</span>
353+<span class="lbl">commits (g c)</span>
352354 <span class="k">section</span>
353355 </a>
354356 </li>
355-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
357+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
356358 <a href="/files/refs" tabindex="-1">
357-<span class="lbl">branches &amp; tags</span>
359+<span class="lbl">branches &amp; tags (g b)</span>
358360 <span class="k">section</span>
359361 </a>
360362 </li>
361-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
363+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
362364 <a href="/files/merge-requests" tabindex="-1">
363-<span class="lbl">merge requests</span>
365+<span class="lbl">merge requests (g m)</span>
364366 <span class="k">section</span>
365367 </a>
366368 </li>
367-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
369+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
368370 <a href="/files/releases" tabindex="-1">
369-<span class="lbl">releases</span>
371+<span class="lbl">releases (g r)</span>
370372 <span class="k">section</span>
371373 </a>
372374 </li>
373-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
375+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
374376 <a href="/files/actions" tabindex="-1">
375-<span class="lbl">actions</span>
377+<span class="lbl">actions (g a)</span>
376378 <span class="k">section</span>
377379 </a>
378380 </li>
@@ -425,7 +427,9 @@
425427 k-filter from:body -> ermite.focusFilter();
426428 k-gh from:body -> ermite.go('.brand');
427429 k-s from:body -> ermite.tab('s');
428- k-t from:body -> ermite.tab('t');
430+ k-f from:body -> ermite.tab('f');
431+ k-b from:body -> ermite.tab('b');
432+ k-a from:body -> ermite.tab('a');
429433 k-c from:body -> ermite.tab('c');
430434 k-r from:body -> ermite.tab('r');
431435 k-m from:body -> ermite.tab('m');
@@ -441,7 +445,6 @@
441445 k-permalink from:body -> ermite.permalink();
442446 k-merge from:body -> window.ermiteMR?.openMerge();
443447 k-read from:body -> window.ermiteMR?.markRead();
444- k-gf from:body -> window.ermiteMR?.focusFiles();
445448 k-keys from:body -> ermite.toggleKeys()">
446449 </div>
447450 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -228,14 +228,16 @@
228 </div>228 </div>
229 <div>229 <div>
230 <dt>230 <dt>
231-<kbd>s</kbd>231+<kbd>g s</kbd>
232-<kbd>t</kbd>232+<kbd>g f</kbd>
233-<kbd>c</kbd>233+<kbd>g c</kbd>
234-<kbd>r</kbd>234+<kbd>g b</kbd>
235-<kbd>m</kbd>235+<kbd>g m</kbd>
236-<kbd>i</kbd>236+<kbd>g i</kbd>
237+<kbd>g r</kbd>
238+<kbd>g a</kbd>
237 </dt>239 </dt>
238-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>240+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
239 </div>241 </div>
240 <div>242 <div>
241 <dt>243 <dt>
@@ -334,45 +336,45 @@
334 <span class="k">go</span>336 <span class="k">go</span>
335 </a>337 </a>
336 </li>338 </li>
337-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">339+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
338 <a href="/files" tabindex="-1">340 <a href="/files" tabindex="-1">
339-<span class="lbl">summary</span>341+<span class="lbl">summary (g s)</span>
340 <span class="k">section</span>342 <span class="k">section</span>
341 </a>343 </a>
342 </li>344 </li>
343-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">345+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
344 <a href="/files/tree/main" tabindex="-1">346 <a href="/files/tree/main" tabindex="-1">
345-<span class="lbl">files</span>347+<span class="lbl">files (g f)</span>
346 <span class="k">section</span>348 <span class="k">section</span>
347 </a>349 </a>
348 </li>350 </li>
349-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">351+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
350 <a href="/files/commits/main" tabindex="-1">352 <a href="/files/commits/main" tabindex="-1">
351-<span class="lbl">commits</span>353+<span class="lbl">commits (g c)</span>
352 <span class="k">section</span>354 <span class="k">section</span>
353 </a>355 </a>
354 </li>356 </li>
355-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">357+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
356 <a href="/files/refs" tabindex="-1">358 <a href="/files/refs" tabindex="-1">
357-<span class="lbl">branches &amp; tags</span>359+<span class="lbl">branches &amp; tags (g b)</span>
358 <span class="k">section</span>360 <span class="k">section</span>
359 </a>361 </a>
360 </li>362 </li>
361-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">363+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
362 <a href="/files/merge-requests" tabindex="-1">364 <a href="/files/merge-requests" tabindex="-1">
363-<span class="lbl">merge requests</span>365+<span class="lbl">merge requests (g m)</span>
364 <span class="k">section</span>366 <span class="k">section</span>
365 </a>367 </a>
366 </li>368 </li>
367-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">369+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
368 <a href="/files/releases" tabindex="-1">370 <a href="/files/releases" tabindex="-1">
369-<span class="lbl">releases</span>371+<span class="lbl">releases (g r)</span>
370 <span class="k">section</span>372 <span class="k">section</span>
371 </a>373 </a>
372 </li>374 </li>
373-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">375+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
374 <a href="/files/actions" tabindex="-1">376 <a href="/files/actions" tabindex="-1">
375-<span class="lbl">actions</span>377+<span class="lbl">actions (g a)</span>
376 <span class="k">section</span>378 <span class="k">section</span>
377 </a>379 </a>
378 </li>380 </li>
@@ -425,7 +427,9 @@
425 k-filter from:body -> ermite.focusFilter();427 k-filter from:body -> ermite.focusFilter();
426 k-gh from:body -> ermite.go('.brand');428 k-gh from:body -> ermite.go('.brand');
427 k-s from:body -> ermite.tab('s');429 k-s from:body -> ermite.tab('s');
428- k-t from:body -> ermite.tab('t');430+ k-f from:body -> ermite.tab('f');
431+ k-b from:body -> ermite.tab('b');
432+ k-a from:body -> ermite.tab('a');
429 k-c from:body -> ermite.tab('c');433 k-c from:body -> ermite.tab('c');
430 k-r from:body -> ermite.tab('r');434 k-r from:body -> ermite.tab('r');
431 k-m from:body -> ermite.tab('m');435 k-m from:body -> ermite.tab('m');
@@ -441,7 +445,6 @@
441 k-permalink from:body -> ermite.permalink();445 k-permalink from:body -> ermite.permalink();
442 k-merge from:body -> window.ermiteMR?.openMerge();446 k-merge from:body -> window.ermiteMR?.openMerge();
443 k-read from:body -> window.ermiteMR?.markRead();447 k-read from:body -> window.ermiteMR?.markRead();
444- k-gf from:body -> window.ermiteMR?.focusFiles();
445 k-keys from:body -> ermite.toggleKeys()">448 k-keys from:body -> ermite.toggleKeys()">
446 </div>449 </div>
447 </body>450 </body>
M internal/app/testdata/web/blob-markdown.html +33 -30
@@ -76,31 +76,31 @@
7676 <nav class="tabs" aria-label="Sections">
7777 <ul>
7878 <li>
79-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
79+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
83+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
87+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
91+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
95+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
99+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
100100 </a>
101101 </li>
102102 <li>
103-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
103+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
104104 </a>
105105 </li>
106106 </ul>
@@ -293,14 +293,16 @@
293293 </div>
294294 <div>
295295 <dt>
296-<kbd>s</kbd>
297-<kbd>t</kbd>
298-<kbd>c</kbd>
299-<kbd>r</kbd>
300-<kbd>m</kbd>
301-<kbd>i</kbd>
296+<kbd>g s</kbd>
297+<kbd>g f</kbd>
298+<kbd>g c</kbd>
299+<kbd>g b</kbd>
300+<kbd>g m</kbd>
301+<kbd>g i</kbd>
302+<kbd>g r</kbd>
303+<kbd>g a</kbd>
302304 </dt>
303-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
305+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
304306 </div>
305307 <div>
306308 <dt>
@@ -399,45 +401,45 @@
399401 <span class="k">go</span>
400402 </a>
401403 </li>
402-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
404+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
403405 <a href="/files" tabindex="-1">
404-<span class="lbl">summary</span>
406+<span class="lbl">summary (g s)</span>
405407 <span class="k">section</span>
406408 </a>
407409 </li>
408-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
410+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
409411 <a href="/files/tree/main" tabindex="-1">
410-<span class="lbl">files</span>
412+<span class="lbl">files (g f)</span>
411413 <span class="k">section</span>
412414 </a>
413415 </li>
414-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
416+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
415417 <a href="/files/commits/main" tabindex="-1">
416-<span class="lbl">commits</span>
418+<span class="lbl">commits (g c)</span>
417419 <span class="k">section</span>
418420 </a>
419421 </li>
420-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
422+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
421423 <a href="/files/refs" tabindex="-1">
422-<span class="lbl">branches &amp; tags</span>
424+<span class="lbl">branches &amp; tags (g b)</span>
423425 <span class="k">section</span>
424426 </a>
425427 </li>
426-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
428+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
427429 <a href="/files/merge-requests" tabindex="-1">
428-<span class="lbl">merge requests</span>
430+<span class="lbl">merge requests (g m)</span>
429431 <span class="k">section</span>
430432 </a>
431433 </li>
432-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
434+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
433435 <a href="/files/releases" tabindex="-1">
434-<span class="lbl">releases</span>
436+<span class="lbl">releases (g r)</span>
435437 <span class="k">section</span>
436438 </a>
437439 </li>
438-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
440+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
439441 <a href="/files/actions" tabindex="-1">
440-<span class="lbl">actions</span>
442+<span class="lbl">actions (g a)</span>
441443 <span class="k">section</span>
442444 </a>
443445 </li>
@@ -490,7 +492,9 @@
490492 k-filter from:body -> ermite.focusFilter();
491493 k-gh from:body -> ermite.go('.brand');
492494 k-s from:body -> ermite.tab('s');
493- k-t from:body -> ermite.tab('t');
495+ k-f from:body -> ermite.tab('f');
496+ k-b from:body -> ermite.tab('b');
497+ k-a from:body -> ermite.tab('a');
494498 k-c from:body -> ermite.tab('c');
495499 k-r from:body -> ermite.tab('r');
496500 k-m from:body -> ermite.tab('m');
@@ -506,7 +510,6 @@
506510 k-permalink from:body -> ermite.permalink();
507511 k-merge from:body -> window.ermiteMR?.openMerge();
508512 k-read from:body -> window.ermiteMR?.markRead();
509- k-gf from:body -> window.ermiteMR?.focusFiles();
510513 k-keys from:body -> ermite.toggleKeys()">
511514 </div>
512515 </body>
@@ -76,31 +76,31 @@
76 <nav class="tabs" aria-label="Sections">76 <nav class="tabs" aria-label="Sections">
77 <ul>77 <ul>
78 <li>78 <li>
79-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>79+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>83+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>87+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>91+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>95+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>99+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 <li>102 <li>
103-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>103+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
104 </a>104 </a>
105 </li>105 </li>
106 </ul>106 </ul>
@@ -293,14 +293,16 @@
293 </div>293 </div>
294 <div>294 <div>
295 <dt>295 <dt>
296-<kbd>s</kbd>296+<kbd>g s</kbd>
297-<kbd>t</kbd>297+<kbd>g f</kbd>
298-<kbd>c</kbd>298+<kbd>g c</kbd>
299-<kbd>r</kbd>299+<kbd>g b</kbd>
300-<kbd>m</kbd>300+<kbd>g m</kbd>
301-<kbd>i</kbd>301+<kbd>g i</kbd>
302+<kbd>g r</kbd>
303+<kbd>g a</kbd>
302 </dt>304 </dt>
303-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>305+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
304 </div>306 </div>
305 <div>307 <div>
306 <dt>308 <dt>
@@ -399,45 +401,45 @@
399 <span class="k">go</span>401 <span class="k">go</span>
400 </a>402 </a>
401 </li>403 </li>
402-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">404+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
403 <a href="/files" tabindex="-1">405 <a href="/files" tabindex="-1">
404-<span class="lbl">summary</span>406+<span class="lbl">summary (g s)</span>
405 <span class="k">section</span>407 <span class="k">section</span>
406 </a>408 </a>
407 </li>409 </li>
408-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">410+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
409 <a href="/files/tree/main" tabindex="-1">411 <a href="/files/tree/main" tabindex="-1">
410-<span class="lbl">files</span>412+<span class="lbl">files (g f)</span>
411 <span class="k">section</span>413 <span class="k">section</span>
412 </a>414 </a>
413 </li>415 </li>
414-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">416+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
415 <a href="/files/commits/main" tabindex="-1">417 <a href="/files/commits/main" tabindex="-1">
416-<span class="lbl">commits</span>418+<span class="lbl">commits (g c)</span>
417 <span class="k">section</span>419 <span class="k">section</span>
418 </a>420 </a>
419 </li>421 </li>
420-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">422+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
421 <a href="/files/refs" tabindex="-1">423 <a href="/files/refs" tabindex="-1">
422-<span class="lbl">branches &amp; tags</span>424+<span class="lbl">branches &amp; tags (g b)</span>
423 <span class="k">section</span>425 <span class="k">section</span>
424 </a>426 </a>
425 </li>427 </li>
426-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">428+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
427 <a href="/files/merge-requests" tabindex="-1">429 <a href="/files/merge-requests" tabindex="-1">
428-<span class="lbl">merge requests</span>430+<span class="lbl">merge requests (g m)</span>
429 <span class="k">section</span>431 <span class="k">section</span>
430 </a>432 </a>
431 </li>433 </li>
432-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">434+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
433 <a href="/files/releases" tabindex="-1">435 <a href="/files/releases" tabindex="-1">
434-<span class="lbl">releases</span>436+<span class="lbl">releases (g r)</span>
435 <span class="k">section</span>437 <span class="k">section</span>
436 </a>438 </a>
437 </li>439 </li>
438-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">440+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
439 <a href="/files/actions" tabindex="-1">441 <a href="/files/actions" tabindex="-1">
440-<span class="lbl">actions</span>442+<span class="lbl">actions (g a)</span>
441 <span class="k">section</span>443 <span class="k">section</span>
442 </a>444 </a>
443 </li>445 </li>
@@ -490,7 +492,9 @@
490 k-filter from:body -> ermite.focusFilter();492 k-filter from:body -> ermite.focusFilter();
491 k-gh from:body -> ermite.go('.brand');493 k-gh from:body -> ermite.go('.brand');
492 k-s from:body -> ermite.tab('s');494 k-s from:body -> ermite.tab('s');
493- k-t from:body -> ermite.tab('t');495+ k-f from:body -> ermite.tab('f');
496+ k-b from:body -> ermite.tab('b');
497+ k-a from:body -> ermite.tab('a');
494 k-c from:body -> ermite.tab('c');498 k-c from:body -> ermite.tab('c');
495 k-r from:body -> ermite.tab('r');499 k-r from:body -> ermite.tab('r');
496 k-m from:body -> ermite.tab('m');500 k-m from:body -> ermite.tab('m');
@@ -506,7 +510,6 @@
506 k-permalink from:body -> ermite.permalink();510 k-permalink from:body -> ermite.permalink();
507 k-merge from:body -> window.ermiteMR?.openMerge();511 k-merge from:body -> window.ermiteMR?.openMerge();
508 k-read from:body -> window.ermiteMR?.markRead();512 k-read from:body -> window.ermiteMR?.markRead();
509- k-gf from:body -> window.ermiteMR?.focusFiles();
510 k-keys from:body -> ermite.toggleKeys()">513 k-keys from:body -> ermite.toggleKeys()">
511 </div>514 </div>
512 </body>515 </body>
M internal/app/testdata/web/blob-svg.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -251,14 +251,16 @@
251251 </div>
252252 <div>
253253 <dt>
254-<kbd>s</kbd>
255-<kbd>t</kbd>
256-<kbd>c</kbd>
257-<kbd>r</kbd>
258-<kbd>m</kbd>
259-<kbd>i</kbd>
254+<kbd>g s</kbd>
255+<kbd>g f</kbd>
256+<kbd>g c</kbd>
257+<kbd>g b</kbd>
258+<kbd>g m</kbd>
259+<kbd>g i</kbd>
260+<kbd>g r</kbd>
261+<kbd>g a</kbd>
260262 </dt>
261-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
263+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
262264 </div>
263265 <div>
264266 <dt>
@@ -357,45 +359,45 @@
357359 <span class="k">go</span>
358360 </a>
359361 </li>
360-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
362+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
361363 <a href="/files" tabindex="-1">
362-<span class="lbl">summary</span>
364+<span class="lbl">summary (g s)</span>
363365 <span class="k">section</span>
364366 </a>
365367 </li>
366-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
368+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
367369 <a href="/files/tree/main" tabindex="-1">
368-<span class="lbl">files</span>
370+<span class="lbl">files (g f)</span>
369371 <span class="k">section</span>
370372 </a>
371373 </li>
372-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
374+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
373375 <a href="/files/commits/main" tabindex="-1">
374-<span class="lbl">commits</span>
376+<span class="lbl">commits (g c)</span>
375377 <span class="k">section</span>
376378 </a>
377379 </li>
378-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
380+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
379381 <a href="/files/refs" tabindex="-1">
380-<span class="lbl">branches &amp; tags</span>
382+<span class="lbl">branches &amp; tags (g b)</span>
381383 <span class="k">section</span>
382384 </a>
383385 </li>
384-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
386+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
385387 <a href="/files/merge-requests" tabindex="-1">
386-<span class="lbl">merge requests</span>
388+<span class="lbl">merge requests (g m)</span>
387389 <span class="k">section</span>
388390 </a>
389391 </li>
390-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
392+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
391393 <a href="/files/releases" tabindex="-1">
392-<span class="lbl">releases</span>
394+<span class="lbl">releases (g r)</span>
393395 <span class="k">section</span>
394396 </a>
395397 </li>
396-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
398+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
397399 <a href="/files/actions" tabindex="-1">
398-<span class="lbl">actions</span>
400+<span class="lbl">actions (g a)</span>
399401 <span class="k">section</span>
400402 </a>
401403 </li>
@@ -448,7 +450,9 @@
448450 k-filter from:body -> ermite.focusFilter();
449451 k-gh from:body -> ermite.go('.brand');
450452 k-s from:body -> ermite.tab('s');
451- k-t from:body -> ermite.tab('t');
453+ k-f from:body -> ermite.tab('f');
454+ k-b from:body -> ermite.tab('b');
455+ k-a from:body -> ermite.tab('a');
452456 k-c from:body -> ermite.tab('c');
453457 k-r from:body -> ermite.tab('r');
454458 k-m from:body -> ermite.tab('m');
@@ -464,7 +468,6 @@
464468 k-permalink from:body -> ermite.permalink();
465469 k-merge from:body -> window.ermiteMR?.openMerge();
466470 k-read from:body -> window.ermiteMR?.markRead();
467- k-gf from:body -> window.ermiteMR?.focusFiles();
468471 k-keys from:body -> ermite.toggleKeys()">
469472 </div>
470473 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -251,14 +251,16 @@
251 </div>251 </div>
252 <div>252 <div>
253 <dt>253 <dt>
254-<kbd>s</kbd>254+<kbd>g s</kbd>
255-<kbd>t</kbd>255+<kbd>g f</kbd>
256-<kbd>c</kbd>256+<kbd>g c</kbd>
257-<kbd>r</kbd>257+<kbd>g b</kbd>
258-<kbd>m</kbd>258+<kbd>g m</kbd>
259-<kbd>i</kbd>259+<kbd>g i</kbd>
260+<kbd>g r</kbd>
261+<kbd>g a</kbd>
260 </dt>262 </dt>
261-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>263+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
262 </div>264 </div>
263 <div>265 <div>
264 <dt>266 <dt>
@@ -357,45 +359,45 @@
357 <span class="k">go</span>359 <span class="k">go</span>
358 </a>360 </a>
359 </li>361 </li>
360-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">362+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
361 <a href="/files" tabindex="-1">363 <a href="/files" tabindex="-1">
362-<span class="lbl">summary</span>364+<span class="lbl">summary (g s)</span>
363 <span class="k">section</span>365 <span class="k">section</span>
364 </a>366 </a>
365 </li>367 </li>
366-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">368+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
367 <a href="/files/tree/main" tabindex="-1">369 <a href="/files/tree/main" tabindex="-1">
368-<span class="lbl">files</span>370+<span class="lbl">files (g f)</span>
369 <span class="k">section</span>371 <span class="k">section</span>
370 </a>372 </a>
371 </li>373 </li>
372-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">374+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
373 <a href="/files/commits/main" tabindex="-1">375 <a href="/files/commits/main" tabindex="-1">
374-<span class="lbl">commits</span>376+<span class="lbl">commits (g c)</span>
375 <span class="k">section</span>377 <span class="k">section</span>
376 </a>378 </a>
377 </li>379 </li>
378-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">380+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
379 <a href="/files/refs" tabindex="-1">381 <a href="/files/refs" tabindex="-1">
380-<span class="lbl">branches &amp; tags</span>382+<span class="lbl">branches &amp; tags (g b)</span>
381 <span class="k">section</span>383 <span class="k">section</span>
382 </a>384 </a>
383 </li>385 </li>
384-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">386+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
385 <a href="/files/merge-requests" tabindex="-1">387 <a href="/files/merge-requests" tabindex="-1">
386-<span class="lbl">merge requests</span>388+<span class="lbl">merge requests (g m)</span>
387 <span class="k">section</span>389 <span class="k">section</span>
388 </a>390 </a>
389 </li>391 </li>
390-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">392+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
391 <a href="/files/releases" tabindex="-1">393 <a href="/files/releases" tabindex="-1">
392-<span class="lbl">releases</span>394+<span class="lbl">releases (g r)</span>
393 <span class="k">section</span>395 <span class="k">section</span>
394 </a>396 </a>
395 </li>397 </li>
396-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">398+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
397 <a href="/files/actions" tabindex="-1">399 <a href="/files/actions" tabindex="-1">
398-<span class="lbl">actions</span>400+<span class="lbl">actions (g a)</span>
399 <span class="k">section</span>401 <span class="k">section</span>
400 </a>402 </a>
401 </li>403 </li>
@@ -448,7 +450,9 @@
448 k-filter from:body -> ermite.focusFilter();450 k-filter from:body -> ermite.focusFilter();
449 k-gh from:body -> ermite.go('.brand');451 k-gh from:body -> ermite.go('.brand');
450 k-s from:body -> ermite.tab('s');452 k-s from:body -> ermite.tab('s');
451- k-t from:body -> ermite.tab('t');453+ k-f from:body -> ermite.tab('f');
454+ k-b from:body -> ermite.tab('b');
455+ k-a from:body -> ermite.tab('a');
452 k-c from:body -> ermite.tab('c');456 k-c from:body -> ermite.tab('c');
453 k-r from:body -> ermite.tab('r');457 k-r from:body -> ermite.tab('r');
454 k-m from:body -> ermite.tab('m');458 k-m from:body -> ermite.tab('m');
@@ -464,7 +468,6 @@
464 k-permalink from:body -> ermite.permalink();468 k-permalink from:body -> ermite.permalink();
465 k-merge from:body -> window.ermiteMR?.openMerge();469 k-merge from:body -> window.ermiteMR?.openMerge();
466 k-read from:body -> window.ermiteMR?.markRead();470 k-read from:body -> window.ermiteMR?.markRead();
467- k-gf from:body -> window.ermiteMR?.focusFiles();
468 k-keys from:body -> ermite.toggleKeys()">471 k-keys from:body -> ermite.toggleKeys()">
469 </div>472 </div>
470 </body>473 </body>
M internal/app/testdata/web/blob-text.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -246,14 +246,16 @@
246246 </div>
247247 <div>
248248 <dt>
249-<kbd>s</kbd>
250-<kbd>t</kbd>
251-<kbd>c</kbd>
252-<kbd>r</kbd>
253-<kbd>m</kbd>
254-<kbd>i</kbd>
249+<kbd>g s</kbd>
250+<kbd>g f</kbd>
251+<kbd>g c</kbd>
252+<kbd>g b</kbd>
253+<kbd>g m</kbd>
254+<kbd>g i</kbd>
255+<kbd>g r</kbd>
256+<kbd>g a</kbd>
255257 </dt>
256-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
258+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
257259 </div>
258260 <div>
259261 <dt>
@@ -352,45 +354,45 @@
352354 <span class="k">go</span>
353355 </a>
354356 </li>
355-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
357+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
356358 <a href="/files" tabindex="-1">
357-<span class="lbl">summary</span>
359+<span class="lbl">summary (g s)</span>
358360 <span class="k">section</span>
359361 </a>
360362 </li>
361-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
363+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
362364 <a href="/files/tree/main" tabindex="-1">
363-<span class="lbl">files</span>
365+<span class="lbl">files (g f)</span>
364366 <span class="k">section</span>
365367 </a>
366368 </li>
367-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
369+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
368370 <a href="/files/commits/main" tabindex="-1">
369-<span class="lbl">commits</span>
371+<span class="lbl">commits (g c)</span>
370372 <span class="k">section</span>
371373 </a>
372374 </li>
373-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
375+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
374376 <a href="/files/refs" tabindex="-1">
375-<span class="lbl">branches &amp; tags</span>
377+<span class="lbl">branches &amp; tags (g b)</span>
376378 <span class="k">section</span>
377379 </a>
378380 </li>
379-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
381+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
380382 <a href="/files/merge-requests" tabindex="-1">
381-<span class="lbl">merge requests</span>
383+<span class="lbl">merge requests (g m)</span>
382384 <span class="k">section</span>
383385 </a>
384386 </li>
385-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
387+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
386388 <a href="/files/releases" tabindex="-1">
387-<span class="lbl">releases</span>
389+<span class="lbl">releases (g r)</span>
388390 <span class="k">section</span>
389391 </a>
390392 </li>
391-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
393+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
392394 <a href="/files/actions" tabindex="-1">
393-<span class="lbl">actions</span>
395+<span class="lbl">actions (g a)</span>
394396 <span class="k">section</span>
395397 </a>
396398 </li>
@@ -443,7 +445,9 @@
443445 k-filter from:body -> ermite.focusFilter();
444446 k-gh from:body -> ermite.go('.brand');
445447 k-s from:body -> ermite.tab('s');
446- k-t from:body -> ermite.tab('t');
448+ k-f from:body -> ermite.tab('f');
449+ k-b from:body -> ermite.tab('b');
450+ k-a from:body -> ermite.tab('a');
447451 k-c from:body -> ermite.tab('c');
448452 k-r from:body -> ermite.tab('r');
449453 k-m from:body -> ermite.tab('m');
@@ -459,7 +463,6 @@
459463 k-permalink from:body -> ermite.permalink();
460464 k-merge from:body -> window.ermiteMR?.openMerge();
461465 k-read from:body -> window.ermiteMR?.markRead();
462- k-gf from:body -> window.ermiteMR?.focusFiles();
463466 k-keys from:body -> ermite.toggleKeys()">
464467 </div>
465468 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -246,14 +246,16 @@
246 </div>246 </div>
247 <div>247 <div>
248 <dt>248 <dt>
249-<kbd>s</kbd>249+<kbd>g s</kbd>
250-<kbd>t</kbd>250+<kbd>g f</kbd>
251-<kbd>c</kbd>251+<kbd>g c</kbd>
252-<kbd>r</kbd>252+<kbd>g b</kbd>
253-<kbd>m</kbd>253+<kbd>g m</kbd>
254-<kbd>i</kbd>254+<kbd>g i</kbd>
255+<kbd>g r</kbd>
256+<kbd>g a</kbd>
255 </dt>257 </dt>
256-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>258+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
257 </div>259 </div>
258 <div>260 <div>
259 <dt>261 <dt>
@@ -352,45 +354,45 @@
352 <span class="k">go</span>354 <span class="k">go</span>
353 </a>355 </a>
354 </li>356 </li>
355-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">357+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
356 <a href="/files" tabindex="-1">358 <a href="/files" tabindex="-1">
357-<span class="lbl">summary</span>359+<span class="lbl">summary (g s)</span>
358 <span class="k">section</span>360 <span class="k">section</span>
359 </a>361 </a>
360 </li>362 </li>
361-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">363+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
362 <a href="/files/tree/main" tabindex="-1">364 <a href="/files/tree/main" tabindex="-1">
363-<span class="lbl">files</span>365+<span class="lbl">files (g f)</span>
364 <span class="k">section</span>366 <span class="k">section</span>
365 </a>367 </a>
366 </li>368 </li>
367-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">369+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
368 <a href="/files/commits/main" tabindex="-1">370 <a href="/files/commits/main" tabindex="-1">
369-<span class="lbl">commits</span>371+<span class="lbl">commits (g c)</span>
370 <span class="k">section</span>372 <span class="k">section</span>
371 </a>373 </a>
372 </li>374 </li>
373-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">375+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
374 <a href="/files/refs" tabindex="-1">376 <a href="/files/refs" tabindex="-1">
375-<span class="lbl">branches &amp; tags</span>377+<span class="lbl">branches &amp; tags (g b)</span>
376 <span class="k">section</span>378 <span class="k">section</span>
377 </a>379 </a>
378 </li>380 </li>
379-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">381+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
380 <a href="/files/merge-requests" tabindex="-1">382 <a href="/files/merge-requests" tabindex="-1">
381-<span class="lbl">merge requests</span>383+<span class="lbl">merge requests (g m)</span>
382 <span class="k">section</span>384 <span class="k">section</span>
383 </a>385 </a>
384 </li>386 </li>
385-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">387+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
386 <a href="/files/releases" tabindex="-1">388 <a href="/files/releases" tabindex="-1">
387-<span class="lbl">releases</span>389+<span class="lbl">releases (g r)</span>
388 <span class="k">section</span>390 <span class="k">section</span>
389 </a>391 </a>
390 </li>392 </li>
391-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">393+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
392 <a href="/files/actions" tabindex="-1">394 <a href="/files/actions" tabindex="-1">
393-<span class="lbl">actions</span>395+<span class="lbl">actions (g a)</span>
394 <span class="k">section</span>396 <span class="k">section</span>
395 </a>397 </a>
396 </li>398 </li>
@@ -443,7 +445,9 @@
443 k-filter from:body -> ermite.focusFilter();445 k-filter from:body -> ermite.focusFilter();
444 k-gh from:body -> ermite.go('.brand');446 k-gh from:body -> ermite.go('.brand');
445 k-s from:body -> ermite.tab('s');447 k-s from:body -> ermite.tab('s');
446- k-t from:body -> ermite.tab('t');448+ k-f from:body -> ermite.tab('f');
449+ k-b from:body -> ermite.tab('b');
450+ k-a from:body -> ermite.tab('a');
447 k-c from:body -> ermite.tab('c');451 k-c from:body -> ermite.tab('c');
448 k-r from:body -> ermite.tab('r');452 k-r from:body -> ermite.tab('r');
449 k-m from:body -> ermite.tab('m');453 k-m from:body -> ermite.tab('m');
@@ -459,7 +463,6 @@
459 k-permalink from:body -> ermite.permalink();463 k-permalink from:body -> ermite.permalink();
460 k-merge from:body -> window.ermiteMR?.openMerge();464 k-merge from:body -> window.ermiteMR?.openMerge();
461 k-read from:body -> window.ermiteMR?.markRead();465 k-read from:body -> window.ermiteMR?.markRead();
462- k-gf from:body -> window.ermiteMR?.focusFiles();
463 k-keys from:body -> ermite.toggleKeys()">466 k-keys from:body -> ermite.toggleKeys()">
464 </div>467 </div>
465 </body>468 </body>
M internal/app/testdata/web/blob-too-large.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -226,14 +226,16 @@
226226 </div>
227227 <div>
228228 <dt>
229-<kbd>s</kbd>
230-<kbd>t</kbd>
231-<kbd>c</kbd>
232-<kbd>r</kbd>
233-<kbd>m</kbd>
234-<kbd>i</kbd>
229+<kbd>g s</kbd>
230+<kbd>g f</kbd>
231+<kbd>g c</kbd>
232+<kbd>g b</kbd>
233+<kbd>g m</kbd>
234+<kbd>g i</kbd>
235+<kbd>g r</kbd>
236+<kbd>g a</kbd>
235237 </dt>
236-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
238+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
237239 </div>
238240 <div>
239241 <dt>
@@ -332,45 +334,45 @@
332334 <span class="k">go</span>
333335 </a>
334336 </li>
335-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
337+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
336338 <a href="/files" tabindex="-1">
337-<span class="lbl">summary</span>
339+<span class="lbl">summary (g s)</span>
338340 <span class="k">section</span>
339341 </a>
340342 </li>
341-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
343+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
342344 <a href="/files/tree/main" tabindex="-1">
343-<span class="lbl">files</span>
345+<span class="lbl">files (g f)</span>
344346 <span class="k">section</span>
345347 </a>
346348 </li>
347-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
349+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
348350 <a href="/files/commits/main" tabindex="-1">
349-<span class="lbl">commits</span>
351+<span class="lbl">commits (g c)</span>
350352 <span class="k">section</span>
351353 </a>
352354 </li>
353-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
355+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
354356 <a href="/files/refs" tabindex="-1">
355-<span class="lbl">branches &amp; tags</span>
357+<span class="lbl">branches &amp; tags (g b)</span>
356358 <span class="k">section</span>
357359 </a>
358360 </li>
359-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
361+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
360362 <a href="/files/merge-requests" tabindex="-1">
361-<span class="lbl">merge requests</span>
363+<span class="lbl">merge requests (g m)</span>
362364 <span class="k">section</span>
363365 </a>
364366 </li>
365-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
367+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
366368 <a href="/files/releases" tabindex="-1">
367-<span class="lbl">releases</span>
369+<span class="lbl">releases (g r)</span>
368370 <span class="k">section</span>
369371 </a>
370372 </li>
371-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
373+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
372374 <a href="/files/actions" tabindex="-1">
373-<span class="lbl">actions</span>
375+<span class="lbl">actions (g a)</span>
374376 <span class="k">section</span>
375377 </a>
376378 </li>
@@ -423,7 +425,9 @@
423425 k-filter from:body -> ermite.focusFilter();
424426 k-gh from:body -> ermite.go('.brand');
425427 k-s from:body -> ermite.tab('s');
426- k-t from:body -> ermite.tab('t');
428+ k-f from:body -> ermite.tab('f');
429+ k-b from:body -> ermite.tab('b');
430+ k-a from:body -> ermite.tab('a');
427431 k-c from:body -> ermite.tab('c');
428432 k-r from:body -> ermite.tab('r');
429433 k-m from:body -> ermite.tab('m');
@@ -439,7 +443,6 @@
439443 k-permalink from:body -> ermite.permalink();
440444 k-merge from:body -> window.ermiteMR?.openMerge();
441445 k-read from:body -> window.ermiteMR?.markRead();
442- k-gf from:body -> window.ermiteMR?.focusFiles();
443446 k-keys from:body -> ermite.toggleKeys()">
444447 </div>
445448 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -226,14 +226,16 @@
226 </div>226 </div>
227 <div>227 <div>
228 <dt>228 <dt>
229-<kbd>s</kbd>229+<kbd>g s</kbd>
230-<kbd>t</kbd>230+<kbd>g f</kbd>
231-<kbd>c</kbd>231+<kbd>g c</kbd>
232-<kbd>r</kbd>232+<kbd>g b</kbd>
233-<kbd>m</kbd>233+<kbd>g m</kbd>
234-<kbd>i</kbd>234+<kbd>g i</kbd>
235+<kbd>g r</kbd>
236+<kbd>g a</kbd>
235 </dt>237 </dt>
236-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>238+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
237 </div>239 </div>
238 <div>240 <div>
239 <dt>241 <dt>
@@ -332,45 +334,45 @@
332 <span class="k">go</span>334 <span class="k">go</span>
333 </a>335 </a>
334 </li>336 </li>
335-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">337+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
336 <a href="/files" tabindex="-1">338 <a href="/files" tabindex="-1">
337-<span class="lbl">summary</span>339+<span class="lbl">summary (g s)</span>
338 <span class="k">section</span>340 <span class="k">section</span>
339 </a>341 </a>
340 </li>342 </li>
341-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">343+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
342 <a href="/files/tree/main" tabindex="-1">344 <a href="/files/tree/main" tabindex="-1">
343-<span class="lbl">files</span>345+<span class="lbl">files (g f)</span>
344 <span class="k">section</span>346 <span class="k">section</span>
345 </a>347 </a>
346 </li>348 </li>
347-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">349+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
348 <a href="/files/commits/main" tabindex="-1">350 <a href="/files/commits/main" tabindex="-1">
349-<span class="lbl">commits</span>351+<span class="lbl">commits (g c)</span>
350 <span class="k">section</span>352 <span class="k">section</span>
351 </a>353 </a>
352 </li>354 </li>
353-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">355+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
354 <a href="/files/refs" tabindex="-1">356 <a href="/files/refs" tabindex="-1">
355-<span class="lbl">branches &amp; tags</span>357+<span class="lbl">branches &amp; tags (g b)</span>
356 <span class="k">section</span>358 <span class="k">section</span>
357 </a>359 </a>
358 </li>360 </li>
359-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">361+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
360 <a href="/files/merge-requests" tabindex="-1">362 <a href="/files/merge-requests" tabindex="-1">
361-<span class="lbl">merge requests</span>363+<span class="lbl">merge requests (g m)</span>
362 <span class="k">section</span>364 <span class="k">section</span>
363 </a>365 </a>
364 </li>366 </li>
365-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">367+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
366 <a href="/files/releases" tabindex="-1">368 <a href="/files/releases" tabindex="-1">
367-<span class="lbl">releases</span>369+<span class="lbl">releases (g r)</span>
368 <span class="k">section</span>370 <span class="k">section</span>
369 </a>371 </a>
370 </li>372 </li>
371-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">373+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
372 <a href="/files/actions" tabindex="-1">374 <a href="/files/actions" tabindex="-1">
373-<span class="lbl">actions</span>375+<span class="lbl">actions (g a)</span>
374 <span class="k">section</span>376 <span class="k">section</span>
375 </a>377 </a>
376 </li>378 </li>
@@ -423,7 +425,9 @@
423 k-filter from:body -> ermite.focusFilter();425 k-filter from:body -> ermite.focusFilter();
424 k-gh from:body -> ermite.go('.brand');426 k-gh from:body -> ermite.go('.brand');
425 k-s from:body -> ermite.tab('s');427 k-s from:body -> ermite.tab('s');
426- k-t from:body -> ermite.tab('t');428+ k-f from:body -> ermite.tab('f');
429+ k-b from:body -> ermite.tab('b');
430+ k-a from:body -> ermite.tab('a');
427 k-c from:body -> ermite.tab('c');431 k-c from:body -> ermite.tab('c');
428 k-r from:body -> ermite.tab('r');432 k-r from:body -> ermite.tab('r');
429 k-m from:body -> ermite.tab('m');433 k-m from:body -> ermite.tab('m');
@@ -439,7 +443,6 @@
439 k-permalink from:body -> ermite.permalink();443 k-permalink from:body -> ermite.permalink();
440 k-merge from:body -> window.ermiteMR?.openMerge();444 k-merge from:body -> window.ermiteMR?.openMerge();
441 k-read from:body -> window.ermiteMR?.markRead();445 k-read from:body -> window.ermiteMR?.markRead();
442- k-gf from:body -> window.ermiteMR?.focusFiles();
443 k-keys from:body -> ermite.toggleKeys()">446 k-keys from:body -> ermite.toggleKeys()">
444 </div>447 </div>
445 </body>448 </body>
M internal/app/testdata/web/blob-trojan.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -293,14 +293,16 @@
293293 </div>
294294 <div>
295295 <dt>
296-<kbd>s</kbd>
297-<kbd>t</kbd>
298-<kbd>c</kbd>
299-<kbd>r</kbd>
300-<kbd>m</kbd>
301-<kbd>i</kbd>
296+<kbd>g s</kbd>
297+<kbd>g f</kbd>
298+<kbd>g c</kbd>
299+<kbd>g b</kbd>
300+<kbd>g m</kbd>
301+<kbd>g i</kbd>
302+<kbd>g r</kbd>
303+<kbd>g a</kbd>
302304 </dt>
303-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
305+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
304306 </div>
305307 <div>
306308 <dt>
@@ -399,45 +401,45 @@
399401 <span class="k">go</span>
400402 </a>
401403 </li>
402-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
404+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
403405 <a href="/files" tabindex="-1">
404-<span class="lbl">summary</span>
406+<span class="lbl">summary (g s)</span>
405407 <span class="k">section</span>
406408 </a>
407409 </li>
408-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
410+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
409411 <a href="/files/tree/main" tabindex="-1">
410-<span class="lbl">files</span>
412+<span class="lbl">files (g f)</span>
411413 <span class="k">section</span>
412414 </a>
413415 </li>
414-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
416+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
415417 <a href="/files/commits/main" tabindex="-1">
416-<span class="lbl">commits</span>
418+<span class="lbl">commits (g c)</span>
417419 <span class="k">section</span>
418420 </a>
419421 </li>
420-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
422+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
421423 <a href="/files/refs" tabindex="-1">
422-<span class="lbl">branches &amp; tags</span>
424+<span class="lbl">branches &amp; tags (g b)</span>
423425 <span class="k">section</span>
424426 </a>
425427 </li>
426-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
428+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
427429 <a href="/files/merge-requests" tabindex="-1">
428-<span class="lbl">merge requests</span>
430+<span class="lbl">merge requests (g m)</span>
429431 <span class="k">section</span>
430432 </a>
431433 </li>
432-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
434+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
433435 <a href="/files/releases" tabindex="-1">
434-<span class="lbl">releases</span>
436+<span class="lbl">releases (g r)</span>
435437 <span class="k">section</span>
436438 </a>
437439 </li>
438-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
440+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
439441 <a href="/files/actions" tabindex="-1">
440-<span class="lbl">actions</span>
442+<span class="lbl">actions (g a)</span>
441443 <span class="k">section</span>
442444 </a>
443445 </li>
@@ -490,7 +492,9 @@
490492 k-filter from:body -> ermite.focusFilter();
491493 k-gh from:body -> ermite.go('.brand');
492494 k-s from:body -> ermite.tab('s');
493- k-t from:body -> ermite.tab('t');
495+ k-f from:body -> ermite.tab('f');
496+ k-b from:body -> ermite.tab('b');
497+ k-a from:body -> ermite.tab('a');
494498 k-c from:body -> ermite.tab('c');
495499 k-r from:body -> ermite.tab('r');
496500 k-m from:body -> ermite.tab('m');
@@ -506,7 +510,6 @@
506510 k-permalink from:body -> ermite.permalink();
507511 k-merge from:body -> window.ermiteMR?.openMerge();
508512 k-read from:body -> window.ermiteMR?.markRead();
509- k-gf from:body -> window.ermiteMR?.focusFiles();
510513 k-keys from:body -> ermite.toggleKeys()">
511514 </div>
512515 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -293,14 +293,16 @@
293 </div>293 </div>
294 <div>294 <div>
295 <dt>295 <dt>
296-<kbd>s</kbd>296+<kbd>g s</kbd>
297-<kbd>t</kbd>297+<kbd>g f</kbd>
298-<kbd>c</kbd>298+<kbd>g c</kbd>
299-<kbd>r</kbd>299+<kbd>g b</kbd>
300-<kbd>m</kbd>300+<kbd>g m</kbd>
301-<kbd>i</kbd>301+<kbd>g i</kbd>
302+<kbd>g r</kbd>
303+<kbd>g a</kbd>
302 </dt>304 </dt>
303-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>305+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
304 </div>306 </div>
305 <div>307 <div>
306 <dt>308 <dt>
@@ -399,45 +401,45 @@
399 <span class="k">go</span>401 <span class="k">go</span>
400 </a>402 </a>
401 </li>403 </li>
402-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">404+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
403 <a href="/files" tabindex="-1">405 <a href="/files" tabindex="-1">
404-<span class="lbl">summary</span>406+<span class="lbl">summary (g s)</span>
405 <span class="k">section</span>407 <span class="k">section</span>
406 </a>408 </a>
407 </li>409 </li>
408-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">410+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
409 <a href="/files/tree/main" tabindex="-1">411 <a href="/files/tree/main" tabindex="-1">
410-<span class="lbl">files</span>412+<span class="lbl">files (g f)</span>
411 <span class="k">section</span>413 <span class="k">section</span>
412 </a>414 </a>
413 </li>415 </li>
414-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">416+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
415 <a href="/files/commits/main" tabindex="-1">417 <a href="/files/commits/main" tabindex="-1">
416-<span class="lbl">commits</span>418+<span class="lbl">commits (g c)</span>
417 <span class="k">section</span>419 <span class="k">section</span>
418 </a>420 </a>
419 </li>421 </li>
420-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">422+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
421 <a href="/files/refs" tabindex="-1">423 <a href="/files/refs" tabindex="-1">
422-<span class="lbl">branches &amp; tags</span>424+<span class="lbl">branches &amp; tags (g b)</span>
423 <span class="k">section</span>425 <span class="k">section</span>
424 </a>426 </a>
425 </li>427 </li>
426-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">428+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
427 <a href="/files/merge-requests" tabindex="-1">429 <a href="/files/merge-requests" tabindex="-1">
428-<span class="lbl">merge requests</span>430+<span class="lbl">merge requests (g m)</span>
429 <span class="k">section</span>431 <span class="k">section</span>
430 </a>432 </a>
431 </li>433 </li>
432-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">434+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
433 <a href="/files/releases" tabindex="-1">435 <a href="/files/releases" tabindex="-1">
434-<span class="lbl">releases</span>436+<span class="lbl">releases (g r)</span>
435 <span class="k">section</span>437 <span class="k">section</span>
436 </a>438 </a>
437 </li>439 </li>
438-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">440+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
439 <a href="/files/actions" tabindex="-1">441 <a href="/files/actions" tabindex="-1">
440-<span class="lbl">actions</span>442+<span class="lbl">actions (g a)</span>
441 <span class="k">section</span>443 <span class="k">section</span>
442 </a>444 </a>
443 </li>445 </li>
@@ -490,7 +492,9 @@
490 k-filter from:body -> ermite.focusFilter();492 k-filter from:body -> ermite.focusFilter();
491 k-gh from:body -> ermite.go('.brand');493 k-gh from:body -> ermite.go('.brand');
492 k-s from:body -> ermite.tab('s');494 k-s from:body -> ermite.tab('s');
493- k-t from:body -> ermite.tab('t');495+ k-f from:body -> ermite.tab('f');
496+ k-b from:body -> ermite.tab('b');
497+ k-a from:body -> ermite.tab('a');
494 k-c from:body -> ermite.tab('c');498 k-c from:body -> ermite.tab('c');
495 k-r from:body -> ermite.tab('r');499 k-r from:body -> ermite.tab('r');
496 k-m from:body -> ermite.tab('m');500 k-m from:body -> ermite.tab('m');
@@ -506,7 +510,6 @@
506 k-permalink from:body -> ermite.permalink();510 k-permalink from:body -> ermite.permalink();
507 k-merge from:body -> window.ermiteMR?.openMerge();511 k-merge from:body -> window.ermiteMR?.openMerge();
508 k-read from:body -> window.ermiteMR?.markRead();512 k-read from:body -> window.ermiteMR?.markRead();
509- k-gf from:body -> window.ermiteMR?.focusFiles();
510 k-keys from:body -> ermite.toggleKeys()">513 k-keys from:body -> ermite.toggleKeys()">
511 </div>514 </div>
512 </body>515 </body>
M internal/app/testdata/web/commit-big.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -278,14 +278,16 @@
278278 </div>
279279 <div>
280280 <dt>
281-<kbd>s</kbd>
282-<kbd>t</kbd>
283-<kbd>c</kbd>
284-<kbd>r</kbd>
285-<kbd>m</kbd>
286-<kbd>i</kbd>
281+<kbd>g s</kbd>
282+<kbd>g f</kbd>
283+<kbd>g c</kbd>
284+<kbd>g b</kbd>
285+<kbd>g m</kbd>
286+<kbd>g i</kbd>
287+<kbd>g r</kbd>
288+<kbd>g a</kbd>
287289 </dt>
288-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
290+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
289291 </div>
290292 <div>
291293 <dt>
@@ -384,45 +386,45 @@
384386 <span class="k">go</span>
385387 </a>
386388 </li>
387-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
389+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
388390 <a href="/diffs" tabindex="-1">
389-<span class="lbl">summary</span>
391+<span class="lbl">summary (g s)</span>
390392 <span class="k">section</span>
391393 </a>
392394 </li>
393-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
395+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
394396 <a href="/diffs/tree/main" tabindex="-1">
395-<span class="lbl">files</span>
397+<span class="lbl">files (g f)</span>
396398 <span class="k">section</span>
397399 </a>
398400 </li>
399-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
401+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
400402 <a href="/diffs/commits/main" tabindex="-1">
401-<span class="lbl">commits</span>
403+<span class="lbl">commits (g c)</span>
402404 <span class="k">section</span>
403405 </a>
404406 </li>
405-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
407+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
406408 <a href="/diffs/refs" tabindex="-1">
407-<span class="lbl">branches &amp; tags</span>
409+<span class="lbl">branches &amp; tags (g b)</span>
408410 <span class="k">section</span>
409411 </a>
410412 </li>
411-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
413+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
412414 <a href="/diffs/merge-requests" tabindex="-1">
413-<span class="lbl">merge requests</span>
415+<span class="lbl">merge requests (g m)</span>
414416 <span class="k">section</span>
415417 </a>
416418 </li>
417-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
419+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
418420 <a href="/diffs/releases" tabindex="-1">
419-<span class="lbl">releases</span>
421+<span class="lbl">releases (g r)</span>
420422 <span class="k">section</span>
421423 </a>
422424 </li>
423-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
425+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
424426 <a href="/diffs/actions" tabindex="-1">
425-<span class="lbl">actions</span>
427+<span class="lbl">actions (g a)</span>
426428 <span class="k">section</span>
427429 </a>
428430 </li>
@@ -475,7 +477,9 @@
475477 k-filter from:body -> ermite.focusFilter();
476478 k-gh from:body -> ermite.go('.brand');
477479 k-s from:body -> ermite.tab('s');
478- k-t from:body -> ermite.tab('t');
480+ k-f from:body -> ermite.tab('f');
481+ k-b from:body -> ermite.tab('b');
482+ k-a from:body -> ermite.tab('a');
479483 k-c from:body -> ermite.tab('c');
480484 k-r from:body -> ermite.tab('r');
481485 k-m from:body -> ermite.tab('m');
@@ -491,7 +495,6 @@
491495 k-permalink from:body -> ermite.permalink();
492496 k-merge from:body -> window.ermiteMR?.openMerge();
493497 k-read from:body -> window.ermiteMR?.markRead();
494- k-gf from:body -> window.ermiteMR?.focusFiles();
495498 k-keys from:body -> ermite.toggleKeys()">
496499 </div>
497500 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -278,14 +278,16 @@
278 </div>278 </div>
279 <div>279 <div>
280 <dt>280 <dt>
281-<kbd>s</kbd>281+<kbd>g s</kbd>
282-<kbd>t</kbd>282+<kbd>g f</kbd>
283-<kbd>c</kbd>283+<kbd>g c</kbd>
284-<kbd>r</kbd>284+<kbd>g b</kbd>
285-<kbd>m</kbd>285+<kbd>g m</kbd>
286-<kbd>i</kbd>286+<kbd>g i</kbd>
287+<kbd>g r</kbd>
288+<kbd>g a</kbd>
287 </dt>289 </dt>
288-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>290+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
289 </div>291 </div>
290 <div>292 <div>
291 <dt>293 <dt>
@@ -384,45 +386,45 @@
384 <span class="k">go</span>386 <span class="k">go</span>
385 </a>387 </a>
386 </li>388 </li>
387-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">389+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
388 <a href="/diffs" tabindex="-1">390 <a href="/diffs" tabindex="-1">
389-<span class="lbl">summary</span>391+<span class="lbl">summary (g s)</span>
390 <span class="k">section</span>392 <span class="k">section</span>
391 </a>393 </a>
392 </li>394 </li>
393-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">395+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
394 <a href="/diffs/tree/main" tabindex="-1">396 <a href="/diffs/tree/main" tabindex="-1">
395-<span class="lbl">files</span>397+<span class="lbl">files (g f)</span>
396 <span class="k">section</span>398 <span class="k">section</span>
397 </a>399 </a>
398 </li>400 </li>
399-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">401+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
400 <a href="/diffs/commits/main" tabindex="-1">402 <a href="/diffs/commits/main" tabindex="-1">
401-<span class="lbl">commits</span>403+<span class="lbl">commits (g c)</span>
402 <span class="k">section</span>404 <span class="k">section</span>
403 </a>405 </a>
404 </li>406 </li>
405-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">407+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
406 <a href="/diffs/refs" tabindex="-1">408 <a href="/diffs/refs" tabindex="-1">
407-<span class="lbl">branches &amp; tags</span>409+<span class="lbl">branches &amp; tags (g b)</span>
408 <span class="k">section</span>410 <span class="k">section</span>
409 </a>411 </a>
410 </li>412 </li>
411-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">413+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
412 <a href="/diffs/merge-requests" tabindex="-1">414 <a href="/diffs/merge-requests" tabindex="-1">
413-<span class="lbl">merge requests</span>415+<span class="lbl">merge requests (g m)</span>
414 <span class="k">section</span>416 <span class="k">section</span>
415 </a>417 </a>
416 </li>418 </li>
417-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">419+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
418 <a href="/diffs/releases" tabindex="-1">420 <a href="/diffs/releases" tabindex="-1">
419-<span class="lbl">releases</span>421+<span class="lbl">releases (g r)</span>
420 <span class="k">section</span>422 <span class="k">section</span>
421 </a>423 </a>
422 </li>424 </li>
423-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">425+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
424 <a href="/diffs/actions" tabindex="-1">426 <a href="/diffs/actions" tabindex="-1">
425-<span class="lbl">actions</span>427+<span class="lbl">actions (g a)</span>
426 <span class="k">section</span>428 <span class="k">section</span>
427 </a>429 </a>
428 </li>430 </li>
@@ -475,7 +477,9 @@
475 k-filter from:body -> ermite.focusFilter();477 k-filter from:body -> ermite.focusFilter();
476 k-gh from:body -> ermite.go('.brand');478 k-gh from:body -> ermite.go('.brand');
477 k-s from:body -> ermite.tab('s');479 k-s from:body -> ermite.tab('s');
478- k-t from:body -> ermite.tab('t');480+ k-f from:body -> ermite.tab('f');
481+ k-b from:body -> ermite.tab('b');
482+ k-a from:body -> ermite.tab('a');
479 k-c from:body -> ermite.tab('c');483 k-c from:body -> ermite.tab('c');
480 k-r from:body -> ermite.tab('r');484 k-r from:body -> ermite.tab('r');
481 k-m from:body -> ermite.tab('m');485 k-m from:body -> ermite.tab('m');
@@ -491,7 +495,6 @@
491 k-permalink from:body -> ermite.permalink();495 k-permalink from:body -> ermite.permalink();
492 k-merge from:body -> window.ermiteMR?.openMerge();496 k-merge from:body -> window.ermiteMR?.openMerge();
493 k-read from:body -> window.ermiteMR?.markRead();497 k-read from:body -> window.ermiteMR?.markRead();
494- k-gf from:body -> window.ermiteMR?.focusFiles();
495 k-keys from:body -> ermite.toggleKeys()">498 k-keys from:body -> ermite.toggleKeys()">
496 </div>499 </div>
497 </body>500 </body>
M internal/app/testdata/web/commit-binary.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -269,14 +269,16 @@
269269 </div>
270270 <div>
271271 <dt>
272-<kbd>s</kbd>
273-<kbd>t</kbd>
274-<kbd>c</kbd>
275-<kbd>r</kbd>
276-<kbd>m</kbd>
277-<kbd>i</kbd>
272+<kbd>g s</kbd>
273+<kbd>g f</kbd>
274+<kbd>g c</kbd>
275+<kbd>g b</kbd>
276+<kbd>g m</kbd>
277+<kbd>g i</kbd>
278+<kbd>g r</kbd>
279+<kbd>g a</kbd>
278280 </dt>
279-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
281+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
280282 </div>
281283 <div>
282284 <dt>
@@ -375,45 +377,45 @@
375377 <span class="k">go</span>
376378 </a>
377379 </li>
378-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
380+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
379381 <a href="/diffs" tabindex="-1">
380-<span class="lbl">summary</span>
382+<span class="lbl">summary (g s)</span>
381383 <span class="k">section</span>
382384 </a>
383385 </li>
384-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
386+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
385387 <a href="/diffs/tree/main" tabindex="-1">
386-<span class="lbl">files</span>
388+<span class="lbl">files (g f)</span>
387389 <span class="k">section</span>
388390 </a>
389391 </li>
390-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
392+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
391393 <a href="/diffs/commits/main" tabindex="-1">
392-<span class="lbl">commits</span>
394+<span class="lbl">commits (g c)</span>
393395 <span class="k">section</span>
394396 </a>
395397 </li>
396-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
398+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
397399 <a href="/diffs/refs" tabindex="-1">
398-<span class="lbl">branches &amp; tags</span>
400+<span class="lbl">branches &amp; tags (g b)</span>
399401 <span class="k">section</span>
400402 </a>
401403 </li>
402-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
404+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
403405 <a href="/diffs/merge-requests" tabindex="-1">
404-<span class="lbl">merge requests</span>
406+<span class="lbl">merge requests (g m)</span>
405407 <span class="k">section</span>
406408 </a>
407409 </li>
408-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
410+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
409411 <a href="/diffs/releases" tabindex="-1">
410-<span class="lbl">releases</span>
412+<span class="lbl">releases (g r)</span>
411413 <span class="k">section</span>
412414 </a>
413415 </li>
414-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
416+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
415417 <a href="/diffs/actions" tabindex="-1">
416-<span class="lbl">actions</span>
418+<span class="lbl">actions (g a)</span>
417419 <span class="k">section</span>
418420 </a>
419421 </li>
@@ -466,7 +468,9 @@
466468 k-filter from:body -> ermite.focusFilter();
467469 k-gh from:body -> ermite.go('.brand');
468470 k-s from:body -> ermite.tab('s');
469- k-t from:body -> ermite.tab('t');
471+ k-f from:body -> ermite.tab('f');
472+ k-b from:body -> ermite.tab('b');
473+ k-a from:body -> ermite.tab('a');
470474 k-c from:body -> ermite.tab('c');
471475 k-r from:body -> ermite.tab('r');
472476 k-m from:body -> ermite.tab('m');
@@ -482,7 +486,6 @@
482486 k-permalink from:body -> ermite.permalink();
483487 k-merge from:body -> window.ermiteMR?.openMerge();
484488 k-read from:body -> window.ermiteMR?.markRead();
485- k-gf from:body -> window.ermiteMR?.focusFiles();
486489 k-keys from:body -> ermite.toggleKeys()">
487490 </div>
488491 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -269,14 +269,16 @@
269 </div>269 </div>
270 <div>270 <div>
271 <dt>271 <dt>
272-<kbd>s</kbd>272+<kbd>g s</kbd>
273-<kbd>t</kbd>273+<kbd>g f</kbd>
274-<kbd>c</kbd>274+<kbd>g c</kbd>
275-<kbd>r</kbd>275+<kbd>g b</kbd>
276-<kbd>m</kbd>276+<kbd>g m</kbd>
277-<kbd>i</kbd>277+<kbd>g i</kbd>
278+<kbd>g r</kbd>
279+<kbd>g a</kbd>
278 </dt>280 </dt>
279-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>281+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
280 </div>282 </div>
281 <div>283 <div>
282 <dt>284 <dt>
@@ -375,45 +377,45 @@
375 <span class="k">go</span>377 <span class="k">go</span>
376 </a>378 </a>
377 </li>379 </li>
378-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">380+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
379 <a href="/diffs" tabindex="-1">381 <a href="/diffs" tabindex="-1">
380-<span class="lbl">summary</span>382+<span class="lbl">summary (g s)</span>
381 <span class="k">section</span>383 <span class="k">section</span>
382 </a>384 </a>
383 </li>385 </li>
384-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">386+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
385 <a href="/diffs/tree/main" tabindex="-1">387 <a href="/diffs/tree/main" tabindex="-1">
386-<span class="lbl">files</span>388+<span class="lbl">files (g f)</span>
387 <span class="k">section</span>389 <span class="k">section</span>
388 </a>390 </a>
389 </li>391 </li>
390-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">392+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
391 <a href="/diffs/commits/main" tabindex="-1">393 <a href="/diffs/commits/main" tabindex="-1">
392-<span class="lbl">commits</span>394+<span class="lbl">commits (g c)</span>
393 <span class="k">section</span>395 <span class="k">section</span>
394 </a>396 </a>
395 </li>397 </li>
396-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">398+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
397 <a href="/diffs/refs" tabindex="-1">399 <a href="/diffs/refs" tabindex="-1">
398-<span class="lbl">branches &amp; tags</span>400+<span class="lbl">branches &amp; tags (g b)</span>
399 <span class="k">section</span>401 <span class="k">section</span>
400 </a>402 </a>
401 </li>403 </li>
402-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">404+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
403 <a href="/diffs/merge-requests" tabindex="-1">405 <a href="/diffs/merge-requests" tabindex="-1">
404-<span class="lbl">merge requests</span>406+<span class="lbl">merge requests (g m)</span>
405 <span class="k">section</span>407 <span class="k">section</span>
406 </a>408 </a>
407 </li>409 </li>
408-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">410+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
409 <a href="/diffs/releases" tabindex="-1">411 <a href="/diffs/releases" tabindex="-1">
410-<span class="lbl">releases</span>412+<span class="lbl">releases (g r)</span>
411 <span class="k">section</span>413 <span class="k">section</span>
412 </a>414 </a>
413 </li>415 </li>
414-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">416+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
415 <a href="/diffs/actions" tabindex="-1">417 <a href="/diffs/actions" tabindex="-1">
416-<span class="lbl">actions</span>418+<span class="lbl">actions (g a)</span>
417 <span class="k">section</span>419 <span class="k">section</span>
418 </a>420 </a>
419 </li>421 </li>
@@ -466,7 +468,9 @@
466 k-filter from:body -> ermite.focusFilter();468 k-filter from:body -> ermite.focusFilter();
467 k-gh from:body -> ermite.go('.brand');469 k-gh from:body -> ermite.go('.brand');
468 k-s from:body -> ermite.tab('s');470 k-s from:body -> ermite.tab('s');
469- k-t from:body -> ermite.tab('t');471+ k-f from:body -> ermite.tab('f');
472+ k-b from:body -> ermite.tab('b');
473+ k-a from:body -> ermite.tab('a');
470 k-c from:body -> ermite.tab('c');474 k-c from:body -> ermite.tab('c');
471 k-r from:body -> ermite.tab('r');475 k-r from:body -> ermite.tab('r');
472 k-m from:body -> ermite.tab('m');476 k-m from:body -> ermite.tab('m');
@@ -482,7 +486,6 @@
482 k-permalink from:body -> ermite.permalink();486 k-permalink from:body -> ermite.permalink();
483 k-merge from:body -> window.ermiteMR?.openMerge();487 k-merge from:body -> window.ermiteMR?.openMerge();
484 k-read from:body -> window.ermiteMR?.markRead();488 k-read from:body -> window.ermiteMR?.markRead();
485- k-gf from:body -> window.ermiteMR?.focusFiles();
486 k-keys from:body -> ermite.toggleKeys()">489 k-keys from:body -> ermite.toggleKeys()">
487 </div>490 </div>
488 </body>491 </body>
M internal/app/testdata/web/commit-merge.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -311,14 +311,16 @@
311311 </div>
312312 <div>
313313 <dt>
314-<kbd>s</kbd>
315-<kbd>t</kbd>
316-<kbd>c</kbd>
317-<kbd>r</kbd>
318-<kbd>m</kbd>
319-<kbd>i</kbd>
314+<kbd>g s</kbd>
315+<kbd>g f</kbd>
316+<kbd>g c</kbd>
317+<kbd>g b</kbd>
318+<kbd>g m</kbd>
319+<kbd>g i</kbd>
320+<kbd>g r</kbd>
321+<kbd>g a</kbd>
320322 </dt>
321-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
323+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
322324 </div>
323325 <div>
324326 <dt>
@@ -417,45 +419,45 @@
417419 <span class="k">go</span>
418420 </a>
419421 </li>
420-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
422+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
421423 <a href="/diffs" tabindex="-1">
422-<span class="lbl">summary</span>
424+<span class="lbl">summary (g s)</span>
423425 <span class="k">section</span>
424426 </a>
425427 </li>
426-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
428+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
427429 <a href="/diffs/tree/main" tabindex="-1">
428-<span class="lbl">files</span>
430+<span class="lbl">files (g f)</span>
429431 <span class="k">section</span>
430432 </a>
431433 </li>
432-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
434+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
433435 <a href="/diffs/commits/main" tabindex="-1">
434-<span class="lbl">commits</span>
436+<span class="lbl">commits (g c)</span>
435437 <span class="k">section</span>
436438 </a>
437439 </li>
438-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
440+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
439441 <a href="/diffs/refs" tabindex="-1">
440-<span class="lbl">branches &amp; tags</span>
442+<span class="lbl">branches &amp; tags (g b)</span>
441443 <span class="k">section</span>
442444 </a>
443445 </li>
444-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
446+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
445447 <a href="/diffs/merge-requests" tabindex="-1">
446-<span class="lbl">merge requests</span>
448+<span class="lbl">merge requests (g m)</span>
447449 <span class="k">section</span>
448450 </a>
449451 </li>
450-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
452+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
451453 <a href="/diffs/releases" tabindex="-1">
452-<span class="lbl">releases</span>
454+<span class="lbl">releases (g r)</span>
453455 <span class="k">section</span>
454456 </a>
455457 </li>
456-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
458+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
457459 <a href="/diffs/actions" tabindex="-1">
458-<span class="lbl">actions</span>
460+<span class="lbl">actions (g a)</span>
459461 <span class="k">section</span>
460462 </a>
461463 </li>
@@ -508,7 +510,9 @@
508510 k-filter from:body -> ermite.focusFilter();
509511 k-gh from:body -> ermite.go('.brand');
510512 k-s from:body -> ermite.tab('s');
511- k-t from:body -> ermite.tab('t');
513+ k-f from:body -> ermite.tab('f');
514+ k-b from:body -> ermite.tab('b');
515+ k-a from:body -> ermite.tab('a');
512516 k-c from:body -> ermite.tab('c');
513517 k-r from:body -> ermite.tab('r');
514518 k-m from:body -> ermite.tab('m');
@@ -524,7 +528,6 @@
524528 k-permalink from:body -> ermite.permalink();
525529 k-merge from:body -> window.ermiteMR?.openMerge();
526530 k-read from:body -> window.ermiteMR?.markRead();
527- k-gf from:body -> window.ermiteMR?.focusFiles();
528531 k-keys from:body -> ermite.toggleKeys()">
529532 </div>
530533 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -311,14 +311,16 @@
311 </div>311 </div>
312 <div>312 <div>
313 <dt>313 <dt>
314-<kbd>s</kbd>314+<kbd>g s</kbd>
315-<kbd>t</kbd>315+<kbd>g f</kbd>
316-<kbd>c</kbd>316+<kbd>g c</kbd>
317-<kbd>r</kbd>317+<kbd>g b</kbd>
318-<kbd>m</kbd>318+<kbd>g m</kbd>
319-<kbd>i</kbd>319+<kbd>g i</kbd>
320+<kbd>g r</kbd>
321+<kbd>g a</kbd>
320 </dt>322 </dt>
321-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>323+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
322 </div>324 </div>
323 <div>325 <div>
324 <dt>326 <dt>
@@ -417,45 +419,45 @@
417 <span class="k">go</span>419 <span class="k">go</span>
418 </a>420 </a>
419 </li>421 </li>
420-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">422+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
421 <a href="/diffs" tabindex="-1">423 <a href="/diffs" tabindex="-1">
422-<span class="lbl">summary</span>424+<span class="lbl">summary (g s)</span>
423 <span class="k">section</span>425 <span class="k">section</span>
424 </a>426 </a>
425 </li>427 </li>
426-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">428+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
427 <a href="/diffs/tree/main" tabindex="-1">429 <a href="/diffs/tree/main" tabindex="-1">
428-<span class="lbl">files</span>430+<span class="lbl">files (g f)</span>
429 <span class="k">section</span>431 <span class="k">section</span>
430 </a>432 </a>
431 </li>433 </li>
432-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">434+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
433 <a href="/diffs/commits/main" tabindex="-1">435 <a href="/diffs/commits/main" tabindex="-1">
434-<span class="lbl">commits</span>436+<span class="lbl">commits (g c)</span>
435 <span class="k">section</span>437 <span class="k">section</span>
436 </a>438 </a>
437 </li>439 </li>
438-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">440+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
439 <a href="/diffs/refs" tabindex="-1">441 <a href="/diffs/refs" tabindex="-1">
440-<span class="lbl">branches &amp; tags</span>442+<span class="lbl">branches &amp; tags (g b)</span>
441 <span class="k">section</span>443 <span class="k">section</span>
442 </a>444 </a>
443 </li>445 </li>
444-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">446+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
445 <a href="/diffs/merge-requests" tabindex="-1">447 <a href="/diffs/merge-requests" tabindex="-1">
446-<span class="lbl">merge requests</span>448+<span class="lbl">merge requests (g m)</span>
447 <span class="k">section</span>449 <span class="k">section</span>
448 </a>450 </a>
449 </li>451 </li>
450-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">452+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
451 <a href="/diffs/releases" tabindex="-1">453 <a href="/diffs/releases" tabindex="-1">
452-<span class="lbl">releases</span>454+<span class="lbl">releases (g r)</span>
453 <span class="k">section</span>455 <span class="k">section</span>
454 </a>456 </a>
455 </li>457 </li>
456-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">458+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
457 <a href="/diffs/actions" tabindex="-1">459 <a href="/diffs/actions" tabindex="-1">
458-<span class="lbl">actions</span>460+<span class="lbl">actions (g a)</span>
459 <span class="k">section</span>461 <span class="k">section</span>
460 </a>462 </a>
461 </li>463 </li>
@@ -508,7 +510,9 @@
508 k-filter from:body -> ermite.focusFilter();510 k-filter from:body -> ermite.focusFilter();
509 k-gh from:body -> ermite.go('.brand');511 k-gh from:body -> ermite.go('.brand');
510 k-s from:body -> ermite.tab('s');512 k-s from:body -> ermite.tab('s');
511- k-t from:body -> ermite.tab('t');513+ k-f from:body -> ermite.tab('f');
514+ k-b from:body -> ermite.tab('b');
515+ k-a from:body -> ermite.tab('a');
512 k-c from:body -> ermite.tab('c');516 k-c from:body -> ermite.tab('c');
513 k-r from:body -> ermite.tab('r');517 k-r from:body -> ermite.tab('r');
514 k-m from:body -> ermite.tab('m');518 k-m from:body -> ermite.tab('m');
@@ -524,7 +528,6 @@
524 k-permalink from:body -> ermite.permalink();528 k-permalink from:body -> ermite.permalink();
525 k-merge from:body -> window.ermiteMR?.openMerge();529 k-merge from:body -> window.ermiteMR?.openMerge();
526 k-read from:body -> window.ermiteMR?.markRead();530 k-read from:body -> window.ermiteMR?.markRead();
527- k-gf from:body -> window.ermiteMR?.focusFiles();
528 k-keys from:body -> ermite.toggleKeys()">531 k-keys from:body -> ermite.toggleKeys()">
529 </div>532 </div>
530 </body>533 </body>
M internal/app/testdata/web/commit-modify-split.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -434,14 +434,16 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
434434 </div>
435435 <div>
436436 <dt>
437-<kbd>s</kbd>
438-<kbd>t</kbd>
439-<kbd>c</kbd>
440-<kbd>r</kbd>
441-<kbd>m</kbd>
442-<kbd>i</kbd>
437+<kbd>g s</kbd>
438+<kbd>g f</kbd>
439+<kbd>g c</kbd>
440+<kbd>g b</kbd>
441+<kbd>g m</kbd>
442+<kbd>g i</kbd>
443+<kbd>g r</kbd>
444+<kbd>g a</kbd>
443445 </dt>
444-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
446+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
445447 </div>
446448 <div>
447449 <dt>
@@ -540,45 +542,45 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
540542 <span class="k">go</span>
541543 </a>
542544 </li>
543-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
545+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
544546 <a href="/diffs" tabindex="-1">
545-<span class="lbl">summary</span>
547+<span class="lbl">summary (g s)</span>
546548 <span class="k">section</span>
547549 </a>
548550 </li>
549-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
551+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
550552 <a href="/diffs/tree/main" tabindex="-1">
551-<span class="lbl">files</span>
553+<span class="lbl">files (g f)</span>
552554 <span class="k">section</span>
553555 </a>
554556 </li>
555-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
557+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
556558 <a href="/diffs/commits/main" tabindex="-1">
557-<span class="lbl">commits</span>
559+<span class="lbl">commits (g c)</span>
558560 <span class="k">section</span>
559561 </a>
560562 </li>
561-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
563+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
562564 <a href="/diffs/refs" tabindex="-1">
563-<span class="lbl">branches &amp; tags</span>
565+<span class="lbl">branches &amp; tags (g b)</span>
564566 <span class="k">section</span>
565567 </a>
566568 </li>
567-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
569+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
568570 <a href="/diffs/merge-requests" tabindex="-1">
569-<span class="lbl">merge requests</span>
571+<span class="lbl">merge requests (g m)</span>
570572 <span class="k">section</span>
571573 </a>
572574 </li>
573-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
575+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
574576 <a href="/diffs/releases" tabindex="-1">
575-<span class="lbl">releases</span>
577+<span class="lbl">releases (g r)</span>
576578 <span class="k">section</span>
577579 </a>
578580 </li>
579-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
581+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
580582 <a href="/diffs/actions" tabindex="-1">
581-<span class="lbl">actions</span>
583+<span class="lbl">actions (g a)</span>
582584 <span class="k">section</span>
583585 </a>
584586 </li>
@@ -631,7 +633,9 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
631633 k-filter from:body -> ermite.focusFilter();
632634 k-gh from:body -> ermite.go('.brand');
633635 k-s from:body -> ermite.tab('s');
634- k-t from:body -> ermite.tab('t');
636+ k-f from:body -> ermite.tab('f');
637+ k-b from:body -> ermite.tab('b');
638+ k-a from:body -> ermite.tab('a');
635639 k-c from:body -> ermite.tab('c');
636640 k-r from:body -> ermite.tab('r');
637641 k-m from:body -> ermite.tab('m');
@@ -647,7 +651,6 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
647651 k-permalink from:body -> ermite.permalink();
648652 k-merge from:body -> window.ermiteMR?.openMerge();
649653 k-read from:body -> window.ermiteMR?.markRead();
650- k-gf from:body -> window.ermiteMR?.focusFiles();
651654 k-keys from:body -> ermite.toggleKeys()">
652655 </div>
653656 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -434,14 +434,16 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
434 </div>434 </div>
435 <div>435 <div>
436 <dt>436 <dt>
437-<kbd>s</kbd>437+<kbd>g s</kbd>
438-<kbd>t</kbd>438+<kbd>g f</kbd>
439-<kbd>c</kbd>439+<kbd>g c</kbd>
440-<kbd>r</kbd>440+<kbd>g b</kbd>
441-<kbd>m</kbd>441+<kbd>g m</kbd>
442-<kbd>i</kbd>442+<kbd>g i</kbd>
443+<kbd>g r</kbd>
444+<kbd>g a</kbd>
443 </dt>445 </dt>
444-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>446+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
445 </div>447 </div>
446 <div>448 <div>
447 <dt>449 <dt>
@@ -540,45 +542,45 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
540 <span class="k">go</span>542 <span class="k">go</span>
541 </a>543 </a>
542 </li>544 </li>
543-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">545+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
544 <a href="/diffs" tabindex="-1">546 <a href="/diffs" tabindex="-1">
545-<span class="lbl">summary</span>547+<span class="lbl">summary (g s)</span>
546 <span class="k">section</span>548 <span class="k">section</span>
547 </a>549 </a>
548 </li>550 </li>
549-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">551+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
550 <a href="/diffs/tree/main" tabindex="-1">552 <a href="/diffs/tree/main" tabindex="-1">
551-<span class="lbl">files</span>553+<span class="lbl">files (g f)</span>
552 <span class="k">section</span>554 <span class="k">section</span>
553 </a>555 </a>
554 </li>556 </li>
555-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">557+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
556 <a href="/diffs/commits/main" tabindex="-1">558 <a href="/diffs/commits/main" tabindex="-1">
557-<span class="lbl">commits</span>559+<span class="lbl">commits (g c)</span>
558 <span class="k">section</span>560 <span class="k">section</span>
559 </a>561 </a>
560 </li>562 </li>
561-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">563+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
562 <a href="/diffs/refs" tabindex="-1">564 <a href="/diffs/refs" tabindex="-1">
563-<span class="lbl">branches &amp; tags</span>565+<span class="lbl">branches &amp; tags (g b)</span>
564 <span class="k">section</span>566 <span class="k">section</span>
565 </a>567 </a>
566 </li>568 </li>
567-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">569+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
568 <a href="/diffs/merge-requests" tabindex="-1">570 <a href="/diffs/merge-requests" tabindex="-1">
569-<span class="lbl">merge requests</span>571+<span class="lbl">merge requests (g m)</span>
570 <span class="k">section</span>572 <span class="k">section</span>
571 </a>573 </a>
572 </li>574 </li>
573-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">575+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
574 <a href="/diffs/releases" tabindex="-1">576 <a href="/diffs/releases" tabindex="-1">
575-<span class="lbl">releases</span>577+<span class="lbl">releases (g r)</span>
576 <span class="k">section</span>578 <span class="k">section</span>
577 </a>579 </a>
578 </li>580 </li>
579-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">581+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
580 <a href="/diffs/actions" tabindex="-1">582 <a href="/diffs/actions" tabindex="-1">
581-<span class="lbl">actions</span>583+<span class="lbl">actions (g a)</span>
582 <span class="k">section</span>584 <span class="k">section</span>
583 </a>585 </a>
584 </li>586 </li>
@@ -631,7 +633,9 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
631 k-filter from:body -> ermite.focusFilter();633 k-filter from:body -> ermite.focusFilter();
632 k-gh from:body -> ermite.go('.brand');634 k-gh from:body -> ermite.go('.brand');
633 k-s from:body -> ermite.tab('s');635 k-s from:body -> ermite.tab('s');
634- k-t from:body -> ermite.tab('t');636+ k-f from:body -> ermite.tab('f');
637+ k-b from:body -> ermite.tab('b');
638+ k-a from:body -> ermite.tab('a');
635 k-c from:body -> ermite.tab('c');639 k-c from:body -> ermite.tab('c');
636 k-r from:body -> ermite.tab('r');640 k-r from:body -> ermite.tab('r');
637 k-m from:body -> ermite.tab('m');641 k-m from:body -> ermite.tab('m');
@@ -647,7 +651,6 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
647 k-permalink from:body -> ermite.permalink();651 k-permalink from:body -> ermite.permalink();
648 k-merge from:body -> window.ermiteMR?.openMerge();652 k-merge from:body -> window.ermiteMR?.openMerge();
649 k-read from:body -> window.ermiteMR?.markRead();653 k-read from:body -> window.ermiteMR?.markRead();
650- k-gf from:body -> window.ermiteMR?.focusFiles();
651 k-keys from:body -> ermite.toggleKeys()">654 k-keys from:body -> ermite.toggleKeys()">
652 </div>655 </div>
653 </body>656 </body>
M internal/app/testdata/web/commit-modify.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -434,14 +434,16 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
434434 </div>
435435 <div>
436436 <dt>
437-<kbd>s</kbd>
438-<kbd>t</kbd>
439-<kbd>c</kbd>
440-<kbd>r</kbd>
441-<kbd>m</kbd>
442-<kbd>i</kbd>
437+<kbd>g s</kbd>
438+<kbd>g f</kbd>
439+<kbd>g c</kbd>
440+<kbd>g b</kbd>
441+<kbd>g m</kbd>
442+<kbd>g i</kbd>
443+<kbd>g r</kbd>
444+<kbd>g a</kbd>
443445 </dt>
444-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
446+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
445447 </div>
446448 <div>
447449 <dt>
@@ -540,45 +542,45 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
540542 <span class="k">go</span>
541543 </a>
542544 </li>
543-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
545+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
544546 <a href="/diffs" tabindex="-1">
545-<span class="lbl">summary</span>
547+<span class="lbl">summary (g s)</span>
546548 <span class="k">section</span>
547549 </a>
548550 </li>
549-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
551+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
550552 <a href="/diffs/tree/main" tabindex="-1">
551-<span class="lbl">files</span>
553+<span class="lbl">files (g f)</span>
552554 <span class="k">section</span>
553555 </a>
554556 </li>
555-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
557+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
556558 <a href="/diffs/commits/main" tabindex="-1">
557-<span class="lbl">commits</span>
559+<span class="lbl">commits (g c)</span>
558560 <span class="k">section</span>
559561 </a>
560562 </li>
561-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
563+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
562564 <a href="/diffs/refs" tabindex="-1">
563-<span class="lbl">branches &amp; tags</span>
565+<span class="lbl">branches &amp; tags (g b)</span>
564566 <span class="k">section</span>
565567 </a>
566568 </li>
567-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
569+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
568570 <a href="/diffs/merge-requests" tabindex="-1">
569-<span class="lbl">merge requests</span>
571+<span class="lbl">merge requests (g m)</span>
570572 <span class="k">section</span>
571573 </a>
572574 </li>
573-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
575+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
574576 <a href="/diffs/releases" tabindex="-1">
575-<span class="lbl">releases</span>
577+<span class="lbl">releases (g r)</span>
576578 <span class="k">section</span>
577579 </a>
578580 </li>
579-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
581+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
580582 <a href="/diffs/actions" tabindex="-1">
581-<span class="lbl">actions</span>
583+<span class="lbl">actions (g a)</span>
582584 <span class="k">section</span>
583585 </a>
584586 </li>
@@ -631,7 +633,9 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
631633 k-filter from:body -> ermite.focusFilter();
632634 k-gh from:body -> ermite.go('.brand');
633635 k-s from:body -> ermite.tab('s');
634- k-t from:body -> ermite.tab('t');
636+ k-f from:body -> ermite.tab('f');
637+ k-b from:body -> ermite.tab('b');
638+ k-a from:body -> ermite.tab('a');
635639 k-c from:body -> ermite.tab('c');
636640 k-r from:body -> ermite.tab('r');
637641 k-m from:body -> ermite.tab('m');
@@ -647,7 +651,6 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
647651 k-permalink from:body -> ermite.permalink();
648652 k-merge from:body -> window.ermiteMR?.openMerge();
649653 k-read from:body -> window.ermiteMR?.markRead();
650- k-gf from:body -> window.ermiteMR?.focusFiles();
651654 k-keys from:body -> ermite.toggleKeys()">
652655 </div>
653656 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -434,14 +434,16 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
434 </div>434 </div>
435 <div>435 <div>
436 <dt>436 <dt>
437-<kbd>s</kbd>437+<kbd>g s</kbd>
438-<kbd>t</kbd>438+<kbd>g f</kbd>
439-<kbd>c</kbd>439+<kbd>g c</kbd>
440-<kbd>r</kbd>440+<kbd>g b</kbd>
441-<kbd>m</kbd>441+<kbd>g m</kbd>
442-<kbd>i</kbd>442+<kbd>g i</kbd>
443+<kbd>g r</kbd>
444+<kbd>g a</kbd>
443 </dt>445 </dt>
444-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>446+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
445 </div>447 </div>
446 <div>448 <div>
447 <dt>449 <dt>
@@ -540,45 +542,45 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
540 <span class="k">go</span>542 <span class="k">go</span>
541 </a>543 </a>
542 </li>544 </li>
543-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">545+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
544 <a href="/diffs" tabindex="-1">546 <a href="/diffs" tabindex="-1">
545-<span class="lbl">summary</span>547+<span class="lbl">summary (g s)</span>
546 <span class="k">section</span>548 <span class="k">section</span>
547 </a>549 </a>
548 </li>550 </li>
549-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">551+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
550 <a href="/diffs/tree/main" tabindex="-1">552 <a href="/diffs/tree/main" tabindex="-1">
551-<span class="lbl">files</span>553+<span class="lbl">files (g f)</span>
552 <span class="k">section</span>554 <span class="k">section</span>
553 </a>555 </a>
554 </li>556 </li>
555-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">557+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
556 <a href="/diffs/commits/main" tabindex="-1">558 <a href="/diffs/commits/main" tabindex="-1">
557-<span class="lbl">commits</span>559+<span class="lbl">commits (g c)</span>
558 <span class="k">section</span>560 <span class="k">section</span>
559 </a>561 </a>
560 </li>562 </li>
561-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">563+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
562 <a href="/diffs/refs" tabindex="-1">564 <a href="/diffs/refs" tabindex="-1">
563-<span class="lbl">branches &amp; tags</span>565+<span class="lbl">branches &amp; tags (g b)</span>
564 <span class="k">section</span>566 <span class="k">section</span>
565 </a>567 </a>
566 </li>568 </li>
567-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">569+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
568 <a href="/diffs/merge-requests" tabindex="-1">570 <a href="/diffs/merge-requests" tabindex="-1">
569-<span class="lbl">merge requests</span>571+<span class="lbl">merge requests (g m)</span>
570 <span class="k">section</span>572 <span class="k">section</span>
571 </a>573 </a>
572 </li>574 </li>
573-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">575+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
574 <a href="/diffs/releases" tabindex="-1">576 <a href="/diffs/releases" tabindex="-1">
575-<span class="lbl">releases</span>577+<span class="lbl">releases (g r)</span>
576 <span class="k">section</span>578 <span class="k">section</span>
577 </a>579 </a>
578 </li>580 </li>
579-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">581+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
580 <a href="/diffs/actions" tabindex="-1">582 <a href="/diffs/actions" tabindex="-1">
581-<span class="lbl">actions</span>583+<span class="lbl">actions (g a)</span>
582 <span class="k">section</span>584 <span class="k">section</span>
583 </a>585 </a>
584 </li>586 </li>
@@ -631,7 +633,9 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
631 k-filter from:body -> ermite.focusFilter();633 k-filter from:body -> ermite.focusFilter();
632 k-gh from:body -> ermite.go('.brand');634 k-gh from:body -> ermite.go('.brand');
633 k-s from:body -> ermite.tab('s');635 k-s from:body -> ermite.tab('s');
634- k-t from:body -> ermite.tab('t');636+ k-f from:body -> ermite.tab('f');
637+ k-b from:body -> ermite.tab('b');
638+ k-a from:body -> ermite.tab('a');
635 k-c from:body -> ermite.tab('c');639 k-c from:body -> ermite.tab('c');
636 k-r from:body -> ermite.tab('r');640 k-r from:body -> ermite.tab('r');
637 k-m from:body -> ermite.tab('m');641 k-m from:body -> ermite.tab('m');
@@ -647,7 +651,6 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
647 k-permalink from:body -> ermite.permalink();651 k-permalink from:body -> ermite.permalink();
648 k-merge from:body -> window.ermiteMR?.openMerge();652 k-merge from:body -> window.ermiteMR?.openMerge();
649 k-read from:body -> window.ermiteMR?.markRead();653 k-read from:body -> window.ermiteMR?.markRead();
650- k-gf from:body -> window.ermiteMR?.focusFiles();
651 k-keys from:body -> ermite.toggleKeys()">654 k-keys from:body -> ermite.toggleKeys()">
652 </div>655 </div>
653 </body>656 </body>
M internal/app/testdata/web/commit-rename.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -338,14 +338,16 @@
338338 </div>
339339 <div>
340340 <dt>
341-<kbd>s</kbd>
342-<kbd>t</kbd>
343-<kbd>c</kbd>
344-<kbd>r</kbd>
345-<kbd>m</kbd>
346-<kbd>i</kbd>
341+<kbd>g s</kbd>
342+<kbd>g f</kbd>
343+<kbd>g c</kbd>
344+<kbd>g b</kbd>
345+<kbd>g m</kbd>
346+<kbd>g i</kbd>
347+<kbd>g r</kbd>
348+<kbd>g a</kbd>
347349 </dt>
348-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
350+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
349351 </div>
350352 <div>
351353 <dt>
@@ -444,45 +446,45 @@
444446 <span class="k">go</span>
445447 </a>
446448 </li>
447-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
449+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
448450 <a href="/diffs" tabindex="-1">
449-<span class="lbl">summary</span>
451+<span class="lbl">summary (g s)</span>
450452 <span class="k">section</span>
451453 </a>
452454 </li>
453-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
455+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
454456 <a href="/diffs/tree/main" tabindex="-1">
455-<span class="lbl">files</span>
457+<span class="lbl">files (g f)</span>
456458 <span class="k">section</span>
457459 </a>
458460 </li>
459-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
461+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
460462 <a href="/diffs/commits/main" tabindex="-1">
461-<span class="lbl">commits</span>
463+<span class="lbl">commits (g c)</span>
462464 <span class="k">section</span>
463465 </a>
464466 </li>
465-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
467+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
466468 <a href="/diffs/refs" tabindex="-1">
467-<span class="lbl">branches &amp; tags</span>
469+<span class="lbl">branches &amp; tags (g b)</span>
468470 <span class="k">section</span>
469471 </a>
470472 </li>
471-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
473+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
472474 <a href="/diffs/merge-requests" tabindex="-1">
473-<span class="lbl">merge requests</span>
475+<span class="lbl">merge requests (g m)</span>
474476 <span class="k">section</span>
475477 </a>
476478 </li>
477-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
479+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
478480 <a href="/diffs/releases" tabindex="-1">
479-<span class="lbl">releases</span>
481+<span class="lbl">releases (g r)</span>
480482 <span class="k">section</span>
481483 </a>
482484 </li>
483-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
485+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
484486 <a href="/diffs/actions" tabindex="-1">
485-<span class="lbl">actions</span>
487+<span class="lbl">actions (g a)</span>
486488 <span class="k">section</span>
487489 </a>
488490 </li>
@@ -535,7 +537,9 @@
535537 k-filter from:body -> ermite.focusFilter();
536538 k-gh from:body -> ermite.go('.brand');
537539 k-s from:body -> ermite.tab('s');
538- k-t from:body -> ermite.tab('t');
540+ k-f from:body -> ermite.tab('f');
541+ k-b from:body -> ermite.tab('b');
542+ k-a from:body -> ermite.tab('a');
539543 k-c from:body -> ermite.tab('c');
540544 k-r from:body -> ermite.tab('r');
541545 k-m from:body -> ermite.tab('m');
@@ -551,7 +555,6 @@
551555 k-permalink from:body -> ermite.permalink();
552556 k-merge from:body -> window.ermiteMR?.openMerge();
553557 k-read from:body -> window.ermiteMR?.markRead();
554- k-gf from:body -> window.ermiteMR?.focusFiles();
555558 k-keys from:body -> ermite.toggleKeys()">
556559 </div>
557560 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -338,14 +338,16 @@
338 </div>338 </div>
339 <div>339 <div>
340 <dt>340 <dt>
341-<kbd>s</kbd>341+<kbd>g s</kbd>
342-<kbd>t</kbd>342+<kbd>g f</kbd>
343-<kbd>c</kbd>343+<kbd>g c</kbd>
344-<kbd>r</kbd>344+<kbd>g b</kbd>
345-<kbd>m</kbd>345+<kbd>g m</kbd>
346-<kbd>i</kbd>346+<kbd>g i</kbd>
347+<kbd>g r</kbd>
348+<kbd>g a</kbd>
347 </dt>349 </dt>
348-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>350+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
349 </div>351 </div>
350 <div>352 <div>
351 <dt>353 <dt>
@@ -444,45 +446,45 @@
444 <span class="k">go</span>446 <span class="k">go</span>
445 </a>447 </a>
446 </li>448 </li>
447-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">449+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
448 <a href="/diffs" tabindex="-1">450 <a href="/diffs" tabindex="-1">
449-<span class="lbl">summary</span>451+<span class="lbl">summary (g s)</span>
450 <span class="k">section</span>452 <span class="k">section</span>
451 </a>453 </a>
452 </li>454 </li>
453-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">455+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
454 <a href="/diffs/tree/main" tabindex="-1">456 <a href="/diffs/tree/main" tabindex="-1">
455-<span class="lbl">files</span>457+<span class="lbl">files (g f)</span>
456 <span class="k">section</span>458 <span class="k">section</span>
457 </a>459 </a>
458 </li>460 </li>
459-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">461+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
460 <a href="/diffs/commits/main" tabindex="-1">462 <a href="/diffs/commits/main" tabindex="-1">
461-<span class="lbl">commits</span>463+<span class="lbl">commits (g c)</span>
462 <span class="k">section</span>464 <span class="k">section</span>
463 </a>465 </a>
464 </li>466 </li>
465-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">467+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
466 <a href="/diffs/refs" tabindex="-1">468 <a href="/diffs/refs" tabindex="-1">
467-<span class="lbl">branches &amp; tags</span>469+<span class="lbl">branches &amp; tags (g b)</span>
468 <span class="k">section</span>470 <span class="k">section</span>
469 </a>471 </a>
470 </li>472 </li>
471-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">473+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
472 <a href="/diffs/merge-requests" tabindex="-1">474 <a href="/diffs/merge-requests" tabindex="-1">
473-<span class="lbl">merge requests</span>475+<span class="lbl">merge requests (g m)</span>
474 <span class="k">section</span>476 <span class="k">section</span>
475 </a>477 </a>
476 </li>478 </li>
477-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">479+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
478 <a href="/diffs/releases" tabindex="-1">480 <a href="/diffs/releases" tabindex="-1">
479-<span class="lbl">releases</span>481+<span class="lbl">releases (g r)</span>
480 <span class="k">section</span>482 <span class="k">section</span>
481 </a>483 </a>
482 </li>484 </li>
483-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">485+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
484 <a href="/diffs/actions" tabindex="-1">486 <a href="/diffs/actions" tabindex="-1">
485-<span class="lbl">actions</span>487+<span class="lbl">actions (g a)</span>
486 <span class="k">section</span>488 <span class="k">section</span>
487 </a>489 </a>
488 </li>490 </li>
@@ -535,7 +537,9 @@
535 k-filter from:body -> ermite.focusFilter();537 k-filter from:body -> ermite.focusFilter();
536 k-gh from:body -> ermite.go('.brand');538 k-gh from:body -> ermite.go('.brand');
537 k-s from:body -> ermite.tab('s');539 k-s from:body -> ermite.tab('s');
538- k-t from:body -> ermite.tab('t');540+ k-f from:body -> ermite.tab('f');
541+ k-b from:body -> ermite.tab('b');
542+ k-a from:body -> ermite.tab('a');
539 k-c from:body -> ermite.tab('c');543 k-c from:body -> ermite.tab('c');
540 k-r from:body -> ermite.tab('r');544 k-r from:body -> ermite.tab('r');
541 k-m from:body -> ermite.tab('m');545 k-m from:body -> ermite.tab('m');
@@ -551,7 +555,6 @@
551 k-permalink from:body -> ermite.permalink();555 k-permalink from:body -> ermite.permalink();
552 k-merge from:body -> window.ermiteMR?.openMerge();556 k-merge from:body -> window.ermiteMR?.openMerge();
553 k-read from:body -> window.ermiteMR?.markRead();557 k-read from:body -> window.ermiteMR?.markRead();
554- k-gf from:body -> window.ermiteMR?.focusFiles();
555 k-keys from:body -> ermite.toggleKeys()">558 k-keys from:body -> ermite.toggleKeys()">
556 </div>559 </div>
557 </body>560 </body>
M internal/app/testdata/web/commit-root.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -657,14 +657,16 @@
657657 </div>
658658 <div>
659659 <dt>
660-<kbd>s</kbd>
661-<kbd>t</kbd>
662-<kbd>c</kbd>
663-<kbd>r</kbd>
664-<kbd>m</kbd>
665-<kbd>i</kbd>
660+<kbd>g s</kbd>
661+<kbd>g f</kbd>
662+<kbd>g c</kbd>
663+<kbd>g b</kbd>
664+<kbd>g m</kbd>
665+<kbd>g i</kbd>
666+<kbd>g r</kbd>
667+<kbd>g a</kbd>
666668 </dt>
667-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
669+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
668670 </div>
669671 <div>
670672 <dt>
@@ -763,45 +765,45 @@
763765 <span class="k">go</span>
764766 </a>
765767 </li>
766-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
768+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
767769 <a href="/diffs" tabindex="-1">
768-<span class="lbl">summary</span>
770+<span class="lbl">summary (g s)</span>
769771 <span class="k">section</span>
770772 </a>
771773 </li>
772-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
774+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
773775 <a href="/diffs/tree/main" tabindex="-1">
774-<span class="lbl">files</span>
776+<span class="lbl">files (g f)</span>
775777 <span class="k">section</span>
776778 </a>
777779 </li>
778-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
780+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
779781 <a href="/diffs/commits/main" tabindex="-1">
780-<span class="lbl">commits</span>
782+<span class="lbl">commits (g c)</span>
781783 <span class="k">section</span>
782784 </a>
783785 </li>
784-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
786+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
785787 <a href="/diffs/refs" tabindex="-1">
786-<span class="lbl">branches &amp; tags</span>
788+<span class="lbl">branches &amp; tags (g b)</span>
787789 <span class="k">section</span>
788790 </a>
789791 </li>
790-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
792+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
791793 <a href="/diffs/merge-requests" tabindex="-1">
792-<span class="lbl">merge requests</span>
794+<span class="lbl">merge requests (g m)</span>
793795 <span class="k">section</span>
794796 </a>
795797 </li>
796-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
798+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
797799 <a href="/diffs/releases" tabindex="-1">
798-<span class="lbl">releases</span>
800+<span class="lbl">releases (g r)</span>
799801 <span class="k">section</span>
800802 </a>
801803 </li>
802-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
804+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
803805 <a href="/diffs/actions" tabindex="-1">
804-<span class="lbl">actions</span>
806+<span class="lbl">actions (g a)</span>
805807 <span class="k">section</span>
806808 </a>
807809 </li>
@@ -854,7 +856,9 @@
854856 k-filter from:body -> ermite.focusFilter();
855857 k-gh from:body -> ermite.go('.brand');
856858 k-s from:body -> ermite.tab('s');
857- k-t from:body -> ermite.tab('t');
859+ k-f from:body -> ermite.tab('f');
860+ k-b from:body -> ermite.tab('b');
861+ k-a from:body -> ermite.tab('a');
858862 k-c from:body -> ermite.tab('c');
859863 k-r from:body -> ermite.tab('r');
860864 k-m from:body -> ermite.tab('m');
@@ -870,7 +874,6 @@
870874 k-permalink from:body -> ermite.permalink();
871875 k-merge from:body -> window.ermiteMR?.openMerge();
872876 k-read from:body -> window.ermiteMR?.markRead();
873- k-gf from:body -> window.ermiteMR?.focusFiles();
874877 k-keys from:body -> ermite.toggleKeys()">
875878 </div>
876879 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -657,14 +657,16 @@
657 </div>657 </div>
658 <div>658 <div>
659 <dt>659 <dt>
660-<kbd>s</kbd>660+<kbd>g s</kbd>
661-<kbd>t</kbd>661+<kbd>g f</kbd>
662-<kbd>c</kbd>662+<kbd>g c</kbd>
663-<kbd>r</kbd>663+<kbd>g b</kbd>
664-<kbd>m</kbd>664+<kbd>g m</kbd>
665-<kbd>i</kbd>665+<kbd>g i</kbd>
666+<kbd>g r</kbd>
667+<kbd>g a</kbd>
666 </dt>668 </dt>
667-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>669+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
668 </div>670 </div>
669 <div>671 <div>
670 <dt>672 <dt>
@@ -763,45 +765,45 @@
763 <span class="k">go</span>765 <span class="k">go</span>
764 </a>766 </a>
765 </li>767 </li>
766-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">768+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
767 <a href="/diffs" tabindex="-1">769 <a href="/diffs" tabindex="-1">
768-<span class="lbl">summary</span>770+<span class="lbl">summary (g s)</span>
769 <span class="k">section</span>771 <span class="k">section</span>
770 </a>772 </a>
771 </li>773 </li>
772-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">774+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
773 <a href="/diffs/tree/main" tabindex="-1">775 <a href="/diffs/tree/main" tabindex="-1">
774-<span class="lbl">files</span>776+<span class="lbl">files (g f)</span>
775 <span class="k">section</span>777 <span class="k">section</span>
776 </a>778 </a>
777 </li>779 </li>
778-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">780+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
779 <a href="/diffs/commits/main" tabindex="-1">781 <a href="/diffs/commits/main" tabindex="-1">
780-<span class="lbl">commits</span>782+<span class="lbl">commits (g c)</span>
781 <span class="k">section</span>783 <span class="k">section</span>
782 </a>784 </a>
783 </li>785 </li>
784-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">786+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
785 <a href="/diffs/refs" tabindex="-1">787 <a href="/diffs/refs" tabindex="-1">
786-<span class="lbl">branches &amp; tags</span>788+<span class="lbl">branches &amp; tags (g b)</span>
787 <span class="k">section</span>789 <span class="k">section</span>
788 </a>790 </a>
789 </li>791 </li>
790-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">792+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
791 <a href="/diffs/merge-requests" tabindex="-1">793 <a href="/diffs/merge-requests" tabindex="-1">
792-<span class="lbl">merge requests</span>794+<span class="lbl">merge requests (g m)</span>
793 <span class="k">section</span>795 <span class="k">section</span>
794 </a>796 </a>
795 </li>797 </li>
796-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">798+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
797 <a href="/diffs/releases" tabindex="-1">799 <a href="/diffs/releases" tabindex="-1">
798-<span class="lbl">releases</span>800+<span class="lbl">releases (g r)</span>
799 <span class="k">section</span>801 <span class="k">section</span>
800 </a>802 </a>
801 </li>803 </li>
802-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">804+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
803 <a href="/diffs/actions" tabindex="-1">805 <a href="/diffs/actions" tabindex="-1">
804-<span class="lbl">actions</span>806+<span class="lbl">actions (g a)</span>
805 <span class="k">section</span>807 <span class="k">section</span>
806 </a>808 </a>
807 </li>809 </li>
@@ -854,7 +856,9 @@
854 k-filter from:body -> ermite.focusFilter();856 k-filter from:body -> ermite.focusFilter();
855 k-gh from:body -> ermite.go('.brand');857 k-gh from:body -> ermite.go('.brand');
856 k-s from:body -> ermite.tab('s');858 k-s from:body -> ermite.tab('s');
857- k-t from:body -> ermite.tab('t');859+ k-f from:body -> ermite.tab('f');
860+ k-b from:body -> ermite.tab('b');
861+ k-a from:body -> ermite.tab('a');
858 k-c from:body -> ermite.tab('c');862 k-c from:body -> ermite.tab('c');
859 k-r from:body -> ermite.tab('r');863 k-r from:body -> ermite.tab('r');
860 k-m from:body -> ermite.tab('m');864 k-m from:body -> ermite.tab('m');
@@ -870,7 +874,6 @@
870 k-permalink from:body -> ermite.permalink();874 k-permalink from:body -> ermite.permalink();
871 k-merge from:body -> window.ermiteMR?.openMerge();875 k-merge from:body -> window.ermiteMR?.openMerge();
872 k-read from:body -> window.ermiteMR?.markRead();876 k-read from:body -> window.ermiteMR?.markRead();
873- k-gf from:body -> window.ermiteMR?.focusFiles();
874 k-keys from:body -> ermite.toggleKeys()">877 k-keys from:body -> ermite.toggleKeys()">
875 </div>878 </div>
876 </body>879 </body>
M internal/app/testdata/web/commit-trojan.html +33 -30
@@ -72,31 +72,31 @@
7272 <nav class="tabs" aria-label="Sections">
7373 <ul>
7474 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100100 </a>
101101 </li>
102102 </ul>
@@ -486,14 +486,16 @@
486486 </div>
487487 <div>
488488 <dt>
489-<kbd>s</kbd>
490-<kbd>t</kbd>
491-<kbd>c</kbd>
492-<kbd>r</kbd>
493-<kbd>m</kbd>
494-<kbd>i</kbd>
489+<kbd>g s</kbd>
490+<kbd>g f</kbd>
491+<kbd>g c</kbd>
492+<kbd>g b</kbd>
493+<kbd>g m</kbd>
494+<kbd>g i</kbd>
495+<kbd>g r</kbd>
496+<kbd>g a</kbd>
495497 </dt>
496-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
498+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
497499 </div>
498500 <div>
499501 <dt>
@@ -592,45 +594,45 @@
592594 <span class="k">go</span>
593595 </a>
594596 </li>
595-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
597+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
596598 <a href="/diffs" tabindex="-1">
597-<span class="lbl">summary</span>
599+<span class="lbl">summary (g s)</span>
598600 <span class="k">section</span>
599601 </a>
600602 </li>
601-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
603+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
602604 <a href="/diffs/tree/main" tabindex="-1">
603-<span class="lbl">files</span>
605+<span class="lbl">files (g f)</span>
604606 <span class="k">section</span>
605607 </a>
606608 </li>
607-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
609+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
608610 <a href="/diffs/commits/main" tabindex="-1">
609-<span class="lbl">commits</span>
611+<span class="lbl">commits (g c)</span>
610612 <span class="k">section</span>
611613 </a>
612614 </li>
613-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
615+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
614616 <a href="/diffs/refs" tabindex="-1">
615-<span class="lbl">branches &amp; tags</span>
617+<span class="lbl">branches &amp; tags (g b)</span>
616618 <span class="k">section</span>
617619 </a>
618620 </li>
619-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
621+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
620622 <a href="/diffs/merge-requests" tabindex="-1">
621-<span class="lbl">merge requests</span>
623+<span class="lbl">merge requests (g m)</span>
622624 <span class="k">section</span>
623625 </a>
624626 </li>
625-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
627+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
626628 <a href="/diffs/releases" tabindex="-1">
627-<span class="lbl">releases</span>
629+<span class="lbl">releases (g r)</span>
628630 <span class="k">section</span>
629631 </a>
630632 </li>
631-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
633+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
632634 <a href="/diffs/actions" tabindex="-1">
633-<span class="lbl">actions</span>
635+<span class="lbl">actions (g a)</span>
634636 <span class="k">section</span>
635637 </a>
636638 </li>
@@ -683,7 +685,9 @@
683685 k-filter from:body -> ermite.focusFilter();
684686 k-gh from:body -> ermite.go('.brand');
685687 k-s from:body -> ermite.tab('s');
686- k-t from:body -> ermite.tab('t');
688+ k-f from:body -> ermite.tab('f');
689+ k-b from:body -> ermite.tab('b');
690+ k-a from:body -> ermite.tab('a');
687691 k-c from:body -> ermite.tab('c');
688692 k-r from:body -> ermite.tab('r');
689693 k-m from:body -> ermite.tab('m');
@@ -699,7 +703,6 @@
699703 k-permalink from:body -> ermite.permalink();
700704 k-merge from:body -> window.ermiteMR?.openMerge();
701705 k-read from:body -> window.ermiteMR?.markRead();
702- k-gf from:body -> window.ermiteMR?.focusFiles();
703706 k-keys from:body -> ermite.toggleKeys()">
704707 </div>
705708 </body>
@@ -72,31 +72,31 @@
72 <nav class="tabs" aria-label="Sections">72 <nav class="tabs" aria-label="Sections">
73 <ul>73 <ul>
74 <li>74 <li>
75-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>75+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>79+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>83+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>87+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>91+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>95+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>99+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 </ul>102 </ul>
@@ -486,14 +486,16 @@
486 </div>486 </div>
487 <div>487 <div>
488 <dt>488 <dt>
489-<kbd>s</kbd>489+<kbd>g s</kbd>
490-<kbd>t</kbd>490+<kbd>g f</kbd>
491-<kbd>c</kbd>491+<kbd>g c</kbd>
492-<kbd>r</kbd>492+<kbd>g b</kbd>
493-<kbd>m</kbd>493+<kbd>g m</kbd>
494-<kbd>i</kbd>494+<kbd>g i</kbd>
495+<kbd>g r</kbd>
496+<kbd>g a</kbd>
495 </dt>497 </dt>
496-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>498+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
497 </div>499 </div>
498 <div>500 <div>
499 <dt>501 <dt>
@@ -592,45 +594,45 @@
592 <span class="k">go</span>594 <span class="k">go</span>
593 </a>595 </a>
594 </li>596 </li>
595-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">597+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
596 <a href="/diffs" tabindex="-1">598 <a href="/diffs" tabindex="-1">
597-<span class="lbl">summary</span>599+<span class="lbl">summary (g s)</span>
598 <span class="k">section</span>600 <span class="k">section</span>
599 </a>601 </a>
600 </li>602 </li>
601-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">603+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
602 <a href="/diffs/tree/main" tabindex="-1">604 <a href="/diffs/tree/main" tabindex="-1">
603-<span class="lbl">files</span>605+<span class="lbl">files (g f)</span>
604 <span class="k">section</span>606 <span class="k">section</span>
605 </a>607 </a>
606 </li>608 </li>
607-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">609+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
608 <a href="/diffs/commits/main" tabindex="-1">610 <a href="/diffs/commits/main" tabindex="-1">
609-<span class="lbl">commits</span>611+<span class="lbl">commits (g c)</span>
610 <span class="k">section</span>612 <span class="k">section</span>
611 </a>613 </a>
612 </li>614 </li>
613-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">615+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
614 <a href="/diffs/refs" tabindex="-1">616 <a href="/diffs/refs" tabindex="-1">
615-<span class="lbl">branches &amp; tags</span>617+<span class="lbl">branches &amp; tags (g b)</span>
616 <span class="k">section</span>618 <span class="k">section</span>
617 </a>619 </a>
618 </li>620 </li>
619-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">621+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
620 <a href="/diffs/merge-requests" tabindex="-1">622 <a href="/diffs/merge-requests" tabindex="-1">
621-<span class="lbl">merge requests</span>623+<span class="lbl">merge requests (g m)</span>
622 <span class="k">section</span>624 <span class="k">section</span>
623 </a>625 </a>
624 </li>626 </li>
625-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">627+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
626 <a href="/diffs/releases" tabindex="-1">628 <a href="/diffs/releases" tabindex="-1">
627-<span class="lbl">releases</span>629+<span class="lbl">releases (g r)</span>
628 <span class="k">section</span>630 <span class="k">section</span>
629 </a>631 </a>
630 </li>632 </li>
631-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">633+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
632 <a href="/diffs/actions" tabindex="-1">634 <a href="/diffs/actions" tabindex="-1">
633-<span class="lbl">actions</span>635+<span class="lbl">actions (g a)</span>
634 <span class="k">section</span>636 <span class="k">section</span>
635 </a>637 </a>
636 </li>638 </li>
@@ -683,7 +685,9 @@
683 k-filter from:body -> ermite.focusFilter();685 k-filter from:body -> ermite.focusFilter();
684 k-gh from:body -> ermite.go('.brand');686 k-gh from:body -> ermite.go('.brand');
685 k-s from:body -> ermite.tab('s');687 k-s from:body -> ermite.tab('s');
686- k-t from:body -> ermite.tab('t');688+ k-f from:body -> ermite.tab('f');
689+ k-b from:body -> ermite.tab('b');
690+ k-a from:body -> ermite.tab('a');
687 k-c from:body -> ermite.tab('c');691 k-c from:body -> ermite.tab('c');
688 k-r from:body -> ermite.tab('r');692 k-r from:body -> ermite.tab('r');
689 k-m from:body -> ermite.tab('m');693 k-m from:body -> ermite.tab('m');
@@ -699,7 +703,6 @@
699 k-permalink from:body -> ermite.permalink();703 k-permalink from:body -> ermite.permalink();
700 k-merge from:body -> window.ermiteMR?.openMerge();704 k-merge from:body -> window.ermiteMR?.openMerge();
701 k-read from:body -> window.ermiteMR?.markRead();705 k-read from:body -> window.ermiteMR?.markRead();
702- k-gf from:body -> window.ermiteMR?.focusFiles();
703 k-keys from:body -> ermite.toggleKeys()">706 k-keys from:body -> ermite.toggleKeys()">
704 </div>707 </div>
705 </body>708 </body>
M internal/app/testdata/web/commits-page2.html +33 -30
@@ -70,31 +70,31 @@
7070 <nav class="tabs" aria-label="Sections">
7171 <ul>
7272 <li>
73-<a href="/long" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
73+<a href="/long" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7474 </a>
7575 </li>
7676 <li>
77-<a href="/long/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
77+<a href="/long/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
7878 </a>
7979 </li>
8080 <li>
81-<a href="/long/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
81+<a href="/long/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8282 </a>
8383 </li>
8484 <li>
85-<a href="/long/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
85+<a href="/long/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8686 </a>
8787 </li>
8888 <li>
89-<a href="/long/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
89+<a href="/long/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9090 </a>
9191 </li>
9292 <li>
93-<a href="/long/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
93+<a href="/long/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9494 </a>
9595 </li>
9696 <li>
97-<a href="/long/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
97+<a href="/long/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
9898 </a>
9999 </li>
100100 </ul>
@@ -253,14 +253,16 @@
253253 </div>
254254 <div>
255255 <dt>
256-<kbd>s</kbd>
257-<kbd>t</kbd>
258-<kbd>c</kbd>
259-<kbd>r</kbd>
260-<kbd>m</kbd>
261-<kbd>i</kbd>
256+<kbd>g s</kbd>
257+<kbd>g f</kbd>
258+<kbd>g c</kbd>
259+<kbd>g b</kbd>
260+<kbd>g m</kbd>
261+<kbd>g i</kbd>
262+<kbd>g r</kbd>
263+<kbd>g a</kbd>
262264 </dt>
263-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
265+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
264266 </div>
265267 <div>
266268 <dt>
@@ -351,45 +353,45 @@
351353 <span class="k">go</span>
352354 </a>
353355 </li>
354-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
356+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
355357 <a href="/long" tabindex="-1">
356-<span class="lbl">summary</span>
358+<span class="lbl">summary (g s)</span>
357359 <span class="k">section</span>
358360 </a>
359361 </li>
360-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
362+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
361363 <a href="/long/tree/main" tabindex="-1">
362-<span class="lbl">files</span>
364+<span class="lbl">files (g f)</span>
363365 <span class="k">section</span>
364366 </a>
365367 </li>
366-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
368+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
367369 <a href="/long/commits/main" tabindex="-1">
368-<span class="lbl">commits</span>
370+<span class="lbl">commits (g c)</span>
369371 <span class="k">section</span>
370372 </a>
371373 </li>
372-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
374+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
373375 <a href="/long/refs" tabindex="-1">
374-<span class="lbl">branches &amp; tags</span>
376+<span class="lbl">branches &amp; tags (g b)</span>
375377 <span class="k">section</span>
376378 </a>
377379 </li>
378-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
380+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
379381 <a href="/long/merge-requests" tabindex="-1">
380-<span class="lbl">merge requests</span>
382+<span class="lbl">merge requests (g m)</span>
381383 <span class="k">section</span>
382384 </a>
383385 </li>
384-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
386+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
385387 <a href="/long/releases" tabindex="-1">
386-<span class="lbl">releases</span>
388+<span class="lbl">releases (g r)</span>
387389 <span class="k">section</span>
388390 </a>
389391 </li>
390-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
392+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
391393 <a href="/long/actions" tabindex="-1">
392-<span class="lbl">actions</span>
394+<span class="lbl">actions (g a)</span>
393395 <span class="k">section</span>
394396 </a>
395397 </li>
@@ -436,7 +438,9 @@
436438 k-filter from:body -> ermite.focusFilter();
437439 k-gh from:body -> ermite.go('.brand');
438440 k-s from:body -> ermite.tab('s');
439- k-t from:body -> ermite.tab('t');
441+ k-f from:body -> ermite.tab('f');
442+ k-b from:body -> ermite.tab('b');
443+ k-a from:body -> ermite.tab('a');
440444 k-c from:body -> ermite.tab('c');
441445 k-r from:body -> ermite.tab('r');
442446 k-m from:body -> ermite.tab('m');
@@ -452,7 +456,6 @@
452456 k-permalink from:body -> ermite.permalink();
453457 k-merge from:body -> window.ermiteMR?.openMerge();
454458 k-read from:body -> window.ermiteMR?.markRead();
455- k-gf from:body -> window.ermiteMR?.focusFiles();
456459 k-keys from:body -> ermite.toggleKeys()">
457460 </div>
458461 </body>
@@ -70,31 +70,31 @@
70 <nav class="tabs" aria-label="Sections">70 <nav class="tabs" aria-label="Sections">
71 <ul>71 <ul>
72 <li>72 <li>
73-<a href="/long" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>73+<a href="/long" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
74 </a>74 </a>
75 </li>75 </li>
76 <li>76 <li>
77-<a href="/long/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>77+<a href="/long/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
78 </a>78 </a>
79 </li>79 </li>
80 <li>80 <li>
81-<a href="/long/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>81+<a href="/long/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
82 </a>82 </a>
83 </li>83 </li>
84 <li>84 <li>
85-<a href="/long/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>85+<a href="/long/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
86 </a>86 </a>
87 </li>87 </li>
88 <li>88 <li>
89-<a href="/long/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>89+<a href="/long/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
90 </a>90 </a>
91 </li>91 </li>
92 <li>92 <li>
93-<a href="/long/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>93+<a href="/long/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
94 </a>94 </a>
95 </li>95 </li>
96 <li>96 <li>
97-<a href="/long/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>97+<a href="/long/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
98 </a>98 </a>
99 </li>99 </li>
100 </ul>100 </ul>
@@ -253,14 +253,16 @@
253 </div>253 </div>
254 <div>254 <div>
255 <dt>255 <dt>
256-<kbd>s</kbd>256+<kbd>g s</kbd>
257-<kbd>t</kbd>257+<kbd>g f</kbd>
258-<kbd>c</kbd>258+<kbd>g c</kbd>
259-<kbd>r</kbd>259+<kbd>g b</kbd>
260-<kbd>m</kbd>260+<kbd>g m</kbd>
261-<kbd>i</kbd>261+<kbd>g i</kbd>
262+<kbd>g r</kbd>
263+<kbd>g a</kbd>
262 </dt>264 </dt>
263-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>265+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
264 </div>266 </div>
265 <div>267 <div>
266 <dt>268 <dt>
@@ -351,45 +353,45 @@
351 <span class="k">go</span>353 <span class="k">go</span>
352 </a>354 </a>
353 </li>355 </li>
354-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">356+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
355 <a href="/long" tabindex="-1">357 <a href="/long" tabindex="-1">
356-<span class="lbl">summary</span>358+<span class="lbl">summary (g s)</span>
357 <span class="k">section</span>359 <span class="k">section</span>
358 </a>360 </a>
359 </li>361 </li>
360-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">362+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
361 <a href="/long/tree/main" tabindex="-1">363 <a href="/long/tree/main" tabindex="-1">
362-<span class="lbl">files</span>364+<span class="lbl">files (g f)</span>
363 <span class="k">section</span>365 <span class="k">section</span>
364 </a>366 </a>
365 </li>367 </li>
366-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">368+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
367 <a href="/long/commits/main" tabindex="-1">369 <a href="/long/commits/main" tabindex="-1">
368-<span class="lbl">commits</span>370+<span class="lbl">commits (g c)</span>
369 <span class="k">section</span>371 <span class="k">section</span>
370 </a>372 </a>
371 </li>373 </li>
372-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">374+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
373 <a href="/long/refs" tabindex="-1">375 <a href="/long/refs" tabindex="-1">
374-<span class="lbl">branches &amp; tags</span>376+<span class="lbl">branches &amp; tags (g b)</span>
375 <span class="k">section</span>377 <span class="k">section</span>
376 </a>378 </a>
377 </li>379 </li>
378-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">380+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
379 <a href="/long/merge-requests" tabindex="-1">381 <a href="/long/merge-requests" tabindex="-1">
380-<span class="lbl">merge requests</span>382+<span class="lbl">merge requests (g m)</span>
381 <span class="k">section</span>383 <span class="k">section</span>
382 </a>384 </a>
383 </li>385 </li>
384-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">386+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
385 <a href="/long/releases" tabindex="-1">387 <a href="/long/releases" tabindex="-1">
386-<span class="lbl">releases</span>388+<span class="lbl">releases (g r)</span>
387 <span class="k">section</span>389 <span class="k">section</span>
388 </a>390 </a>
389 </li>391 </li>
390-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">392+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
391 <a href="/long/actions" tabindex="-1">393 <a href="/long/actions" tabindex="-1">
392-<span class="lbl">actions</span>394+<span class="lbl">actions (g a)</span>
393 <span class="k">section</span>395 <span class="k">section</span>
394 </a>396 </a>
395 </li>397 </li>
@@ -436,7 +438,9 @@
436 k-filter from:body -> ermite.focusFilter();438 k-filter from:body -> ermite.focusFilter();
437 k-gh from:body -> ermite.go('.brand');439 k-gh from:body -> ermite.go('.brand');
438 k-s from:body -> ermite.tab('s');440 k-s from:body -> ermite.tab('s');
439- k-t from:body -> ermite.tab('t');441+ k-f from:body -> ermite.tab('f');
442+ k-b from:body -> ermite.tab('b');
443+ k-a from:body -> ermite.tab('a');
440 k-c from:body -> ermite.tab('c');444 k-c from:body -> ermite.tab('c');
441 k-r from:body -> ermite.tab('r');445 k-r from:body -> ermite.tab('r');
442 k-m from:body -> ermite.tab('m');446 k-m from:body -> ermite.tab('m');
@@ -452,7 +456,6 @@
452 k-permalink from:body -> ermite.permalink();456 k-permalink from:body -> ermite.permalink();
453 k-merge from:body -> window.ermiteMR?.openMerge();457 k-merge from:body -> window.ermiteMR?.openMerge();
454 k-read from:body -> window.ermiteMR?.markRead();458 k-read from:body -> window.ermiteMR?.markRead();
455- k-gf from:body -> window.ermiteMR?.focusFiles();
456 k-keys from:body -> ermite.toggleKeys()">459 k-keys from:body -> ermite.toggleKeys()">
457 </div>460 </div>
458 </body>461 </body>
M internal/app/testdata/web/commits-path.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/long" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/long" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/long/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/long/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/long/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/long/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/long/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/long/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/long/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/long/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/long/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/long/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/long/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/long/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -268,14 +268,16 @@
268268 </div>
269269 <div>
270270 <dt>
271-<kbd>s</kbd>
272-<kbd>t</kbd>
273-<kbd>c</kbd>
274-<kbd>r</kbd>
275-<kbd>m</kbd>
276-<kbd>i</kbd>
271+<kbd>g s</kbd>
272+<kbd>g f</kbd>
273+<kbd>g c</kbd>
274+<kbd>g b</kbd>
275+<kbd>g m</kbd>
276+<kbd>g i</kbd>
277+<kbd>g r</kbd>
278+<kbd>g a</kbd>
277279 </dt>
278-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
280+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
279281 </div>
280282 <div>
281283 <dt>
@@ -366,45 +368,45 @@
366368 <span class="k">go</span>
367369 </a>
368370 </li>
369-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
371+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
370372 <a href="/long" tabindex="-1">
371-<span class="lbl">summary</span>
373+<span class="lbl">summary (g s)</span>
372374 <span class="k">section</span>
373375 </a>
374376 </li>
375-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
377+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
376378 <a href="/long/tree/main" tabindex="-1">
377-<span class="lbl">files</span>
379+<span class="lbl">files (g f)</span>
378380 <span class="k">section</span>
379381 </a>
380382 </li>
381-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
383+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
382384 <a href="/long/commits/main" tabindex="-1">
383-<span class="lbl">commits</span>
385+<span class="lbl">commits (g c)</span>
384386 <span class="k">section</span>
385387 </a>
386388 </li>
387-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
389+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
388390 <a href="/long/refs" tabindex="-1">
389-<span class="lbl">branches &amp; tags</span>
391+<span class="lbl">branches &amp; tags (g b)</span>
390392 <span class="k">section</span>
391393 </a>
392394 </li>
393-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
395+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
394396 <a href="/long/merge-requests" tabindex="-1">
395-<span class="lbl">merge requests</span>
397+<span class="lbl">merge requests (g m)</span>
396398 <span class="k">section</span>
397399 </a>
398400 </li>
399-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
401+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
400402 <a href="/long/releases" tabindex="-1">
401-<span class="lbl">releases</span>
403+<span class="lbl">releases (g r)</span>
402404 <span class="k">section</span>
403405 </a>
404406 </li>
405-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
407+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
406408 <a href="/long/actions" tabindex="-1">
407-<span class="lbl">actions</span>
409+<span class="lbl">actions (g a)</span>
408410 <span class="k">section</span>
409411 </a>
410412 </li>
@@ -451,7 +453,9 @@
451453 k-filter from:body -> ermite.focusFilter();
452454 k-gh from:body -> ermite.go('.brand');
453455 k-s from:body -> ermite.tab('s');
454- k-t from:body -> ermite.tab('t');
456+ k-f from:body -> ermite.tab('f');
457+ k-b from:body -> ermite.tab('b');
458+ k-a from:body -> ermite.tab('a');
455459 k-c from:body -> ermite.tab('c');
456460 k-r from:body -> ermite.tab('r');
457461 k-m from:body -> ermite.tab('m');
@@ -467,7 +471,6 @@
467471 k-permalink from:body -> ermite.permalink();
468472 k-merge from:body -> window.ermiteMR?.openMerge();
469473 k-read from:body -> window.ermiteMR?.markRead();
470- k-gf from:body -> window.ermiteMR?.focusFiles();
471474 k-keys from:body -> ermite.toggleKeys()">
472475 </div>
473476 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/long" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/long" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/long/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>80+<a href="/long/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/long/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/long/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/long/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/long/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/long/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/long/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/long/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/long/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/long/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/long/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -268,14 +268,16 @@
268 </div>268 </div>
269 <div>269 <div>
270 <dt>270 <dt>
271-<kbd>s</kbd>271+<kbd>g s</kbd>
272-<kbd>t</kbd>272+<kbd>g f</kbd>
273-<kbd>c</kbd>273+<kbd>g c</kbd>
274-<kbd>r</kbd>274+<kbd>g b</kbd>
275-<kbd>m</kbd>275+<kbd>g m</kbd>
276-<kbd>i</kbd>276+<kbd>g i</kbd>
277+<kbd>g r</kbd>
278+<kbd>g a</kbd>
277 </dt>279 </dt>
278-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>280+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
279 </div>281 </div>
280 <div>282 <div>
281 <dt>283 <dt>
@@ -366,45 +368,45 @@
366 <span class="k">go</span>368 <span class="k">go</span>
367 </a>369 </a>
368 </li>370 </li>
369-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">371+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
370 <a href="/long" tabindex="-1">372 <a href="/long" tabindex="-1">
371-<span class="lbl">summary</span>373+<span class="lbl">summary (g s)</span>
372 <span class="k">section</span>374 <span class="k">section</span>
373 </a>375 </a>
374 </li>376 </li>
375-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">377+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
376 <a href="/long/tree/main" tabindex="-1">378 <a href="/long/tree/main" tabindex="-1">
377-<span class="lbl">files</span>379+<span class="lbl">files (g f)</span>
378 <span class="k">section</span>380 <span class="k">section</span>
379 </a>381 </a>
380 </li>382 </li>
381-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">383+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
382 <a href="/long/commits/main" tabindex="-1">384 <a href="/long/commits/main" tabindex="-1">
383-<span class="lbl">commits</span>385+<span class="lbl">commits (g c)</span>
384 <span class="k">section</span>386 <span class="k">section</span>
385 </a>387 </a>
386 </li>388 </li>
387-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">389+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
388 <a href="/long/refs" tabindex="-1">390 <a href="/long/refs" tabindex="-1">
389-<span class="lbl">branches &amp; tags</span>391+<span class="lbl">branches &amp; tags (g b)</span>
390 <span class="k">section</span>392 <span class="k">section</span>
391 </a>393 </a>
392 </li>394 </li>
393-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">395+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
394 <a href="/long/merge-requests" tabindex="-1">396 <a href="/long/merge-requests" tabindex="-1">
395-<span class="lbl">merge requests</span>397+<span class="lbl">merge requests (g m)</span>
396 <span class="k">section</span>398 <span class="k">section</span>
397 </a>399 </a>
398 </li>400 </li>
399-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">401+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
400 <a href="/long/releases" tabindex="-1">402 <a href="/long/releases" tabindex="-1">
401-<span class="lbl">releases</span>403+<span class="lbl">releases (g r)</span>
402 <span class="k">section</span>404 <span class="k">section</span>
403 </a>405 </a>
404 </li>406 </li>
405-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">407+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
406 <a href="/long/actions" tabindex="-1">408 <a href="/long/actions" tabindex="-1">
407-<span class="lbl">actions</span>409+<span class="lbl">actions (g a)</span>
408 <span class="k">section</span>410 <span class="k">section</span>
409 </a>411 </a>
410 </li>412 </li>
@@ -451,7 +453,9 @@
451 k-filter from:body -> ermite.focusFilter();453 k-filter from:body -> ermite.focusFilter();
452 k-gh from:body -> ermite.go('.brand');454 k-gh from:body -> ermite.go('.brand');
453 k-s from:body -> ermite.tab('s');455 k-s from:body -> ermite.tab('s');
454- k-t from:body -> ermite.tab('t');456+ k-f from:body -> ermite.tab('f');
457+ k-b from:body -> ermite.tab('b');
458+ k-a from:body -> ermite.tab('a');
455 k-c from:body -> ermite.tab('c');459 k-c from:body -> ermite.tab('c');
456 k-r from:body -> ermite.tab('r');460 k-r from:body -> ermite.tab('r');
457 k-m from:body -> ermite.tab('m');461 k-m from:body -> ermite.tab('m');
@@ -467,7 +471,6 @@
467 k-permalink from:body -> ermite.permalink();471 k-permalink from:body -> ermite.permalink();
468 k-merge from:body -> window.ermiteMR?.openMerge();472 k-merge from:body -> window.ermiteMR?.openMerge();
469 k-read from:body -> window.ermiteMR?.markRead();473 k-read from:body -> window.ermiteMR?.markRead();
470- k-gf from:body -> window.ermiteMR?.focusFiles();
471 k-keys from:body -> ermite.toggleKeys()">474 k-keys from:body -> ermite.toggleKeys()">
472 </div>475 </div>
473 </body>476 </body>
M internal/app/testdata/web/commits-root.html +33 -30
@@ -70,31 +70,31 @@
7070 <nav class="tabs" aria-label="Sections">
7171 <ul>
7272 <li>
73-<a href="/long" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
73+<a href="/long" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7474 </a>
7575 </li>
7676 <li>
77-<a href="/long/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
77+<a href="/long/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
7878 </a>
7979 </li>
8080 <li>
81-<a href="/long/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
81+<a href="/long/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8282 </a>
8383 </li>
8484 <li>
85-<a href="/long/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
85+<a href="/long/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8686 </a>
8787 </li>
8888 <li>
89-<a href="/long/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
89+<a href="/long/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9090 </a>
9191 </li>
9292 <li>
93-<a href="/long/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
93+<a href="/long/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9494 </a>
9595 </li>
9696 <li>
97-<a href="/long/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
97+<a href="/long/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
9898 </a>
9999 </li>
100100 </ul>
@@ -1058,14 +1058,16 @@
10581058 </div>
10591059 <div>
10601060 <dt>
1061-<kbd>s</kbd>
1062-<kbd>t</kbd>
1063-<kbd>c</kbd>
1064-<kbd>r</kbd>
1065-<kbd>m</kbd>
1066-<kbd>i</kbd>
1061+<kbd>g s</kbd>
1062+<kbd>g f</kbd>
1063+<kbd>g c</kbd>
1064+<kbd>g b</kbd>
1065+<kbd>g m</kbd>
1066+<kbd>g i</kbd>
1067+<kbd>g r</kbd>
1068+<kbd>g a</kbd>
10671069 </dt>
1068-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
1070+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
10691071 </div>
10701072 <div>
10711073 <dt>
@@ -1156,45 +1158,45 @@
11561158 <span class="k">go</span>
11571159 </a>
11581160 </li>
1159-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
1161+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
11601162 <a href="/long" tabindex="-1">
1161-<span class="lbl">summary</span>
1163+<span class="lbl">summary (g s)</span>
11621164 <span class="k">section</span>
11631165 </a>
11641166 </li>
1165-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
1167+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
11661168 <a href="/long/tree/main" tabindex="-1">
1167-<span class="lbl">files</span>
1169+<span class="lbl">files (g f)</span>
11681170 <span class="k">section</span>
11691171 </a>
11701172 </li>
1171-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
1173+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
11721174 <a href="/long/commits/main" tabindex="-1">
1173-<span class="lbl">commits</span>
1175+<span class="lbl">commits (g c)</span>
11741176 <span class="k">section</span>
11751177 </a>
11761178 </li>
1177-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
1179+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
11781180 <a href="/long/refs" tabindex="-1">
1179-<span class="lbl">branches &amp; tags</span>
1181+<span class="lbl">branches &amp; tags (g b)</span>
11801182 <span class="k">section</span>
11811183 </a>
11821184 </li>
1183-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
1185+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
11841186 <a href="/long/merge-requests" tabindex="-1">
1185-<span class="lbl">merge requests</span>
1187+<span class="lbl">merge requests (g m)</span>
11861188 <span class="k">section</span>
11871189 </a>
11881190 </li>
1189-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
1191+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
11901192 <a href="/long/releases" tabindex="-1">
1191-<span class="lbl">releases</span>
1193+<span class="lbl">releases (g r)</span>
11921194 <span class="k">section</span>
11931195 </a>
11941196 </li>
1195-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
1197+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
11961198 <a href="/long/actions" tabindex="-1">
1197-<span class="lbl">actions</span>
1199+<span class="lbl">actions (g a)</span>
11981200 <span class="k">section</span>
11991201 </a>
12001202 </li>
@@ -1241,7 +1243,9 @@
12411243 k-filter from:body -> ermite.focusFilter();
12421244 k-gh from:body -> ermite.go('.brand');
12431245 k-s from:body -> ermite.tab('s');
1244- k-t from:body -> ermite.tab('t');
1246+ k-f from:body -> ermite.tab('f');
1247+ k-b from:body -> ermite.tab('b');
1248+ k-a from:body -> ermite.tab('a');
12451249 k-c from:body -> ermite.tab('c');
12461250 k-r from:body -> ermite.tab('r');
12471251 k-m from:body -> ermite.tab('m');
@@ -1257,7 +1261,6 @@
12571261 k-permalink from:body -> ermite.permalink();
12581262 k-merge from:body -> window.ermiteMR?.openMerge();
12591263 k-read from:body -> window.ermiteMR?.markRead();
1260- k-gf from:body -> window.ermiteMR?.focusFiles();
12611264 k-keys from:body -> ermite.toggleKeys()">
12621265 </div>
12631266 </body>
@@ -70,31 +70,31 @@
70 <nav class="tabs" aria-label="Sections">70 <nav class="tabs" aria-label="Sections">
71 <ul>71 <ul>
72 <li>72 <li>
73-<a href="/long" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>73+<a href="/long" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
74 </a>74 </a>
75 </li>75 </li>
76 <li>76 <li>
77-<a href="/long/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>77+<a href="/long/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
78 </a>78 </a>
79 </li>79 </li>
80 <li>80 <li>
81-<a href="/long/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>81+<a href="/long/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
82 </a>82 </a>
83 </li>83 </li>
84 <li>84 <li>
85-<a href="/long/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>85+<a href="/long/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
86 </a>86 </a>
87 </li>87 </li>
88 <li>88 <li>
89-<a href="/long/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>89+<a href="/long/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
90 </a>90 </a>
91 </li>91 </li>
92 <li>92 <li>
93-<a href="/long/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>93+<a href="/long/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
94 </a>94 </a>
95 </li>95 </li>
96 <li>96 <li>
97-<a href="/long/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>97+<a href="/long/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
98 </a>98 </a>
99 </li>99 </li>
100 </ul>100 </ul>
@@ -1058,14 +1058,16 @@
1058 </div>1058 </div>
1059 <div>1059 <div>
1060 <dt>1060 <dt>
1061-<kbd>s</kbd>1061+<kbd>g s</kbd>
1062-<kbd>t</kbd>1062+<kbd>g f</kbd>
1063-<kbd>c</kbd>1063+<kbd>g c</kbd>
1064-<kbd>r</kbd>1064+<kbd>g b</kbd>
1065-<kbd>m</kbd>1065+<kbd>g m</kbd>
1066-<kbd>i</kbd>1066+<kbd>g i</kbd>
1067+<kbd>g r</kbd>
1068+<kbd>g a</kbd>
1067 </dt>1069 </dt>
1068-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>1070+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
1069 </div>1071 </div>
1070 <div>1072 <div>
1071 <dt>1073 <dt>
@@ -1156,45 +1158,45 @@
1156 <span class="k">go</span>1158 <span class="k">go</span>
1157 </a>1159 </a>
1158 </li>1160 </li>
1159-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">1161+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
1160 <a href="/long" tabindex="-1">1162 <a href="/long" tabindex="-1">
1161-<span class="lbl">summary</span>1163+<span class="lbl">summary (g s)</span>
1162 <span class="k">section</span>1164 <span class="k">section</span>
1163 </a>1165 </a>
1164 </li>1166 </li>
1165-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">1167+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
1166 <a href="/long/tree/main" tabindex="-1">1168 <a href="/long/tree/main" tabindex="-1">
1167-<span class="lbl">files</span>1169+<span class="lbl">files (g f)</span>
1168 <span class="k">section</span>1170 <span class="k">section</span>
1169 </a>1171 </a>
1170 </li>1172 </li>
1171-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">1173+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
1172 <a href="/long/commits/main" tabindex="-1">1174 <a href="/long/commits/main" tabindex="-1">
1173-<span class="lbl">commits</span>1175+<span class="lbl">commits (g c)</span>
1174 <span class="k">section</span>1176 <span class="k">section</span>
1175 </a>1177 </a>
1176 </li>1178 </li>
1177-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">1179+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
1178 <a href="/long/refs" tabindex="-1">1180 <a href="/long/refs" tabindex="-1">
1179-<span class="lbl">branches &amp; tags</span>1181+<span class="lbl">branches &amp; tags (g b)</span>
1180 <span class="k">section</span>1182 <span class="k">section</span>
1181 </a>1183 </a>
1182 </li>1184 </li>
1183-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">1185+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
1184 <a href="/long/merge-requests" tabindex="-1">1186 <a href="/long/merge-requests" tabindex="-1">
1185-<span class="lbl">merge requests</span>1187+<span class="lbl">merge requests (g m)</span>
1186 <span class="k">section</span>1188 <span class="k">section</span>
1187 </a>1189 </a>
1188 </li>1190 </li>
1189-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">1191+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
1190 <a href="/long/releases" tabindex="-1">1192 <a href="/long/releases" tabindex="-1">
1191-<span class="lbl">releases</span>1193+<span class="lbl">releases (g r)</span>
1192 <span class="k">section</span>1194 <span class="k">section</span>
1193 </a>1195 </a>
1194 </li>1196 </li>
1195-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">1197+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
1196 <a href="/long/actions" tabindex="-1">1198 <a href="/long/actions" tabindex="-1">
1197-<span class="lbl">actions</span>1199+<span class="lbl">actions (g a)</span>
1198 <span class="k">section</span>1200 <span class="k">section</span>
1199 </a>1201 </a>
1200 </li>1202 </li>
@@ -1241,7 +1243,9 @@
1241 k-filter from:body -> ermite.focusFilter();1243 k-filter from:body -> ermite.focusFilter();
1242 k-gh from:body -> ermite.go('.brand');1244 k-gh from:body -> ermite.go('.brand');
1243 k-s from:body -> ermite.tab('s');1245 k-s from:body -> ermite.tab('s');
1244- k-t from:body -> ermite.tab('t');1246+ k-f from:body -> ermite.tab('f');
1247+ k-b from:body -> ermite.tab('b');
1248+ k-a from:body -> ermite.tab('a');
1245 k-c from:body -> ermite.tab('c');1249 k-c from:body -> ermite.tab('c');
1246 k-r from:body -> ermite.tab('r');1250 k-r from:body -> ermite.tab('r');
1247 k-m from:body -> ermite.tab('m');1251 k-m from:body -> ermite.tab('m');
@@ -1257,7 +1261,6 @@
1257 k-permalink from:body -> ermite.permalink();1261 k-permalink from:body -> ermite.permalink();
1258 k-merge from:body -> window.ermiteMR?.openMerge();1262 k-merge from:body -> window.ermiteMR?.openMerge();
1259 k-read from:body -> window.ermiteMR?.markRead();1263 k-read from:body -> window.ermiteMR?.markRead();
1260- k-gf from:body -> window.ermiteMR?.focusFiles();
1261 k-keys from:body -> ermite.toggleKeys()">1264 k-keys from:body -> ermite.toggleKeys()">
1262 </div>1265 </div>
1263 </body>1266 </body>
M internal/app/testdata/web/commits-small.html +33 -30
@@ -70,31 +70,31 @@
7070 <nav class="tabs" aria-label="Sections">
7171 <ul>
7272 <li>
73-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
73+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7474 </a>
7575 </li>
7676 <li>
77-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
77+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
7878 </a>
7979 </li>
8080 <li>
81-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>
81+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
8282 </a>
8383 </li>
8484 <li>
85-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
85+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8686 </a>
8787 </li>
8888 <li>
89-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
89+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9090 </a>
9191 </li>
9292 <li>
93-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
93+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9494 </a>
9595 </li>
9696 <li>
97-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
97+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
9898 </a>
9999 </li>
100100 </ul>
@@ -403,14 +403,16 @@
403403 </div>
404404 <div>
405405 <dt>
406-<kbd>s</kbd>
407-<kbd>t</kbd>
408-<kbd>c</kbd>
409-<kbd>r</kbd>
410-<kbd>m</kbd>
411-<kbd>i</kbd>
406+<kbd>g s</kbd>
407+<kbd>g f</kbd>
408+<kbd>g c</kbd>
409+<kbd>g b</kbd>
410+<kbd>g m</kbd>
411+<kbd>g i</kbd>
412+<kbd>g r</kbd>
413+<kbd>g a</kbd>
412414 </dt>
413-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
415+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
414416 </div>
415417 <div>
416418 <dt>
@@ -509,45 +511,45 @@
509511 <span class="k">go</span>
510512 </a>
511513 </li>
512-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
514+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
513515 <a href="/diffs" tabindex="-1">
514-<span class="lbl">summary</span>
516+<span class="lbl">summary (g s)</span>
515517 <span class="k">section</span>
516518 </a>
517519 </li>
518-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
520+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
519521 <a href="/diffs/tree/main" tabindex="-1">
520-<span class="lbl">files</span>
522+<span class="lbl">files (g f)</span>
521523 <span class="k">section</span>
522524 </a>
523525 </li>
524-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
526+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
525527 <a href="/diffs/commits/main" tabindex="-1">
526-<span class="lbl">commits</span>
528+<span class="lbl">commits (g c)</span>
527529 <span class="k">section</span>
528530 </a>
529531 </li>
530-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
532+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
531533 <a href="/diffs/refs" tabindex="-1">
532-<span class="lbl">branches &amp; tags</span>
534+<span class="lbl">branches &amp; tags (g b)</span>
533535 <span class="k">section</span>
534536 </a>
535537 </li>
536-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
538+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
537539 <a href="/diffs/merge-requests" tabindex="-1">
538-<span class="lbl">merge requests</span>
540+<span class="lbl">merge requests (g m)</span>
539541 <span class="k">section</span>
540542 </a>
541543 </li>
542-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
544+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
543545 <a href="/diffs/releases" tabindex="-1">
544-<span class="lbl">releases</span>
546+<span class="lbl">releases (g r)</span>
545547 <span class="k">section</span>
546548 </a>
547549 </li>
548-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
550+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
549551 <a href="/diffs/actions" tabindex="-1">
550-<span class="lbl">actions</span>
552+<span class="lbl">actions (g a)</span>
551553 <span class="k">section</span>
552554 </a>
553555 </li>
@@ -606,7 +608,9 @@
606608 k-filter from:body -> ermite.focusFilter();
607609 k-gh from:body -> ermite.go('.brand');
608610 k-s from:body -> ermite.tab('s');
609- k-t from:body -> ermite.tab('t');
611+ k-f from:body -> ermite.tab('f');
612+ k-b from:body -> ermite.tab('b');
613+ k-a from:body -> ermite.tab('a');
610614 k-c from:body -> ermite.tab('c');
611615 k-r from:body -> ermite.tab('r');
612616 k-m from:body -> ermite.tab('m');
@@ -622,7 +626,6 @@
622626 k-permalink from:body -> ermite.permalink();
623627 k-merge from:body -> window.ermiteMR?.openMerge();
624628 k-read from:body -> window.ermiteMR?.markRead();
625- k-gf from:body -> window.ermiteMR?.focusFiles();
626629 k-keys from:body -> ermite.toggleKeys()">
627630 </div>
628631 </body>
@@ -70,31 +70,31 @@
70 <nav class="tabs" aria-label="Sections">70 <nav class="tabs" aria-label="Sections">
71 <ul>71 <ul>
72 <li>72 <li>
73-<a href="/diffs" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>73+<a href="/diffs" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
74 </a>74 </a>
75 </li>75 </li>
76 <li>76 <li>
77-<a href="/diffs/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>77+<a href="/diffs/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
78 </a>78 </a>
79 </li>79 </li>
80 <li>80 <li>
81-<a href="/diffs/commits/main" data-key="c" aria-keyshortcuts="c" aria-current="page">Commits <kbd aria-hidden="true">c</kbd>81+<a href="/diffs/commits/main" data-key="g c" aria-current="page">Commits <kbd aria-hidden="true">g c</kbd>
82 </a>82 </a>
83 </li>83 </li>
84 <li>84 <li>
85-<a href="/diffs/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>85+<a href="/diffs/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
86 </a>86 </a>
87 </li>87 </li>
88 <li>88 <li>
89-<a href="/diffs/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>89+<a href="/diffs/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
90 </a>90 </a>
91 </li>91 </li>
92 <li>92 <li>
93-<a href="/diffs/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>93+<a href="/diffs/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
94 </a>94 </a>
95 </li>95 </li>
96 <li>96 <li>
97-<a href="/diffs/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>97+<a href="/diffs/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
98 </a>98 </a>
99 </li>99 </li>
100 </ul>100 </ul>
@@ -403,14 +403,16 @@
403 </div>403 </div>
404 <div>404 <div>
405 <dt>405 <dt>
406-<kbd>s</kbd>406+<kbd>g s</kbd>
407-<kbd>t</kbd>407+<kbd>g f</kbd>
408-<kbd>c</kbd>408+<kbd>g c</kbd>
409-<kbd>r</kbd>409+<kbd>g b</kbd>
410-<kbd>m</kbd>410+<kbd>g m</kbd>
411-<kbd>i</kbd>411+<kbd>g i</kbd>
412+<kbd>g r</kbd>
413+<kbd>g a</kbd>
412 </dt>414 </dt>
413-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>415+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
414 </div>416 </div>
415 <div>417 <div>
416 <dt>418 <dt>
@@ -509,45 +511,45 @@
509 <span class="k">go</span>511 <span class="k">go</span>
510 </a>512 </a>
511 </li>513 </li>
512-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">514+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
513 <a href="/diffs" tabindex="-1">515 <a href="/diffs" tabindex="-1">
514-<span class="lbl">summary</span>516+<span class="lbl">summary (g s)</span>
515 <span class="k">section</span>517 <span class="k">section</span>
516 </a>518 </a>
517 </li>519 </li>
518-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">520+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
519 <a href="/diffs/tree/main" tabindex="-1">521 <a href="/diffs/tree/main" tabindex="-1">
520-<span class="lbl">files</span>522+<span class="lbl">files (g f)</span>
521 <span class="k">section</span>523 <span class="k">section</span>
522 </a>524 </a>
523 </li>525 </li>
524-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">526+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
525 <a href="/diffs/commits/main" tabindex="-1">527 <a href="/diffs/commits/main" tabindex="-1">
526-<span class="lbl">commits</span>528+<span class="lbl">commits (g c)</span>
527 <span class="k">section</span>529 <span class="k">section</span>
528 </a>530 </a>
529 </li>531 </li>
530-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">532+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
531 <a href="/diffs/refs" tabindex="-1">533 <a href="/diffs/refs" tabindex="-1">
532-<span class="lbl">branches &amp; tags</span>534+<span class="lbl">branches &amp; tags (g b)</span>
533 <span class="k">section</span>535 <span class="k">section</span>
534 </a>536 </a>
535 </li>537 </li>
536-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">538+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
537 <a href="/diffs/merge-requests" tabindex="-1">539 <a href="/diffs/merge-requests" tabindex="-1">
538-<span class="lbl">merge requests</span>540+<span class="lbl">merge requests (g m)</span>
539 <span class="k">section</span>541 <span class="k">section</span>
540 </a>542 </a>
541 </li>543 </li>
542-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">544+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
543 <a href="/diffs/releases" tabindex="-1">545 <a href="/diffs/releases" tabindex="-1">
544-<span class="lbl">releases</span>546+<span class="lbl">releases (g r)</span>
545 <span class="k">section</span>547 <span class="k">section</span>
546 </a>548 </a>
547 </li>549 </li>
548-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">550+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
549 <a href="/diffs/actions" tabindex="-1">551 <a href="/diffs/actions" tabindex="-1">
550-<span class="lbl">actions</span>552+<span class="lbl">actions (g a)</span>
551 <span class="k">section</span>553 <span class="k">section</span>
552 </a>554 </a>
553 </li>555 </li>
@@ -606,7 +608,9 @@
606 k-filter from:body -> ermite.focusFilter();608 k-filter from:body -> ermite.focusFilter();
607 k-gh from:body -> ermite.go('.brand');609 k-gh from:body -> ermite.go('.brand');
608 k-s from:body -> ermite.tab('s');610 k-s from:body -> ermite.tab('s');
609- k-t from:body -> ermite.tab('t');611+ k-f from:body -> ermite.tab('f');
612+ k-b from:body -> ermite.tab('b');
613+ k-a from:body -> ermite.tab('a');
610 k-c from:body -> ermite.tab('c');614 k-c from:body -> ermite.tab('c');
611 k-r from:body -> ermite.tab('r');615 k-r from:body -> ermite.tab('r');
612 k-m from:body -> ermite.tab('m');616 k-m from:body -> ermite.tab('m');
@@ -622,7 +626,6 @@
622 k-permalink from:body -> ermite.permalink();626 k-permalink from:body -> ermite.permalink();
623 k-merge from:body -> window.ermiteMR?.openMerge();627 k-merge from:body -> window.ermiteMR?.openMerge();
624 k-read from:body -> window.ermiteMR?.markRead();628 k-read from:body -> window.ermiteMR?.markRead();
625- k-gf from:body -> window.ermiteMR?.focusFiles();
626 k-keys from:body -> ermite.toggleKeys()">629 k-keys from:body -> ermite.toggleKeys()">
627 </div>630 </div>
628 </body>631 </body>
M internal/app/testdata/web/empty.html +12 -9
@@ -171,14 +171,16 @@
171171 </div>
172172 <div>
173173 <dt>
174-<kbd>s</kbd>
175-<kbd>t</kbd>
176-<kbd>c</kbd>
177-<kbd>r</kbd>
178-<kbd>m</kbd>
179-<kbd>i</kbd>
174+<kbd>g s</kbd>
175+<kbd>g f</kbd>
176+<kbd>g c</kbd>
177+<kbd>g b</kbd>
178+<kbd>g m</kbd>
179+<kbd>g i</kbd>
180+<kbd>g r</kbd>
181+<kbd>g a</kbd>
180182 </dt>
181-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
183+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
182184 </div>
183185 <div>
184186 <dt>
@@ -279,7 +281,9 @@
279281 k-filter from:body -> ermite.focusFilter();
280282 k-gh from:body -> ermite.go('.brand');
281283 k-s from:body -> ermite.tab('s');
282- k-t from:body -> ermite.tab('t');
284+ k-f from:body -> ermite.tab('f');
285+ k-b from:body -> ermite.tab('b');
286+ k-a from:body -> ermite.tab('a');
283287 k-c from:body -> ermite.tab('c');
284288 k-r from:body -> ermite.tab('r');
285289 k-m from:body -> ermite.tab('m');
@@ -295,7 +299,6 @@
295299 k-permalink from:body -> ermite.permalink();
296300 k-merge from:body -> window.ermiteMR?.openMerge();
297301 k-read from:body -> window.ermiteMR?.markRead();
298- k-gf from:body -> window.ermiteMR?.focusFiles();
299302 k-keys from:body -> ermite.toggleKeys()">
300303 </div>
301304 </body>
@@ -171,14 +171,16 @@
171 </div>171 </div>
172 <div>172 <div>
173 <dt>173 <dt>
174-<kbd>s</kbd>174+<kbd>g s</kbd>
175-<kbd>t</kbd>175+<kbd>g f</kbd>
176-<kbd>c</kbd>176+<kbd>g c</kbd>
177-<kbd>r</kbd>177+<kbd>g b</kbd>
178-<kbd>m</kbd>178+<kbd>g m</kbd>
179-<kbd>i</kbd>179+<kbd>g i</kbd>
180+<kbd>g r</kbd>
181+<kbd>g a</kbd>
180 </dt>182 </dt>
181-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>183+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
182 </div>184 </div>
183 <div>185 <div>
184 <dt>186 <dt>
@@ -279,7 +281,9 @@
279 k-filter from:body -> ermite.focusFilter();281 k-filter from:body -> ermite.focusFilter();
280 k-gh from:body -> ermite.go('.brand');282 k-gh from:body -> ermite.go('.brand');
281 k-s from:body -> ermite.tab('s');283 k-s from:body -> ermite.tab('s');
282- k-t from:body -> ermite.tab('t');284+ k-f from:body -> ermite.tab('f');
285+ k-b from:body -> ermite.tab('b');
286+ k-a from:body -> ermite.tab('a');
283 k-c from:body -> ermite.tab('c');287 k-c from:body -> ermite.tab('c');
284 k-r from:body -> ermite.tab('r');288 k-r from:body -> ermite.tab('r');
285 k-m from:body -> ermite.tab('m');289 k-m from:body -> ermite.tab('m');
@@ -295,7 +299,6 @@
295 k-permalink from:body -> ermite.permalink();299 k-permalink from:body -> ermite.permalink();
296 k-merge from:body -> window.ermiteMR?.openMerge();300 k-merge from:body -> window.ermiteMR?.openMerge();
297 k-read from:body -> window.ermiteMR?.markRead();301 k-read from:body -> window.ermiteMR?.markRead();
298- k-gf from:body -> window.ermiteMR?.focusFiles();
299 k-keys from:body -> ermite.toggleKeys()">302 k-keys from:body -> ermite.toggleKeys()">
300 </div>303 </div>
301 </body>304 </body>
M internal/app/testdata/web/home.html +12 -9
@@ -275,14 +275,16 @@
275275 </div>
276276 <div>
277277 <dt>
278-<kbd>s</kbd>
279-<kbd>t</kbd>
280-<kbd>c</kbd>
281-<kbd>r</kbd>
282-<kbd>m</kbd>
283-<kbd>i</kbd>
278+<kbd>g s</kbd>
279+<kbd>g f</kbd>
280+<kbd>g c</kbd>
281+<kbd>g b</kbd>
282+<kbd>g m</kbd>
283+<kbd>g i</kbd>
284+<kbd>g r</kbd>
285+<kbd>g a</kbd>
284286 </dt>
285-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
287+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
286288 </div>
287289 <div>
288290 <dt>
@@ -389,7 +391,9 @@
389391 k-filter from:body -> ermite.focusFilter();
390392 k-gh from:body -> ermite.go('.brand');
391393 k-s from:body -> ermite.tab('s');
392- k-t from:body -> ermite.tab('t');
394+ k-f from:body -> ermite.tab('f');
395+ k-b from:body -> ermite.tab('b');
396+ k-a from:body -> ermite.tab('a');
393397 k-c from:body -> ermite.tab('c');
394398 k-r from:body -> ermite.tab('r');
395399 k-m from:body -> ermite.tab('m');
@@ -405,7 +409,6 @@
405409 k-permalink from:body -> ermite.permalink();
406410 k-merge from:body -> window.ermiteMR?.openMerge();
407411 k-read from:body -> window.ermiteMR?.markRead();
408- k-gf from:body -> window.ermiteMR?.focusFiles();
409412 k-keys from:body -> ermite.toggleKeys()">
410413 </div>
411414 </body>
@@ -275,14 +275,16 @@
275 </div>275 </div>
276 <div>276 <div>
277 <dt>277 <dt>
278-<kbd>s</kbd>278+<kbd>g s</kbd>
279-<kbd>t</kbd>279+<kbd>g f</kbd>
280-<kbd>c</kbd>280+<kbd>g c</kbd>
281-<kbd>r</kbd>281+<kbd>g b</kbd>
282-<kbd>m</kbd>282+<kbd>g m</kbd>
283-<kbd>i</kbd>283+<kbd>g i</kbd>
284+<kbd>g r</kbd>
285+<kbd>g a</kbd>
284 </dt>286 </dt>
285-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>287+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
286 </div>288 </div>
287 <div>289 <div>
288 <dt>290 <dt>
@@ -389,7 +391,9 @@
389 k-filter from:body -> ermite.focusFilter();391 k-filter from:body -> ermite.focusFilter();
390 k-gh from:body -> ermite.go('.brand');392 k-gh from:body -> ermite.go('.brand');
391 k-s from:body -> ermite.tab('s');393 k-s from:body -> ermite.tab('s');
392- k-t from:body -> ermite.tab('t');394+ k-f from:body -> ermite.tab('f');
395+ k-b from:body -> ermite.tab('b');
396+ k-a from:body -> ermite.tab('a');
393 k-c from:body -> ermite.tab('c');397 k-c from:body -> ermite.tab('c');
394 k-r from:body -> ermite.tab('r');398 k-r from:body -> ermite.tab('r');
395 k-m from:body -> ermite.tab('m');399 k-m from:body -> ermite.tab('m');
@@ -405,7 +409,6 @@
405 k-permalink from:body -> ermite.permalink();409 k-permalink from:body -> ermite.permalink();
406 k-merge from:body -> window.ermiteMR?.openMerge();410 k-merge from:body -> window.ermiteMR?.openMerge();
407 k-read from:body -> window.ermiteMR?.markRead();411 k-read from:body -> window.ermiteMR?.markRead();
408- k-gf from:body -> window.ermiteMR?.focusFiles();
409 k-keys from:body -> ermite.toggleKeys()">412 k-keys from:body -> ermite.toggleKeys()">
410 </div>413 </div>
411 </body>414 </body>
M internal/app/testdata/web/not-found-page.html +12 -9
@@ -160,14 +160,16 @@
160160 </div>
161161 <div>
162162 <dt>
163-<kbd>s</kbd>
164-<kbd>t</kbd>
165-<kbd>c</kbd>
166-<kbd>r</kbd>
167-<kbd>m</kbd>
168-<kbd>i</kbd>
163+<kbd>g s</kbd>
164+<kbd>g f</kbd>
165+<kbd>g c</kbd>
166+<kbd>g b</kbd>
167+<kbd>g m</kbd>
168+<kbd>g i</kbd>
169+<kbd>g r</kbd>
170+<kbd>g a</kbd>
169171 </dt>
170-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
172+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
171173 </div>
172174 <div>
173175 <dt>
@@ -262,7 +264,9 @@
262264 k-filter from:body -> ermite.focusFilter();
263265 k-gh from:body -> ermite.go('.brand');
264266 k-s from:body -> ermite.tab('s');
265- k-t from:body -> ermite.tab('t');
267+ k-f from:body -> ermite.tab('f');
268+ k-b from:body -> ermite.tab('b');
269+ k-a from:body -> ermite.tab('a');
266270 k-c from:body -> ermite.tab('c');
267271 k-r from:body -> ermite.tab('r');
268272 k-m from:body -> ermite.tab('m');
@@ -278,7 +282,6 @@
278282 k-permalink from:body -> ermite.permalink();
279283 k-merge from:body -> window.ermiteMR?.openMerge();
280284 k-read from:body -> window.ermiteMR?.markRead();
281- k-gf from:body -> window.ermiteMR?.focusFiles();
282285 k-keys from:body -> ermite.toggleKeys()">
283286 </div>
284287 </body>
@@ -160,14 +160,16 @@
160 </div>160 </div>
161 <div>161 <div>
162 <dt>162 <dt>
163-<kbd>s</kbd>163+<kbd>g s</kbd>
164-<kbd>t</kbd>164+<kbd>g f</kbd>
165-<kbd>c</kbd>165+<kbd>g c</kbd>
166-<kbd>r</kbd>166+<kbd>g b</kbd>
167-<kbd>m</kbd>167+<kbd>g m</kbd>
168-<kbd>i</kbd>168+<kbd>g i</kbd>
169+<kbd>g r</kbd>
170+<kbd>g a</kbd>
169 </dt>171 </dt>
170-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>172+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
171 </div>173 </div>
172 <div>174 <div>
173 <dt>175 <dt>
@@ -262,7 +264,9 @@
262 k-filter from:body -> ermite.focusFilter();264 k-filter from:body -> ermite.focusFilter();
263 k-gh from:body -> ermite.go('.brand');265 k-gh from:body -> ermite.go('.brand');
264 k-s from:body -> ermite.tab('s');266 k-s from:body -> ermite.tab('s');
265- k-t from:body -> ermite.tab('t');267+ k-f from:body -> ermite.tab('f');
268+ k-b from:body -> ermite.tab('b');
269+ k-a from:body -> ermite.tab('a');
266 k-c from:body -> ermite.tab('c');270 k-c from:body -> ermite.tab('c');
267 k-r from:body -> ermite.tab('r');271 k-r from:body -> ermite.tab('r');
268 k-m from:body -> ermite.tab('m');272 k-m from:body -> ermite.tab('m');
@@ -278,7 +282,6 @@
278 k-permalink from:body -> ermite.permalink();282 k-permalink from:body -> ermite.permalink();
279 k-merge from:body -> window.ermiteMR?.openMerge();283 k-merge from:body -> window.ermiteMR?.openMerge();
280 k-read from:body -> window.ermiteMR?.markRead();284 k-read from:body -> window.ermiteMR?.markRead();
281- k-gf from:body -> window.ermiteMR?.focusFiles();
282 k-keys from:body -> ermite.toggleKeys()">285 k-keys from:body -> ermite.toggleKeys()">
283 </div>286 </div>
284 </body>287 </body>
M internal/app/testdata/web/not-found.html +12 -9
@@ -160,14 +160,16 @@
160160 </div>
161161 <div>
162162 <dt>
163-<kbd>s</kbd>
164-<kbd>t</kbd>
165-<kbd>c</kbd>
166-<kbd>r</kbd>
167-<kbd>m</kbd>
168-<kbd>i</kbd>
163+<kbd>g s</kbd>
164+<kbd>g f</kbd>
165+<kbd>g c</kbd>
166+<kbd>g b</kbd>
167+<kbd>g m</kbd>
168+<kbd>g i</kbd>
169+<kbd>g r</kbd>
170+<kbd>g a</kbd>
169171 </dt>
170-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
172+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
171173 </div>
172174 <div>
173175 <dt>
@@ -262,7 +264,9 @@
262264 k-filter from:body -> ermite.focusFilter();
263265 k-gh from:body -> ermite.go('.brand');
264266 k-s from:body -> ermite.tab('s');
265- k-t from:body -> ermite.tab('t');
267+ k-f from:body -> ermite.tab('f');
268+ k-b from:body -> ermite.tab('b');
269+ k-a from:body -> ermite.tab('a');
266270 k-c from:body -> ermite.tab('c');
267271 k-r from:body -> ermite.tab('r');
268272 k-m from:body -> ermite.tab('m');
@@ -278,7 +282,6 @@
278282 k-permalink from:body -> ermite.permalink();
279283 k-merge from:body -> window.ermiteMR?.openMerge();
280284 k-read from:body -> window.ermiteMR?.markRead();
281- k-gf from:body -> window.ermiteMR?.focusFiles();
282285 k-keys from:body -> ermite.toggleKeys()">
283286 </div>
284287 </body>
@@ -160,14 +160,16 @@
160 </div>160 </div>
161 <div>161 <div>
162 <dt>162 <dt>
163-<kbd>s</kbd>163+<kbd>g s</kbd>
164-<kbd>t</kbd>164+<kbd>g f</kbd>
165-<kbd>c</kbd>165+<kbd>g c</kbd>
166-<kbd>r</kbd>166+<kbd>g b</kbd>
167-<kbd>m</kbd>167+<kbd>g m</kbd>
168-<kbd>i</kbd>168+<kbd>g i</kbd>
169+<kbd>g r</kbd>
170+<kbd>g a</kbd>
169 </dt>171 </dt>
170-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>172+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
171 </div>173 </div>
172 <div>174 <div>
173 <dt>175 <dt>
@@ -262,7 +264,9 @@
262 k-filter from:body -> ermite.focusFilter();264 k-filter from:body -> ermite.focusFilter();
263 k-gh from:body -> ermite.go('.brand');265 k-gh from:body -> ermite.go('.brand');
264 k-s from:body -> ermite.tab('s');266 k-s from:body -> ermite.tab('s');
265- k-t from:body -> ermite.tab('t');267+ k-f from:body -> ermite.tab('f');
268+ k-b from:body -> ermite.tab('b');
269+ k-a from:body -> ermite.tab('a');
266 k-c from:body -> ermite.tab('c');270 k-c from:body -> ermite.tab('c');
267 k-r from:body -> ermite.tab('r');271 k-r from:body -> ermite.tab('r');
268 k-m from:body -> ermite.tab('m');272 k-m from:body -> ermite.tab('m');
@@ -278,7 +282,6 @@
278 k-permalink from:body -> ermite.permalink();282 k-permalink from:body -> ermite.permalink();
279 k-merge from:body -> window.ermiteMR?.openMerge();283 k-merge from:body -> window.ermiteMR?.openMerge();
280 k-read from:body -> window.ermiteMR?.markRead();284 k-read from:body -> window.ermiteMR?.markRead();
281- k-gf from:body -> window.ermiteMR?.focusFiles();
282 k-keys from:body -> ermite.toggleKeys()">285 k-keys from:body -> ermite.toggleKeys()">
283 </div>286 </div>
284 </body>287 </body>
M internal/app/testdata/web/refs.html +33 -30
@@ -67,31 +67,31 @@
6767 <nav class="tabs" aria-label="Sections">
6868 <ul>
6969 <li>
70-<a href="/demo" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
70+<a href="/demo" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7171 </a>
7272 </li>
7373 <li>
74-<a href="/demo/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
74+<a href="/demo/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
7575 </a>
7676 </li>
7777 <li>
78-<a href="/demo/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
78+<a href="/demo/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
7979 </a>
8080 </li>
8181 <li>
82-<a href="/demo/refs" data-key="r" aria-keyshortcuts="r" aria-current="page">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
82+<a href="/demo/refs" data-key="g b" aria-current="page">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8383 </a>
8484 </li>
8585 <li>
86-<a href="/demo/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
86+<a href="/demo/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
8787 </a>
8888 </li>
8989 <li>
90-<a href="/demo/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
90+<a href="/demo/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9191 </a>
9292 </li>
9393 <li>
94-<a href="/demo/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
94+<a href="/demo/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
9595 </a>
9696 </li>
9797 </ul>
@@ -285,14 +285,16 @@
285285 </div>
286286 <div>
287287 <dt>
288-<kbd>s</kbd>
289-<kbd>t</kbd>
290-<kbd>c</kbd>
291-<kbd>r</kbd>
292-<kbd>m</kbd>
293-<kbd>i</kbd>
288+<kbd>g s</kbd>
289+<kbd>g f</kbd>
290+<kbd>g c</kbd>
291+<kbd>g b</kbd>
292+<kbd>g m</kbd>
293+<kbd>g i</kbd>
294+<kbd>g r</kbd>
295+<kbd>g a</kbd>
294296 </dt>
295-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
297+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
296298 </div>
297299 <div>
298300 <dt>
@@ -395,45 +397,45 @@
395397 <span class="k">go</span>
396398 </a>
397399 </li>
398-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
400+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
399401 <a href="/demo" tabindex="-1">
400-<span class="lbl">summary</span>
402+<span class="lbl">summary (g s)</span>
401403 <span class="k">section</span>
402404 </a>
403405 </li>
404-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
406+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
405407 <a href="/demo/tree/main" tabindex="-1">
406-<span class="lbl">files</span>
408+<span class="lbl">files (g f)</span>
407409 <span class="k">section</span>
408410 </a>
409411 </li>
410-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
412+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
411413 <a href="/demo/commits/main" tabindex="-1">
412-<span class="lbl">commits</span>
414+<span class="lbl">commits (g c)</span>
413415 <span class="k">section</span>
414416 </a>
415417 </li>
416-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
418+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
417419 <a href="/demo/refs" tabindex="-1">
418-<span class="lbl">branches &amp; tags</span>
420+<span class="lbl">branches &amp; tags (g b)</span>
419421 <span class="k">section</span>
420422 </a>
421423 </li>
422-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
424+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
423425 <a href="/demo/merge-requests" tabindex="-1">
424-<span class="lbl">merge requests</span>
426+<span class="lbl">merge requests (g m)</span>
425427 <span class="k">section</span>
426428 </a>
427429 </li>
428-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
430+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
429431 <a href="/demo/releases" tabindex="-1">
430-<span class="lbl">releases</span>
432+<span class="lbl">releases (g r)</span>
431433 <span class="k">section</span>
432434 </a>
433435 </li>
434-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
436+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
435437 <a href="/demo/actions" tabindex="-1">
436-<span class="lbl">actions</span>
438+<span class="lbl">actions (g a)</span>
437439 <span class="k">section</span>
438440 </a>
439441 </li>
@@ -498,7 +500,9 @@
498500 k-filter from:body -> ermite.focusFilter();
499501 k-gh from:body -> ermite.go('.brand');
500502 k-s from:body -> ermite.tab('s');
501- k-t from:body -> ermite.tab('t');
503+ k-f from:body -> ermite.tab('f');
504+ k-b from:body -> ermite.tab('b');
505+ k-a from:body -> ermite.tab('a');
502506 k-c from:body -> ermite.tab('c');
503507 k-r from:body -> ermite.tab('r');
504508 k-m from:body -> ermite.tab('m');
@@ -514,7 +518,6 @@
514518 k-permalink from:body -> ermite.permalink();
515519 k-merge from:body -> window.ermiteMR?.openMerge();
516520 k-read from:body -> window.ermiteMR?.markRead();
517- k-gf from:body -> window.ermiteMR?.focusFiles();
518521 k-keys from:body -> ermite.toggleKeys()">
519522 </div>
520523 </body>
@@ -67,31 +67,31 @@
67 <nav class="tabs" aria-label="Sections">67 <nav class="tabs" aria-label="Sections">
68 <ul>68 <ul>
69 <li>69 <li>
70-<a href="/demo" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>70+<a href="/demo" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
71 </a>71 </a>
72 </li>72 </li>
73 <li>73 <li>
74-<a href="/demo/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>74+<a href="/demo/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
75 </a>75 </a>
76 </li>76 </li>
77 <li>77 <li>
78-<a href="/demo/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>78+<a href="/demo/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
79 </a>79 </a>
80 </li>80 </li>
81 <li>81 <li>
82-<a href="/demo/refs" data-key="r" aria-keyshortcuts="r" aria-current="page">Branches &amp; tags <kbd aria-hidden="true">r</kbd>82+<a href="/demo/refs" data-key="g b" aria-current="page">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
83 </a>83 </a>
84 </li>84 </li>
85 <li>85 <li>
86-<a href="/demo/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>86+<a href="/demo/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
87 </a>87 </a>
88 </li>88 </li>
89 <li>89 <li>
90-<a href="/demo/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>90+<a href="/demo/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
91 </a>91 </a>
92 </li>92 </li>
93 <li>93 <li>
94-<a href="/demo/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>94+<a href="/demo/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
95 </a>95 </a>
96 </li>96 </li>
97 </ul>97 </ul>
@@ -285,14 +285,16 @@
285 </div>285 </div>
286 <div>286 <div>
287 <dt>287 <dt>
288-<kbd>s</kbd>288+<kbd>g s</kbd>
289-<kbd>t</kbd>289+<kbd>g f</kbd>
290-<kbd>c</kbd>290+<kbd>g c</kbd>
291-<kbd>r</kbd>291+<kbd>g b</kbd>
292-<kbd>m</kbd>292+<kbd>g m</kbd>
293-<kbd>i</kbd>293+<kbd>g i</kbd>
294+<kbd>g r</kbd>
295+<kbd>g a</kbd>
294 </dt>296 </dt>
295-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>297+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
296 </div>298 </div>
297 <div>299 <div>
298 <dt>300 <dt>
@@ -395,45 +397,45 @@
395 <span class="k">go</span>397 <span class="k">go</span>
396 </a>398 </a>
397 </li>399 </li>
398-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">400+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
399 <a href="/demo" tabindex="-1">401 <a href="/demo" tabindex="-1">
400-<span class="lbl">summary</span>402+<span class="lbl">summary (g s)</span>
401 <span class="k">section</span>403 <span class="k">section</span>
402 </a>404 </a>
403 </li>405 </li>
404-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">406+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
405 <a href="/demo/tree/main" tabindex="-1">407 <a href="/demo/tree/main" tabindex="-1">
406-<span class="lbl">files</span>408+<span class="lbl">files (g f)</span>
407 <span class="k">section</span>409 <span class="k">section</span>
408 </a>410 </a>
409 </li>411 </li>
410-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">412+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
411 <a href="/demo/commits/main" tabindex="-1">413 <a href="/demo/commits/main" tabindex="-1">
412-<span class="lbl">commits</span>414+<span class="lbl">commits (g c)</span>
413 <span class="k">section</span>415 <span class="k">section</span>
414 </a>416 </a>
415 </li>417 </li>
416-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">418+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
417 <a href="/demo/refs" tabindex="-1">419 <a href="/demo/refs" tabindex="-1">
418-<span class="lbl">branches &amp; tags</span>420+<span class="lbl">branches &amp; tags (g b)</span>
419 <span class="k">section</span>421 <span class="k">section</span>
420 </a>422 </a>
421 </li>423 </li>
422-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">424+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
423 <a href="/demo/merge-requests" tabindex="-1">425 <a href="/demo/merge-requests" tabindex="-1">
424-<span class="lbl">merge requests</span>426+<span class="lbl">merge requests (g m)</span>
425 <span class="k">section</span>427 <span class="k">section</span>
426 </a>428 </a>
427 </li>429 </li>
428-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">430+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
429 <a href="/demo/releases" tabindex="-1">431 <a href="/demo/releases" tabindex="-1">
430-<span class="lbl">releases</span>432+<span class="lbl">releases (g r)</span>
431 <span class="k">section</span>433 <span class="k">section</span>
432 </a>434 </a>
433 </li>435 </li>
434-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">436+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
435 <a href="/demo/actions" tabindex="-1">437 <a href="/demo/actions" tabindex="-1">
436-<span class="lbl">actions</span>438+<span class="lbl">actions (g a)</span>
437 <span class="k">section</span>439 <span class="k">section</span>
438 </a>440 </a>
439 </li>441 </li>
@@ -498,7 +500,9 @@
498 k-filter from:body -> ermite.focusFilter();500 k-filter from:body -> ermite.focusFilter();
499 k-gh from:body -> ermite.go('.brand');501 k-gh from:body -> ermite.go('.brand');
500 k-s from:body -> ermite.tab('s');502 k-s from:body -> ermite.tab('s');
501- k-t from:body -> ermite.tab('t');503+ k-f from:body -> ermite.tab('f');
504+ k-b from:body -> ermite.tab('b');
505+ k-a from:body -> ermite.tab('a');
502 k-c from:body -> ermite.tab('c');506 k-c from:body -> ermite.tab('c');
503 k-r from:body -> ermite.tab('r');507 k-r from:body -> ermite.tab('r');
504 k-m from:body -> ermite.tab('m');508 k-m from:body -> ermite.tab('m');
@@ -514,7 +518,6 @@
514 k-permalink from:body -> ermite.permalink();518 k-permalink from:body -> ermite.permalink();
515 k-merge from:body -> window.ermiteMR?.openMerge();519 k-merge from:body -> window.ermiteMR?.openMerge();
516 k-read from:body -> window.ermiteMR?.markRead();520 k-read from:body -> window.ermiteMR?.markRead();
517- k-gf from:body -> window.ermiteMR?.focusFiles();
518 k-keys from:body -> ermite.toggleKeys()">521 k-keys from:body -> ermite.toggleKeys()">
519 </div>522 </div>
520 </body>523 </body>
M internal/app/testdata/web/summary.html +33 -30
@@ -64,31 +64,31 @@
6464 <nav class="tabs" aria-label="Sections">
6565 <ul>
6666 <li>
67-<a href="/demo" data-key="s" aria-keyshortcuts="s" aria-current="page">Summary <kbd aria-hidden="true">s</kbd>
67+<a href="/demo" data-key="g s" aria-current="page">Summary <kbd aria-hidden="true">g s</kbd>
6868 </a>
6969 </li>
7070 <li>
71-<a href="/demo/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>
71+<a href="/demo/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
7272 </a>
7373 </li>
7474 <li>
75-<a href="/demo/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
75+<a href="/demo/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
7676 </a>
7777 </li>
7878 <li>
79-<a href="/demo/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
79+<a href="/demo/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/demo/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
83+<a href="/demo/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/demo/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
87+<a href="/demo/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/demo/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
91+<a href="/demo/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
9292 </a>
9393 </li>
9494 </ul>
@@ -311,14 +311,16 @@
311311 </div>
312312 <div>
313313 <dt>
314-<kbd>s</kbd>
315-<kbd>t</kbd>
316-<kbd>c</kbd>
317-<kbd>r</kbd>
318-<kbd>m</kbd>
319-<kbd>i</kbd>
314+<kbd>g s</kbd>
315+<kbd>g f</kbd>
316+<kbd>g c</kbd>
317+<kbd>g b</kbd>
318+<kbd>g m</kbd>
319+<kbd>g i</kbd>
320+<kbd>g r</kbd>
321+<kbd>g a</kbd>
320322 </dt>
321-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
323+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
322324 </div>
323325 <div>
324326 <dt>
@@ -421,45 +423,45 @@
421423 <span class="k">go</span>
422424 </a>
423425 </li>
424-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
426+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
425427 <a href="/demo" tabindex="-1">
426-<span class="lbl">summary</span>
428+<span class="lbl">summary (g s)</span>
427429 <span class="k">section</span>
428430 </a>
429431 </li>
430-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
432+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
431433 <a href="/demo/tree/main" tabindex="-1">
432-<span class="lbl">files</span>
434+<span class="lbl">files (g f)</span>
433435 <span class="k">section</span>
434436 </a>
435437 </li>
436-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
438+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
437439 <a href="/demo/commits/main" tabindex="-1">
438-<span class="lbl">commits</span>
440+<span class="lbl">commits (g c)</span>
439441 <span class="k">section</span>
440442 </a>
441443 </li>
442-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
444+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
443445 <a href="/demo/refs" tabindex="-1">
444-<span class="lbl">branches &amp; tags</span>
446+<span class="lbl">branches &amp; tags (g b)</span>
445447 <span class="k">section</span>
446448 </a>
447449 </li>
448-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
450+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
449451 <a href="/demo/merge-requests" tabindex="-1">
450-<span class="lbl">merge requests</span>
452+<span class="lbl">merge requests (g m)</span>
451453 <span class="k">section</span>
452454 </a>
453455 </li>
454-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
456+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
455457 <a href="/demo/releases" tabindex="-1">
456-<span class="lbl">releases</span>
458+<span class="lbl">releases (g r)</span>
457459 <span class="k">section</span>
458460 </a>
459461 </li>
460-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
462+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
461463 <a href="/demo/actions" tabindex="-1">
462-<span class="lbl">actions</span>
464+<span class="lbl">actions (g a)</span>
463465 <span class="k">section</span>
464466 </a>
465467 </li>
@@ -524,7 +526,9 @@
524526 k-filter from:body -> ermite.focusFilter();
525527 k-gh from:body -> ermite.go('.brand');
526528 k-s from:body -> ermite.tab('s');
527- k-t from:body -> ermite.tab('t');
529+ k-f from:body -> ermite.tab('f');
530+ k-b from:body -> ermite.tab('b');
531+ k-a from:body -> ermite.tab('a');
528532 k-c from:body -> ermite.tab('c');
529533 k-r from:body -> ermite.tab('r');
530534 k-m from:body -> ermite.tab('m');
@@ -540,7 +544,6 @@
540544 k-permalink from:body -> ermite.permalink();
541545 k-merge from:body -> window.ermiteMR?.openMerge();
542546 k-read from:body -> window.ermiteMR?.markRead();
543- k-gf from:body -> window.ermiteMR?.focusFiles();
544547 k-keys from:body -> ermite.toggleKeys()">
545548 </div>
546549 </body>
@@ -64,31 +64,31 @@
64 <nav class="tabs" aria-label="Sections">64 <nav class="tabs" aria-label="Sections">
65 <ul>65 <ul>
66 <li>66 <li>
67-<a href="/demo" data-key="s" aria-keyshortcuts="s" aria-current="page">Summary <kbd aria-hidden="true">s</kbd>67+<a href="/demo" data-key="g s" aria-current="page">Summary <kbd aria-hidden="true">g s</kbd>
68 </a>68 </a>
69 </li>69 </li>
70 <li>70 <li>
71-<a href="/demo/tree/main" data-key="t" aria-keyshortcuts="t">Files <kbd aria-hidden="true">t</kbd>71+<a href="/demo/tree/main" data-key="g f">Files <kbd aria-hidden="true">g f</kbd>
72 </a>72 </a>
73 </li>73 </li>
74 <li>74 <li>
75-<a href="/demo/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>75+<a href="/demo/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
76 </a>76 </a>
77 </li>77 </li>
78 <li>78 <li>
79-<a href="/demo/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>79+<a href="/demo/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/demo/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>83+<a href="/demo/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/demo/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>87+<a href="/demo/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/demo/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>91+<a href="/demo/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 </ul>94 </ul>
@@ -311,14 +311,16 @@
311 </div>311 </div>
312 <div>312 <div>
313 <dt>313 <dt>
314-<kbd>s</kbd>314+<kbd>g s</kbd>
315-<kbd>t</kbd>315+<kbd>g f</kbd>
316-<kbd>c</kbd>316+<kbd>g c</kbd>
317-<kbd>r</kbd>317+<kbd>g b</kbd>
318-<kbd>m</kbd>318+<kbd>g m</kbd>
319-<kbd>i</kbd>319+<kbd>g i</kbd>
320+<kbd>g r</kbd>
321+<kbd>g a</kbd>
320 </dt>322 </dt>
321-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>323+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
322 </div>324 </div>
323 <div>325 <div>
324 <dt>326 <dt>
@@ -421,45 +423,45 @@
421 <span class="k">go</span>423 <span class="k">go</span>
422 </a>424 </a>
423 </li>425 </li>
424-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">426+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
425 <a href="/demo" tabindex="-1">427 <a href="/demo" tabindex="-1">
426-<span class="lbl">summary</span>428+<span class="lbl">summary (g s)</span>
427 <span class="k">section</span>429 <span class="k">section</span>
428 </a>430 </a>
429 </li>431 </li>
430-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">432+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
431 <a href="/demo/tree/main" tabindex="-1">433 <a href="/demo/tree/main" tabindex="-1">
432-<span class="lbl">files</span>434+<span class="lbl">files (g f)</span>
433 <span class="k">section</span>435 <span class="k">section</span>
434 </a>436 </a>
435 </li>437 </li>
436-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">438+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
437 <a href="/demo/commits/main" tabindex="-1">439 <a href="/demo/commits/main" tabindex="-1">
438-<span class="lbl">commits</span>440+<span class="lbl">commits (g c)</span>
439 <span class="k">section</span>441 <span class="k">section</span>
440 </a>442 </a>
441 </li>443 </li>
442-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">444+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
443 <a href="/demo/refs" tabindex="-1">445 <a href="/demo/refs" tabindex="-1">
444-<span class="lbl">branches &amp; tags</span>446+<span class="lbl">branches &amp; tags (g b)</span>
445 <span class="k">section</span>447 <span class="k">section</span>
446 </a>448 </a>
447 </li>449 </li>
448-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">450+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
449 <a href="/demo/merge-requests" tabindex="-1">451 <a href="/demo/merge-requests" tabindex="-1">
450-<span class="lbl">merge requests</span>452+<span class="lbl">merge requests (g m)</span>
451 <span class="k">section</span>453 <span class="k">section</span>
452 </a>454 </a>
453 </li>455 </li>
454-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">456+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
455 <a href="/demo/releases" tabindex="-1">457 <a href="/demo/releases" tabindex="-1">
456-<span class="lbl">releases</span>458+<span class="lbl">releases (g r)</span>
457 <span class="k">section</span>459 <span class="k">section</span>
458 </a>460 </a>
459 </li>461 </li>
460-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">462+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
461 <a href="/demo/actions" tabindex="-1">463 <a href="/demo/actions" tabindex="-1">
462-<span class="lbl">actions</span>464+<span class="lbl">actions (g a)</span>
463 <span class="k">section</span>465 <span class="k">section</span>
464 </a>466 </a>
465 </li>467 </li>
@@ -524,7 +526,9 @@
524 k-filter from:body -> ermite.focusFilter();526 k-filter from:body -> ermite.focusFilter();
525 k-gh from:body -> ermite.go('.brand');527 k-gh from:body -> ermite.go('.brand');
526 k-s from:body -> ermite.tab('s');528 k-s from:body -> ermite.tab('s');
527- k-t from:body -> ermite.tab('t');529+ k-f from:body -> ermite.tab('f');
530+ k-b from:body -> ermite.tab('b');
531+ k-a from:body -> ermite.tab('a');
528 k-c from:body -> ermite.tab('c');532 k-c from:body -> ermite.tab('c');
529 k-r from:body -> ermite.tab('r');533 k-r from:body -> ermite.tab('r');
530 k-m from:body -> ermite.tab('m');534 k-m from:body -> ermite.tab('m');
@@ -540,7 +544,6 @@
540 k-permalink from:body -> ermite.permalink();544 k-permalink from:body -> ermite.permalink();
541 k-merge from:body -> window.ermiteMR?.openMerge();545 k-merge from:body -> window.ermiteMR?.openMerge();
542 k-read from:body -> window.ermiteMR?.markRead();546 k-read from:body -> window.ermiteMR?.markRead();
543- k-gf from:body -> window.ermiteMR?.focusFiles();
544 k-keys from:body -> ermite.toggleKeys()">547 k-keys from:body -> ermite.toggleKeys()">
545 </div>548 </div>
546 </body>549 </body>
M internal/app/testdata/web/tree-nested.html +33 -30
@@ -76,31 +76,31 @@
7676 <nav class="tabs" aria-label="Sections">
7777 <ul>
7878 <li>
79-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
79+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
8080 </a>
8181 </li>
8282 <li>
83-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
83+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8484 </a>
8585 </li>
8686 <li>
87-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
87+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8888 </a>
8989 </li>
9090 <li>
91-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
91+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
9292 </a>
9393 </li>
9494 <li>
95-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
95+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9696 </a>
9797 </li>
9898 <li>
99-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
99+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
100100 </a>
101101 </li>
102102 <li>
103-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
103+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
104104 </a>
105105 </li>
106106 </ul>
@@ -241,14 +241,16 @@
241241 </div>
242242 <div>
243243 <dt>
244-<kbd>s</kbd>
245-<kbd>t</kbd>
246-<kbd>c</kbd>
247-<kbd>r</kbd>
248-<kbd>m</kbd>
249-<kbd>i</kbd>
244+<kbd>g s</kbd>
245+<kbd>g f</kbd>
246+<kbd>g c</kbd>
247+<kbd>g b</kbd>
248+<kbd>g m</kbd>
249+<kbd>g i</kbd>
250+<kbd>g r</kbd>
251+<kbd>g a</kbd>
250252 </dt>
251-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
253+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
252254 </div>
253255 <div>
254256 <dt>
@@ -347,45 +349,45 @@
347349 <span class="k">go</span>
348350 </a>
349351 </li>
350-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
352+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
351353 <a href="/files" tabindex="-1">
352-<span class="lbl">summary</span>
354+<span class="lbl">summary (g s)</span>
353355 <span class="k">section</span>
354356 </a>
355357 </li>
356-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
358+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
357359 <a href="/files/tree/main" tabindex="-1">
358-<span class="lbl">files</span>
360+<span class="lbl">files (g f)</span>
359361 <span class="k">section</span>
360362 </a>
361363 </li>
362-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
364+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
363365 <a href="/files/commits/main" tabindex="-1">
364-<span class="lbl">commits</span>
366+<span class="lbl">commits (g c)</span>
365367 <span class="k">section</span>
366368 </a>
367369 </li>
368-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
370+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
369371 <a href="/files/refs" tabindex="-1">
370-<span class="lbl">branches &amp; tags</span>
372+<span class="lbl">branches &amp; tags (g b)</span>
371373 <span class="k">section</span>
372374 </a>
373375 </li>
374-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
376+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
375377 <a href="/files/merge-requests" tabindex="-1">
376-<span class="lbl">merge requests</span>
378+<span class="lbl">merge requests (g m)</span>
377379 <span class="k">section</span>
378380 </a>
379381 </li>
380-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
382+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
381383 <a href="/files/releases" tabindex="-1">
382-<span class="lbl">releases</span>
384+<span class="lbl">releases (g r)</span>
383385 <span class="k">section</span>
384386 </a>
385387 </li>
386-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
388+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
387389 <a href="/files/actions" tabindex="-1">
388-<span class="lbl">actions</span>
390+<span class="lbl">actions (g a)</span>
389391 <span class="k">section</span>
390392 </a>
391393 </li>
@@ -438,7 +440,9 @@
438440 k-filter from:body -> ermite.focusFilter();
439441 k-gh from:body -> ermite.go('.brand');
440442 k-s from:body -> ermite.tab('s');
441- k-t from:body -> ermite.tab('t');
443+ k-f from:body -> ermite.tab('f');
444+ k-b from:body -> ermite.tab('b');
445+ k-a from:body -> ermite.tab('a');
442446 k-c from:body -> ermite.tab('c');
443447 k-r from:body -> ermite.tab('r');
444448 k-m from:body -> ermite.tab('m');
@@ -454,7 +458,6 @@
454458 k-permalink from:body -> ermite.permalink();
455459 k-merge from:body -> window.ermiteMR?.openMerge();
456460 k-read from:body -> window.ermiteMR?.markRead();
457- k-gf from:body -> window.ermiteMR?.focusFiles();
458461 k-keys from:body -> ermite.toggleKeys()">
459462 </div>
460463 </body>
@@ -76,31 +76,31 @@
76 <nav class="tabs" aria-label="Sections">76 <nav class="tabs" aria-label="Sections">
77 <ul>77 <ul>
78 <li>78 <li>
79-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>79+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
80 </a>80 </a>
81 </li>81 </li>
82 <li>82 <li>
83-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>83+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
84 </a>84 </a>
85 </li>85 </li>
86 <li>86 <li>
87-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>87+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
88 </a>88 </a>
89 </li>89 </li>
90 <li>90 <li>
91-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>91+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
92 </a>92 </a>
93 </li>93 </li>
94 <li>94 <li>
95-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>95+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
96 </a>96 </a>
97 </li>97 </li>
98 <li>98 <li>
99-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>99+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
100 </a>100 </a>
101 </li>101 </li>
102 <li>102 <li>
103-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>103+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
104 </a>104 </a>
105 </li>105 </li>
106 </ul>106 </ul>
@@ -241,14 +241,16 @@
241 </div>241 </div>
242 <div>242 <div>
243 <dt>243 <dt>
244-<kbd>s</kbd>244+<kbd>g s</kbd>
245-<kbd>t</kbd>245+<kbd>g f</kbd>
246-<kbd>c</kbd>246+<kbd>g c</kbd>
247-<kbd>r</kbd>247+<kbd>g b</kbd>
248-<kbd>m</kbd>248+<kbd>g m</kbd>
249-<kbd>i</kbd>249+<kbd>g i</kbd>
250+<kbd>g r</kbd>
251+<kbd>g a</kbd>
250 </dt>252 </dt>
251-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>253+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
252 </div>254 </div>
253 <div>255 <div>
254 <dt>256 <dt>
@@ -347,45 +349,45 @@
347 <span class="k">go</span>349 <span class="k">go</span>
348 </a>350 </a>
349 </li>351 </li>
350-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">352+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
351 <a href="/files" tabindex="-1">353 <a href="/files" tabindex="-1">
352-<span class="lbl">summary</span>354+<span class="lbl">summary (g s)</span>
353 <span class="k">section</span>355 <span class="k">section</span>
354 </a>356 </a>
355 </li>357 </li>
356-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">358+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
357 <a href="/files/tree/main" tabindex="-1">359 <a href="/files/tree/main" tabindex="-1">
358-<span class="lbl">files</span>360+<span class="lbl">files (g f)</span>
359 <span class="k">section</span>361 <span class="k">section</span>
360 </a>362 </a>
361 </li>363 </li>
362-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">364+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
363 <a href="/files/commits/main" tabindex="-1">365 <a href="/files/commits/main" tabindex="-1">
364-<span class="lbl">commits</span>366+<span class="lbl">commits (g c)</span>
365 <span class="k">section</span>367 <span class="k">section</span>
366 </a>368 </a>
367 </li>369 </li>
368-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">370+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
369 <a href="/files/refs" tabindex="-1">371 <a href="/files/refs" tabindex="-1">
370-<span class="lbl">branches &amp; tags</span>372+<span class="lbl">branches &amp; tags (g b)</span>
371 <span class="k">section</span>373 <span class="k">section</span>
372 </a>374 </a>
373 </li>375 </li>
374-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">376+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
375 <a href="/files/merge-requests" tabindex="-1">377 <a href="/files/merge-requests" tabindex="-1">
376-<span class="lbl">merge requests</span>378+<span class="lbl">merge requests (g m)</span>
377 <span class="k">section</span>379 <span class="k">section</span>
378 </a>380 </a>
379 </li>381 </li>
380-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">382+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
381 <a href="/files/releases" tabindex="-1">383 <a href="/files/releases" tabindex="-1">
382-<span class="lbl">releases</span>384+<span class="lbl">releases (g r)</span>
383 <span class="k">section</span>385 <span class="k">section</span>
384 </a>386 </a>
385 </li>387 </li>
386-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">388+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
387 <a href="/files/actions" tabindex="-1">389 <a href="/files/actions" tabindex="-1">
388-<span class="lbl">actions</span>390+<span class="lbl">actions (g a)</span>
389 <span class="k">section</span>391 <span class="k">section</span>
390 </a>392 </a>
391 </li>393 </li>
@@ -438,7 +440,9 @@
438 k-filter from:body -> ermite.focusFilter();440 k-filter from:body -> ermite.focusFilter();
439 k-gh from:body -> ermite.go('.brand');441 k-gh from:body -> ermite.go('.brand');
440 k-s from:body -> ermite.tab('s');442 k-s from:body -> ermite.tab('s');
441- k-t from:body -> ermite.tab('t');443+ k-f from:body -> ermite.tab('f');
444+ k-b from:body -> ermite.tab('b');
445+ k-a from:body -> ermite.tab('a');
442 k-c from:body -> ermite.tab('c');446 k-c from:body -> ermite.tab('c');
443 k-r from:body -> ermite.tab('r');447 k-r from:body -> ermite.tab('r');
444 k-m from:body -> ermite.tab('m');448 k-m from:body -> ermite.tab('m');
@@ -454,7 +458,6 @@
454 k-permalink from:body -> ermite.permalink();458 k-permalink from:body -> ermite.permalink();
455 k-merge from:body -> window.ermiteMR?.openMerge();459 k-merge from:body -> window.ermiteMR?.openMerge();
456 k-read from:body -> window.ermiteMR?.markRead();460 k-read from:body -> window.ermiteMR?.markRead();
457- k-gf from:body -> window.ermiteMR?.focusFiles();
458 k-keys from:body -> ermite.toggleKeys()">461 k-keys from:body -> ermite.toggleKeys()">
459 </div>462 </div>
460 </body>463 </body>
M internal/app/testdata/web/tree-root.html +33 -30
@@ -70,31 +70,31 @@
7070 <nav class="tabs" aria-label="Sections">
7171 <ul>
7272 <li>
73-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
73+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7474 </a>
7575 </li>
7676 <li>
77-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
77+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
7878 </a>
7979 </li>
8080 <li>
81-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
81+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8282 </a>
8383 </li>
8484 <li>
85-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
85+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8686 </a>
8787 </li>
8888 <li>
89-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
89+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9090 </a>
9191 </li>
9292 <li>
93-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
93+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9494 </a>
9595 </li>
9696 <li>
97-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
97+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
9898 </a>
9999 </li>
100100 </ul>
@@ -462,14 +462,16 @@
462462 </div>
463463 <div>
464464 <dt>
465-<kbd>s</kbd>
466-<kbd>t</kbd>
467-<kbd>c</kbd>
468-<kbd>r</kbd>
469-<kbd>m</kbd>
470-<kbd>i</kbd>
465+<kbd>g s</kbd>
466+<kbd>g f</kbd>
467+<kbd>g c</kbd>
468+<kbd>g b</kbd>
469+<kbd>g m</kbd>
470+<kbd>g i</kbd>
471+<kbd>g r</kbd>
472+<kbd>g a</kbd>
471473 </dt>
472-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
474+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
473475 </div>
474476 <div>
475477 <dt>
@@ -568,45 +570,45 @@
568570 <span class="k">go</span>
569571 </a>
570572 </li>
571-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
573+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
572574 <a href="/files" tabindex="-1">
573-<span class="lbl">summary</span>
575+<span class="lbl">summary (g s)</span>
574576 <span class="k">section</span>
575577 </a>
576578 </li>
577-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
579+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
578580 <a href="/files/tree/main" tabindex="-1">
579-<span class="lbl">files</span>
581+<span class="lbl">files (g f)</span>
580582 <span class="k">section</span>
581583 </a>
582584 </li>
583-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
585+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
584586 <a href="/files/commits/main" tabindex="-1">
585-<span class="lbl">commits</span>
587+<span class="lbl">commits (g c)</span>
586588 <span class="k">section</span>
587589 </a>
588590 </li>
589-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
591+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
590592 <a href="/files/refs" tabindex="-1">
591-<span class="lbl">branches &amp; tags</span>
593+<span class="lbl">branches &amp; tags (g b)</span>
592594 <span class="k">section</span>
593595 </a>
594596 </li>
595-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
597+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
596598 <a href="/files/merge-requests" tabindex="-1">
597-<span class="lbl">merge requests</span>
599+<span class="lbl">merge requests (g m)</span>
598600 <span class="k">section</span>
599601 </a>
600602 </li>
601-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
603+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
602604 <a href="/files/releases" tabindex="-1">
603-<span class="lbl">releases</span>
605+<span class="lbl">releases (g r)</span>
604606 <span class="k">section</span>
605607 </a>
606608 </li>
607-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
609+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
608610 <a href="/files/actions" tabindex="-1">
609-<span class="lbl">actions</span>
611+<span class="lbl">actions (g a)</span>
610612 <span class="k">section</span>
611613 </a>
612614 </li>
@@ -659,7 +661,9 @@
659661 k-filter from:body -> ermite.focusFilter();
660662 k-gh from:body -> ermite.go('.brand');
661663 k-s from:body -> ermite.tab('s');
662- k-t from:body -> ermite.tab('t');
664+ k-f from:body -> ermite.tab('f');
665+ k-b from:body -> ermite.tab('b');
666+ k-a from:body -> ermite.tab('a');
663667 k-c from:body -> ermite.tab('c');
664668 k-r from:body -> ermite.tab('r');
665669 k-m from:body -> ermite.tab('m');
@@ -675,7 +679,6 @@
675679 k-permalink from:body -> ermite.permalink();
676680 k-merge from:body -> window.ermiteMR?.openMerge();
677681 k-read from:body -> window.ermiteMR?.markRead();
678- k-gf from:body -> window.ermiteMR?.focusFiles();
679682 k-keys from:body -> ermite.toggleKeys()">
680683 </div>
681684 </body>
@@ -70,31 +70,31 @@
70 <nav class="tabs" aria-label="Sections">70 <nav class="tabs" aria-label="Sections">
71 <ul>71 <ul>
72 <li>72 <li>
73-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>73+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
74 </a>74 </a>
75 </li>75 </li>
76 <li>76 <li>
77-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>77+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
78 </a>78 </a>
79 </li>79 </li>
80 <li>80 <li>
81-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>81+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
82 </a>82 </a>
83 </li>83 </li>
84 <li>84 <li>
85-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>85+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
86 </a>86 </a>
87 </li>87 </li>
88 <li>88 <li>
89-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>89+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
90 </a>90 </a>
91 </li>91 </li>
92 <li>92 <li>
93-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>93+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
94 </a>94 </a>
95 </li>95 </li>
96 <li>96 <li>
97-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>97+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
98 </a>98 </a>
99 </li>99 </li>
100 </ul>100 </ul>
@@ -462,14 +462,16 @@
462 </div>462 </div>
463 <div>463 <div>
464 <dt>464 <dt>
465-<kbd>s</kbd>465+<kbd>g s</kbd>
466-<kbd>t</kbd>466+<kbd>g f</kbd>
467-<kbd>c</kbd>467+<kbd>g c</kbd>
468-<kbd>r</kbd>468+<kbd>g b</kbd>
469-<kbd>m</kbd>469+<kbd>g m</kbd>
470-<kbd>i</kbd>470+<kbd>g i</kbd>
471+<kbd>g r</kbd>
472+<kbd>g a</kbd>
471 </dt>473 </dt>
472-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>474+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
473 </div>475 </div>
474 <div>476 <div>
475 <dt>477 <dt>
@@ -568,45 +570,45 @@
568 <span class="k">go</span>570 <span class="k">go</span>
569 </a>571 </a>
570 </li>572 </li>
571-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">573+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
572 <a href="/files" tabindex="-1">574 <a href="/files" tabindex="-1">
573-<span class="lbl">summary</span>575+<span class="lbl">summary (g s)</span>
574 <span class="k">section</span>576 <span class="k">section</span>
575 </a>577 </a>
576 </li>578 </li>
577-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">579+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
578 <a href="/files/tree/main" tabindex="-1">580 <a href="/files/tree/main" tabindex="-1">
579-<span class="lbl">files</span>581+<span class="lbl">files (g f)</span>
580 <span class="k">section</span>582 <span class="k">section</span>
581 </a>583 </a>
582 </li>584 </li>
583-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">585+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
584 <a href="/files/commits/main" tabindex="-1">586 <a href="/files/commits/main" tabindex="-1">
585-<span class="lbl">commits</span>587+<span class="lbl">commits (g c)</span>
586 <span class="k">section</span>588 <span class="k">section</span>
587 </a>589 </a>
588 </li>590 </li>
589-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">591+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
590 <a href="/files/refs" tabindex="-1">592 <a href="/files/refs" tabindex="-1">
591-<span class="lbl">branches &amp; tags</span>593+<span class="lbl">branches &amp; tags (g b)</span>
592 <span class="k">section</span>594 <span class="k">section</span>
593 </a>595 </a>
594 </li>596 </li>
595-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">597+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
596 <a href="/files/merge-requests" tabindex="-1">598 <a href="/files/merge-requests" tabindex="-1">
597-<span class="lbl">merge requests</span>599+<span class="lbl">merge requests (g m)</span>
598 <span class="k">section</span>600 <span class="k">section</span>
599 </a>601 </a>
600 </li>602 </li>
601-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">603+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
602 <a href="/files/releases" tabindex="-1">604 <a href="/files/releases" tabindex="-1">
603-<span class="lbl">releases</span>605+<span class="lbl">releases (g r)</span>
604 <span class="k">section</span>606 <span class="k">section</span>
605 </a>607 </a>
606 </li>608 </li>
607-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">609+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
608 <a href="/files/actions" tabindex="-1">610 <a href="/files/actions" tabindex="-1">
609-<span class="lbl">actions</span>611+<span class="lbl">actions (g a)</span>
610 <span class="k">section</span>612 <span class="k">section</span>
611 </a>613 </a>
612 </li>614 </li>
@@ -659,7 +661,9 @@
659 k-filter from:body -> ermite.focusFilter();661 k-filter from:body -> ermite.focusFilter();
660 k-gh from:body -> ermite.go('.brand');662 k-gh from:body -> ermite.go('.brand');
661 k-s from:body -> ermite.tab('s');663 k-s from:body -> ermite.tab('s');
662- k-t from:body -> ermite.tab('t');664+ k-f from:body -> ermite.tab('f');
665+ k-b from:body -> ermite.tab('b');
666+ k-a from:body -> ermite.tab('a');
663 k-c from:body -> ermite.tab('c');667 k-c from:body -> ermite.tab('c');
664 k-r from:body -> ermite.tab('r');668 k-r from:body -> ermite.tab('r');
665 k-m from:body -> ermite.tab('m');669 k-m from:body -> ermite.tab('m');
@@ -675,7 +679,6 @@
675 k-permalink from:body -> ermite.permalink();679 k-permalink from:body -> ermite.permalink();
676 k-merge from:body -> window.ermiteMR?.openMerge();680 k-merge from:body -> window.ermiteMR?.openMerge();
677 k-read from:body -> window.ermiteMR?.markRead();681 k-read from:body -> window.ermiteMR?.markRead();
678- k-gf from:body -> window.ermiteMR?.focusFiles();
679 k-keys from:body -> ermite.toggleKeys()">682 k-keys from:body -> ermite.toggleKeys()">
680 </div>683 </div>
681 </body>684 </body>
M internal/app/testdata/web/tree-slash-ref.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -238,14 +238,16 @@
238238 </div>
239239 <div>
240240 <dt>
241-<kbd>s</kbd>
242-<kbd>t</kbd>
243-<kbd>c</kbd>
244-<kbd>r</kbd>
245-<kbd>m</kbd>
246-<kbd>i</kbd>
241+<kbd>g s</kbd>
242+<kbd>g f</kbd>
243+<kbd>g c</kbd>
244+<kbd>g b</kbd>
245+<kbd>g m</kbd>
246+<kbd>g i</kbd>
247+<kbd>g r</kbd>
248+<kbd>g a</kbd>
247249 </dt>
248-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
250+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
249251 </div>
250252 <div>
251253 <dt>
@@ -344,45 +346,45 @@
344346 <span class="k">go</span>
345347 </a>
346348 </li>
347-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
349+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
348350 <a href="/files" tabindex="-1">
349-<span class="lbl">summary</span>
351+<span class="lbl">summary (g s)</span>
350352 <span class="k">section</span>
351353 </a>
352354 </li>
353-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
355+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
354356 <a href="/files/tree/main" tabindex="-1">
355-<span class="lbl">files</span>
357+<span class="lbl">files (g f)</span>
356358 <span class="k">section</span>
357359 </a>
358360 </li>
359-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
361+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
360362 <a href="/files/commits/main" tabindex="-1">
361-<span class="lbl">commits</span>
363+<span class="lbl">commits (g c)</span>
362364 <span class="k">section</span>
363365 </a>
364366 </li>
365-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
367+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
366368 <a href="/files/refs" tabindex="-1">
367-<span class="lbl">branches &amp; tags</span>
369+<span class="lbl">branches &amp; tags (g b)</span>
368370 <span class="k">section</span>
369371 </a>
370372 </li>
371-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
373+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
372374 <a href="/files/merge-requests" tabindex="-1">
373-<span class="lbl">merge requests</span>
375+<span class="lbl">merge requests (g m)</span>
374376 <span class="k">section</span>
375377 </a>
376378 </li>
377-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
379+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
378380 <a href="/files/releases" tabindex="-1">
379-<span class="lbl">releases</span>
381+<span class="lbl">releases (g r)</span>
380382 <span class="k">section</span>
381383 </a>
382384 </li>
383-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
385+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
384386 <a href="/files/actions" tabindex="-1">
385-<span class="lbl">actions</span>
387+<span class="lbl">actions (g a)</span>
386388 <span class="k">section</span>
387389 </a>
388390 </li>
@@ -435,7 +437,9 @@
435437 k-filter from:body -> ermite.focusFilter();
436438 k-gh from:body -> ermite.go('.brand');
437439 k-s from:body -> ermite.tab('s');
438- k-t from:body -> ermite.tab('t');
440+ k-f from:body -> ermite.tab('f');
441+ k-b from:body -> ermite.tab('b');
442+ k-a from:body -> ermite.tab('a');
439443 k-c from:body -> ermite.tab('c');
440444 k-r from:body -> ermite.tab('r');
441445 k-m from:body -> ermite.tab('m');
@@ -451,7 +455,6 @@
451455 k-permalink from:body -> ermite.permalink();
452456 k-merge from:body -> window.ermiteMR?.openMerge();
453457 k-read from:body -> window.ermiteMR?.markRead();
454- k-gf from:body -> window.ermiteMR?.focusFiles();
455458 k-keys from:body -> ermite.toggleKeys()">
456459 </div>
457460 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -238,14 +238,16 @@
238 </div>238 </div>
239 <div>239 <div>
240 <dt>240 <dt>
241-<kbd>s</kbd>241+<kbd>g s</kbd>
242-<kbd>t</kbd>242+<kbd>g f</kbd>
243-<kbd>c</kbd>243+<kbd>g c</kbd>
244-<kbd>r</kbd>244+<kbd>g b</kbd>
245-<kbd>m</kbd>245+<kbd>g m</kbd>
246-<kbd>i</kbd>246+<kbd>g i</kbd>
247+<kbd>g r</kbd>
248+<kbd>g a</kbd>
247 </dt>249 </dt>
248-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>250+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
249 </div>251 </div>
250 <div>252 <div>
251 <dt>253 <dt>
@@ -344,45 +346,45 @@
344 <span class="k">go</span>346 <span class="k">go</span>
345 </a>347 </a>
346 </li>348 </li>
347-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">349+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
348 <a href="/files" tabindex="-1">350 <a href="/files" tabindex="-1">
349-<span class="lbl">summary</span>351+<span class="lbl">summary (g s)</span>
350 <span class="k">section</span>352 <span class="k">section</span>
351 </a>353 </a>
352 </li>354 </li>
353-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">355+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
354 <a href="/files/tree/main" tabindex="-1">356 <a href="/files/tree/main" tabindex="-1">
355-<span class="lbl">files</span>357+<span class="lbl">files (g f)</span>
356 <span class="k">section</span>358 <span class="k">section</span>
357 </a>359 </a>
358 </li>360 </li>
359-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">361+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
360 <a href="/files/commits/main" tabindex="-1">362 <a href="/files/commits/main" tabindex="-1">
361-<span class="lbl">commits</span>363+<span class="lbl">commits (g c)</span>
362 <span class="k">section</span>364 <span class="k">section</span>
363 </a>365 </a>
364 </li>366 </li>
365-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">367+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
366 <a href="/files/refs" tabindex="-1">368 <a href="/files/refs" tabindex="-1">
367-<span class="lbl">branches &amp; tags</span>369+<span class="lbl">branches &amp; tags (g b)</span>
368 <span class="k">section</span>370 <span class="k">section</span>
369 </a>371 </a>
370 </li>372 </li>
371-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">373+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
372 <a href="/files/merge-requests" tabindex="-1">374 <a href="/files/merge-requests" tabindex="-1">
373-<span class="lbl">merge requests</span>375+<span class="lbl">merge requests (g m)</span>
374 <span class="k">section</span>376 <span class="k">section</span>
375 </a>377 </a>
376 </li>378 </li>
377-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">379+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
378 <a href="/files/releases" tabindex="-1">380 <a href="/files/releases" tabindex="-1">
379-<span class="lbl">releases</span>381+<span class="lbl">releases (g r)</span>
380 <span class="k">section</span>382 <span class="k">section</span>
381 </a>383 </a>
382 </li>384 </li>
383-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">385+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
384 <a href="/files/actions" tabindex="-1">386 <a href="/files/actions" tabindex="-1">
385-<span class="lbl">actions</span>387+<span class="lbl">actions (g a)</span>
386 <span class="k">section</span>388 <span class="k">section</span>
387 </a>389 </a>
388 </li>390 </li>
@@ -435,7 +437,9 @@
435 k-filter from:body -> ermite.focusFilter();437 k-filter from:body -> ermite.focusFilter();
436 k-gh from:body -> ermite.go('.brand');438 k-gh from:body -> ermite.go('.brand');
437 k-s from:body -> ermite.tab('s');439 k-s from:body -> ermite.tab('s');
438- k-t from:body -> ermite.tab('t');440+ k-f from:body -> ermite.tab('f');
441+ k-b from:body -> ermite.tab('b');
442+ k-a from:body -> ermite.tab('a');
439 k-c from:body -> ermite.tab('c');443 k-c from:body -> ermite.tab('c');
440 k-r from:body -> ermite.tab('r');444 k-r from:body -> ermite.tab('r');
441 k-m from:body -> ermite.tab('m');445 k-m from:body -> ermite.tab('m');
@@ -451,7 +455,6 @@
451 k-permalink from:body -> ermite.permalink();455 k-permalink from:body -> ermite.permalink();
452 k-merge from:body -> window.ermiteMR?.openMerge();456 k-merge from:body -> window.ermiteMR?.openMerge();
453 k-read from:body -> window.ermiteMR?.markRead();457 k-read from:body -> window.ermiteMR?.markRead();
454- k-gf from:body -> window.ermiteMR?.focusFiles();
455 k-keys from:body -> ermite.toggleKeys()">458 k-keys from:body -> ermite.toggleKeys()">
456 </div>459 </div>
457 </body>460 </body>
M internal/app/testdata/web/tree-subdir.html +33 -30
@@ -73,31 +73,31 @@
7373 <nav class="tabs" aria-label="Sections">
7474 <ul>
7575 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>
76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
7777 </a>
7878 </li>
7979 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>
80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
8181 </a>
8282 </li>
8383 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>
84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
8585 </a>
8686 </li>
8787 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>
88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
8989 </a>
9090 </li>
9191 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>
92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
9393 </a>
9494 </li>
9595 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>
96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
9797 </a>
9898 </li>
9999 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>
100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101101 </a>
102102 </li>
103103 </ul>
@@ -254,14 +254,16 @@
254254 </div>
255255 <div>
256256 <dt>
257-<kbd>s</kbd>
258-<kbd>t</kbd>
259-<kbd>c</kbd>
260-<kbd>r</kbd>
261-<kbd>m</kbd>
262-<kbd>i</kbd>
257+<kbd>g s</kbd>
258+<kbd>g f</kbd>
259+<kbd>g c</kbd>
260+<kbd>g b</kbd>
261+<kbd>g m</kbd>
262+<kbd>g i</kbd>
263+<kbd>g r</kbd>
264+<kbd>g a</kbd>
263265 </dt>
264-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>
266+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
265267 </div>
266268 <div>
267269 <dt>
@@ -360,45 +362,45 @@
360362 <span class="k">go</span>
361363 </a>
362364 </li>
363-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">
365+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
364366 <a href="/files" tabindex="-1">
365-<span class="lbl">summary</span>
367+<span class="lbl">summary (g s)</span>
366368 <span class="k">section</span>
367369 </a>
368370 </li>
369-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">
371+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
370372 <a href="/files/tree/main" tabindex="-1">
371-<span class="lbl">files</span>
373+<span class="lbl">files (g f)</span>
372374 <span class="k">section</span>
373375 </a>
374376 </li>
375-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">
377+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
376378 <a href="/files/commits/main" tabindex="-1">
377-<span class="lbl">commits</span>
379+<span class="lbl">commits (g c)</span>
378380 <span class="k">section</span>
379381 </a>
380382 </li>
381-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">
383+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
382384 <a href="/files/refs" tabindex="-1">
383-<span class="lbl">branches &amp; tags</span>
385+<span class="lbl">branches &amp; tags (g b)</span>
384386 <span class="k">section</span>
385387 </a>
386388 </li>
387-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">
389+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
388390 <a href="/files/merge-requests" tabindex="-1">
389-<span class="lbl">merge requests</span>
391+<span class="lbl">merge requests (g m)</span>
390392 <span class="k">section</span>
391393 </a>
392394 </li>
393-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">
395+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
394396 <a href="/files/releases" tabindex="-1">
395-<span class="lbl">releases</span>
397+<span class="lbl">releases (g r)</span>
396398 <span class="k">section</span>
397399 </a>
398400 </li>
399-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">
401+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
400402 <a href="/files/actions" tabindex="-1">
401-<span class="lbl">actions</span>
403+<span class="lbl">actions (g a)</span>
402404 <span class="k">section</span>
403405 </a>
404406 </li>
@@ -451,7 +453,9 @@
451453 k-filter from:body -> ermite.focusFilter();
452454 k-gh from:body -> ermite.go('.brand');
453455 k-s from:body -> ermite.tab('s');
454- k-t from:body -> ermite.tab('t');
456+ k-f from:body -> ermite.tab('f');
457+ k-b from:body -> ermite.tab('b');
458+ k-a from:body -> ermite.tab('a');
455459 k-c from:body -> ermite.tab('c');
456460 k-r from:body -> ermite.tab('r');
457461 k-m from:body -> ermite.tab('m');
@@ -467,7 +471,6 @@
467471 k-permalink from:body -> ermite.permalink();
468472 k-merge from:body -> window.ermiteMR?.openMerge();
469473 k-read from:body -> window.ermiteMR?.markRead();
470- k-gf from:body -> window.ermiteMR?.focusFiles();
471474 k-keys from:body -> ermite.toggleKeys()">
472475 </div>
473476 </body>
@@ -73,31 +73,31 @@
73 <nav class="tabs" aria-label="Sections">73 <nav class="tabs" aria-label="Sections">
74 <ul>74 <ul>
75 <li>75 <li>
76-<a href="/files" data-key="s" aria-keyshortcuts="s">Summary <kbd aria-hidden="true">s</kbd>76+<a href="/files" data-key="g s">Summary <kbd aria-hidden="true">g s</kbd>
77 </a>77 </a>
78 </li>78 </li>
79 <li>79 <li>
80-<a href="/files/tree/main" data-key="t" aria-keyshortcuts="t" aria-current="page">Files <kbd aria-hidden="true">t</kbd>80+<a href="/files/tree/main" data-key="g f" aria-current="page">Files <kbd aria-hidden="true">g f</kbd>
81 </a>81 </a>
82 </li>82 </li>
83 <li>83 <li>
84-<a href="/files/commits/main" data-key="c" aria-keyshortcuts="c">Commits <kbd aria-hidden="true">c</kbd>84+<a href="/files/commits/main" data-key="g c">Commits <kbd aria-hidden="true">g c</kbd>
85 </a>85 </a>
86 </li>86 </li>
87 <li>87 <li>
88-<a href="/files/refs" data-key="r" aria-keyshortcuts="r">Branches &amp; tags <kbd aria-hidden="true">r</kbd>88+<a href="/files/refs" data-key="g b">Branches &amp; tags <kbd aria-hidden="true">g b</kbd>
89 </a>89 </a>
90 </li>90 </li>
91 <li>91 <li>
92-<a href="/files/merge-requests" data-key="m" aria-keyshortcuts="m">Merge requests <kbd aria-hidden="true">m</kbd>92+<a href="/files/merge-requests" data-key="g m">Merge requests <kbd aria-hidden="true">g m</kbd>
93 </a>93 </a>
94 </li>94 </li>
95 <li>95 <li>
96-<a href="/files/releases" data-key="l" aria-keyshortcuts="l">Releases <kbd aria-hidden="true">l</kbd>96+<a href="/files/releases" data-key="g r">Releases <kbd aria-hidden="true">g r</kbd>
97 </a>97 </a>
98 </li>98 </li>
99 <li>99 <li>
100-<a href="/files/actions" data-key="a" aria-keyshortcuts="a">Actions <kbd aria-hidden="true">a</kbd>100+<a href="/files/actions" data-key="g a">Actions <kbd aria-hidden="true">g a</kbd>
101 </a>101 </a>
102 </li>102 </li>
103 </ul>103 </ul>
@@ -254,14 +254,16 @@
254 </div>254 </div>
255 <div>255 <div>
256 <dt>256 <dt>
257-<kbd>s</kbd>257+<kbd>g s</kbd>
258-<kbd>t</kbd>258+<kbd>g f</kbd>
259-<kbd>c</kbd>259+<kbd>g c</kbd>
260-<kbd>r</kbd>260+<kbd>g b</kbd>
261-<kbd>m</kbd>261+<kbd>g m</kbd>
262-<kbd>i</kbd>262+<kbd>g i</kbd>
263+<kbd>g r</kbd>
264+<kbd>g a</kbd>
263 </dt>265 </dt>
264-<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues</dd>266+<dd>tabs: summary, files, commits, branches &amp; tags, merge requests, issues, releases, actions (when available)</dd>
265 </div>267 </div>
266 <div>268 <div>
267 <dt>269 <dt>
@@ -360,45 +362,45 @@
360 <span class="k">go</span>362 <span class="k">go</span>
361 </a>363 </a>
362 </li>364 </li>
363-<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary">365+<li id="cmd-o1" role="option" aria-selected="false" data-k="section summary (g s)">
364 <a href="/files" tabindex="-1">366 <a href="/files" tabindex="-1">
365-<span class="lbl">summary</span>367+<span class="lbl">summary (g s)</span>
366 <span class="k">section</span>368 <span class="k">section</span>
367 </a>369 </a>
368 </li>370 </li>
369-<li id="cmd-o2" role="option" aria-selected="false" data-k="section files">371+<li id="cmd-o2" role="option" aria-selected="false" data-k="section files (g f)">
370 <a href="/files/tree/main" tabindex="-1">372 <a href="/files/tree/main" tabindex="-1">
371-<span class="lbl">files</span>373+<span class="lbl">files (g f)</span>
372 <span class="k">section</span>374 <span class="k">section</span>
373 </a>375 </a>
374 </li>376 </li>
375-<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits">377+<li id="cmd-o3" role="option" aria-selected="false" data-k="section commits (g c)">
376 <a href="/files/commits/main" tabindex="-1">378 <a href="/files/commits/main" tabindex="-1">
377-<span class="lbl">commits</span>379+<span class="lbl">commits (g c)</span>
378 <span class="k">section</span>380 <span class="k">section</span>
379 </a>381 </a>
380 </li>382 </li>
381-<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags">383+<li id="cmd-o4" role="option" aria-selected="false" data-k="section branches &amp; tags (g b)">
382 <a href="/files/refs" tabindex="-1">384 <a href="/files/refs" tabindex="-1">
383-<span class="lbl">branches &amp; tags</span>385+<span class="lbl">branches &amp; tags (g b)</span>
384 <span class="k">section</span>386 <span class="k">section</span>
385 </a>387 </a>
386 </li>388 </li>
387-<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests">389+<li id="cmd-o5" role="option" aria-selected="false" data-k="section merge requests (g m)">
388 <a href="/files/merge-requests" tabindex="-1">390 <a href="/files/merge-requests" tabindex="-1">
389-<span class="lbl">merge requests</span>391+<span class="lbl">merge requests (g m)</span>
390 <span class="k">section</span>392 <span class="k">section</span>
391 </a>393 </a>
392 </li>394 </li>
393-<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases">395+<li id="cmd-o6" role="option" aria-selected="false" data-k="section releases (g r)">
394 <a href="/files/releases" tabindex="-1">396 <a href="/files/releases" tabindex="-1">
395-<span class="lbl">releases</span>397+<span class="lbl">releases (g r)</span>
396 <span class="k">section</span>398 <span class="k">section</span>
397 </a>399 </a>
398 </li>400 </li>
399-<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions">401+<li id="cmd-o7" role="option" aria-selected="false" data-k="section actions (g a)">
400 <a href="/files/actions" tabindex="-1">402 <a href="/files/actions" tabindex="-1">
401-<span class="lbl">actions</span>403+<span class="lbl">actions (g a)</span>
402 <span class="k">section</span>404 <span class="k">section</span>
403 </a>405 </a>
404 </li>406 </li>
@@ -451,7 +453,9 @@
451 k-filter from:body -> ermite.focusFilter();453 k-filter from:body -> ermite.focusFilter();
452 k-gh from:body -> ermite.go('.brand');454 k-gh from:body -> ermite.go('.brand');
453 k-s from:body -> ermite.tab('s');455 k-s from:body -> ermite.tab('s');
454- k-t from:body -> ermite.tab('t');456+ k-f from:body -> ermite.tab('f');
457+ k-b from:body -> ermite.tab('b');
458+ k-a from:body -> ermite.tab('a');
455 k-c from:body -> ermite.tab('c');459 k-c from:body -> ermite.tab('c');
456 k-r from:body -> ermite.tab('r');460 k-r from:body -> ermite.tab('r');
457 k-m from:body -> ermite.tab('m');461 k-m from:body -> ermite.tab('m');
@@ -467,7 +471,6 @@
467 k-permalink from:body -> ermite.permalink();471 k-permalink from:body -> ermite.permalink();
468 k-merge from:body -> window.ermiteMR?.openMerge();472 k-merge from:body -> window.ermiteMR?.openMerge();
469 k-read from:body -> window.ermiteMR?.markRead();473 k-read from:body -> window.ermiteMR?.markRead();
470- k-gf from:body -> window.ermiteMR?.focusFiles();
471 k-keys from:body -> ermite.toggleKeys()">474 k-keys from:body -> ermite.toggleKeys()">
472 </div>475 </div>
473 </body>476 </body>

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 2

Tags 45

↑↓ moveenter openesc close