Skip to content

Commit 390e912

Browse files
authored
fix(#397): fix issue where scene quit keys would be binded globally (#398)
1 parent af1440e commit 390e912

File tree

3 files changed

+32
-31
lines changed

3 files changed

+32
-31
lines changed

lua/vgit/controller.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,6 @@ end
143143

144144
local function register_keymaps(config)
145145
local keymaps = config and config.keymaps or {}
146-
147-
screen_manager.register_keymaps()
148146
keymap.define(keymaps)
149147
end
150148

lua/vgit/ui/Scene.lua

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,26 @@ function Scene:get(key)
3434
return self.components[key]
3535
end
3636

37-
function Scene:is_focused()
38-
local focused = false
39-
37+
function Scene:on(event_name, callback)
4038
for _, component in pairs(self.components) do
41-
if component:is_focused() then return true end
39+
component:on(event_name, callback)
4240
end
4341

44-
return focused
42+
return self
4543
end
4644

47-
function Scene:on(event_name, callback)
48-
for _, component in pairs(self.components) do
49-
component:on(event_name, callback)
45+
function Scene:set_keymap(configs)
46+
for _, config in ipairs(configs) do
47+
for _, component in pairs(self.components) do
48+
component:set_keymap(config, config.handler)
49+
end
5050
end
5151

5252
return self
5353
end
5454

5555
function Scene:destroy()
5656
local components = self:get_components()
57-
5857
for _, component in pairs(components) do
5958
component:unmount()
6059
end

lua/vgit/ui/screen_manager.lua

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
local loop = require('vgit.core.loop')
2-
local keymap = require('vgit.core.keymap')
32
local scene_setting = require('vgit.settings.scene')
43
local DiffScreen = require('vgit.features.screens.DiffScreen')
54
local HistoryScreen = require('vgit.features.screens.HistoryScreen')
@@ -91,42 +90,47 @@ function screen_manager.toggle_diff_preference()
9190
return screen_manager
9291
end
9392

93+
function screen_manager.destroy_active_screen()
94+
local screen = screen_manager.active_screen
95+
if not screen then return screen_manager end
96+
97+
local scene = screen.scene
98+
if not scene then return screen_manager end
99+
100+
scene:destroy()
101+
screen_manager.active_screen = nil
102+
103+
return screen_manager
104+
end
105+
94106
function screen_manager.create(screen_name, ...)
95107
if not screen_manager.is_screen_registered(screen_name) then return screen_manager end
96108
if screen_manager.has_active_screen() then screen_manager.destroy_active_screen() end
97109

98110
local success, screen = screen_manager.screens[screen_name](...)
99111
if success then
100112
screen_manager.active_screen = screen
101-
screen.scene
113+
local scene = screen.scene
114+
scene
102115
:on('BufWinLeave', function()
103116
loop.free_textlock()
104117
if screen_manager.has_active_screen() then return screen_manager.destroy_active_screen() end
105118
end)
106119
:on('QuitPre', function()
107120
if screen_manager.has_active_screen() then return screen_manager.destroy_active_screen() end
108121
end)
122+
scene:set_keymap({
123+
{
124+
mode = 'n',
125+
key = scene_setting:get('keymaps').quit,
126+
handler = function()
127+
screen_manager.destroy_active_screen()
128+
end
129+
}
130+
})
109131
end
110132

111133
return screen_manager
112134
end
113135

114-
function screen_manager.destroy_active_screen()
115-
screen_manager.active_screen:destroy()
116-
screen_manager.active_screen = nil
117-
118-
return screen_manager
119-
end
120-
121-
function screen_manager.handle_on_quit_keypress()
122-
if screen_manager.has_active_screen() then return screen_manager.destroy_active_screen() end
123-
end
124-
125-
function screen_manager.register_keymaps()
126-
keymap.set({
127-
mode = 'n',
128-
key = scene_setting:get('keymaps').quit
129-
}, screen_manager.handle_on_quit_keypress)
130-
end
131-
132136
return screen_manager

0 commit comments

Comments
 (0)