From ba98b558d97aa8396e222c31bd8d8f0fa6ca4977 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Sun, 7 Feb 2021 13:14:40 -0500 Subject: [PATCH] Only initialize buffer settings once Ref #2009 --- internal/buffer/buffer.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index c2fda665..85470d83 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -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":