about summary refs log tree commit diff stats
path: root/config
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2020-07-30 23:22:32 +0200
committerReto Brunner <reto@labrat.space>2020-07-30 23:22:32 +0200
commit3d784c5d8c7d037e38159fc1753773a2e81aa43e (patch)
tree2c062c9f4b4641a59e3f4f3ff3317f636bfd49cf /config
parent6ee7b1c3fd40b0e2f93dcaa7ffb3b0bdd56ac285 (diff)
downloadaerc-3d784c5d8c7d037e38159fc1753773a2e81aa43e.tar.gz
Revert "Implement style configuration."
This reverts commit 1ff687ca2b0821c2cacc1fa725abb3302d2af9da.
Diffstat (limited to 'config')
-rw-r--r--config/aerc.conf.in11
-rw-r--r--config/config.go55
-rw-r--r--config/default_styleset33
-rw-r--r--config/style.go379
4 files changed, 6 insertions, 472 deletions
diff --git a/config/aerc.conf.in b/config/aerc.conf.in
index b9381a8..3348efa 100644
--- a/config/aerc.conf.in
+++ b/config/aerc.conf.in
@@ -67,17 +67,6 @@ sort=
 # Default: true
 next-message-on-delete=true
 
-# The directories where the stylesets are stored. It takes a colon-separated
-# list of directories.
-#
-# default: @SHAREDIR@/stylesets/
-stylesets-dirs=@SHAREDIR@/stylesets/
-
-# Sets the styleset to use for the aerc ui elements.
-#
-# Default: default
-styleset-name=default
-
 [viewer]
 #
 # Specifies the pager to use when displaying emails. Note that some filters
diff --git a/config/config.go b/config/config.go
index 9e78c86..00a52ce 100644
--- a/config/config.go
+++ b/config/config.go
@@ -45,9 +45,6 @@ type UIConfig struct {
 	NextMessageOnDelete bool          `ini:"next-message-on-delete"`
 	CompletionDelay     time.Duration `ini:"completion-delay"`
 	CompletionPopovers  bool          `ini:"completion-popovers"`
-	StyleSetDirs        []string      `ini:"stylesets-dirs" delim:":"`
-	StyleSetName        string        `ini:"styleset-name"`
-	style               StyleSet
 }
 
 type ContextType int
@@ -414,19 +411,6 @@ func (config *AercConfig) LoadConfig(file *ini.File) error {
 			}
 		}
 	}
-
-	if err := config.Ui.loadStyleSet(
-		config.Ui.StyleSetDirs); err != nil {
-		return err
-	}
-
-	for idx, _ := range config.ContextualUis {
-		if err := config.ContextualUis[idx].UiConfig.loadStyleSet(
-			config.Ui.StyleSetDirs); err != nil {
-			return err
-		}
-	}
-
 	return nil
 }
 
@@ -487,8 +471,6 @@ func LoadConfigFromFile(root *string, sharedir string) (*AercConfig, error) {
 			NextMessageOnDelete: true,
 			CompletionDelay:     250 * time.Millisecond,
 			CompletionPopovers:  true,
-			StyleSetDirs:        []string{path.Join(sharedir, "stylesets")},
-			StyleSetName:        "default",
 		},
 
 		ContextualUis: []UIConfigContext{},
@@ -518,7 +500,6 @@ func LoadConfigFromFile(root *string, sharedir string) (*AercConfig, error) {
 			Forwards:     "forward_as_body",
 		},
 	}
-
 	// These bindings are not configurable
 	config.Bindings.AccountWizard.ExKey = KeyStroke{
 		Key: tcell.KeyCtrlE,
@@ -529,7 +510,6 @@ func LoadConfigFromFile(root *string, sharedir string) (*AercConfig, error) {
 	if err = config.LoadConfig(file); err != nil {
 		return nil, err
 	}
-
 	if ui, err := file.GetSection("general"); err == nil {
 		if err := ui.MapTo(&config.General); err != nil {
 			return nil, err
@@ -637,18 +617,8 @@ func parseLayout(layout string) [][]string {
 	return l
 }
 
-func (ui *UIConfig) loadStyleSet(styleSetDirs []string) error {
-	ui.style = NewStyleSet()
-	err := ui.style.LoadStyleSet(ui.StyleSetName, styleSetDirs)
-	if err != nil {
-		return fmt.Errorf("Unable to load default styleset: %s", err)
-	}
-
-	return nil
-}
-
-func (config AercConfig) mergeContextualUi(baseUi UIConfig,
-	contextType ContextType, s string) UIConfig {
+func (config *AercConfig) mergeContextualUi(baseUi *UIConfig,
+	contextType ContextType, s string) {
 	for _, contextualUi := range config.ContextualUis {
 		if contextualUi.ContextType != contextType {
 			continue
@@ -658,30 +628,17 @@ func (config AercConfig) mergeContextualUi(baseUi UIConfig,
 			continue
 		}
 
-		mergo.Merge(&baseUi, contextualUi.UiConfig, mergo.WithOverride)
-		if contextualUi.UiConfig.StyleSetName != "" {
-			baseUi.style = contextualUi.UiConfig.style
-		}
-		return baseUi
+		mergo.MergeWithOverwrite(baseUi, contextualUi.UiConfig)
+		return
 	}
-
-	return baseUi
 }
 
-func (config AercConfig) GetUiConfig(params map[ContextType]string) UIConfig {
+func (config *AercConfig) GetUiConfig(params map[ContextType]string) UIConfig {
 	baseUi := config.Ui
 
 	for k, v := range params {
-		baseUi = config.mergeContextualUi(baseUi, k, v)
+		config.mergeContextualUi(&baseUi, k, v)
 	}
 
 	return baseUi
 }
-
-func (uiConfig UIConfig) GetStyle(so StyleObject) tcell.Style {
-	return uiConfig.style.Get(so)
-}
-
-func (uiConfig UIConfig) GetStyleSelected(so StyleObject) tcell.Style {
-	return uiConfig.style.Selected(so)
-}
diff --git a/config/default_styleset b/config/default_styleset
deleted file mode 100644
index fa52f23..0000000
--- a/config/default_styleset
+++ /dev/null
@@ -1,33 +0,0 @@
-# 
-# aerc default styleset
-# 
-# This styleset uses the terminal defaults as its base.
-# More information on how to configure the styleset can be found in
-# the *aerc-styleset.7* manpage. Please read the manual before
-# modifying or creating a styleset.
-
-*.default=true
-*.selected.reverse=toggle
-
-title.reverse=true
-header.bold=true
-
-*error.bold=true
-error.fg=red
-warning.fg=yellow
-success.fg=green
-
-statusline*.default=true
-statusline_default.reverse=true
-statusline_error.fg=red
-statusline_error.reverse=true
-
-msglist_unread.bold=true
-
-completion_pill.reverse=true
-
-tab.reverse=true
-border.reverse = true
-
-selector_focused.reverse=true
-selector_chooser.bold=true
diff --git a/config/style.go b/config/style.go
deleted file mode 100644
index f159be3..0000000
--- a/config/style.go
+++ /dev/null
@@ -1,379 +0,0 @@
-package config
-
-import (
-	"errors"
-	"fmt"
-	"os"
-	"path"
-	"regexp"
-	"strings"
-
-	"github.com/gdamore/tcell"
-	"github.com/go-ini/ini"
-	"github.com/mitchellh/go-homedir"
-)
-
-type StyleObject int32
-
-const (
-	STYLE_DEFAULT StyleObject = iota
-	STYLE_ERROR
-	STYLE_WARNING
-	STYLE_SUCCESS
-
-	STYLE_TITLE
-	STYLE_HEADER
-
-	STYLE_STATUSLINE_DEFAULT
-	STYLE_STATUSLINE_ERROR
-	STYLE_STATUSLINE_SUCCESS
-
-	STYLE_MSGLIST_DEFAULT
-	STYLE_MSGLIST_UNREAD
-	STYLE_MSGLIST_READ
-	STYLE_MSGLIST_DELETED
-	STYLE_MSGLIST_MARKED
-	STYLE_MSGLIST_FLAGGED
-
-	STYLE_DIRLIST_DEFAULT
-
-	STYLE_COMPLETION_DEFAULT
-	STYLE_COMPLETION_GUTTER
-	STYLE_COMPLETION_PILL
-
-	STYLE_TAB
-	STYLE_STACK
-	STYLE_SPINNER
-	STYLE_BORDER
-
-	STYLE_SELECTOR_DEFAULT
-	STYLE_SELECTOR_FOCUSED
-	STYLE_SELECTOR_CHOOSER
-)
-
-var StyleNames = map[string]StyleObject{
-	"default": STYLE_DEFAULT,
-	"error":   STYLE_ERROR,
-	"warning": STYLE_WARNING,
-	"success": STYLE_SUCCESS,
-
-	"title":  STYLE_TITLE,
-	"header": STYLE_HEADER,
-
-	"statusline_default": STYLE_STATUSLINE_DEFAULT,
-	"statusline_error":   STYLE_STATUSLINE_ERROR,
-	"statusline_success": STYLE_STATUSLINE_SUCCESS,
-
-	"msglist_default": STYLE_MSGLIST_DEFAULT,
-	"msglist_unread":  STYLE_MSGLIST_UNREAD,
-	"msglist_read":    STYLE_MSGLIST_READ,
-	"msglist_deleted": STYLE_MSGLIST_DELETED,
-	"msglist_marked":  STYLE_MSGLIST_MARKED,
-	"msglist_flagged": STYLE_MSGLIST_FLAGGED,
-
-	"dirlist_default": STYLE_DIRLIST_DEFAULT,
-
-	"completion_default": STYLE_COMPLETION_DEFAULT,
-	"completion_gutter":  STYLE_COMPLETION_GUTTER,
-	"completion_pill":    STYLE_COMPLETION_PILL,
-
-	"tab":     STYLE_TAB,
-	"stack":   STYLE_STACK,
-	"spinner": STYLE_SPINNER,
-	"border":  STYLE_BORDER,
-
-	"selector_default": STYLE_SELECTOR_DEFAULT,
-	"selector_focused": STYLE_SELECTOR_FOCUSED,
-	"selector_chooser": STYLE_SELECTOR_CHOOSER,
-}
-
-type Style struct {
-	Fg        tcell.Color
-	Bg        tcell.Color
-	Bold      bool
-	Blink     bool
-	Underline bool
-	Reverse   bool
-}
-
-func (s Style) Get() tcell.Style {
-	return tcell.StyleDefault.
-		Foreground(s.Fg).
-		Background(s.Bg).
-		Bold(s.Bold).
-		Blink(s.Blink).
-		Underline(s.Blink).
-		Reverse(s.Reverse)
-}
-
-func (s *Style) Normal() {
-	s.Bold = false
-	s.Blink = false
-	s.Underline = false
-	s.Reverse = false
-}
-
-func (s *Style) Default() *Style {
-	s.Fg = tcell.ColorDefault
-	s.Bg = tcell.ColorDefault
-	return s
-}
-
-func (s *Style) Reset() *Style {
-	s.Default()
-	s.Normal()
-	return s
-}
-
-func boolSwitch(val string, cur_val bool) (bool, error) {
-	switch val {
-	case "true":
-		return true, nil
-	case "false":
-		return false, nil
-	case "toggle":
-		return !cur_val, nil
-	default:
-		return cur_val, errors.New(
-			"Bool Switch attribute must be true, false, or toggle")
-	}
-}
-
-func (s *Style) Set(attr, val string) error {
-	switch attr {
-	case "fg":
-		s.Fg = tcell.GetColor(val)
-	case "bg":
-		s.Bg = tcell.GetColor(val)
-	case "bold":
-		if state, err := boolSwitch(val, s.Bold); err != nil {
-			return err
-		} else {
-			s.Bold = state
-		}
-	case "blink":
-		if state, err := boolSwitch(val, s.Blink); err != nil {
-			return err
-		} else {
-			s.Blink = state
-		}
-	case "underline":
-		if state, err := boolSwitch(val, s.Underline); err != nil {
-			return err
-		} else {
-			s.Underline = state
-		}
-	case "reverse":
-		if state, err := boolSwitch(val, s.Reverse); err != nil {
-			return err
-		} else {
-			s.Reverse = state
-		}
-	case "default":
-		s.Default()
-	case "normal":
-		s.Normal()
-	default:
-		return errors.New("Unknown style attribute: " + attr)
-	}
-
-	return nil
-}
-
-type StyleSet struct {
-	objects  map[StyleObject]*Style
-	selected map[StyleObject]*Style
-}
-
-func NewStyleSet() StyleSet {
-	ss := StyleSet{
-		objects:  make(map[StyleObject]*Style),
-		selected: make(map[StyleObject]*Style),
-	}
-	for _, so := range StyleNames {
-		ss.objects[so] = new(Style)
-		ss.selected[so] = new(Style)
-	}
-
-	return ss
-}
-
-func (ss StyleSet) reset() {
-	for _, so := range StyleNames {
-		ss.objects[so].Reset()
-		ss.selected[so].Reset()
-	}
-}
-
-func (ss StyleSet) Get(so StyleObject) tcell.Style {
-	return ss.objects[so].Get()
-}
-
-func (ss StyleSet) Selected(so StyleObject) tcell.Style {
-	return ss.selected[so].Get()
-}
-
-func findStyleSet(stylesetName string, stylesetsDir []string) (string, error) {
-	for _, dir := range stylesetsDir {
-		stylesetPath, err := homedir.Expand(path.Join(dir, stylesetName))
-		if err != nil {
-			return "", err
-		}
-
-		if _, err := os.Stat(stylesetPath); os.IsNotExist(err) {
-			continue
-		}
-
-		return stylesetPath, nil
-	}
-
-	return "", fmt.Errorf(
-		"Can't find styleset %q in any of %v", stylesetName, stylesetsDir)
-}
-
-func (ss *StyleSet) ParseStyleSet(file *ini.File) error {
-	ss.reset()
-
-	defaultSection, err := file.GetSection(ini.DefaultSection)
-	if err != nil {
-		return err
-	}
-
-	selectedKeys := []string{}
-
-	for _, key := range defaultSection.KeyStrings() {
-		tokens := strings.Split(key, ".")
-		var styleName, attr string
-		switch len(tokens) {
-		case 2:
-			styleName, attr = tokens[0], tokens[1]
-		case 3:
-			if tokens[1] != "selected" {
-				return errors.New("Unknown modifier: " + tokens[1])
-			}
-			selectedKeys = append(selectedKeys, key)
-			continue
-		default:
-			return errors.New("Style parsing error: " + key)
-		}
-		val := defaultSection.KeysHash()[key]
-
-		if strings.ContainsAny(styleName, "*?") {
-			regex := fnmatchToRegex(styleName)
-			for sn, so := range StyleNames {
-				matched, err := regexp.MatchString(regex, sn)
-				if err != nil {
-					return err
-				}
-
-				if !matched {
-					continue
-				}
-
-				if err := ss.objects[so].Set(attr, val); err != nil {
-					return err
-				}
-				if err := ss.selected[so].Set(attr, val); err != nil {
-					return err
-				}
-			}
-		} else {
-			so, ok := StyleNames[styleName]
-			if !ok {
-				return errors.New("Unknown style object: " + styleName)
-			}
-			if err := ss.objects[so].Set(attr, val); err != nil {
-				return err
-			}
-			if err := ss.selected[so].Set(attr, val); err != nil {
-				return err
-			}
-		}
-	}
-
-	for _, key := range selectedKeys {
-		tokens := strings.Split(key, ".")
-		styleName, modifier, attr := tokens[0], tokens[1], tokens[2]
-		if modifier != "selected" {
-			return errors.New("Unknown modifier: " + modifier)
-		}
-
-		val := defaultSection.KeysHash()[key]
-
-		if strings.ContainsAny(styleName, "*?") {
-			regex := fnmatchToRegex(styleName)
-			for sn, so := range StyleNames {
-				matched, err := regexp.MatchString(regex, sn)
-				if err != nil {
-					return err
-				}
-
-				if !matched {
-					continue
-				}
-
-				if err := ss.selected[so].Set(attr, val); err != nil {
-					return err
-				}
-			}
-		} else {
-			so, ok := StyleNames[styleName]
-			if !ok {
-				return errors.New("Unknown style object: " + styleName)
-			}
-			if err := ss.selected[so].Set(attr, val); err != nil {
-				return err
-			}
-		}
-	}
-
-	for _, key := range defaultSection.KeyStrings() {
-		tokens := strings.Split(key, ".")
-		styleName, attr := tokens[0], tokens[1]
-		val := defaultSection.KeysHash()[key]
-
-		if styleName != "selected" {
-			continue
-		}
-
-		for _, so := range StyleNames {
-			if err := ss.selected[so].Set(attr, val); err != nil {
-				return err
-			}
-		}
-	}
-
-	return nil
-}
-
-func (ss *StyleSet) LoadStyleSet(stylesetName string, stylesetDirs []string) error {
-	filepath, err := findStyleSet(stylesetName, stylesetDirs)
-	if err != nil {
-		return err
-	}
-
-	file, err := ini.Load(filepath)
-	if err != nil {
-		return err
-	}
-
-	return ss.ParseStyleSet(file)
-}
-
-func fnmatchToRegex(pattern string) string {
-	n := len(pattern)
-	var regex strings.Builder
-
-	for i := 0; i < n; i++ {
-		switch pattern[i] {
-		case '*':
-			regex.WriteString(".*")
-		case '?':
-			regex.WriteByte('.')
-		default:
-			regex.WriteByte(pattern[i])
-		}
-	}
-
-	return regex.String()
-}
29e473baa6df8d64ab9'>762b099e ^
90560d71 ^
9542bb11 ^

672e3e50 ^


65361948 ^
672e3e50 ^



90560d71 ^
d5d908dd ^
672e3e50 ^

762b099e ^
672e3e50 ^
90560d71 ^
9570363a ^




672e3e50 ^
762b099e ^




90560d71 ^
9570363a ^







762b099e ^


90560d71 ^
762b099e ^

90560d71 ^
9570363a ^







762b099e ^

672e3e50 ^


762b099e ^
672e3e50 ^
90560d71 ^
9570363a ^


90560d71 ^
672e3e50 ^
762b099e ^
672e3e50 ^



d5d908dd ^
672e3e50 ^
90560d71 ^

9542bb11 ^


65361948 ^
90560d71 ^
9542bb11 ^


90560d71 ^

4fe9f5e8 ^


65361948 ^
90560d71 ^
d5d908dd ^
90560d71 ^
9542bb11 ^
762b099e ^

90560d71 ^
65361948 ^

672e3e50 ^

c8a58cdc ^
762b099e ^


90560d71 ^
9570363a ^





90560d71 ^
9570363a ^
762b099e ^


90560d71 ^
762b099e ^

90560d71 ^
9570363a ^





90560d71 ^
9570363a ^
762b099e ^


c8a58cdc ^



90560d71 ^
9570363a ^


90560d71 ^
c8a58cdc ^





d5d908dd ^
c8a58cdc ^
90560d71 ^

9542bb11 ^


c8a58cdc ^
90560d71 ^
9542bb11 ^
c8a58cdc ^

90560d71 ^
4fe9f5e8 ^


c8a58cdc ^



90560d71 ^






672e3e50 ^



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372