From 71ac612891076ecf270e78116f2e13c3a6a40068 Mon Sep 17 00:00:00 2001 From: raven Date: Wed, 11 Feb 2026 11:43:51 -0600 Subject: configuration files --- client/config.go | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 client/config.go (limited to 'client/config.go') diff --git a/client/config.go b/client/config.go new file mode 100644 index 0000000..ad0eedb --- /dev/null +++ b/client/config.go @@ -0,0 +1,91 @@ +package main + +import ( + "path/filepath" + "strings" + "bufio" + "fmt" + "io" + "os" +) + +func getBaseConfigDir() (path string) { + path = os.Getenv("XDG_CONFIG_HOME") + if path != "" { + return + } + path = os.Getenv("APPDATA") + if path != "" { + return + } + if os.Getenv("HOME") != "" { + return filepath.Join(os.Getenv("HOME"), ".config") + } else { + return filepath.Join(filepath.Base(os.Args[0]), "config") + } +} + +func getConfigDir() string { + return filepath.Join(getBaseConfigDir(), "talk") +} + +func (a *application) executeScript(rd io.Reader) error { + var ( + command strings.Builder + br = bufio.NewReader(rd) + ) + for { + command.Reset() + command.WriteRune('/') + for { + c, _, err := br.ReadRune() + if err == io.EOF { + break + } + if err != nil { + return fmt.Errorf("error reading configuration: %s", err) + } + if c == '/' && command.Len() == 1 { + continue + } + if c == '\\' { + command.WriteRune(c) + c, _, _ = br.ReadRune() + } else if c == '#' { + for c != '\n' { + c, _, err = br.ReadRune() + if err != nil { + break + } + } + } else if c == '\n' { + break + } + command.WriteRune(c) + } + if strings.TrimSpace(command.String()) != "" { + a.processCommand(command.String()) + } + _, err := br.Peek(1) + if err == io.EOF { + break + } + } + return nil +} + +func (a *application) executeConfig(name string) error { + file, err := os.Open(filepath.Join(getConfigDir(), name)) + if err != nil { + return fmt.Errorf("error reading configuration: %s", err) + } + return a.executeScript(file) +} + +func (a *application) executeConfigOptional(name string) (err error) { + err = a.executeConfig(name) + if os.IsNotExist(err) { + return nil + } + return +} -- cgit v1.2.3