Don't remember path on save if it is invalid

Fixes #656
This commit is contained in:
Zachary Yedidia
2017-05-14 10:27:15 -04:00
parent ef0f506b6f
commit b7133b302b
3 changed files with 33 additions and 25 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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()