diff --git a/cmd/micro/actions.go b/cmd/micro/actions.go index 7d726b08..5f64c39b 100644 --- a/cmd/micro/actions.go +++ b/cmd/micro/actions.go @@ -764,26 +764,8 @@ func (v *View) Save(usePlugin bool) bool { // If this is an empty buffer, ask for a filename if v.Buf.Path == "" { v.SaveAs(false) - } - err := v.Buf.Save() - if err != nil { - if strings.HasSuffix(err.Error(), "permission denied") { - choice, _ := messenger.YesNoPrompt("Permission denied. Do you want to save this file using sudo? (y,n)") - if choice { - err = v.Buf.SaveWithSudo() - if err != nil { - messenger.Error(err.Error()) - return false - } - messenger.Message("Saved " + v.Buf.Path) - } - messenger.Reset() - messenger.Clear() - } else { - messenger.Error(err.Error()) - } } else { - messenger.Message("Saved " + v.Buf.Path) + v.saveToFile(v.Buf.Path) } if usePlugin { @@ -792,16 +774,42 @@ func (v *View) Save(usePlugin bool) bool { return false } +// This function saves the buffer to `filename` and changes the buffer's path and name +// to `filename` if the save is successful +func (v *View) saveToFile(filename string) { + err := v.Buf.SaveAs(filename) + if err != nil { + if strings.HasSuffix(err.Error(), "permission denied") { + choice, _ := messenger.YesNoPrompt("Permission denied. Do you want to save this file using sudo? (y,n)") + if choice { + err = v.Buf.SaveAsWithSudo(filename) + if err != nil { + messenger.Error(err.Error()) + } else { + v.Buf.Path = filename + v.Buf.name = filename + messenger.Message("Saved " + filename) + } + } + messenger.Reset() + messenger.Clear() + } else { + messenger.Error(err.Error()) + } + } else { + v.Buf.Path = filename + v.Buf.name = filename + messenger.Message("Saved " + filename) + } +} + // SaveAs saves the buffer to disk with the given name func (v *View) SaveAs(usePlugin bool) bool { filename, canceled := messenger.Prompt("Filename: ", "", "Save", NoCompletion) if !canceled { // the filename might or might not be quoted, so unquote first then join the strings. filename = strings.Join(SplitCommandArgs(filename), " ") - v.Buf.Path = filename - v.Buf.name = filename - - v.Save(true) + v.saveToFile(filename) } return false diff --git a/cmd/micro/buffer.go b/cmd/micro/buffer.go index 9fcf8a74..bfbcbec4 100644 --- a/cmd/micro/buffer.go +++ b/cmd/micro/buffer.go @@ -338,7 +338,6 @@ func (b *Buffer) Serialize() error { func (b *Buffer) SaveAs(filename string) error { b.UpdateRules() dir, _ := homedir.Dir() - b.Path = strings.Replace(filename, "~", dir, 1) if b.Settings["rmtrailingws"].(bool) { r, _ := regexp.Compile(`[ \t]+$`) for lineNum, line := range b.Lines(0, b.NumLines) { @@ -361,6 +360,7 @@ func (b *Buffer) SaveAs(filename string) error { data := []byte(str) err := ioutil.WriteFile(filename, data, 0644) if err == nil { + b.Path = strings.Replace(filename, "~", dir, 1) b.IsModified = false b.ModTime, _ = GetModTime(filename) return b.Serialize() diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 1b01ae8a..52c5f5db 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -931,7 +931,7 @@ func (v *View) DisplayView() { // Display renders the view, the cursor, and statusline func (v *View) Display() { - if GetGlobalOption("termtitle").(bool) { + if globalSettings["termtitle"].(bool) { screen.SetTitle("micro: " + v.Buf.GetName()) } v.DisplayView()