mui 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,311 +4,442 @@ module Mui
4
4
  module Themes
5
5
  def self.mui
6
6
  scheme = ColorScheme.new("mui")
7
- scheme.define :normal, fg: :white, bg: :darkgray
8
- scheme.define :status_line, fg: :white, bg: :blue
9
- scheme.define :status_line_mode, fg: :white, bg: :magenta, bold: true
10
- scheme.define :search_highlight, fg: :black, bg: :cyan
11
- scheme.define :visual_selection, fg: :white, bg: :magenta
12
- scheme.define :line_number, fg: :cyan, bg: :darkgray
13
- scheme.define :message_error, fg: :red, bg: :darkgray, bold: true
14
- scheme.define :message_info, fg: :cyan, bg: :darkgray
15
- scheme.define :separator, fg: :white, bg: :blue
16
- scheme.define :command_line, fg: :white, bg: :darkgray
17
- scheme.define :tab_bar, fg: :white, bg: :blue
18
- scheme.define :tab_bar_active, fg: :white, bg: :magenta, bold: true
19
- scheme.define :completion_popup, fg: :white, bg: :blue
20
- scheme.define :completion_popup_selected, fg: :white, bg: :magenta, bold: true
21
- # Syntax highlighting
22
- scheme.define :syntax_keyword, fg: :magenta, bold: true
23
- scheme.define :syntax_string, fg: :green
24
- scheme.define :syntax_comment, fg: :cyan
25
- scheme.define :syntax_number, fg: :red
26
- scheme.define :syntax_symbol, fg: :yellow
27
- scheme.define :syntax_constant, fg: :yellow
28
- scheme.define :syntax_operator, fg: :white
29
- scheme.define :syntax_identifier, fg: :white
30
- scheme.define :syntax_preprocessor, fg: :magenta
31
- scheme.define :syntax_instance_variable, fg: :cyan
32
- scheme.define :syntax_global_variable, fg: :red
33
- scheme.define :syntax_method_call, fg: :blue
34
- scheme.define :syntax_type, fg: :green
7
+
8
+ # Basic UI colors
9
+ scheme.define :normal, fg: :mui_fg, bg: :mui_bg
10
+ scheme.define :status_line, fg: :mui_fg, bg: :mui_status_bg
11
+ scheme.define :status_line_mode, fg: :mui_bg, bg: :mui_tab_active, bold: true
12
+ scheme.define :search_highlight, fg: :mui_bg, bg: :mui_search
13
+ scheme.define :visual_selection, fg: :mui_fg, bg: :mui_visual
14
+ scheme.define :line_number, fg: :mui_line_number, bg: :mui_bg
15
+ scheme.define :message_error, fg: :mui_error, bg: :mui_bg, bold: true
16
+ scheme.define :message_info, fg: :mui_info, bg: :mui_bg
17
+ scheme.define :separator, fg: :mui_fg, bg: :mui_status_bg
18
+ scheme.define :command_line, fg: :mui_fg, bg: :mui_bg
19
+ scheme.define :tab_bar, fg: :mui_fg, bg: :mui_tab_bg
20
+ scheme.define :tab_bar_active, fg: :mui_bg, bg: :mui_tab_active, bold: true
21
+ scheme.define :completion_popup, fg: :mui_fg, bg: :mui_status_bg
22
+ scheme.define :completion_popup_selected, fg: :mui_bg, bg: :mui_tab_active, bold: true
23
+
24
+ # Syntax highlighting following Vim standard highlight groups
25
+ # Comment group
26
+ scheme.define :syntax_comment, fg: :mui_comment
27
+
28
+ # Constant group (unified color)
29
+ scheme.define :syntax_string, fg: :mui_constant
30
+ scheme.define :syntax_number, fg: :mui_constant
31
+ scheme.define :syntax_constant, fg: :mui_constant
32
+
33
+ # Identifier group (unified color)
34
+ scheme.define :syntax_identifier, fg: :mui_identifier
35
+ scheme.define :syntax_instance_variable, fg: :mui_identifier
36
+ scheme.define :syntax_global_variable, fg: :mui_identifier
37
+
38
+ # Statement group
39
+ scheme.define :syntax_keyword, fg: :mui_statement, bold: true
40
+ scheme.define :syntax_operator, fg: :mui_fg
41
+
42
+ # PreProc group
43
+ scheme.define :syntax_preprocessor, fg: :mui_preproc
44
+
45
+ # Type group
46
+ scheme.define :syntax_type, fg: :mui_type
47
+
48
+ # Special group
49
+ scheme.define :syntax_symbol, fg: :mui_special
50
+
51
+ # Function calls
52
+ scheme.define :syntax_method_call, fg: :mui_function
53
+
54
+ # Function definitions
55
+ scheme.define :syntax_function_definition, fg: :mui_function
56
+
35
57
  # Diff highlighting
36
58
  scheme.define :diff_add, fg: :green
37
- scheme.define :diff_delete, fg: :red
38
- scheme.define :diff_hunk, fg: :cyan
39
- scheme.define :diff_header, fg: :yellow, bold: true
59
+ scheme.define :diff_delete, fg: :mui_error
60
+ scheme.define :diff_hunk, fg: :mui_info
61
+ scheme.define :diff_header, fg: :mui_statement, bold: true
62
+
40
63
  # LSP diagnostics
41
- scheme.define :diagnostic_error, fg: :red, underline: true
42
- scheme.define :diagnostic_warning, fg: :yellow, underline: true
43
- scheme.define :diagnostic_info, fg: :blue, underline: true
44
- scheme.define :diagnostic_hint, fg: :cyan, underline: true
64
+ scheme.define :diagnostic_error, fg: :mui_error, underline: true
65
+ scheme.define :diagnostic_warning, fg: :mui_statement, underline: true
66
+ scheme.define :diagnostic_info, fg: :mui_constant, underline: true
67
+ scheme.define :diagnostic_hint, fg: :mui_info, underline: true
68
+
45
69
  # Floating window
46
- scheme.define :floating_window, fg: :white, bg: :blue
70
+ scheme.define :floating_window, fg: :mui_fg, bg: :mui_status_bg
71
+
47
72
  scheme
48
73
  end
49
74
 
50
75
  def self.solarized_dark
51
76
  scheme = ColorScheme.new("solarized_dark")
77
+
78
+ # Basic UI colors
52
79
  scheme.define :normal, fg: :solarized_base0, bg: :solarized_base03
53
80
  scheme.define :status_line, fg: :solarized_base1, bg: :solarized_base02
54
81
  scheme.define :status_line_mode, fg: :solarized_base03, bg: :solarized_blue, bold: true
55
82
  scheme.define :search_highlight, fg: :solarized_base03, bg: :solarized_yellow
56
- scheme.define :visual_selection, fg: :solarized_base03, bg: :solarized_blue
83
+ scheme.define :visual_selection, fg: :solarized_base0, bg: :solarized_base02
57
84
  scheme.define :line_number, fg: :solarized_base01, bg: :solarized_base03
58
85
  scheme.define :message_error, fg: :solarized_red, bg: :solarized_base03, bold: true
59
86
  scheme.define :message_info, fg: :solarized_cyan, bg: :solarized_base03
60
- scheme.define :separator, fg: :solarized_base1, bg: :solarized_base02
87
+ scheme.define :separator, fg: :solarized_base01, bg: :solarized_base02
61
88
  scheme.define :command_line, fg: :solarized_base0, bg: :solarized_base03
62
89
  scheme.define :tab_bar, fg: :solarized_base1, bg: :solarized_base02
63
90
  scheme.define :tab_bar_active, fg: :solarized_base03, bg: :solarized_blue, bold: true
64
91
  scheme.define :completion_popup, fg: :solarized_base1, bg: :solarized_base02
65
92
  scheme.define :completion_popup_selected, fg: :solarized_base03, bg: :solarized_blue, bold: true
66
- # Syntax highlighting
67
- scheme.define :syntax_keyword, fg: :solarized_green, bold: true
68
- scheme.define :syntax_string, fg: :solarized_cyan
93
+
94
+ # Syntax highlighting (Solarized official)
69
95
  scheme.define :syntax_comment, fg: :solarized_base01
96
+ scheme.define :syntax_string, fg: :solarized_cyan
70
97
  scheme.define :syntax_number, fg: :solarized_magenta
71
- scheme.define :syntax_symbol, fg: :solarized_blue
72
- scheme.define :syntax_constant, fg: :solarized_yellow
73
- scheme.define :syntax_operator, fg: :solarized_base0
74
- scheme.define :syntax_identifier, fg: :solarized_base0
75
- scheme.define :syntax_preprocessor, fg: :solarized_orange
98
+ scheme.define :syntax_constant, fg: :solarized_cyan
99
+ scheme.define :syntax_identifier, fg: :solarized_blue
76
100
  scheme.define :syntax_instance_variable, fg: :solarized_blue
77
- scheme.define :syntax_global_variable, fg: :solarized_red
78
- scheme.define :syntax_method_call, fg: :solarized_blue
101
+ scheme.define :syntax_global_variable, fg: :solarized_orange
102
+ scheme.define :syntax_keyword, fg: :solarized_green, bold: true
103
+ scheme.define :syntax_operator, fg: :solarized_green
104
+ scheme.define :syntax_preprocessor, fg: :solarized_orange
79
105
  scheme.define :syntax_type, fg: :solarized_yellow
106
+ scheme.define :syntax_symbol, fg: :solarized_magenta
107
+ scheme.define :syntax_method_call, fg: :solarized_blue
108
+ scheme.define :syntax_function_definition, fg: :solarized_blue
109
+
80
110
  # Diff highlighting
81
111
  scheme.define :diff_add, fg: :solarized_green
82
112
  scheme.define :diff_delete, fg: :solarized_red
83
- scheme.define :diff_hunk, fg: :solarized_cyan
113
+ scheme.define :diff_hunk, fg: :solarized_violet
84
114
  scheme.define :diff_header, fg: :solarized_yellow, bold: true
115
+
116
+ # LSP diagnostics
117
+ scheme.define :diagnostic_error, fg: :solarized_red, underline: true
118
+ scheme.define :diagnostic_warning, fg: :solarized_yellow, underline: true
119
+ scheme.define :diagnostic_info, fg: :solarized_blue, underline: true
120
+ scheme.define :diagnostic_hint, fg: :solarized_cyan, underline: true
121
+
122
+ # Floating window
123
+ scheme.define :floating_window, fg: :solarized_base0, bg: :solarized_base02
124
+
85
125
  scheme
86
126
  end
87
127
 
88
128
  def self.solarized_light
89
129
  scheme = ColorScheme.new("solarized_light")
130
+
131
+ # Basic UI colors
90
132
  scheme.define :normal, fg: :solarized_base00, bg: :solarized_base3
91
133
  scheme.define :status_line, fg: :solarized_base01, bg: :solarized_base2
92
134
  scheme.define :status_line_mode, fg: :solarized_base3, bg: :solarized_blue, bold: true
93
135
  scheme.define :search_highlight, fg: :solarized_base3, bg: :solarized_yellow
94
- scheme.define :visual_selection, fg: :solarized_base3, bg: :solarized_blue
136
+ scheme.define :visual_selection, fg: :solarized_base00, bg: :solarized_base2
95
137
  scheme.define :line_number, fg: :solarized_base1, bg: :solarized_base3
96
138
  scheme.define :message_error, fg: :solarized_red, bg: :solarized_base3, bold: true
97
139
  scheme.define :message_info, fg: :solarized_cyan, bg: :solarized_base3
98
- scheme.define :separator, fg: :solarized_base01, bg: :solarized_base2
140
+ scheme.define :separator, fg: :solarized_base1, bg: :solarized_base2
99
141
  scheme.define :command_line, fg: :solarized_base00, bg: :solarized_base3
100
142
  scheme.define :tab_bar, fg: :solarized_base01, bg: :solarized_base2
101
143
  scheme.define :tab_bar_active, fg: :solarized_base3, bg: :solarized_blue, bold: true
102
144
  scheme.define :completion_popup, fg: :solarized_base01, bg: :solarized_base2
103
145
  scheme.define :completion_popup_selected, fg: :solarized_base3, bg: :solarized_blue, bold: true
104
- # Syntax highlighting
105
- scheme.define :syntax_keyword, fg: :solarized_green, bold: true
106
- scheme.define :syntax_string, fg: :solarized_cyan
146
+
147
+ # Syntax highlighting (Solarized official)
107
148
  scheme.define :syntax_comment, fg: :solarized_base1
149
+ scheme.define :syntax_string, fg: :solarized_cyan
108
150
  scheme.define :syntax_number, fg: :solarized_magenta
109
- scheme.define :syntax_symbol, fg: :solarized_blue
110
- scheme.define :syntax_constant, fg: :solarized_yellow
111
- scheme.define :syntax_operator, fg: :solarized_base00
112
- scheme.define :syntax_identifier, fg: :solarized_base00
113
- scheme.define :syntax_preprocessor, fg: :solarized_orange
151
+ scheme.define :syntax_constant, fg: :solarized_cyan
152
+ scheme.define :syntax_identifier, fg: :solarized_blue
114
153
  scheme.define :syntax_instance_variable, fg: :solarized_blue
115
- scheme.define :syntax_global_variable, fg: :solarized_red
116
- scheme.define :syntax_method_call, fg: :solarized_blue
154
+ scheme.define :syntax_global_variable, fg: :solarized_orange
155
+ scheme.define :syntax_keyword, fg: :solarized_green, bold: true
156
+ scheme.define :syntax_operator, fg: :solarized_green
157
+ scheme.define :syntax_preprocessor, fg: :solarized_orange
117
158
  scheme.define :syntax_type, fg: :solarized_yellow
159
+ scheme.define :syntax_symbol, fg: :solarized_magenta
160
+ scheme.define :syntax_method_call, fg: :solarized_blue
161
+ scheme.define :syntax_function_definition, fg: :solarized_blue
162
+
118
163
  # Diff highlighting
119
164
  scheme.define :diff_add, fg: :solarized_green
120
165
  scheme.define :diff_delete, fg: :solarized_red
121
- scheme.define :diff_hunk, fg: :solarized_cyan
166
+ scheme.define :diff_hunk, fg: :solarized_violet
122
167
  scheme.define :diff_header, fg: :solarized_yellow, bold: true
168
+
169
+ # LSP diagnostics
170
+ scheme.define :diagnostic_error, fg: :solarized_red, underline: true
171
+ scheme.define :diagnostic_warning, fg: :solarized_yellow, underline: true
172
+ scheme.define :diagnostic_info, fg: :solarized_blue, underline: true
173
+ scheme.define :diagnostic_hint, fg: :solarized_cyan, underline: true
174
+
175
+ # Floating window
176
+ scheme.define :floating_window, fg: :solarized_base00, bg: :solarized_base2
177
+
123
178
  scheme
124
179
  end
125
180
 
126
181
  def self.monokai
127
182
  scheme = ColorScheme.new("monokai")
183
+
184
+ # Basic UI colors
128
185
  scheme.define :normal, fg: :monokai_fg, bg: :monokai_bg
129
- scheme.define :status_line, fg: :monokai_fg, bg: :monokai_purple
130
- scheme.define :status_line_mode, fg: :monokai_bg, bg: :monokai_pink, bold: true
186
+ scheme.define :status_line, fg: :monokai_fg, bg: :monokai_comment
187
+ scheme.define :status_line_mode, fg: :monokai_bg, bg: :monokai_green, bold: true
131
188
  scheme.define :search_highlight, fg: :monokai_bg, bg: :monokai_yellow
132
- scheme.define :visual_selection, fg: :monokai_fg, bg: :monokai_purple
133
- scheme.define :line_number, fg: :monokai_cyan, bg: :monokai_bg
189
+ scheme.define :visual_selection, fg: :monokai_fg, bg: :monokai_comment
190
+ scheme.define :line_number, fg: :monokai_comment, bg: :monokai_bg
134
191
  scheme.define :message_error, fg: :monokai_pink, bg: :monokai_bg, bold: true
135
- scheme.define :message_info, fg: :monokai_green, bg: :monokai_bg
136
- scheme.define :separator, fg: :monokai_fg, bg: :monokai_purple
192
+ scheme.define :message_info, fg: :monokai_cyan, bg: :monokai_bg
193
+ scheme.define :separator, fg: :monokai_comment, bg: :monokai_bg
137
194
  scheme.define :command_line, fg: :monokai_fg, bg: :monokai_bg
138
- scheme.define :tab_bar, fg: :monokai_fg, bg: :monokai_purple
139
- scheme.define :tab_bar_active, fg: :monokai_bg, bg: :monokai_pink, bold: true
140
- scheme.define :completion_popup, fg: :monokai_fg, bg: :monokai_purple
141
- scheme.define :completion_popup_selected, fg: :monokai_bg, bg: :monokai_pink, bold: true
142
- # Syntax highlighting
143
- scheme.define :syntax_keyword, fg: :monokai_pink, bold: true
195
+ scheme.define :tab_bar, fg: :monokai_fg, bg: :monokai_comment
196
+ scheme.define :tab_bar_active, fg: :monokai_bg, bg: :monokai_green, bold: true
197
+ scheme.define :completion_popup, fg: :monokai_fg, bg: :monokai_comment
198
+ scheme.define :completion_popup_selected, fg: :monokai_bg, bg: :monokai_green, bold: true
199
+
200
+ # Syntax highlighting (Monokai official)
201
+ scheme.define :syntax_comment, fg: :monokai_comment
144
202
  scheme.define :syntax_string, fg: :monokai_yellow
145
- scheme.define :syntax_comment, fg: :monokai_cyan
146
203
  scheme.define :syntax_number, fg: :monokai_purple
147
- scheme.define :syntax_symbol, fg: :monokai_orange
148
204
  scheme.define :syntax_constant, fg: :monokai_purple
149
- scheme.define :syntax_operator, fg: :monokai_pink
150
205
  scheme.define :syntax_identifier, fg: :monokai_fg
151
- scheme.define :syntax_preprocessor, fg: :monokai_pink
152
206
  scheme.define :syntax_instance_variable, fg: :monokai_orange
153
- scheme.define :syntax_global_variable, fg: :monokai_pink
154
- scheme.define :syntax_method_call, fg: :monokai_green
207
+ scheme.define :syntax_global_variable, fg: :monokai_orange
208
+ scheme.define :syntax_keyword, fg: :monokai_pink
209
+ scheme.define :syntax_operator, fg: :monokai_pink
210
+ scheme.define :syntax_preprocessor, fg: :monokai_pink
155
211
  scheme.define :syntax_type, fg: :monokai_cyan
212
+ scheme.define :syntax_symbol, fg: :monokai_orange
213
+ scheme.define :syntax_method_call, fg: :monokai_green
214
+ scheme.define :syntax_function_definition, fg: :monokai_green
215
+
156
216
  # Diff highlighting
157
217
  scheme.define :diff_add, fg: :monokai_green
158
218
  scheme.define :diff_delete, fg: :monokai_pink
159
- scheme.define :diff_hunk, fg: :monokai_cyan
219
+ scheme.define :diff_hunk, fg: :monokai_purple
160
220
  scheme.define :diff_header, fg: :monokai_yellow, bold: true
221
+
222
+ # LSP diagnostics
223
+ scheme.define :diagnostic_error, fg: :monokai_pink, underline: true
224
+ scheme.define :diagnostic_warning, fg: :monokai_orange, underline: true
225
+ scheme.define :diagnostic_info, fg: :monokai_cyan, underline: true
226
+ scheme.define :diagnostic_hint, fg: :monokai_green, underline: true
227
+
228
+ # Floating window
229
+ scheme.define :floating_window, fg: :monokai_fg, bg: :monokai_comment
230
+
161
231
  scheme
162
232
  end
163
233
 
164
234
  def self.nord
165
235
  scheme = ColorScheme.new("nord")
236
+
237
+ # Basic UI colors
166
238
  scheme.define :normal, fg: :nord_snow0, bg: :nord_polar0
167
- scheme.define :status_line, fg: :nord_snow0, bg: :nord_polar2
239
+ scheme.define :status_line, fg: :nord_snow0, bg: :nord_polar1
168
240
  scheme.define :status_line_mode, fg: :nord_polar0, bg: :nord_frost1, bold: true
169
241
  scheme.define :search_highlight, fg: :nord_polar0, bg: :nord_aurora_yellow
170
- scheme.define :visual_selection, fg: :nord_snow0, bg: :nord_frost3
242
+ scheme.define :visual_selection, fg: :nord_snow0, bg: :nord_polar2
171
243
  scheme.define :line_number, fg: :nord_polar3, bg: :nord_polar0
172
244
  scheme.define :message_error, fg: :nord_aurora_red, bg: :nord_polar0, bold: true
173
245
  scheme.define :message_info, fg: :nord_frost1, bg: :nord_polar0
174
- scheme.define :separator, fg: :nord_snow0, bg: :nord_polar2
246
+ scheme.define :separator, fg: :nord_polar3, bg: :nord_polar1
175
247
  scheme.define :command_line, fg: :nord_snow0, bg: :nord_polar0
176
- scheme.define :tab_bar, fg: :nord_snow0, bg: :nord_polar2
248
+ scheme.define :tab_bar, fg: :nord_snow0, bg: :nord_polar1
177
249
  scheme.define :tab_bar_active, fg: :nord_polar0, bg: :nord_frost1, bold: true
178
250
  scheme.define :completion_popup, fg: :nord_snow0, bg: :nord_polar2
179
251
  scheme.define :completion_popup_selected, fg: :nord_polar0, bg: :nord_frost1, bold: true
180
- # Syntax highlighting
181
- scheme.define :syntax_keyword, fg: :nord_frost2, bold: true
182
- scheme.define :syntax_string, fg: :nord_aurora_green
252
+
253
+ # Syntax highlighting (Nord official)
183
254
  scheme.define :syntax_comment, fg: :nord_polar3
255
+ scheme.define :syntax_string, fg: :nord_aurora_green
184
256
  scheme.define :syntax_number, fg: :nord_aurora_purple
185
- scheme.define :syntax_symbol, fg: :nord_aurora_yellow
186
- scheme.define :syntax_constant, fg: :nord_aurora_yellow
187
- scheme.define :syntax_operator, fg: :nord_frost2
257
+ scheme.define :syntax_constant, fg: :nord_frost0
188
258
  scheme.define :syntax_identifier, fg: :nord_snow0
189
- scheme.define :syntax_preprocessor, fg: :nord_aurora_purple
190
- scheme.define :syntax_instance_variable, fg: :nord_frost0
191
- scheme.define :syntax_global_variable, fg: :nord_aurora_red
259
+ scheme.define :syntax_instance_variable, fg: :nord_snow0
260
+ scheme.define :syntax_global_variable, fg: :nord_snow0
261
+ scheme.define :syntax_keyword, fg: :nord_frost2, bold: true
262
+ scheme.define :syntax_operator, fg: :nord_frost2
263
+ scheme.define :syntax_preprocessor, fg: :nord_frost3
264
+ scheme.define :syntax_type, fg: :nord_frost0
265
+ scheme.define :syntax_symbol, fg: :nord_aurora_yellow
192
266
  scheme.define :syntax_method_call, fg: :nord_frost1
193
- scheme.define :syntax_type, fg: :nord_frost3
267
+ scheme.define :syntax_function_definition, fg: :nord_frost1
268
+
194
269
  # Diff highlighting
195
270
  scheme.define :diff_add, fg: :nord_aurora_green
196
271
  scheme.define :diff_delete, fg: :nord_aurora_red
197
272
  scheme.define :diff_hunk, fg: :nord_frost1
198
273
  scheme.define :diff_header, fg: :nord_aurora_yellow, bold: true
274
+
275
+ # LSP diagnostics
276
+ scheme.define :diagnostic_error, fg: :nord_aurora_red, underline: true
277
+ scheme.define :diagnostic_warning, fg: :nord_aurora_yellow, underline: true
278
+ scheme.define :diagnostic_info, fg: :nord_frost1, underline: true
279
+ scheme.define :diagnostic_hint, fg: :nord_frost0, underline: true
280
+
281
+ # Floating window
282
+ scheme.define :floating_window, fg: :nord_snow0, bg: :nord_polar2
283
+
199
284
  scheme
200
285
  end
201
286
 
202
287
  def self.gruvbox_dark
203
288
  scheme = ColorScheme.new("gruvbox_dark")
289
+
290
+ # Basic UI colors
204
291
  scheme.define :normal, fg: :gruvbox_fg, bg: :gruvbox_bg
205
292
  scheme.define :status_line, fg: :gruvbox_fg, bg: :gruvbox_gray
206
- scheme.define :status_line_mode, fg: :gruvbox_bg, bg: :gruvbox_orange, bold: true
293
+ scheme.define :status_line_mode, fg: :gruvbox_bg, bg: :gruvbox_yellow, bold: true
207
294
  scheme.define :search_highlight, fg: :gruvbox_bg, bg: :gruvbox_yellow
208
- scheme.define :visual_selection, fg: :gruvbox_fg, bg: :gruvbox_blue
295
+ scheme.define :visual_selection, fg: :gruvbox_fg, bg: :gruvbox_gray
209
296
  scheme.define :line_number, fg: :gruvbox_gray, bg: :gruvbox_bg
210
297
  scheme.define :message_error, fg: :gruvbox_red, bg: :gruvbox_bg, bold: true
211
298
  scheme.define :message_info, fg: :gruvbox_aqua, bg: :gruvbox_bg
212
- scheme.define :separator, fg: :gruvbox_fg, bg: :gruvbox_gray
299
+ scheme.define :separator, fg: :gruvbox_gray, bg: :gruvbox_bg
213
300
  scheme.define :command_line, fg: :gruvbox_fg, bg: :gruvbox_bg
214
301
  scheme.define :tab_bar, fg: :gruvbox_fg, bg: :gruvbox_gray
215
- scheme.define :tab_bar_active, fg: :gruvbox_bg, bg: :gruvbox_orange, bold: true
302
+ scheme.define :tab_bar_active, fg: :gruvbox_bg, bg: :gruvbox_yellow, bold: true
216
303
  scheme.define :completion_popup, fg: :gruvbox_fg, bg: :gruvbox_gray
217
- scheme.define :completion_popup_selected, fg: :gruvbox_bg, bg: :gruvbox_orange, bold: true
218
- # Syntax highlighting
219
- scheme.define :syntax_keyword, fg: :gruvbox_red, bold: true
220
- scheme.define :syntax_string, fg: :gruvbox_green
304
+ scheme.define :completion_popup_selected, fg: :gruvbox_bg, bg: :gruvbox_yellow, bold: true
305
+
306
+ # Syntax highlighting (Gruvbox official)
221
307
  scheme.define :syntax_comment, fg: :gruvbox_gray
308
+ scheme.define :syntax_string, fg: :gruvbox_green
222
309
  scheme.define :syntax_number, fg: :gruvbox_purple
223
- scheme.define :syntax_symbol, fg: :gruvbox_aqua
224
- scheme.define :syntax_constant, fg: :gruvbox_yellow
310
+ scheme.define :syntax_constant, fg: :gruvbox_purple
311
+ scheme.define :syntax_identifier, fg: :gruvbox_blue
312
+ scheme.define :syntax_instance_variable, fg: :gruvbox_blue
313
+ scheme.define :syntax_global_variable, fg: :gruvbox_blue
314
+ scheme.define :syntax_keyword, fg: :gruvbox_red
225
315
  scheme.define :syntax_operator, fg: :gruvbox_fg
226
- scheme.define :syntax_identifier, fg: :gruvbox_fg
227
316
  scheme.define :syntax_preprocessor, fg: :gruvbox_aqua
228
- scheme.define :syntax_instance_variable, fg: :gruvbox_blue
229
- scheme.define :syntax_global_variable, fg: :gruvbox_red
317
+ scheme.define :syntax_type, fg: :gruvbox_yellow
318
+ scheme.define :syntax_symbol, fg: :gruvbox_purple
230
319
  scheme.define :syntax_method_call, fg: :gruvbox_aqua
320
+ scheme.define :syntax_function_definition, fg: :gruvbox_aqua
321
+
231
322
  # Diff highlighting
232
323
  scheme.define :diff_add, fg: :gruvbox_green
233
324
  scheme.define :diff_delete, fg: :gruvbox_red
234
325
  scheme.define :diff_hunk, fg: :gruvbox_aqua
235
326
  scheme.define :diff_header, fg: :gruvbox_yellow, bold: true
327
+
328
+ # LSP diagnostics
329
+ scheme.define :diagnostic_error, fg: :gruvbox_red, underline: true
330
+ scheme.define :diagnostic_warning, fg: :gruvbox_yellow, underline: true
331
+ scheme.define :diagnostic_info, fg: :gruvbox_blue, underline: true
332
+ scheme.define :diagnostic_hint, fg: :gruvbox_aqua, underline: true
333
+
334
+ # Floating window
335
+ scheme.define :floating_window, fg: :gruvbox_fg, bg: :gruvbox_gray
336
+
236
337
  scheme
237
338
  end
238
339
 
239
340
  def self.dracula
240
341
  scheme = ColorScheme.new("dracula")
342
+
343
+ # Basic UI colors
241
344
  scheme.define :normal, fg: :dracula_fg, bg: :dracula_bg
242
345
  scheme.define :status_line, fg: :dracula_fg, bg: :dracula_selection
243
346
  scheme.define :status_line_mode, fg: :dracula_bg, bg: :dracula_purple, bold: true
244
347
  scheme.define :search_highlight, fg: :dracula_bg, bg: :dracula_yellow
245
- scheme.define :visual_selection, fg: :dracula_fg, bg: :dracula_purple
348
+ scheme.define :visual_selection, fg: :dracula_fg, bg: :dracula_selection
246
349
  scheme.define :line_number, fg: :dracula_comment, bg: :dracula_bg
247
350
  scheme.define :message_error, fg: :dracula_red, bg: :dracula_bg, bold: true
248
351
  scheme.define :message_info, fg: :dracula_cyan, bg: :dracula_bg
249
- scheme.define :separator, fg: :dracula_fg, bg: :dracula_selection
352
+ scheme.define :separator, fg: :dracula_comment, bg: :dracula_bg
250
353
  scheme.define :command_line, fg: :dracula_fg, bg: :dracula_bg
251
354
  scheme.define :tab_bar, fg: :dracula_fg, bg: :dracula_selection
252
355
  scheme.define :tab_bar_active, fg: :dracula_bg, bg: :dracula_purple, bold: true
253
356
  scheme.define :completion_popup, fg: :dracula_fg, bg: :dracula_selection
254
357
  scheme.define :completion_popup_selected, fg: :dracula_bg, bg: :dracula_purple, bold: true
255
- # Syntax highlighting
256
- scheme.define :syntax_keyword, fg: :dracula_pink, bold: true
257
- scheme.define :syntax_string, fg: :dracula_yellow
358
+
359
+ # Syntax highlighting (Dracula official)
258
360
  scheme.define :syntax_comment, fg: :dracula_comment
361
+ scheme.define :syntax_string, fg: :dracula_yellow
259
362
  scheme.define :syntax_number, fg: :dracula_purple
260
- scheme.define :syntax_symbol, fg: :dracula_cyan
261
- scheme.define :syntax_constant, fg: :dracula_cyan
262
- scheme.define :syntax_operator, fg: :dracula_pink
363
+ scheme.define :syntax_constant, fg: :dracula_purple
263
364
  scheme.define :syntax_identifier, fg: :dracula_fg
365
+ scheme.define :syntax_instance_variable, fg: :dracula_fg
366
+ scheme.define :syntax_global_variable, fg: :dracula_fg
367
+ scheme.define :syntax_keyword, fg: :dracula_pink
368
+ scheme.define :syntax_operator, fg: :dracula_pink
264
369
  scheme.define :syntax_preprocessor, fg: :dracula_pink
265
- scheme.define :syntax_instance_variable, fg: :dracula_purple
266
- scheme.define :syntax_global_variable, fg: :dracula_red
267
- scheme.define :syntax_method_call, fg: :dracula_green
268
370
  scheme.define :syntax_type, fg: :dracula_cyan
371
+ scheme.define :syntax_symbol, fg: :dracula_purple
372
+ scheme.define :syntax_method_call, fg: :dracula_green
373
+ scheme.define :syntax_function_definition, fg: :dracula_green
374
+
269
375
  # Diff highlighting
270
376
  scheme.define :diff_add, fg: :dracula_green
271
377
  scheme.define :diff_delete, fg: :dracula_red
272
378
  scheme.define :diff_hunk, fg: :dracula_cyan
273
- scheme.define :diff_header, fg: :dracula_yellow, bold: true
379
+ scheme.define :diff_header, fg: :dracula_purple, bold: true
380
+
381
+ # LSP diagnostics
382
+ scheme.define :diagnostic_error, fg: :dracula_red, underline: true
383
+ scheme.define :diagnostic_warning, fg: :dracula_orange, underline: true
384
+ scheme.define :diagnostic_info, fg: :dracula_cyan, underline: true
385
+ scheme.define :diagnostic_hint, fg: :dracula_purple, underline: true
386
+
387
+ # Floating window
388
+ scheme.define :floating_window, fg: :dracula_fg, bg: :dracula_selection
389
+
274
390
  scheme
275
391
  end
276
392
 
277
393
  def self.tokyo_night
278
394
  scheme = ColorScheme.new("tokyo_night")
395
+
396
+ # Basic UI colors
279
397
  scheme.define :normal, fg: :tokyo_fg, bg: :tokyo_bg
280
398
  scheme.define :status_line, fg: :tokyo_fg, bg: :tokyo_comment
281
399
  scheme.define :status_line_mode, fg: :tokyo_bg, bg: :tokyo_blue, bold: true
282
400
  scheme.define :search_highlight, fg: :tokyo_bg, bg: :tokyo_yellow
283
- scheme.define :visual_selection, fg: :tokyo_fg, bg: :tokyo_purple
401
+ scheme.define :visual_selection, fg: :tokyo_fg, bg: :tokyo_comment
284
402
  scheme.define :line_number, fg: :tokyo_comment, bg: :tokyo_bg
285
403
  scheme.define :message_error, fg: :tokyo_red, bg: :tokyo_bg, bold: true
286
404
  scheme.define :message_info, fg: :tokyo_cyan, bg: :tokyo_bg
287
- scheme.define :separator, fg: :tokyo_fg, bg: :tokyo_comment
405
+ scheme.define :separator, fg: :tokyo_comment, bg: :tokyo_bg
288
406
  scheme.define :command_line, fg: :tokyo_fg, bg: :tokyo_bg
289
407
  scheme.define :tab_bar, fg: :tokyo_fg, bg: :tokyo_comment
290
408
  scheme.define :tab_bar_active, fg: :tokyo_bg, bg: :tokyo_blue, bold: true
291
409
  scheme.define :completion_popup, fg: :tokyo_fg, bg: :tokyo_comment
292
410
  scheme.define :completion_popup_selected, fg: :tokyo_bg, bg: :tokyo_blue, bold: true
293
- # Syntax highlighting
294
- scheme.define :syntax_keyword, fg: :tokyo_purple, bold: true
295
- scheme.define :syntax_string, fg: :tokyo_green
411
+
412
+ # Syntax highlighting (Tokyo Night official)
296
413
  scheme.define :syntax_comment, fg: :tokyo_comment
414
+ scheme.define :syntax_string, fg: :tokyo_green
297
415
  scheme.define :syntax_number, fg: :tokyo_orange
298
- scheme.define :syntax_symbol, fg: :tokyo_cyan
299
- scheme.define :syntax_constant, fg: :tokyo_yellow
300
- scheme.define :syntax_operator, fg: :tokyo_blue
416
+ scheme.define :syntax_constant, fg: :tokyo_orange
301
417
  scheme.define :syntax_identifier, fg: :tokyo_fg
302
- scheme.define :syntax_preprocessor, fg: :tokyo_purple
303
418
  scheme.define :syntax_instance_variable, fg: :tokyo_red
304
419
  scheme.define :syntax_global_variable, fg: :tokyo_red
420
+ scheme.define :syntax_keyword, fg: :tokyo_purple
421
+ scheme.define :syntax_operator, fg: :tokyo_cyan
422
+ scheme.define :syntax_preprocessor, fg: :tokyo_cyan
423
+ scheme.define :syntax_type, fg: :tokyo_blue
424
+ scheme.define :syntax_symbol, fg: :tokyo_yellow
305
425
  scheme.define :syntax_method_call, fg: :tokyo_blue
306
- scheme.define :syntax_type, fg: :tokyo_cyan
426
+ scheme.define :syntax_function_definition, fg: :tokyo_blue
427
+
307
428
  # Diff highlighting
308
429
  scheme.define :diff_add, fg: :tokyo_green
309
430
  scheme.define :diff_delete, fg: :tokyo_red
310
- scheme.define :diff_hunk, fg: :tokyo_cyan
311
- scheme.define :diff_header, fg: :tokyo_yellow, bold: true
431
+ scheme.define :diff_hunk, fg: :tokyo_blue
432
+ scheme.define :diff_header, fg: :tokyo_purple, bold: true
433
+
434
+ # LSP diagnostics
435
+ scheme.define :diagnostic_error, fg: :tokyo_red, underline: true
436
+ scheme.define :diagnostic_warning, fg: :tokyo_orange, underline: true
437
+ scheme.define :diagnostic_info, fg: :tokyo_cyan, underline: true
438
+ scheme.define :diagnostic_hint, fg: :tokyo_blue, underline: true
439
+
440
+ # Floating window
441
+ scheme.define :floating_window, fg: :tokyo_fg, bg: :tokyo_comment
442
+
312
443
  scheme
313
444
  end
314
445
  end
data/lib/mui/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mui
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/mui/window.rb CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  module Mui
4
4
  class Window
5
+ # Threshold for using smart scroll jump (in logical rows)
6
+ SMART_JUMP_THRESHOLD = 100
7
+
5
8
  attr_accessor :x, :y, :width, :height, :cursor_row, :cursor_col, :scroll_row
6
9
  attr_reader :buffer
7
10
 
@@ -41,6 +44,13 @@ module Mui
41
44
  end
42
45
 
43
46
  def ensure_cursor_visible
47
+ # Use smart jump for large cursor movements to avoid O(n) iteration
48
+ distance = (@cursor_row - @scroll_row).abs
49
+ if distance > SMART_JUMP_THRESHOLD
50
+ smart_scroll_to_cursor
51
+ return
52
+ end
53
+
44
54
  # Calculate screen row of cursor considering line wrapping
45
55
  cursor_screen_row = screen_rows_from_scroll_to_cursor
46
56
 
@@ -54,6 +64,15 @@ module Mui
54
64
  end
55
65
  end
56
66
 
67
+ # Smart scroll: directly position scroll to center cursor on screen
68
+ # Used for large cursor jumps (G, gg, search, etc.) to avoid O(n) iteration
69
+ def smart_scroll_to_cursor
70
+ # Position cursor roughly in the middle of the visible area
71
+ half_visible = visible_height / 2
72
+ target_scroll = @cursor_row - half_visible
73
+ @scroll_row = target_scroll.clamp(0, max_scroll_row)
74
+ end
75
+
57
76
  def render(screen, selection: nil, search_state: nil)
58
77
  options = build_render_options(selection, search_state)
59
78
  screen_row = 0
@@ -194,6 +213,10 @@ module Mui
194
213
  [@buffer.line(@cursor_row).length - 1, 0].max
195
214
  end
196
215
 
216
+ def max_scroll_row
217
+ [@buffer.line_count - 1, 0].max
218
+ end
219
+
197
220
  def clamp_cursor_col
198
221
  @cursor_col = max_cursor_col if @cursor_col > max_cursor_col
199
222
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - S-H-GAMELINKS