diff --git a/data/core/init.lua b/data/core/init.lua index fda0faff..2cf82344 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -153,6 +153,9 @@ end function core.project_subdir_set_show(dir, filename, show) dir.shown_subdir[filename] = show + if dir.files_limit then + system.watch_dir_add(dir.watch_id, dir.name .. PATHSEP .. filename) + end end @@ -176,9 +179,13 @@ local function scan_project_folder(index) if entries_count > config.max_project_files then print("DEBUG setting files limit FLAG for", dir.name) dir.files_limit = true + -- Watch non-recursively + dir.watch_id = system.watch_dir(path, false) if core.status_view then -- May be not yet initialized. show_max_files_warning() end + else + dir.watch_id = system.watch_dir(path, true) end dir.files = t core.dir_rescan_add_job(dir, ".") @@ -190,13 +197,13 @@ function core.add_project_directory(path) -- will be simply the name of the directory, without its path. -- The field item.topdir will identify it as a top level directory. path = normalize_path(path) - local watch_id = system.watch_dir(path); + -- local watch_id = system.watch_dir(path) local dir = { name = path, item = {filename = common.basename(path), type = "dir", topdir = true}, files_limit = false, is_dirty = true, - watch_id = watch_id, + -- watch_id = watch_id, shown_subdir = {}, } table.insert(core.project_directories, dir) diff --git a/src/api/system.c b/src/api/system.c index 0eb09108..2d1e3dae 100644 --- a/src/api/system.c +++ b/src/api/system.c @@ -648,12 +648,23 @@ static int f_set_window_opacity(lua_State *L) { static int f_watch_dir(lua_State *L) { const char *path = luaL_checkstring(L, 1); - dmon_watch_id watch_id = dmon_watch(path, dirmonitor_watch_callback, DMON_WATCHFLAGS_RECURSIVE, NULL); + const int recursive = lua_toboolean(L, 2); + uint32_t dmon_flags = (recursive ? DMON_WATCHFLAGS_RECURSIVE : 0); + dmon_watch_id watch_id = dmon_watch(path, dirmonitor_watch_callback, dmon_flags, NULL); if (watch_id.id == 0) { luaL_error(L, "directory monitoring watch failed"); } lua_pushnumber(L, watch_id.id); return 1; } +static int f_watch_dir_add(lua_State *L) { + dmon_watch_id watch_id; + watch_id.id = luaL_checkinteger(L, 1); + const char *subdir = luaL_checkstring(L, 2); + bool success = dmon_watch_add(watch_id, subdir); + lua_pushboolean(L, success); + return 1; +} + #ifdef _WIN32 #define PATHSEP '\\' #else @@ -739,6 +750,7 @@ static const luaL_Reg lib[] = { { "fuzzy_match", f_fuzzy_match }, { "set_window_opacity", f_set_window_opacity }, { "watch_dir", f_watch_dir }, + { "watch_dir_add", f_watch_dir_add }, { "path_compare", f_path_compare }, { NULL, NULL } };