@@ -8,6 +8,9 @@ local Listitem = require('orgmode.files.elements.listitem')
8
8
--- @class OrgFilesOpts
9
9
--- @field paths string | string[]
10
10
11
+ --- @class OrgLoadFileOpts
12
+ --- @field persist boolean Persist the file in the list of loaded files if it belongs to path
13
+
11
14
--- @class OrgFiles
12
15
--- @field paths string[]
13
16
--- @field files table<string , OrgFile> table with files that are part of paths
@@ -52,6 +55,7 @@ function OrgFiles:load(force)
52
55
end )
53
56
end
54
57
58
+ --- @deprecated Use `load_file` with `persist` option instead
55
59
--- @param filename string
56
60
--- @return OrgPromise<OrgFile | false>
57
61
function OrgFiles :add_to_paths (filename )
@@ -153,25 +157,44 @@ function OrgFiles:filenames()
153
157
end , self :all ())
154
158
end
155
159
160
+ --- @param filename string
161
+ --- @param opts ? OrgLoadFileOpts
156
162
--- @return OrgPromise<OrgFile | false>
157
- function OrgFiles :load_file (filename )
163
+ function OrgFiles :load_file (filename , opts )
164
+ opts = opts or {}
158
165
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
+
159
178
local file = self .all_files [filename ]
160
179
if file then
180
+ persist_if_required (file )
161
181
return file :reload ()
162
182
end
163
183
164
184
return OrgFile .load (filename ):next (function (orgfile )
165
185
if orgfile then
186
+ persist_if_required (file )
166
187
self .all_files [filename ] = orgfile
167
188
end
168
189
return orgfile
169
190
end )
170
191
end
171
192
193
+ --- @param filename string
194
+ --- @param opts ? OrgLoadFileOpts
172
195
--- @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 )
175
198
end
176
199
177
200
--- @param filename string
0 commit comments