@@ -8,6 +8,9 @@ local Listitem = require('orgmode.files.elements.listitem')
88--- @class OrgFilesOpts
99--- @field paths string | string[]
1010
11+ --- @class OrgLoadFileOpts
12+ --- @field persist boolean Persist the file in the list of loaded files if it belongs to path
13+
1114--- @class OrgFiles
1215--- @field paths string[]
1316--- @field files table<string , OrgFile> table with files that are part of paths
@@ -52,6 +55,7 @@ function OrgFiles:load(force)
5255 end )
5356end
5457
58+ --- @deprecated Use `load_file` with `persist` option instead
5559--- @param filename string
5660--- @return OrgPromise<OrgFile | false>
5761function OrgFiles :add_to_paths (filename )
@@ -153,25 +157,44 @@ function OrgFiles:filenames()
153157 end , self :all ())
154158end
155159
160+ --- @param filename string
161+ --- @param opts ? OrgLoadFileOpts
156162--- @return OrgPromise<OrgFile | false>
157- function OrgFiles :load_file (filename )
163+ function OrgFiles :load_file (filename , opts )
164+ opts = opts or {}
158165 filename = vim .fn .resolve (vim .fn .fnamemodify (filename , ' :p' ))
166+
167+ local persist_if_required = function (file )
168+ --- @cast file OrgFile
169+ if self .files [filename ] or not opts .persist then
170+ return
171+ end
172+ local all_paths = self :_files ()
173+ if vim .tbl_contains (all_paths , filename ) then
174+ self .files [filename ] = file
175+ end
176+ end
177+
159178 local file = self .all_files [filename ]
160179 if file then
180+ persist_if_required (file )
161181 return file :reload ()
162182 end
163183
164184 return OrgFile .load (filename ):next (function (orgfile )
165185 if orgfile then
186+ persist_if_required (file )
166187 self .all_files [filename ] = orgfile
167188 end
168189 return orgfile
169190 end )
170191end
171192
193+ --- @param filename string
194+ --- @param opts ? OrgLoadFileOpts
172195--- @return OrgFile | false
173- function OrgFiles :load_file_sync (filename , timeout )
174- return self :load_file (filename ):wait (timeout )
196+ function OrgFiles :load_file_sync (filename , opts , timeout )
197+ return self :load_file (filename , opts ):wait (timeout )
175198end
176199
177200--- @param filename string
0 commit comments