Do not show empty documents when restoring session
When a filename cannot be read when restoring a session do not create a document. Previous behavior was to create an empty "unsaved" document.
This commit is contained in:
parent
2365dfa9c0
commit
f682215b41
|
@ -29,7 +29,7 @@ local function workspace_files_for(project_dir)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function load_workspace_file(project_dir)
|
local function consume_workspace_file(project_dir)
|
||||||
for filename, id in workspace_files_for(project_dir) do
|
for filename, id in workspace_files_for(project_dir) do
|
||||||
local load_f = loadfile(filename)
|
local load_f = loadfile(filename)
|
||||||
local workspace = load_f and load_f()
|
local workspace = load_f and load_f()
|
||||||
|
@ -99,16 +99,26 @@ end
|
||||||
|
|
||||||
local function load_view(t)
|
local function load_view(t)
|
||||||
if t.type == "doc" then
|
if t.type == "doc" then
|
||||||
local ok, doc = pcall(core.open_doc, t.filename)
|
local dv
|
||||||
if not ok then
|
if not t.filename then
|
||||||
return DocView(core.open_doc())
|
-- document not associated to a file
|
||||||
|
dv = DocView(core.open_doc())
|
||||||
|
if t.text then dv.doc:insert(1, 1, t.text) end
|
||||||
|
else
|
||||||
|
-- we have a filename, try to read the file
|
||||||
|
local ok, doc = pcall(core.open_doc, t.filename)
|
||||||
|
if ok then
|
||||||
|
dv = DocView(doc)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- doc view "dv" can be nil here if the filename associated to the document
|
||||||
|
-- cannot be read.
|
||||||
|
if dv and dv.doc then
|
||||||
|
dv.doc:set_selection(table.unpack(t.selection))
|
||||||
|
dv.last_line, dv.last_col = dv.doc:get_selection()
|
||||||
|
dv.scroll.x, dv.scroll.to.x = t.scroll.x, t.scroll.x
|
||||||
|
dv.scroll.y, dv.scroll.to.y = t.scroll.y, t.scroll.y
|
||||||
end
|
end
|
||||||
local dv = DocView(doc)
|
|
||||||
if t.text then doc:insert(1, 1, t.text) end
|
|
||||||
doc:set_selection(table.unpack(t.selection))
|
|
||||||
dv.last_line, dv.last_col = doc:get_selection()
|
|
||||||
dv.scroll.x, dv.scroll.to.x = t.scroll.x, t.scroll.x
|
|
||||||
dv.scroll.y, dv.scroll.to.y = t.scroll.y, t.scroll.y
|
|
||||||
return dv
|
return dv
|
||||||
end
|
end
|
||||||
return require(t.module)()
|
return require(t.module)()
|
||||||
|
@ -141,13 +151,19 @@ end
|
||||||
local function load_node(node, t)
|
local function load_node(node, t)
|
||||||
if t.type == "leaf" then
|
if t.type == "leaf" then
|
||||||
local res
|
local res
|
||||||
for _, v in ipairs(t.views) do
|
local active_view
|
||||||
|
for i, v in ipairs(t.views) do
|
||||||
local view = load_view(v)
|
local view = load_view(v)
|
||||||
if v.active then res = view end
|
if view then
|
||||||
node:add_view(view)
|
if v.active then res = view end
|
||||||
|
node:add_view(view)
|
||||||
|
if t.active_view == i then
|
||||||
|
active_view = view
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if t.active_view then
|
if active_view then
|
||||||
node:set_active_view(node.views[t.active_view])
|
node:set_active_view(active_view)
|
||||||
end
|
end
|
||||||
return res
|
return res
|
||||||
else
|
else
|
||||||
|
@ -184,7 +200,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
local function load_workspace()
|
local function load_workspace()
|
||||||
local workspace = load_workspace_file(core.project_dir)
|
local workspace = consume_workspace_file(core.project_dir)
|
||||||
if workspace then
|
if workspace then
|
||||||
local root = get_unlocked_root(core.root_view.root_node)
|
local root = get_unlocked_root(core.root_view.root_node)
|
||||||
local active_view = load_node(root, workspace.documents)
|
local active_view = load_node(root, workspace.documents)
|
||||||
|
|
Loading…
Reference in New Issue