Set the editing mode per view
This commit is contained in:
parent
50bd5e8b2b
commit
b0438b60dc
|
@ -172,15 +172,16 @@ command.add(nil, {
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
["core:toggle-vim-mode"] = function()
|
||||||
|
local mode = core.get_editing_mode(core.active_view)
|
||||||
|
if mode == 'standard' then
|
||||||
|
core.set_editing_mode(core.active_view, 'command')
|
||||||
|
else
|
||||||
|
core.set_editing_mode(core.active_view, 'standard')
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
["core:set-insert-mode"] = function()
|
["core:set-insert-mode"] = function()
|
||||||
core.mode = 'insert'
|
core.set_editing_mode(core.active_view, 'insert')
|
||||||
end,
|
|
||||||
|
|
||||||
["core:set-command-mode"] = function()
|
|
||||||
core.mode = 'command'
|
|
||||||
end,
|
|
||||||
|
|
||||||
["core:set-standard-mode"] = function()
|
|
||||||
core.mode = 'standard'
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
|
@ -56,6 +56,7 @@ function DocView:new(doc)
|
||||||
self.font = "code_font"
|
self.font = "code_font"
|
||||||
self.last_x_offset = {}
|
self.last_x_offset = {}
|
||||||
self.blink_timer = 0
|
self.blink_timer = 0
|
||||||
|
self.editing_mode = 'standard'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,6 +169,16 @@ function DocView:get_x_offset_col(line, x)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function DocView:get_editing_mode()
|
||||||
|
return self.editing_mode
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function DocView:set_editing_mode(mode)
|
||||||
|
self.editing_mode = mode
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function DocView:resolve_screen_position(x, y)
|
function DocView:resolve_screen_position(x, y)
|
||||||
local ox, oy = self:get_line_screen_position(1)
|
local ox, oy = self:get_line_screen_position(1)
|
||||||
local line = math.floor((y - oy) / self:get_line_height()) + 1
|
local line = math.floor((y - oy) / self:get_line_height()) + 1
|
||||||
|
|
|
@ -394,7 +394,6 @@ function core.init()
|
||||||
core.clip_rect_stack = {{ 0,0,0,0 }}
|
core.clip_rect_stack = {{ 0,0,0,0 }}
|
||||||
core.log_items = {}
|
core.log_items = {}
|
||||||
core.docs = {}
|
core.docs = {}
|
||||||
core.mode = 'standard'
|
|
||||||
core.threads = setmetatable({}, { __mode = "k" })
|
core.threads = setmetatable({}, { __mode = "k" })
|
||||||
|
|
||||||
local project_dir_abs = system.absolute_path(project_dir)
|
local project_dir_abs = system.absolute_path(project_dir)
|
||||||
|
@ -717,12 +716,12 @@ end
|
||||||
|
|
||||||
function core.on_event(type, ...)
|
function core.on_event(type, ...)
|
||||||
local did_keymap = false
|
local did_keymap = false
|
||||||
if type == "textinput" and (core.mode == 'insert' or core.mode == 'standard') then
|
if type == "textinput" then
|
||||||
core.root_view:on_text_input(...)
|
core.root_view:on_text_input(...)
|
||||||
elseif type == "keypressed" then
|
elseif type == "keypressed" then
|
||||||
did_keymap = keymap.on_key_pressed(core.mode, ...)
|
did_keymap = keymap.on_key_pressed(...)
|
||||||
elseif type == "keyreleased" then
|
elseif type == "keyreleased" then
|
||||||
keymap.on_key_released(core.mode, ...)
|
keymap.on_key_released(...)
|
||||||
elseif type == "mousemoved" then
|
elseif type == "mousemoved" then
|
||||||
core.root_view:on_mouse_moved(...)
|
core.root_view:on_mouse_moved(...)
|
||||||
elseif type == "mousepressed" then
|
elseif type == "mousepressed" then
|
||||||
|
@ -908,5 +907,16 @@ core.add_save_hook(function(filename)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
function core.get_editing_mode(view)
|
||||||
|
return view.get_editing_mode and view:get_editing_mode() or 'standard'
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function core.set_editing_mode(view, mode)
|
||||||
|
if view.set_editing_mode then
|
||||||
|
view:set_editing_mode(mode)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
return core
|
return core
|
||||||
|
|
|
@ -108,7 +108,7 @@ function keymap.get_binding(cmd)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function keymap.on_key_pressed(editor_mode, k)
|
function keymap.on_key_pressed(k)
|
||||||
local mk = modkey_map[k]
|
local mk = modkey_map[k]
|
||||||
if mk then
|
if mk then
|
||||||
keymap.modkeys[mk] = true
|
keymap.modkeys[mk] = true
|
||||||
|
@ -118,7 +118,8 @@ function keymap.on_key_pressed(editor_mode, k)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local stroke = key_to_stroke(k)
|
local stroke = key_to_stroke(k)
|
||||||
if editor_mode == 'command' then
|
local mode = core.get_editing_mode(core.active_view)
|
||||||
|
if mode == 'command' then
|
||||||
if keymap.command_verb == '.' and table_find(keymap.vim_verbs_imm, stroke) then
|
if keymap.command_verb == '.' and table_find(keymap.vim_verbs_imm, stroke) then
|
||||||
keymap.vim_execute(stroke, keymap.command_mult)
|
keymap.vim_execute(stroke, keymap.command_mult)
|
||||||
keymap.reset_vim_command()
|
keymap.reset_vim_command()
|
||||||
|
@ -134,9 +135,9 @@ function keymap.on_key_pressed(editor_mode, k)
|
||||||
keymap.reset_vim_command()
|
keymap.reset_vim_command()
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
elseif editor_mode == 'insert' then
|
elseif mode == 'insert' then
|
||||||
if stroke == 'escape' then
|
if stroke == 'escape' then
|
||||||
core.mode = 'command'
|
core.set_editing_mode(core.active_view, 'command')
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
|
@ -154,7 +155,7 @@ function keymap.on_key_pressed(editor_mode, k)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function keymap.on_key_released(editor_mode, k)
|
function keymap.on_key_released(k)
|
||||||
local mk = modkey_map[k]
|
local mk = modkey_map[k]
|
||||||
if mk then
|
if mk then
|
||||||
keymap.modkeys[mk] = false
|
keymap.modkeys[mk] = false
|
||||||
|
|
|
@ -110,6 +110,7 @@ function StatusView:get_items()
|
||||||
local indent = dv.doc.indent_info
|
local indent = dv.doc.indent_info
|
||||||
local indent_label = (indent and indent.type == "hard") and "tabs: " or "spaces: "
|
local indent_label = (indent and indent.type == "hard") and "tabs: " or "spaces: "
|
||||||
local indent_size = indent and tostring(indent.size) .. (indent.confirmed and "" or "*") or "unknown"
|
local indent_size = indent and tostring(indent.size) .. (indent.confirmed and "" or "*") or "unknown"
|
||||||
|
local editing_mode = core.get_editing_mode(dv)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
dirty and style.accent or style.text, style.icon_font, "f",
|
dirty and style.accent or style.text, style.icon_font, "f",
|
||||||
|
@ -124,7 +125,7 @@ function StatusView:get_items()
|
||||||
self.separator,
|
self.separator,
|
||||||
string.format("%d%%", line / #dv.doc.lines * 100),
|
string.format("%d%%", line / #dv.doc.lines * 100),
|
||||||
}, {
|
}, {
|
||||||
style.caret, core.mode ~= 'standard' and string.upper(core.mode) or '', style.text, self.separator2,
|
style.caret, editing_mode ~= 'standard' and string.upper(editing_mode) or '', style.text, self.separator2,
|
||||||
indent_label, indent_size,
|
indent_label, indent_size,
|
||||||
style.dim, self.separator2, style.text,
|
style.dim, self.separator2, style.text,
|
||||||
style.icon_font, "g",
|
style.icon_font, "g",
|
||||||
|
|
Loading…
Reference in New Issue