]> git.lizzy.rs Git - micro.git/commitdiff
Only initialize buffer settings once
authorZachary Yedidia <zyedidia@gmail.com>
Sun, 7 Feb 2021 18:14:40 +0000 (13:14 -0500)
committerZachary Yedidia <zyedidia@gmail.com>
Sun, 7 Feb 2021 18:14:40 +0000 (13:14 -0500)
Ref #2009

internal/buffer/buffer.go

index c2fda6658325eb869c9dab0f38ccc46cb22aa9a0..85470d83fdec63c44c5a441fb9b1bbc8eada2a32 100644 (file)
@@ -293,6 +293,13 @@ func NewBuffer(r io.Reader, size int64, path string, startcursor Loc, btype BufT
                b.AbsPath = absPath
                b.Path = path
 
+               // this is a little messy since we need to know some settings to read
+               // the file properly, but some settings depend on the filetype, which
+               // we don't know until reading the file. We first read the settings
+               // into a local variable and then use that to determine the encoding,
+               // readonly, and fileformat necessary for reading the file and
+               // assigning the filetype.
+               settings := config.DefaultCommonSettings()
                b.Settings = config.DefaultCommonSettings()
                for k, v := range config.GlobalSettings {
                        if _, ok := config.DefaultGlobalOnlySettings[k]; !ok {
@@ -300,9 +307,10 @@ func NewBuffer(r io.Reader, size int64, path string, startcursor Loc, btype BufT
                                b.Settings[k] = v
                        }
                }
-               config.InitLocalSettings(b.Settings, path)
+               b.Settings["readonly"] = settings["readonly"]
+               config.InitLocalSettings(settings, path)
 
-               enc, err := htmlindex.Get(b.Settings["encoding"].(string))
+               enc, err := htmlindex.Get(settings["encoding"].(string))
                if err != nil {
                        enc = unicode.UTF8
                        b.Settings["encoding"] = "utf-8"
@@ -318,7 +326,7 @@ func NewBuffer(r io.Reader, size int64, path string, startcursor Loc, btype BufT
                        if size == 0 {
                                // for empty files, use the fileformat setting instead of
                                // autodetection
-                               switch b.Settings["fileformat"] {
+                               switch settings["fileformat"] {
                                case "unix":
                                        ff = FFUnix
                                case "dos":