Call dmon_unwatch when changing project

Fix a conspicuous omission to call the dmon_unwatch function
when changing project directory.

This uncovered a bug or a quirk of the dmon library where the watch_ids
can change as a result of calling dmon_unwatch because they are just
indexes on a contiguous array. Use a workaround to always unwatch the
first valid watch_id N times.
This commit is contained in:
Francesco Abbate
2021-12-20 14:42:48 +01:00
parent 29318be9c7
commit 3109263c5d
3 changed files with 28 additions and 1 deletions
+4 -1
View File
@@ -164,7 +164,10 @@ command.add(nil, {
core.error("Cannot open folder %q", text)
return
end
core.confirm_close_docs(core.docs, core.open_folder_project, text)
core.confirm_close_docs(core.docs, function(dirpath)
core.close_current_project()
core.open_folder_project(dirpath)
end, text)
end, suggest_directory)
end,
+16
View File
@@ -64,6 +64,22 @@ function core.set_project_dir(new_dir, change_project_fn)
return false
end
function core.close_current_project()
-- When using system.unwatch_dir we need to pass the watch_id provided by dmon.
-- In reality when unwatching a directory the dmon library shifts the other watch_id
-- values so the actual watch_id changes. To workaround this problem we assume the
-- first watch_id is always 1 and the watch_id are continguous and we unwatch the
-- first watch_id repeateadly up to the number of watch_ids.
local watch_id_max = 0
for _, project_dir in ipairs(core.project_directories) do
if project_dir.watch_id and project_dir.watch_id > watch_id_max then
watch_id_max = project_dir.watch_id
end
end
for i = 1, watch_id_max do
system.unwatch_dir(1)
end
end
function core.open_folder_project(dir_path_abs)
if core.set_project_dir(dir_path_abs, core.on_quit_project) then