Skip to content

Commit 7ba7534

Browse files
committed
feat(keymapping): replace help bar with popup
1 parent 5be1be2 commit 7ba7534

File tree

8 files changed

+357
-80
lines changed

8 files changed

+357
-80
lines changed

lua/vgit/controller.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ local toggle_tracing = loop.coroutine(function()
126126
end)
127127

128128
local function help()
129+
if screen_manager.help() then return end
129130
vim.cmd('h vgit')
130131
end
131132

lua/vgit/features/screens/DiffScreen/init.lua

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ local Window = require('vgit.core.Window')
66
local Buffer = require('vgit.core.Buffer')
77
local console = require('vgit.core.console')
88
local DiffView = require('vgit.ui.views.DiffView')
9-
local KeyHelpBarView = require('vgit.ui.views.KeyHelpBarView')
9+
local KeyHelpPopup = require('vgit.ui.popups.KeyHelpPopup')
1010
local Model = require('vgit.features.screens.DiffScreen.Model')
1111
local diff_preview_setting = require('vgit.settings.diff_preview')
1212

@@ -36,34 +36,21 @@ function DiffScreen:create_diff_view(scene, model)
3636
},
3737
})
3838
end
39-
return DiffView(scene, props, { row = 1 }, {
39+
40+
return DiffView(scene, props, {}, {
4041
elements = {
4142
header = true,
4243
footer = false,
4344
},
4445
})
4546
end
4647

47-
function DiffScreen:create_app_bar_view(scene, model)
48-
if model:is_hunk() then return nil end
49-
return KeyHelpBarView(scene, {
50-
keymaps = function()
51-
local keymaps = diff_preview_setting:get('keymaps')
52-
if model:is_staged() then
53-
return {
54-
{ 'Unstage', keymaps['buffer_unstage'] },
55-
{ 'Unstage hunk', keymaps['buffer_hunk_unstage'] },
56-
{ 'Switch to Staged View', keymaps['toggle_view'] },
57-
}
58-
end
59-
return {
60-
{ 'Stage', keymaps['buffer_stage'] },
61-
{ 'Stage hunk', keymaps['buffer_hunk_stage'] },
62-
{ 'Reset', keymaps['reset'] },
63-
{ 'Switch to Unstage View', keymaps['toggle_view'] },
64-
}
65-
end,
66-
})
48+
function DiffScreen:help()
49+
KeyHelpPopup({
50+
config = {
51+
keymaps = diff_preview_setting:get('keymaps')
52+
}
53+
}):mount()
6754
end
6855

6956
function DiffScreen:constructor(opts)
@@ -75,7 +62,6 @@ function DiffScreen:constructor(opts)
7562
scene = scene,
7663
model = model,
7764
diff_view = DiffScreen:create_diff_view(scene, model),
78-
app_bar_view = DiffScreen:create_app_bar_view(scene, model),
7965
}
8066
end
8167

@@ -105,7 +91,6 @@ function DiffScreen:toggle_view(buffer)
10591

10692
self.diff_view:render()
10793
self.diff_view:move_to_hunk(1, 'center')
108-
if self.app_bar_view then self.app_bar_view:render() end
10994

11095
return
11196
end
@@ -120,7 +105,6 @@ function DiffScreen:toggle_view(buffer)
120105

121106
self.diff_view:render()
122107
self.diff_view:move_to_hunk(1, 'center')
123-
if self.app_bar_view then self.app_bar_view:render() end
124108
end
125109

126110
function DiffScreen:reset(buffer)
@@ -345,11 +329,6 @@ function DiffScreen:create(opts)
345329
return false
346330
end
347331

348-
if self.app_bar_view then
349-
self.app_bar_view:define()
350-
self.app_bar_view:mount()
351-
end
352-
353332
self.diff_view:define()
354333
self.diff_view:mount()
355334
self.diff_view:render()
@@ -359,8 +338,6 @@ function DiffScreen:create(opts)
359338
local mark_index = self.diff_view:get_relative_mark_index(lnum)
360339
self.diff_view:move_to_hunk(mark_index, 'center')
361340

362-
if self.app_bar_view then self.app_bar_view:render() end
363-
364341
return true
365342
end
366343

lua/vgit/features/screens/ProjectDiffScreen/init.lua

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ local Object = require('vgit.core.Object')
77
local Window = require('vgit.core.Window')
88
local console = require('vgit.core.console')
99
local DiffView = require('vgit.ui.views.DiffView')
10+
local KeyHelpPopup = require('vgit.ui.popups.KeyHelpPopup')
1011
local StatusListView = require('vgit.ui.views.StatusListView')
11-
local KeyHelpBarView = require('vgit.ui.views.KeyHelpBarView')
1212
local Model = require('vgit.features.screens.ProjectDiffScreen.Model')
1313
local project_diff_preview_setting = require('vgit.settings.project_diff_preview')
1414

@@ -24,22 +24,6 @@ function ProjectDiffScreen:constructor(opts)
2424
name = 'Project Diff Screen',
2525
scene = scene,
2626
model = model,
27-
app_bar_view = KeyHelpBarView(scene, {
28-
keymaps = function()
29-
local keymaps = project_diff_preview_setting:get('keymaps')
30-
return {
31-
{ 'Stage', keymaps['buffer_stage'] },
32-
{ 'Unstage', keymaps['buffer_unstage'] },
33-
{ 'Reset', keymaps['buffer_reset'] },
34-
{ 'Stage hunk', keymaps['buffer_hunk_stage'] },
35-
{ 'Unstage hunk', keymaps['buffer_hunk_unstage'] },
36-
{ 'Stage all', keymaps['stage_all'] },
37-
{ 'Unstage all', keymaps['unstage_all'] },
38-
{ 'Reset all', keymaps['reset_all'] },
39-
{ 'Commit', keymaps['commit'] },
40-
}
41-
end,
42-
}),
4327
diff_view = DiffView(scene, {
4428
layout_type = function()
4529
return model:get_layout_type()
@@ -54,7 +38,6 @@ function ProjectDiffScreen:constructor(opts)
5438
return model:get_diff()
5539
end,
5640
}, {
57-
row = 1,
5841
col = '25vw',
5942
width = '75vw',
6043
}, {
@@ -67,10 +50,7 @@ function ProjectDiffScreen:constructor(opts)
6750
entries = function()
6851
return model:get_entries()
6952
end,
70-
}, {
71-
row = 1,
72-
width = '25vw',
73-
}, {
53+
}, { width = '25vw' }, {
7454
elements = {
7555
header = false,
7656
footer = true,
@@ -79,6 +59,14 @@ function ProjectDiffScreen:constructor(opts)
7959
}
8060
end
8161

62+
function ProjectDiffScreen:help()
63+
KeyHelpPopup({
64+
config = {
65+
keymaps = project_diff_preview_setting:get('keymaps')
66+
}
67+
}):mount()
68+
end
69+
8270
function ProjectDiffScreen:hunk_up()
8371
self.diff_view:prev()
8472
end
@@ -528,12 +516,10 @@ function ProjectDiffScreen:create()
528516
return false
529517
end
530518

531-
self.app_bar_view:define()
532519
self.diff_view:define()
533520
self.status_list_view:define()
534521

535522
self.diff_view:mount()
536-
self.app_bar_view:mount()
537523
self.status_list_view:mount({
538524
event_handlers = {
539525
on_enter = function()
@@ -545,7 +531,6 @@ function ProjectDiffScreen:create()
545531
},
546532
})
547533

548-
self.app_bar_view:render()
549534
self.status_list_view:render()
550535

551536
self:setup_keymaps()

lua/vgit/features/screens/ProjectStashScreen/init.lua

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ local utils = require('vgit.core.utils')
44
local Object = require('vgit.core.Object')
55
local console = require('vgit.core.console')
66
local DiffView = require('vgit.ui.views.DiffView')
7+
local KeyHelpPopup = require('vgit.ui.popups.KeyHelpPopup')
78
local StatusListView = require('vgit.ui.views.StatusListView')
8-
local KeyHelpBarView = require('vgit.ui.views.KeyHelpBarView')
99
local Model = require('vgit.features.screens.ProjectStashScreen.Model')
1010
local project_stash_preview_setting = require('vgit.settings.project_stash_preview')
1111

@@ -21,26 +21,11 @@ function ProjectStashScreen:constructor(opts)
2121
name = 'Stash Screen',
2222
scene = scene,
2323
model = model,
24-
app_bar_view = KeyHelpBarView(scene, {
25-
keymaps = function()
26-
local keymaps = project_stash_preview_setting:get('keymaps')
27-
return {
28-
{ 'Add stash', keymaps['add'] },
29-
{ 'Apply stash', keymaps['apply'] },
30-
{ 'Pop stash', keymaps['pop'] },
31-
{ 'Drop stash', keymaps['drop'] },
32-
{ 'Clear stash', keymaps['clear'] },
33-
}
34-
end,
35-
}),
3624
status_list_view = StatusListView(scene, {
3725
entries = function()
3826
return model:get_entries()
3927
end,
40-
}, {
41-
row = 1,
42-
width = '25vw',
43-
}, {
28+
}, { width = '25vw' }, {
4429
elements = {
4530
header = false,
4631
footer = true,
@@ -61,7 +46,6 @@ function ProjectStashScreen:constructor(opts)
6146
return model:get_diff()
6247
end,
6348
}, {
64-
row = 1,
6549
col = '25vw',
6650
width = '75vw',
6751
}, {
@@ -73,6 +57,14 @@ function ProjectStashScreen:constructor(opts)
7357
}
7458
end
7559

60+
function ProjectStashScreen:help()
61+
KeyHelpPopup({
62+
config = {
63+
keymaps = project_stash_preview_setting:get('keymaps')
64+
}
65+
}):mount()
66+
end
67+
7668
ProjectStashScreen.render_diff_view_debounced = loop.debounce_coroutine(function(self)
7769
self.diff_view:render()
7870
self.diff_view:move_to_hunk()
@@ -278,11 +270,9 @@ function ProjectStashScreen:create(opts)
278270
end
279271

280272
self.diff_view:define()
281-
self.app_bar_view:define()
282273
self.status_list_view:define()
283274

284275
self.diff_view:mount()
285-
self.app_bar_view:mount()
286276
self.status_list_view:mount({
287277
event_handlers = {
288278
on_move = function()
@@ -291,7 +281,6 @@ function ProjectStashScreen:create(opts)
291281
},
292282
})
293283

294-
self.app_bar_view:render()
295284
self.status_list_view:render()
296285

297286
self:setup_keymaps()

0 commit comments

Comments
 (0)