@@ -11,6 +11,8 @@ import (
11
11
"fmt"
12
12
"io/fs"
13
13
"net/http"
14
+ "os"
15
+ "path/filepath"
14
16
"strings"
15
17
"sync"
16
18
@@ -199,14 +201,14 @@ func (gui *GUI) MakeBody(b tree.Node, sim any, fsroot fs.FS, appname, title, abo
199
201
gui .Files .Tabber = tabs
200
202
201
203
if len (readme ) > 0 {
202
- gui .addReadme (readme [0 ], split )
204
+ gui .addReadme (readme [0 ], split , appname )
203
205
} else {
204
206
split .SetTiles (core .TileSplit , core .TileSpan )
205
207
split .SetSplits (.2 , .5 , .8 )
206
208
}
207
209
}
208
210
209
- func (gui * GUI ) addReadme (readmefs embed.FS , split * core.Splits ) {
211
+ func (gui * GUI ) addReadme (readmefs embed.FS , split * core.Splits , appname string ) {
210
212
gui .Readme = core .NewFrame (split )
211
213
gui .Readme .Name = "readme"
212
214
@@ -231,6 +233,26 @@ func (gui *GUI) addReadme(readmefs embed.FS, split *core.Splits) {
231
233
eds = append (eds , ed )
232
234
id := htmlcore .GetAttr (ctx .Node , "id" )
233
235
ed .SetName (id )
236
+
237
+ // used with Embed in shared context so need appname in filename to avoid conflicts
238
+ saveFile := filepath .Join (core .TheApp .AppDataDir (), appname + "-" + "q" + id + ".md" )
239
+ err := ed .Lines .Open (saveFile )
240
+ if err != nil {
241
+ if errors .Is (err , fs .ErrNotExist ) {
242
+ err := os .WriteFile (saveFile , nil , 0666 )
243
+ core .ErrorSnackbar (ed , err , "Error creating answer file" )
244
+ if err == nil {
245
+ err := ed .Lines .Open (saveFile )
246
+ core .ErrorSnackbar (ed , err , "Error loading answer" )
247
+ }
248
+ } else {
249
+ core .ErrorSnackbar (ed , err , "Error loading answer" )
250
+ }
251
+ }
252
+ ed .OnChange (func (e events.Event ) {
253
+ core .ErrorSnackbar (ed , ed .SaveQuiet (), "Error saving answer" )
254
+ })
255
+
234
256
return true
235
257
}
236
258
0 commit comments