mirror of
https://github.com/Hopiu/micro.git
synced 2026-05-21 12:51:54 +00:00
Improve file save speed for large files
This commit is contained in:
parent
a4ae7a1e11
commit
df44f538fd
1 changed files with 31 additions and 9 deletions
|
|
@ -415,17 +415,39 @@ func (b *Buffer) SaveAs(filename string) error {
|
||||||
b.Insert(end, "\n")
|
b.Insert(end, "\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
str := b.SaveString(b.Settings["fileformat"] == "dos")
|
|
||||||
data := []byte(str)
|
defer func() {
|
||||||
err := ioutil.WriteFile(ReplaceHome(filename), data, 0644)
|
|
||||||
if err == nil {
|
|
||||||
b.Path = filename
|
|
||||||
b.IsModified = false
|
|
||||||
b.ModTime, _ = GetModTime(filename)
|
b.ModTime, _ = GetModTime(filename)
|
||||||
return b.Serialize()
|
}()
|
||||||
|
|
||||||
|
f, err := os.OpenFile(ReplaceHome(filename), os.O_WRONLY|os.O_CREATE, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
b.ModTime, _ = GetModTime(filename)
|
if err := f.Truncate(0); err != nil {
|
||||||
return err
|
return err
|
||||||
|
}
|
||||||
|
useCrlf := b.Settings["fileformat"] == "dos"
|
||||||
|
for i, l := range b.lines {
|
||||||
|
if _, err := f.Write(l.data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if i != len(b.lines)-1 {
|
||||||
|
if useCrlf {
|
||||||
|
if _, err := f.Write([]byte{'\r', '\n'}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if _, err := f.Write([]byte{'\n'}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.Path = filename
|
||||||
|
b.IsModified = false
|
||||||
|
return b.Serialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SaveAsWithSudo is the same as SaveAs except it uses a neat trick
|
// SaveAsWithSudo is the same as SaveAs except it uses a neat trick
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue