|
1 | 1 | local loop = require('vgit.core.loop')
|
2 |
| -local keymap = require('vgit.core.keymap') |
3 | 2 | local scene_setting = require('vgit.settings.scene')
|
4 | 3 | local DiffScreen = require('vgit.features.screens.DiffScreen')
|
5 | 4 | local HistoryScreen = require('vgit.features.screens.HistoryScreen')
|
@@ -91,42 +90,47 @@ function screen_manager.toggle_diff_preference()
|
91 | 90 | return screen_manager
|
92 | 91 | end
|
93 | 92 |
|
| 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 | + |
94 | 106 | function screen_manager.create(screen_name, ...)
|
95 | 107 | if not screen_manager.is_screen_registered(screen_name) then return screen_manager end
|
96 | 108 | if screen_manager.has_active_screen() then screen_manager.destroy_active_screen() end
|
97 | 109 |
|
98 | 110 | local success, screen = screen_manager.screens[screen_name](...)
|
99 | 111 | if success then
|
100 | 112 | screen_manager.active_screen = screen
|
101 |
| - screen.scene |
| 113 | + local scene = screen.scene |
| 114 | + scene |
102 | 115 | :on('BufWinLeave', function()
|
103 | 116 | loop.free_textlock()
|
104 | 117 | if screen_manager.has_active_screen() then return screen_manager.destroy_active_screen() end
|
105 | 118 | end)
|
106 | 119 | :on('QuitPre', function()
|
107 | 120 | if screen_manager.has_active_screen() then return screen_manager.destroy_active_screen() end
|
108 | 121 | 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 | + }) |
109 | 131 | end
|
110 | 132 |
|
111 | 133 | return screen_manager
|
112 | 134 | end
|
113 | 135 |
|
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 |
| - |
132 | 136 | return screen_manager
|
0 commit comments