github.com/jmigpin/editor@v1.6.0/core/options.go (about) 1 package core 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/jmigpin/editor/core/lsproto" 8 "github.com/jmigpin/editor/util/parseutil" 9 ) 10 11 type Options struct { 12 Font string 13 FontSize float64 14 FontHinting string 15 DPI float64 16 17 TabWidth int 18 WrapLineRune int 19 20 ColorTheme string 21 CommentsColor int 22 StringsColor int 23 ScrollBarWidth int 24 ScrollBarLeft bool 25 Shadows bool 26 27 SessionName string 28 Filenames []string 29 30 UseMultiKey bool 31 32 Plugins string 33 34 LSProtos RegistrationsOpt 35 PreSaveHooks PreSaveHooksOpt 36 } 37 38 //---------- 39 40 // implements flag.Value interface 41 type RegistrationsOpt struct { 42 regs []*lsproto.Registration 43 } 44 45 func (ro *RegistrationsOpt) Set(s string) error { 46 reg, err := lsproto.NewRegistration(s) 47 if err != nil { 48 return err 49 } 50 ro.regs = append(ro.regs, reg) 51 return nil 52 } 53 54 func (ro *RegistrationsOpt) MustSet(s string) { 55 if err := ro.Set(s); err != nil { 56 panic(err) 57 } 58 } 59 60 func (ro *RegistrationsOpt) String() string { 61 u := []string{} 62 for _, reg := range ro.regs { 63 u = append(u, reg.String()) 64 } 65 return fmt.Sprintf("%v", strings.Join(u, "\n")) 66 } 67 68 //---------- 69 70 // implements flag.Value interface 71 type PreSaveHooksOpt struct { 72 regs []*PreSaveHook 73 } 74 75 func (o *PreSaveHooksOpt) Set(s string) error { 76 reg, err := newPreSaveHook(s) 77 if err != nil { 78 return err 79 } 80 o.regs = append(o.regs, reg) 81 return nil 82 } 83 84 func (o *PreSaveHooksOpt) MustSet(s string) { 85 if err := o.Set(s); err != nil { 86 panic(err) 87 } 88 } 89 90 func (o *PreSaveHooksOpt) String() string { 91 u := []string{} 92 for _, reg := range o.regs { 93 u = append(u, reg.String()) 94 } 95 return fmt.Sprintf("%v", strings.Join(u, "\n")) 96 } 97 98 //---------- 99 100 type PreSaveHook struct { 101 Language string 102 Exts []string 103 Cmd string 104 } 105 106 func newPreSaveHook(s string) (*PreSaveHook, error) { 107 fields, err := parseutil.ParseFields(s, ',') 108 if err != nil { 109 return nil, err 110 } 111 minFields := 3 112 if len(fields) != minFields { 113 return nil, fmt.Errorf("expecting %v fields: %v", minFields, len(fields)) 114 } 115 116 r := &PreSaveHook{} 117 r.Language = fields[0] 118 if r.Language == "" { 119 return nil, fmt.Errorf("empty language") 120 } 121 r.Exts = strings.Split(fields[1], " ") 122 r.Cmd = fields[2] 123 124 return r, nil 125 } 126 127 func (h *PreSaveHook) String() string { 128 u := []string{h.Language} 129 130 exts := strings.Join(h.Exts, " ") 131 if len(h.Exts) >= 2 { 132 exts = fmt.Sprintf("%q", exts) 133 } 134 u = append(u, exts) 135 136 cmd := h.Cmd 137 cmd2 := parseutil.AddEscapes(cmd, '\\', " ,") 138 if cmd != cmd2 { 139 cmd = fmt.Sprintf("%q", cmd) 140 } 141 u = append(u, cmd) 142 143 return strings.Join(u, ",") 144 }