mirror of
https://github.com/zyedidia/micro.git
synced 2026-02-12 18:10:26 +09:00
Add save and save as
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/zyedidia/micro/cmd/micro/config"
|
||||
"github.com/zyedidia/micro/cmd/micro/screen"
|
||||
"github.com/zyedidia/micro/cmd/micro/shell"
|
||||
"github.com/zyedidia/micro/cmd/micro/shellwords"
|
||||
"github.com/zyedidia/micro/cmd/micro/util"
|
||||
"github.com/zyedidia/tcell"
|
||||
)
|
||||
@@ -540,15 +541,62 @@ func (h *BufHandler) SaveAll() bool {
|
||||
|
||||
// Save the buffer to disk
|
||||
func (h *BufHandler) Save() bool {
|
||||
h.Buf.Save()
|
||||
// If this is an empty buffer, ask for a filename
|
||||
if h.Buf.Path == "" {
|
||||
h.SaveAs()
|
||||
} else {
|
||||
h.saveBufToFile(h.Buf.Path)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// SaveAs saves the buffer to disk with the given name
|
||||
func (h *BufHandler) SaveAs() bool {
|
||||
InfoBar.Prompt("Filename: ", "", "Save", nil, func(resp string, canceled bool) {
|
||||
if !canceled {
|
||||
// the filename might or might not be quoted, so unquote first then join the strings.
|
||||
args, err := shellwords.Split(resp)
|
||||
filename := strings.Join(args, " ")
|
||||
if err != nil {
|
||||
InfoBar.Error("Error parsing arguments: ", err)
|
||||
return
|
||||
}
|
||||
h.saveBufToFile(filename)
|
||||
|
||||
}
|
||||
})
|
||||
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 (h *BufHandler) saveBufToFile(filename string) {
|
||||
err := h.Buf.SaveAs(filename)
|
||||
if err != nil {
|
||||
if strings.HasSuffix(err.Error(), "permission denied") {
|
||||
InfoBar.YNPrompt("Permission denied. Do you want to save this file using sudo? (y,n)", func(yes, canceled bool) {
|
||||
if yes && !canceled {
|
||||
err = h.Buf.SaveAsWithSudo(filename)
|
||||
if err != nil {
|
||||
InfoBar.Error(err)
|
||||
} else {
|
||||
h.Buf.Path = filename
|
||||
h.Buf.SetName(filename)
|
||||
InfoBar.Message("Saved " + filename)
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
InfoBar.Error(err)
|
||||
}
|
||||
} else {
|
||||
h.Buf.Path = filename
|
||||
h.Buf.SetName(filename)
|
||||
InfoBar.Message("Saved " + filename)
|
||||
}
|
||||
}
|
||||
|
||||
// Find opens a prompt and searches forward for the input
|
||||
func (h *BufHandler) Find() bool {
|
||||
InfoBar.Prompt("Find: ", "", "Find", func(resp string) {
|
||||
|
||||
Reference in New Issue
Block a user