detached 7c11dec

fix: move content_termination_test.go to content/ and fix app.go type mismatches

commit
7c11dec61f35d114d971c4bc16731d485f8383f6
author
brice · · 2026-03-15 18:03 UTC
parent
75beae6
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
3 files · +23 -10
M internal/ui/app.go +3 -3
@@ -153,7 +153,7 @@ type floatingWorkspaceSession struct {
153153 paneID entity.PaneID
154154 pane *component.FloatingPane
155155 paneView *component.PaneView
156- webView *webkit.WebView
156+ webView port.WebView
157157 overlay layout.OverlayWidget
158158 widget layout.Widget
159159 focusWidget layout.Widget
@@ -1559,7 +1559,7 @@ func (a *App) initCoordinators(ctx context.Context) {
15591559 a.tabCoord.SetOnQuit(a.Quit)
15601560 a.tabCoord.SetOnStateChanged(a.MarkDirty)
15611561 // Wire popup tab WebView attachment
1562- a.tabCoord.SetOnAttachPopupToTab(func(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv *webkit.WebView) {
1562+ a.tabCoord.SetOnAttachPopupToTab(func(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv port.WebView) {
15631563 a.attachPopupToTab(ctx, tabID, pane, wv)
15641564 })
15651565
@@ -2149,7 +2149,7 @@ func (a *App) getActiveWebViewTarget() port.TextInputTarget {
21492149
21502150 // attachPopupToTab attaches a popup WebView to a newly created tab.
21512151 // This is called when a popup uses tabbed behavior.
2152-func (a *App) attachPopupToTab(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv *webkit.WebView) {
2152+func (a *App) attachPopupToTab(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv port.WebView) {
21532153 log := logging.FromContext(ctx)
21542154
21552155 wsView := a.workspaceViews[tabID]
@@ -153,7 +153,7 @@ type floatingWorkspaceSession struct {
153 paneID entity.PaneID153 paneID entity.PaneID
154 pane *component.FloatingPane154 pane *component.FloatingPane
155 paneView *component.PaneView155 paneView *component.PaneView
156- webView *webkit.WebView156+ webView port.WebView
157 overlay layout.OverlayWidget157 overlay layout.OverlayWidget
158 widget layout.Widget158 widget layout.Widget
159 focusWidget layout.Widget159 focusWidget layout.Widget
@@ -1559,7 +1559,7 @@ func (a *App) initCoordinators(ctx context.Context) {
1559 a.tabCoord.SetOnQuit(a.Quit)1559 a.tabCoord.SetOnQuit(a.Quit)
1560 a.tabCoord.SetOnStateChanged(a.MarkDirty)1560 a.tabCoord.SetOnStateChanged(a.MarkDirty)
1561 // Wire popup tab WebView attachment1561 // Wire popup tab WebView attachment
1562- a.tabCoord.SetOnAttachPopupToTab(func(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv *webkit.WebView) {1562+ a.tabCoord.SetOnAttachPopupToTab(func(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv port.WebView) {
1563 a.attachPopupToTab(ctx, tabID, pane, wv)1563 a.attachPopupToTab(ctx, tabID, pane, wv)
1564 })1564 })
1565 1565
@@ -2149,7 +2149,7 @@ func (a *App) getActiveWebViewTarget() port.TextInputTarget {
2149 2149
2150 // attachPopupToTab attaches a popup WebView to a newly created tab.2150 // attachPopupToTab attaches a popup WebView to a newly created tab.
2151 // This is called when a popup uses tabbed behavior.2151 // This is called when a popup uses tabbed behavior.
2152-func (a *App) attachPopupToTab(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv *webkit.WebView) {2152+func (a *App) attachPopupToTab(ctx context.Context, tabID entity.TabID, pane *entity.Pane, wv port.WebView) {
2153 log := logging.FromContext(ctx)2153 log := logging.FromContext(ctx)
2154 2154
2155 wsView := a.workspaceViews[tabID]2155 wsView := a.workspaceViews[tabID]
R internal/ui/coordinator/content_termination_test.go → internal/ui/coordinator/content/content_termination_test.go +6 -6 renamed, 67% similar
@@ -1,17 +1,17 @@
1-package coordinator
1+package content
22
33 import (
44 "testing"
55
6- webkitlib "github.com/bnema/puregotk-webkit/webkit"
6+ "github.com/bnema/dumber/internal/application/port"
77 "github.com/stretchr/testify/assert"
88 )
99
1010 func TestShouldRenderCrashPage(t *testing.T) {
11- assert.True(t, shouldRenderCrashPage(webkitlib.WebProcessCrashedValue))
12- assert.True(t, shouldRenderCrashPage(webkitlib.WebProcessExceededMemoryLimitValue))
13- assert.False(t, shouldRenderCrashPage(webkitlib.WebProcessTerminatedByApiValue))
14- assert.True(t, shouldRenderCrashPage(webkitlib.WebProcessTerminationReason(99)))
11+ assert.True(t, shouldRenderCrashPage(port.WebProcessTerminationCrashed))
12+ assert.True(t, shouldRenderCrashPage(port.WebProcessTerminationExceededMemory))
13+ assert.False(t, shouldRenderCrashPage(port.WebProcessTerminationByAPI))
14+ assert.True(t, shouldRenderCrashPage(port.WebProcessTerminationReason(99)))
1515 }
1616
1717 func TestExtractOriginalURIFromCrashPage(t *testing.T) {
@@ -1,17 +1,17 @@
1-package coordinator1+package content
2 2
3 import (3 import (
4 "testing"4 "testing"
5 5
6- webkitlib "github.com/bnema/puregotk-webkit/webkit"6+ "github.com/bnema/dumber/internal/application/port"
7 "github.com/stretchr/testify/assert"7 "github.com/stretchr/testify/assert"
8 )8 )
9 9
10 func TestShouldRenderCrashPage(t *testing.T) {10 func TestShouldRenderCrashPage(t *testing.T) {
11- assert.True(t, shouldRenderCrashPage(webkitlib.WebProcessCrashedValue))11+ assert.True(t, shouldRenderCrashPage(port.WebProcessTerminationCrashed))
12- assert.True(t, shouldRenderCrashPage(webkitlib.WebProcessExceededMemoryLimitValue))12+ assert.True(t, shouldRenderCrashPage(port.WebProcessTerminationExceededMemory))
13- assert.False(t, shouldRenderCrashPage(webkitlib.WebProcessTerminatedByApiValue))13+ assert.False(t, shouldRenderCrashPage(port.WebProcessTerminationByAPI))
14- assert.True(t, shouldRenderCrashPage(webkitlib.WebProcessTerminationReason(99)))14+ assert.True(t, shouldRenderCrashPage(port.WebProcessTerminationReason(99)))
15 }15 }
16 16
17 func TestExtractOriginalURIFromCrashPage(t *testing.T) {17 func TestExtractOriginalURIFromCrashPage(t *testing.T) {
M webui/package-lock.json +14 -1
@@ -670,6 +670,7 @@
670670 "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.0.tgz",
671671 "integrity": "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==",
672672 "license": "Apache-2.0",
673+ "peer": true,
673674 "dependencies": {
674675 "@swc/helpers": "^0.5.0"
675676 }
@@ -1403,6 +1404,7 @@
14031404 "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==",
14041405 "dev": true,
14051406 "license": "MIT",
1407+ "peer": true,
14061408 "dependencies": {
14071409 "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
14081410 "deepmerge": "^4.3.1",
@@ -1825,6 +1827,7 @@
18251827 "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",
18261828 "dev": true,
18271829 "license": "MIT",
1830+ "peer": true,
18281831 "dependencies": {
18291832 "undici-types": "~7.18.0"
18301833 }
@@ -1880,6 +1883,7 @@
18801883 "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==",
18811884 "dev": true,
18821885 "license": "MIT",
1886+ "peer": true,
18831887 "dependencies": {
18841888 "@typescript-eslint/scope-manager": "8.57.0",
18851889 "@typescript-eslint/types": "8.57.0",
@@ -2083,6 +2087,7 @@
20832087 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
20842088 "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
20852089 "license": "MIT",
2090+ "peer": true,
20862091 "bin": {
20872092 "acorn": "bin/acorn"
20882093 },
@@ -2249,6 +2254,7 @@
22492254 }
22502255 ],
22512256 "license": "MIT",
2257+ "peer": true,
22522258 "dependencies": {
22532259 "baseline-browser-mapping": "^2.9.0",
22542260 "caniuse-lite": "^1.0.30001759",
@@ -2496,6 +2502,7 @@
24962502 "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==",
24972503 "dev": true,
24982504 "license": "MIT",
2505+ "peer": true,
24992506 "dependencies": {
25002507 "@eslint-community/eslint-utils": "^4.8.0",
25012508 "@eslint-community/regexpp": "^4.12.2",
@@ -3618,6 +3625,7 @@
36183625 }
36193626 ],
36203627 "license": "MIT",
3628+ "peer": true,
36213629 "dependencies": {
36223630 "nanoid": "^3.3.11",
36233631 "picocolors": "^1.1.1",
@@ -3918,6 +3926,7 @@
39183926 "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.10.tgz",
39193927 "integrity": "sha512-UcNfWzbrjvYXYSk+U2hME25kpb87oq6/WVLeBF4khyQrb3Ob/URVlN23khal+RbdCUTMfg4qWjI9KZjCNFtYMQ==",
39203928 "license": "MIT",
3929+ "peer": true,
39213930 "dependencies": {
39223931 "@jridgewell/remapping": "^2.3.4",
39233932 "@jridgewell/sourcemap-codec": "^1.5.0",
@@ -4065,6 +4074,7 @@
40654074 "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",
40664075 "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
40674076 "license": "MIT",
4077+ "peer": true,
40684078 "funding": {
40694079 "type": "github",
40704080 "url": "https://github.com/sponsors/dcastil"
@@ -4095,7 +4105,8 @@
40954105 "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
40964106 "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",
40974107 "dev": true,
4098- "license": "MIT"
4108+ "license": "MIT",
4109+ "peer": true
40994110 },
41004111 "node_modules/tapable": {
41014112 "version": "2.3.0",
@@ -4176,6 +4187,7 @@
41764187 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
41774188 "dev": true,
41784189 "license": "Apache-2.0",
4190+ "peer": true,
41794191 "bin": {
41804192 "tsc": "bin/tsc",
41814193 "tsserver": "bin/tsserver"
@@ -4269,6 +4281,7 @@
42694281 "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
42704282 "dev": true,
42714283 "license": "MIT",
4284+ "peer": true,
42724285 "dependencies": {
42734286 "esbuild": "^0.27.0",
42744287 "fdir": "^6.5.0",
@@ -670,6 +670,7 @@
670 "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.0.tgz",670 "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.0.tgz",
671 "integrity": "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==",671 "integrity": "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==",
672 "license": "Apache-2.0",672 "license": "Apache-2.0",
673+ "peer": true,
673 "dependencies": {674 "dependencies": {
674 "@swc/helpers": "^0.5.0"675 "@swc/helpers": "^0.5.0"
675 }676 }
@@ -1403,6 +1404,7 @@
1403 "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==",1404 "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==",
1404 "dev": true,1405 "dev": true,
1405 "license": "MIT",1406 "license": "MIT",
1407+ "peer": true,
1406 "dependencies": {1408 "dependencies": {
1407 "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",1409 "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
1408 "deepmerge": "^4.3.1",1410 "deepmerge": "^4.3.1",
@@ -1825,6 +1827,7 @@
1825 "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",1827 "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",
1826 "dev": true,1828 "dev": true,
1827 "license": "MIT",1829 "license": "MIT",
1830+ "peer": true,
1828 "dependencies": {1831 "dependencies": {
1829 "undici-types": "~7.18.0"1832 "undici-types": "~7.18.0"
1830 }1833 }
@@ -1880,6 +1883,7 @@
1880 "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==",1883 "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==",
1881 "dev": true,1884 "dev": true,
1882 "license": "MIT",1885 "license": "MIT",
1886+ "peer": true,
1883 "dependencies": {1887 "dependencies": {
1884 "@typescript-eslint/scope-manager": "8.57.0",1888 "@typescript-eslint/scope-manager": "8.57.0",
1885 "@typescript-eslint/types": "8.57.0",1889 "@typescript-eslint/types": "8.57.0",
@@ -2083,6 +2087,7 @@
2083 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",2087 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
2084 "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",2088 "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
2085 "license": "MIT",2089 "license": "MIT",
2090+ "peer": true,
2086 "bin": {2091 "bin": {
2087 "acorn": "bin/acorn"2092 "acorn": "bin/acorn"
2088 },2093 },
@@ -2249,6 +2254,7 @@
2249 }2254 }
2250 ],2255 ],
2251 "license": "MIT",2256 "license": "MIT",
2257+ "peer": true,
2252 "dependencies": {2258 "dependencies": {
2253 "baseline-browser-mapping": "^2.9.0",2259 "baseline-browser-mapping": "^2.9.0",
2254 "caniuse-lite": "^1.0.30001759",2260 "caniuse-lite": "^1.0.30001759",
@@ -2496,6 +2502,7 @@
2496 "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==",2502 "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==",
2497 "dev": true,2503 "dev": true,
2498 "license": "MIT",2504 "license": "MIT",
2505+ "peer": true,
2499 "dependencies": {2506 "dependencies": {
2500 "@eslint-community/eslint-utils": "^4.8.0",2507 "@eslint-community/eslint-utils": "^4.8.0",
2501 "@eslint-community/regexpp": "^4.12.2",2508 "@eslint-community/regexpp": "^4.12.2",
@@ -3618,6 +3625,7 @@
3618 }3625 }
3619 ],3626 ],
3620 "license": "MIT",3627 "license": "MIT",
3628+ "peer": true,
3621 "dependencies": {3629 "dependencies": {
3622 "nanoid": "^3.3.11",3630 "nanoid": "^3.3.11",
3623 "picocolors": "^1.1.1",3631 "picocolors": "^1.1.1",
@@ -3918,6 +3926,7 @@
3918 "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.10.tgz",3926 "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.10.tgz",
3919 "integrity": "sha512-UcNfWzbrjvYXYSk+U2hME25kpb87oq6/WVLeBF4khyQrb3Ob/URVlN23khal+RbdCUTMfg4qWjI9KZjCNFtYMQ==",3927 "integrity": "sha512-UcNfWzbrjvYXYSk+U2hME25kpb87oq6/WVLeBF4khyQrb3Ob/URVlN23khal+RbdCUTMfg4qWjI9KZjCNFtYMQ==",
3920 "license": "MIT",3928 "license": "MIT",
3929+ "peer": true,
3921 "dependencies": {3930 "dependencies": {
3922 "@jridgewell/remapping": "^2.3.4",3931 "@jridgewell/remapping": "^2.3.4",
3923 "@jridgewell/sourcemap-codec": "^1.5.0",3932 "@jridgewell/sourcemap-codec": "^1.5.0",
@@ -4065,6 +4074,7 @@
4065 "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",4074 "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",
4066 "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",4075 "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
4067 "license": "MIT",4076 "license": "MIT",
4077+ "peer": true,
4068 "funding": {4078 "funding": {
4069 "type": "github",4079 "type": "github",
4070 "url": "https://github.com/sponsors/dcastil"4080 "url": "https://github.com/sponsors/dcastil"
@@ -4095,7 +4105,8 @@
4095 "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",4105 "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
4096 "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",4106 "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",
4097 "dev": true,4107 "dev": true,
4098- "license": "MIT"4108+ "license": "MIT",
4109+ "peer": true
4099 },4110 },
4100 "node_modules/tapable": {4111 "node_modules/tapable": {
4101 "version": "2.3.0",4112 "version": "2.3.0",
@@ -4176,6 +4187,7 @@
4176 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",4187 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
4177 "dev": true,4188 "dev": true,
4178 "license": "Apache-2.0",4189 "license": "Apache-2.0",
4190+ "peer": true,
4179 "bin": {4191 "bin": {
4180 "tsc": "bin/tsc",4192 "tsc": "bin/tsc",
4181 "tsserver": "bin/tsserver"4193 "tsserver": "bin/tsserver"
@@ -4269,6 +4281,7 @@
4269 "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",4281 "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
4270 "dev": true,4282 "dev": true,
4271 "license": "MIT",4283 "license": "MIT",
4284+ "peer": true,
4272 "dependencies": {4285 "dependencies": {
4273 "esbuild": "^0.27.0",4286 "esbuild": "^0.27.0",
4274 "fdir": "^6.5.0",4287 "fdir": "^6.5.0",

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 8

Tags 42

↑↓ moveenter openesc close