MCPcopy
hub / github.com/micro-editor/micro / saveToFile

Method saveToFile

internal/buffer/save.go:241–350  ·  view source on GitHub ↗
(filename string, withSudo bool, autoSave bool)

Source from the content-addressed store, hash-verified

239}
240
241func (b *Buffer) saveToFile(filename string, withSudo bool, autoSave bool) error {
242 var err error
243 if b.Type.Readonly {
244 return errors.New("Cannot save readonly buffer")
245 }
246 if b.Type.Scratch {
247 return errors.New("Cannot save scratch buffer")
248 }
249
250 if !autoSave && b.Settings["rmtrailingws"].(bool) {
251 for i, l := range b.lines {
252 leftover := util.CharacterCount(bytes.TrimRightFunc(l.data, unicode.IsSpace))
253
254 linelen := util.CharacterCount(l.data)
255 b.Remove(Loc{leftover, i}, Loc{linelen, i})
256 }
257
258 b.RelocateCursors()
259 }
260
261 if b.Settings["eofnewline"].(bool) {
262 end := b.End()
263 if b.RuneAt(Loc{end.X - 1, end.Y}) != '\n' {
264 b.insert(end, []byte{'\n'})
265 }
266 }
267
268 filename, err = util.ReplaceHome(filename)
269 if err != nil {
270 return err
271 }
272
273 newFile := false
274 fileInfo, err := os.Stat(filename)
275 if err != nil {
276 if !errors.Is(err, fs.ErrNotExist) {
277 return err
278 }
279 newFile = true
280 }
281 if err == nil && fileInfo.IsDir() {
282 return errors.New("Error: " + filename + " is a directory and cannot be saved")
283 }
284 if err == nil && !fileInfo.Mode().IsRegular() {
285 return errors.New("Error: " + filename + " is not a regular file and cannot be saved")
286 }
287
288 absFilename, err := filepath.Abs(filename)
289 if err != nil {
290 return err
291 }
292
293 // Get the leading path to the file | "." is returned if there's no leading path provided
294 if dirname := filepath.Dir(absFilename); dirname != "." {
295 // Check if the parent dirs don't exist
296 if _, statErr := os.Stat(dirname); errors.Is(statErr, fs.ErrNotExist) {
297 // Prompt to make sure they want to create the dirs that are missing
298 if b.Settings["mkparents"].(bool) {

Callers 3

AutoSaveMethod · 0.95
SaveAsMethod · 0.95
SaveAsWithSudoMethod · 0.95

Calls 15

RemoveMethod · 0.95
RelocateCursorsMethod · 0.95
RuneAtMethod · 0.95
UpdateModTimeMethod · 0.95
ReloadSettingsMethod · 0.95
SerializeMethod · 0.95
CharacterCountFunction · 0.92
ReplaceHomeFunction · 0.92
TermMessageFunction · 0.92
IsMethod · 0.80
UnwrapMethod · 0.80
calcHashMethod · 0.80

Tested by

no test coverage detected