textbringer 25 → 26
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.
- checksums.yaml +4 -4
- data/README.ja.md +24 -0
- data/README.md +24 -0
- data/lib/textbringer/color.rb +46 -0
- data/lib/textbringer/commands/misc.rb +38 -36
- data/lib/textbringer/input_methods/skk_input_method.rb +1 -1
- data/lib/textbringer/modes/dired_mode.rb +0 -1
- data/lib/textbringer/modes/ruby_mode.rb +47 -39
- data/lib/textbringer/themes/catppuccin.rb +53 -52
- data/lib/textbringer/themes/github.rb +17 -20
- data/lib/textbringer/themes/gruvbox.rb +34 -33
- data/lib/textbringer/themes/molokai.rb +20 -22
- data/lib/textbringer/themes/sonokai.rb +22 -18
- data/lib/textbringer/themes/tokyonight.rb +3 -3
- data/lib/textbringer/utils.rb +16 -0
- data/lib/textbringer/version.rb +1 -1
- data/screenshot.png +0 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e2675c1e38b9c3e24666f87ebf58f4cede5bca7dfec811eec58cee700a500f33
|
|
4
|
+
data.tar.gz: b1835247ba5c703983dea5b80a84fb26b0f43954ee1cb9b737ac82e23a843278
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7bb45438e1cf3912540446ceeed8dcbbbfc1ac4c796242a7d63783e0741223051d4edd200aaa2aa5a1f0c8d01c0b7a8c94f3a9f576b303e29f6303357ae3f2b8
|
|
7
|
+
data.tar.gz: 30ed7d5c79192c5bfdf81122d018ae9269e30087b24be951a7d795c5a0e92aaf84aa7a9f2d58d476ed241e57b44d39ff15284549249127ac3ab811e79ce096ac
|
data/README.ja.md
CHANGED
|
@@ -58,6 +58,14 @@ Textbringerが依存するcurses.gemをインストールする前に、ncursesw
|
|
|
58
58
|
mod_meta_key = alt
|
|
59
59
|
mod_meta_mode = esc
|
|
60
60
|
|
|
61
|
+
### True color (24ビットカラー)
|
|
62
|
+
|
|
63
|
+
端末エミュレータがtrue colorに対応している場合、`TERM`に`xterm-direct`を設定すると24ビットカラーが有効になります。
|
|
64
|
+
|
|
65
|
+
$ TERM=xterm-direct txtb
|
|
66
|
+
|
|
67
|
+
テーマで指定されたhex色が256色パレットに近似されず、そのまま表示されるようになります。
|
|
68
|
+
|
|
61
69
|
### 東アジアの曖昧な文字幅
|
|
62
70
|
|
|
63
71
|
[曖昧な文字](http://unicode.org/reports/tr11/#Ambiguous)を全角扱いするには、以下の設定を~/.textbringer.rbに記述してください。
|
|
@@ -91,6 +99,22 @@ xterm、 mlterm、screenにはそれぞれ独自の設定項目があります
|
|
|
91
99
|
|
|
92
100
|
cjkwidth on
|
|
93
101
|
|
|
102
|
+
## テーマ
|
|
103
|
+
|
|
104
|
+
`Alt+x load_theme RET` で[textbringer/themes](lib/textbringer/themes)または~/.textbringer/themes内のテーマを読み込むことができます。
|
|
105
|
+
|
|
106
|
+
~/.textbringer.rbでテーマを設定することもできます。
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
load_theme "catppuccin"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
テーマが独自の背景色を設定している場合に、端末のデフォルト背景色を使いたいときは`load_theme`の後に以下を追加してください。
|
|
113
|
+
|
|
114
|
+
```ruby
|
|
115
|
+
set_background_color "default"
|
|
116
|
+
```
|
|
117
|
+
|
|
94
118
|
## プラグイン
|
|
95
119
|
|
|
96
120
|
* [Mournmail](https://github.com/shugo/mournmail): 電子メールクライアント
|
data/README.md
CHANGED
|
@@ -60,6 +60,14 @@ Add the following lines to ~/.mlterm/main.
|
|
|
60
60
|
mod_meta_key = alt
|
|
61
61
|
mod_meta_mode = esc
|
|
62
62
|
|
|
63
|
+
### True color (24-bit color)
|
|
64
|
+
|
|
65
|
+
If your terminal emulator supports true color, set `TERM` to `xterm-direct` to enable 24-bit color.
|
|
66
|
+
|
|
67
|
+
$ TERM=xterm-direct txtb
|
|
68
|
+
|
|
69
|
+
This allows themes to display their exact hex colors instead of approximating to the 256-color palette.
|
|
70
|
+
|
|
63
71
|
### East asian ambiguous width
|
|
64
72
|
|
|
65
73
|
Add the following line to ~/.textbringer.rb to treat
|
|
@@ -103,6 +111,22 @@ Add the following line to ~/.screenrc.
|
|
|
103
111
|
* [textbringer-presentation](https://github.com/shugo/textbringer-presentation): a presentation tool
|
|
104
112
|
* [textbringer-ghost_text](https://github.com/shugo/textbringer-ghost_text): a [GhostText](https://github.com/fregante/GhostText) plugin
|
|
105
113
|
|
|
114
|
+
## Themes
|
|
115
|
+
|
|
116
|
+
Type `Alt+x load_theme RET` to load a theme from [textbringer/themes](lib/textbringer/themes) or ~/.textbringer/themes.
|
|
117
|
+
|
|
118
|
+
Themes can also be loaded in ~/.textbringer.rb.
|
|
119
|
+
|
|
120
|
+
```ruby
|
|
121
|
+
load_theme "catppuccin"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
If a theme sets its own background color but you prefer to use the terminal's default background, add the following after `load_theme`:
|
|
125
|
+
|
|
126
|
+
```ruby
|
|
127
|
+
set_background_color "default"
|
|
128
|
+
```
|
|
129
|
+
|
|
106
130
|
## Development
|
|
107
131
|
|
|
108
132
|
After checking out the repo, run `bundle install` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/textbringer/color.rb
CHANGED
|
@@ -22,6 +22,30 @@ module Textbringer
|
|
|
22
22
|
"brightwhite" => 15
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
DIRECT_COLOR_THRESHOLD = 256 * 256 * 256
|
|
26
|
+
|
|
27
|
+
# Canonical RGB values for basic ANSI colors (xterm defaults),
|
|
28
|
+
# packed as 0xRRGGBB for use in direct color mode.
|
|
29
|
+
BASIC_COLORS_RGB = {
|
|
30
|
+
"default" => -1,
|
|
31
|
+
"black" => 0x000000,
|
|
32
|
+
"red" => 0xCD0000,
|
|
33
|
+
"green" => 0x00CD00,
|
|
34
|
+
"yellow" => 0xCDCD00,
|
|
35
|
+
"blue" => 0x0000EE,
|
|
36
|
+
"magenta" => 0xCD00CD,
|
|
37
|
+
"cyan" => 0x00CDCD,
|
|
38
|
+
"white" => 0xE5E5E5,
|
|
39
|
+
"brightblack" => 0x7F7F7F,
|
|
40
|
+
"brightred" => 0xFF0000,
|
|
41
|
+
"brightgreen" => 0x00FF00,
|
|
42
|
+
"brightyellow" => 0xFFFF00,
|
|
43
|
+
"brightblue" => 0x5C5CFF,
|
|
44
|
+
"brightmagenta" => 0xFF00FF,
|
|
45
|
+
"brightcyan" => 0x00FFFF,
|
|
46
|
+
"brightwhite" => 0xFFFFFF
|
|
47
|
+
}
|
|
48
|
+
|
|
25
49
|
RGBColor = Struct.new(:r, :g, :b, :number)
|
|
26
50
|
|
|
27
51
|
ADDITIONAL_COLORS = []
|
|
@@ -46,10 +70,17 @@ module Textbringer
|
|
|
46
70
|
end
|
|
47
71
|
end
|
|
48
72
|
|
|
73
|
+
def self.direct_color?
|
|
74
|
+
Window.colors >= DIRECT_COLOR_THRESHOLD
|
|
75
|
+
end
|
|
76
|
+
|
|
49
77
|
def self.find_color_number(name)
|
|
50
78
|
if name.is_a?(Integer)
|
|
51
79
|
return name
|
|
52
80
|
end
|
|
81
|
+
if direct_color?
|
|
82
|
+
return find_direct_color(name)
|
|
83
|
+
end
|
|
53
84
|
case name
|
|
54
85
|
when /\A\#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})\z/
|
|
55
86
|
r = $1.to_i(16)
|
|
@@ -65,5 +96,20 @@ module Textbringer
|
|
|
65
96
|
BASIC_COLORS[name]
|
|
66
97
|
end
|
|
67
98
|
end
|
|
99
|
+
|
|
100
|
+
def self.find_direct_color(name)
|
|
101
|
+
case name
|
|
102
|
+
when /\A\#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})\z/
|
|
103
|
+
r = $1.to_i(16)
|
|
104
|
+
g = $2.to_i(16)
|
|
105
|
+
b = $3.to_i(16)
|
|
106
|
+
(r << 16) | (g << 8) | b
|
|
107
|
+
else
|
|
108
|
+
unless BASIC_COLORS_RGB.key?(name)
|
|
109
|
+
raise EditorError, "No such color: #{name}"
|
|
110
|
+
end
|
|
111
|
+
BASIC_COLORS_RGB[name]
|
|
112
|
+
end
|
|
113
|
+
end
|
|
68
114
|
end
|
|
69
115
|
end
|
|
@@ -291,46 +291,48 @@ module Textbringer
|
|
|
291
291
|
if CONFIG[:shell_file_name]
|
|
292
292
|
cmd = [CONFIG[:shell_file_name], CONFIG[:shell_command_switch], cmd]
|
|
293
293
|
end
|
|
294
|
-
|
|
295
|
-
input
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
294
|
+
with_clean_env do |env|
|
|
295
|
+
Open3.popen3(env, *cmd, opts) do |input, output, error, wait_thread|
|
|
296
|
+
input.close
|
|
297
|
+
catch(:finish) do
|
|
298
|
+
loop do
|
|
299
|
+
rs, = IO.select([output, error], nil, nil, 0.5)
|
|
300
|
+
Window.redisplay
|
|
301
|
+
rs&.each do |r|
|
|
302
|
+
begin
|
|
303
|
+
s = r.read_nonblock(1024).force_encoding("utf-8").
|
|
304
|
+
scrub("\u{3013}").gsub(/\r\n/, "\n")
|
|
305
|
+
buffer.insert(s)
|
|
306
|
+
Window.redisplay
|
|
307
|
+
rescue EOFError
|
|
308
|
+
throw(:finish) if output.eof? && error.eof?
|
|
309
|
+
rescue Errno::EAGAIN, Errno::EWOULDBLOCK
|
|
310
|
+
Window.redisplay
|
|
311
|
+
next
|
|
312
|
+
end
|
|
311
313
|
end
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
314
|
+
if received_keyboard_quit?
|
|
315
|
+
if signals.empty?
|
|
316
|
+
keyboard_quit
|
|
317
|
+
else
|
|
318
|
+
sig = signals.shift
|
|
319
|
+
pid = wait_thread.pid
|
|
320
|
+
pid = -pid if /mswin32|mingw32/ !~ RUBY_PLATFORM
|
|
321
|
+
message("Send #{sig} to #{pid}")
|
|
322
|
+
Process.kill(sig, pid)
|
|
323
|
+
end
|
|
322
324
|
end
|
|
323
325
|
end
|
|
324
326
|
end
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
327
|
+
status = wait_thread.value
|
|
328
|
+
pid = status.pid
|
|
329
|
+
if status.exited?
|
|
330
|
+
code = status.exitstatus
|
|
331
|
+
message("Process #{pid} exited with status code #{code}")
|
|
332
|
+
elsif status.signaled?
|
|
333
|
+
signame = Signal.signame(status.termsig)
|
|
334
|
+
message("Process #{pid} was killed by #{signame}")
|
|
335
|
+
end
|
|
334
336
|
end
|
|
335
337
|
end
|
|
336
338
|
ensure
|
|
@@ -188,7 +188,6 @@ module Textbringer
|
|
|
188
188
|
doc: "Delete files flagged for deletion.") do
|
|
189
189
|
files = collect_flagged_files
|
|
190
190
|
return if files.empty?
|
|
191
|
-
list = files.map { |f| " #{f}" }.join("\n")
|
|
192
191
|
if yes_or_no?("Delete these files?")
|
|
193
192
|
files.each do |name|
|
|
194
193
|
next if name == "." || name == ".."
|
|
@@ -22,18 +22,13 @@ module Textbringer
|
|
|
22
22
|
@prism_version = nil
|
|
23
23
|
@prism_tokens = nil
|
|
24
24
|
@prism_ast = nil
|
|
25
|
-
@
|
|
25
|
+
@prism_method_name_locs = nil
|
|
26
26
|
@literal_levels = nil
|
|
27
27
|
@literal_levels_version = nil
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def forward_definition(n = number_prefix_arg || 1)
|
|
31
|
-
|
|
32
|
-
tokens = @prism_tokens.filter_map { |token, _state|
|
|
33
|
-
type = token.type
|
|
34
|
-
next if type == :EOF
|
|
35
|
-
[token.location.start_line, type]
|
|
36
|
-
}
|
|
31
|
+
tokens = filter_prism_tokens_line_and_type
|
|
37
32
|
@buffer.forward_line
|
|
38
33
|
n.times do |i|
|
|
39
34
|
tokens = tokens.drop_while { |l, type|
|
|
@@ -54,12 +49,7 @@ module Textbringer
|
|
|
54
49
|
end
|
|
55
50
|
|
|
56
51
|
def backward_definition(n = number_prefix_arg || 1)
|
|
57
|
-
|
|
58
|
-
tokens = @prism_tokens.filter_map { |token, _state|
|
|
59
|
-
type = token.type
|
|
60
|
-
next if type == :EOF
|
|
61
|
-
[token.location.start_line, type]
|
|
62
|
-
}.reverse
|
|
52
|
+
tokens = filter_prism_tokens_line_and_type.reverse
|
|
63
53
|
@buffer.beginning_of_line
|
|
64
54
|
n.times do |i|
|
|
65
55
|
tokens = tokens.drop_while { |l, type|
|
|
@@ -120,12 +110,11 @@ module Textbringer
|
|
|
120
110
|
def highlight(ctx)
|
|
121
111
|
ensure_prism_tokens
|
|
122
112
|
return unless @prism_tokens
|
|
123
|
-
|
|
113
|
+
ensure_method_name_locs
|
|
124
114
|
base_pos = ctx.buffer.point_min
|
|
125
115
|
hl_start = ctx.highlight_start
|
|
126
116
|
hl_end = ctx.highlight_end
|
|
127
117
|
in_symbol = false
|
|
128
|
-
after_def = false
|
|
129
118
|
after_class_or_module = false
|
|
130
119
|
@prism_tokens.each do |token_info|
|
|
131
120
|
token = token_info[0]
|
|
@@ -139,26 +128,18 @@ module Textbringer
|
|
|
139
128
|
face_name = PRISM_TOKEN_FACES[type]
|
|
140
129
|
if in_symbol
|
|
141
130
|
face_name = :string if face_name.nil? || face_name == :constant ||
|
|
142
|
-
face_name == :operator
|
|
143
|
-
elsif
|
|
144
|
-
face_name = :function_name
|
|
145
|
-
type == :CONSTANT || type == :METHOD_NAME ||
|
|
146
|
-
PRISM_TOKEN_FACES[type] == :operator
|
|
131
|
+
face_name == :keyword || face_name == :operator
|
|
132
|
+
elsif @prism_method_name_locs.key?(offset)
|
|
133
|
+
face_name = :function_name
|
|
147
134
|
elsif face_name == :constant &&
|
|
148
135
|
(after_class_or_module || token.location.slice.match?(/\p{Lower}/))
|
|
149
136
|
face_name = :type
|
|
150
|
-
elsif @prism_method_call_locs.key?(offset)
|
|
151
|
-
face_name = :function_name
|
|
152
137
|
end
|
|
153
138
|
if face_name && (face = Face[face_name])
|
|
154
139
|
ctx.highlight(pos, pos_end, face)
|
|
155
140
|
end
|
|
156
141
|
end
|
|
157
142
|
in_symbol = type == :SYMBOL_BEGIN
|
|
158
|
-
after_def = type == :KEYWORD_DEF ||
|
|
159
|
-
(after_def && (type == :KEYWORD_SELF || type == :DOT ||
|
|
160
|
-
type == :NEWLINE || type == :IGNORED_NEWLINE ||
|
|
161
|
-
type == :COMMENT))
|
|
162
143
|
after_class_or_module = (type == :KEYWORD_CLASS || type == :KEYWORD_MODULE) ||
|
|
163
144
|
(after_class_or_module && !(type == :NEWLINE || type == :SEMICOLON))
|
|
164
145
|
end
|
|
@@ -199,6 +180,9 @@ module Textbringer
|
|
|
199
180
|
# Strings and string-like
|
|
200
181
|
STRING_BEGIN: :string, STRING_CONTENT: :string, STRING_END: :string,
|
|
201
182
|
SYMBOL_BEGIN: :string, REGEXP_BEGIN: :string, REGEXP_END: :string,
|
|
183
|
+
PERCENT_LOWER_I: :string, PERCENT_UPPER_I: :string,
|
|
184
|
+
PERCENT_LOWER_W: :string, PERCENT_UPPER_W: :string,
|
|
185
|
+
PERCENT_LOWER_X: :string,
|
|
202
186
|
HEREDOC_START: :string, HEREDOC_END: :string,
|
|
203
187
|
LABEL: :property,
|
|
204
188
|
|
|
@@ -273,6 +257,8 @@ module Textbringer
|
|
|
273
257
|
EQUAL_GREATER
|
|
274
258
|
].to_set
|
|
275
259
|
|
|
260
|
+
OPERATORS = %i(!= !~ =~ == === <=> > >= < <= & | ^ >> << - + % / * ** -@ +@ ~ ! [] []=)
|
|
261
|
+
|
|
276
262
|
BLOCK_END = {
|
|
277
263
|
EMBEXPR_BEGIN: :EMBEXPR_END,
|
|
278
264
|
BRACE_LEFT: :BRACE_RIGHT,
|
|
@@ -489,6 +475,15 @@ module Textbringer
|
|
|
489
475
|
@literal_levels[i][1] > 0
|
|
490
476
|
end
|
|
491
477
|
|
|
478
|
+
def filter_prism_tokens_line_and_type
|
|
479
|
+
ensure_prism_tokens
|
|
480
|
+
@prism_tokens.filter_map { |token, _state|
|
|
481
|
+
type = token.type
|
|
482
|
+
next if type == :EOF
|
|
483
|
+
[token.location.start_line, type]
|
|
484
|
+
}
|
|
485
|
+
end
|
|
486
|
+
|
|
492
487
|
def ensure_prism_tokens
|
|
493
488
|
return if @prism_version == @buffer.version
|
|
494
489
|
source = @buffer.to_s
|
|
@@ -499,27 +494,40 @@ module Textbringer
|
|
|
499
494
|
@prism_ast = nil
|
|
500
495
|
@prism_tokens = []
|
|
501
496
|
end
|
|
502
|
-
@
|
|
497
|
+
@prism_method_name_locs = nil
|
|
503
498
|
@prism_version = @buffer.version
|
|
504
499
|
@literal_levels_version = nil
|
|
505
500
|
end
|
|
506
501
|
|
|
507
|
-
def
|
|
508
|
-
return if @
|
|
509
|
-
@
|
|
502
|
+
def ensure_method_name_locs
|
|
503
|
+
return if @prism_method_name_locs
|
|
504
|
+
@prism_method_name_locs = {}
|
|
510
505
|
return unless @prism_ast
|
|
511
|
-
|
|
506
|
+
collect_method_name_locs(@prism_ast)
|
|
512
507
|
end
|
|
513
508
|
|
|
514
|
-
def
|
|
515
|
-
if node.
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
509
|
+
def collect_method_name_locs(node)
|
|
510
|
+
if node.type == :def_node
|
|
511
|
+
@prism_method_name_locs[node.name_loc.start_offset] = true
|
|
512
|
+
elsif node.type == :alias_method_node
|
|
513
|
+
add_alias_method_name_locs(node.new_name)
|
|
514
|
+
add_alias_method_name_locs(node.old_name)
|
|
515
|
+
elsif (node.type == :call_node &&
|
|
516
|
+
!(node.call_operator_loc.nil? && OPERATORS.include?(node.name)) && # exclude operators
|
|
517
|
+
!((node.call_operator_loc.nil? || node.call_operator_loc.slice == "::") && # exclude constants
|
|
518
|
+
/\A\p{Upper}/.match?(node.name))) ||
|
|
519
|
+
node.type == :call_operator_write_node ||
|
|
520
|
+
node.type == :call_and_write_node ||
|
|
521
|
+
node.type == :call_or_write_node
|
|
522
|
+
@prism_method_name_locs[node.message_loc.start_offset] = true
|
|
523
|
+
end
|
|
524
|
+
node.compact_child_nodes.each { |child| collect_method_name_locs(child) }
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
def add_alias_method_name_locs(node)
|
|
528
|
+
if node.type == :symbol_node && node.opening_loc.nil?
|
|
529
|
+
@prism_method_name_locs[node.value_loc.start_offset] = true
|
|
521
530
|
end
|
|
522
|
-
node.compact_child_nodes.each { |child| collect_method_call_locs(child) }
|
|
523
531
|
end
|
|
524
532
|
|
|
525
533
|
def ensure_literal_levels
|
|
@@ -2,70 +2,71 @@
|
|
|
2
2
|
# Based on https://github.com/catppuccin/nvim
|
|
3
3
|
#
|
|
4
4
|
# Dark variant: Mocha Light variant: Latte
|
|
5
|
+
# GUI hex values from the official palette definitions.
|
|
5
6
|
|
|
6
7
|
Textbringer::Theme.define "catppuccin" do |t|
|
|
7
8
|
t.palette :dark do |p|
|
|
8
9
|
# Catppuccin Mocha base tones
|
|
9
|
-
p.color :text, hex: "#
|
|
10
|
-
p.color :subtext1, hex: "#
|
|
11
|
-
p.color :subtext0, hex: "#
|
|
12
|
-
p.color :overlay2, hex: "#
|
|
13
|
-
p.color :overlay1, hex: "#
|
|
14
|
-
p.color :overlay0, hex: "#
|
|
15
|
-
p.color :surface2, hex: "#
|
|
16
|
-
p.color :surface1, hex: "#
|
|
17
|
-
p.color :surface0, hex: "#
|
|
18
|
-
p.color :base, hex: "#
|
|
19
|
-
p.color :mantle, hex: "#
|
|
20
|
-
p.color :crust, hex: "#
|
|
10
|
+
p.color :text, hex: "#cdd6f4", ansi: "white"
|
|
11
|
+
p.color :subtext1, hex: "#bac2de", ansi: "white"
|
|
12
|
+
p.color :subtext0, hex: "#a6adc8", ansi: "white"
|
|
13
|
+
p.color :overlay2, hex: "#9399b2", ansi: "white"
|
|
14
|
+
p.color :overlay1, hex: "#7f849c", ansi: "brightblack"
|
|
15
|
+
p.color :overlay0, hex: "#6c7086", ansi: "brightblack"
|
|
16
|
+
p.color :surface2, hex: "#585b70", ansi: "brightblack"
|
|
17
|
+
p.color :surface1, hex: "#45475a", ansi: "brightblack"
|
|
18
|
+
p.color :surface0, hex: "#313244", ansi: "brightblack"
|
|
19
|
+
p.color :base, hex: "#1e1e2e", ansi: "black"
|
|
20
|
+
p.color :mantle, hex: "#181825", ansi: "black"
|
|
21
|
+
p.color :crust, hex: "#11111b", ansi: "black"
|
|
21
22
|
|
|
22
23
|
# Catppuccin Mocha accent colors
|
|
23
|
-
p.color :red, hex: "#
|
|
24
|
-
p.color :maroon, hex: "#
|
|
25
|
-
p.color :peach, hex: "#
|
|
26
|
-
p.color :yellow, hex: "#
|
|
27
|
-
p.color :green, hex: "#
|
|
28
|
-
p.color :teal, hex: "#
|
|
29
|
-
p.color :sky, hex: "#
|
|
30
|
-
p.color :sapphire, hex: "#
|
|
31
|
-
p.color :blue, hex: "#
|
|
32
|
-
p.color :lavender, hex: "#
|
|
33
|
-
p.color :mauve, hex: "#
|
|
34
|
-
p.color :pink, hex: "#
|
|
35
|
-
p.color :flamingo, hex: "#
|
|
36
|
-
p.color :rosewater, hex: "#
|
|
24
|
+
p.color :red, hex: "#f38ba8", ansi: "red"
|
|
25
|
+
p.color :maroon, hex: "#eba0ac", ansi: "red"
|
|
26
|
+
p.color :peach, hex: "#fab387", ansi: "yellow"
|
|
27
|
+
p.color :yellow, hex: "#f9e2af", ansi: "yellow"
|
|
28
|
+
p.color :green, hex: "#a6e3a1", ansi: "green"
|
|
29
|
+
p.color :teal, hex: "#94e2d5", ansi: "cyan"
|
|
30
|
+
p.color :sky, hex: "#89dceb", ansi: "cyan"
|
|
31
|
+
p.color :sapphire, hex: "#74c7ec", ansi: "cyan"
|
|
32
|
+
p.color :blue, hex: "#89b4fa", ansi: "blue"
|
|
33
|
+
p.color :lavender, hex: "#b4befe", ansi: "blue"
|
|
34
|
+
p.color :mauve, hex: "#cba6f7", ansi: "magenta"
|
|
35
|
+
p.color :pink, hex: "#f5c2e7", ansi: "magenta"
|
|
36
|
+
p.color :flamingo, hex: "#f2cdcd", ansi: "red"
|
|
37
|
+
p.color :rosewater, hex: "#f5e0dc", ansi: "red"
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
t.palette :light do |p|
|
|
40
41
|
# Catppuccin Latte base tones
|
|
41
|
-
p.color :text, hex: "#
|
|
42
|
-
p.color :subtext1, hex: "#
|
|
43
|
-
p.color :subtext0, hex: "#
|
|
44
|
-
p.color :overlay2, hex: "#
|
|
45
|
-
p.color :overlay1, hex: "#
|
|
46
|
-
p.color :overlay0, hex: "#
|
|
47
|
-
p.color :surface2, hex: "#
|
|
48
|
-
p.color :surface1, hex: "#
|
|
49
|
-
p.color :surface0, hex: "#
|
|
50
|
-
p.color :base, hex: "#
|
|
51
|
-
p.color :mantle, hex: "#
|
|
52
|
-
p.color :crust, hex: "#
|
|
42
|
+
p.color :text, hex: "#4c4f69", ansi: "black"
|
|
43
|
+
p.color :subtext1, hex: "#5c5f77", ansi: "black"
|
|
44
|
+
p.color :subtext0, hex: "#6c6f85", ansi: "brightblack"
|
|
45
|
+
p.color :overlay2, hex: "#7c7f93", ansi: "brightblack"
|
|
46
|
+
p.color :overlay1, hex: "#8c8fa1", ansi: "white"
|
|
47
|
+
p.color :overlay0, hex: "#9ca0b0", ansi: "white"
|
|
48
|
+
p.color :surface2, hex: "#acb0be", ansi: "white"
|
|
49
|
+
p.color :surface1, hex: "#bcc0cc", ansi: "white"
|
|
50
|
+
p.color :surface0, hex: "#ccd0da", ansi: "white"
|
|
51
|
+
p.color :base, hex: "#eff1f5", ansi: "white"
|
|
52
|
+
p.color :mantle, hex: "#e6e9ef", ansi: "white"
|
|
53
|
+
p.color :crust, hex: "#dce0e8", ansi: "white"
|
|
53
54
|
|
|
54
55
|
# Catppuccin Latte accent colors
|
|
55
|
-
p.color :red, hex: "#
|
|
56
|
-
p.color :maroon, hex: "#
|
|
57
|
-
p.color :peach, hex: "#
|
|
58
|
-
p.color :yellow, hex: "#
|
|
59
|
-
p.color :green, hex: "#
|
|
60
|
-
p.color :teal, hex: "#
|
|
61
|
-
p.color :sky, hex: "#
|
|
62
|
-
p.color :sapphire, hex: "#
|
|
63
|
-
p.color :blue, hex: "#
|
|
64
|
-
p.color :lavender, hex: "#
|
|
65
|
-
p.color :mauve, hex: "#
|
|
66
|
-
p.color :pink, hex: "#
|
|
67
|
-
p.color :flamingo, hex: "#
|
|
68
|
-
p.color :rosewater, hex: "#
|
|
56
|
+
p.color :red, hex: "#d20f39", ansi: "red"
|
|
57
|
+
p.color :maroon, hex: "#e64553", ansi: "red"
|
|
58
|
+
p.color :peach, hex: "#fe640b", ansi: "red"
|
|
59
|
+
p.color :yellow, hex: "#df8e1d", ansi: "yellow"
|
|
60
|
+
p.color :green, hex: "#40a02b", ansi: "green"
|
|
61
|
+
p.color :teal, hex: "#179299", ansi: "cyan"
|
|
62
|
+
p.color :sky, hex: "#04a5e5", ansi: "cyan"
|
|
63
|
+
p.color :sapphire, hex: "#209fb5", ansi: "cyan"
|
|
64
|
+
p.color :blue, hex: "#1e66f5", ansi: "blue"
|
|
65
|
+
p.color :lavender, hex: "#7287fd", ansi: "blue"
|
|
66
|
+
p.color :mauve, hex: "#8839ef", ansi: "magenta"
|
|
67
|
+
p.color :pink, hex: "#ea76cb", ansi: "magenta"
|
|
68
|
+
p.color :flamingo, hex: "#dd7878", ansi: "red"
|
|
69
|
+
p.color :rosewater, hex: "#dc8a78", ansi: "red"
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
t.default_colors foreground: :text, background: :base
|
|
@@ -2,34 +2,31 @@
|
|
|
2
2
|
# Based on https://github.com/cormacrelf/vim-colors-github
|
|
3
3
|
# Inspired by GitHub's syntax highlighting as of 2018.
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
# Dark palette: GUI hex values — dark-mode cterm values in source are unreliable
|
|
7
|
-
# (e.g. dcolors.blue has cterm=167 which maps to red, overlay has cterm=123
|
|
8
|
-
# which maps to bright cyan).
|
|
5
|
+
# GUI hex values from the source's guifg/guibg definitions.
|
|
9
6
|
|
|
10
7
|
Textbringer::Theme.define "github" do |t|
|
|
11
8
|
t.palette :light do |p|
|
|
12
9
|
# Backgrounds / foreground
|
|
13
|
-
p.color :bg, hex: "#ffffff", ansi: "white" #
|
|
14
|
-
p.color :bg1, hex: "#
|
|
15
|
-
p.color :vis, hex: "#
|
|
16
|
-
p.color :search, hex: "#
|
|
17
|
-
p.color :fg, hex: "#
|
|
18
|
-
p.color :comment, hex: "#
|
|
19
|
-
p.color :line_nr, hex: "#
|
|
10
|
+
p.color :bg, hex: "#ffffff", ansi: "white" # Normal guibg
|
|
11
|
+
p.color :bg1, hex: "#f6f8fa", ansi: "white" # overlay/gutter (grey2)
|
|
12
|
+
p.color :vis, hex: "#e4effb", ansi: "blue" # Visual guibg (blue2)
|
|
13
|
+
p.color :search, hex: "#ffffc5", ansi: "yellow" # Search guibg
|
|
14
|
+
p.color :fg, hex: "#24292e", ansi: "black" # Normal guifg (base0)
|
|
15
|
+
p.color :comment, hex: "#6a737d", ansi: "brightblack" # Comment guifg (base2)
|
|
16
|
+
p.color :line_nr, hex: "#babbbc", ansi: "white" # LineNr guifg (base4)
|
|
20
17
|
|
|
21
18
|
# Syntax colors
|
|
22
|
-
p.color :red, hex: "#
|
|
23
|
-
p.color :darkred, hex: "#
|
|
24
|
-
p.color :purple, hex: "#
|
|
25
|
-
p.color :green, hex: "#
|
|
26
|
-
p.color :orange, hex: "#
|
|
27
|
-
p.color :blue, hex: "#
|
|
28
|
-
p.color :darkblue, hex: "#
|
|
19
|
+
p.color :red, hex: "#d73a49", ansi: "red" # Statement guifg
|
|
20
|
+
p.color :darkred, hex: "#b31d28", ansi: "red" # darkred
|
|
21
|
+
p.color :purple, hex: "#6f42c1", ansi: "magenta" # Function guifg
|
|
22
|
+
p.color :green, hex: "#22863a", ansi: "green" # html/xml tags
|
|
23
|
+
p.color :orange, hex: "#e36209", ansi: "yellow" # orange
|
|
24
|
+
p.color :blue, hex: "#005cc5", ansi: "blue" # Identifier guifg
|
|
25
|
+
p.color :darkblue, hex: "#032f62", ansi: "blue" # String guifg
|
|
29
26
|
end
|
|
30
27
|
|
|
31
28
|
t.palette :dark do |p|
|
|
32
|
-
# Backgrounds / foreground (GUI hex
|
|
29
|
+
# Backgrounds / foreground (GUI hex from dark mode definitions)
|
|
33
30
|
p.color :bg, hex: "#24292e", ansi: "black" # base0 (Normal bg)
|
|
34
31
|
p.color :bg1, hex: "#353a3f", ansi: "brightblack" # dcolors.overlay (panels/popups)
|
|
35
32
|
p.color :vis, hex: "#354a60", ansi: "blue" # dcolors.blue2 / blues[4]
|
|
@@ -58,7 +55,7 @@ Textbringer::Theme.define "github" do |t|
|
|
|
58
55
|
t.face :number, foreground: :blue # Number → Constant = blue
|
|
59
56
|
t.face :constant, foreground: :blue # Constant = blue
|
|
60
57
|
t.face :function_name, foreground: :purple # Function = purple
|
|
61
|
-
t.face :type, foreground: :orange # Type = orange
|
|
58
|
+
t.face :type, foreground: :orange # Type = orange (current GitHub style; vim source used red)
|
|
62
59
|
t.face :variable, foreground: :blue # Identifier = blue
|
|
63
60
|
t.face :operator # no explicit color in source
|
|
64
61
|
t.face :punctuation # Delimiter = fg (ghNormalNoBg)
|
|
@@ -1,50 +1,51 @@
|
|
|
1
1
|
# Gruvbox theme for Textbringer
|
|
2
2
|
# Based on https://github.com/morhetz/gruvbox
|
|
3
3
|
#
|
|
4
|
+
# GUI hex values from the source's guifg/guibg definitions.
|
|
4
5
|
# Dark: bright accent colors on warm dark background
|
|
5
|
-
# Light:
|
|
6
|
+
# Light: faded accent colors on warm light background
|
|
6
7
|
|
|
7
8
|
Textbringer::Theme.define "gruvbox" do |t|
|
|
8
9
|
t.palette :dark do |p|
|
|
9
10
|
# Base tones (dark background, light foreground)
|
|
10
|
-
p.color :bg0, hex: "#
|
|
11
|
-
p.color :bg1, hex: "#
|
|
12
|
-
p.color :bg2, hex: "#
|
|
13
|
-
p.color :bg3, hex: "#
|
|
14
|
-
p.color :bg4, hex: "#
|
|
15
|
-
p.color :fg1, hex: "#
|
|
16
|
-
p.color :fg4, hex: "#
|
|
17
|
-
p.color :gray, hex: "#
|
|
11
|
+
p.color :bg0, hex: "#282828", ansi: "black" # dark0
|
|
12
|
+
p.color :bg1, hex: "#3c3836", ansi: "brightblack" # dark1
|
|
13
|
+
p.color :bg2, hex: "#504945", ansi: "brightblack" # dark2
|
|
14
|
+
p.color :bg3, hex: "#665c54", ansi: "brightblack" # dark3
|
|
15
|
+
p.color :bg4, hex: "#7c6f64", ansi: "white" # dark4
|
|
16
|
+
p.color :fg1, hex: "#ebdbb2", ansi: "white" # light1 (Normal guifg)
|
|
17
|
+
p.color :fg4, hex: "#a89984", ansi: "white" # light4
|
|
18
|
+
p.color :gray, hex: "#928374", ansi: "white" # gray_245
|
|
18
19
|
|
|
19
20
|
# Bright accent colors
|
|
20
|
-
p.color :red, hex: "#
|
|
21
|
-
p.color :green, hex: "#
|
|
22
|
-
p.color :yellow, hex: "#
|
|
23
|
-
p.color :blue, hex: "#
|
|
24
|
-
p.color :purple, hex: "#
|
|
25
|
-
p.color :aqua, hex: "#
|
|
26
|
-
p.color :orange, hex: "#
|
|
21
|
+
p.color :red, hex: "#fb4934", ansi: "red" # bright_red
|
|
22
|
+
p.color :green, hex: "#b8bb26", ansi: "green" # bright_green
|
|
23
|
+
p.color :yellow, hex: "#fabd2f", ansi: "yellow" # bright_yellow
|
|
24
|
+
p.color :blue, hex: "#83a598", ansi: "blue" # bright_blue
|
|
25
|
+
p.color :purple, hex: "#d3869b", ansi: "magenta" # bright_purple
|
|
26
|
+
p.color :aqua, hex: "#8ec07c", ansi: "cyan" # bright_aqua
|
|
27
|
+
p.color :orange, hex: "#fe8019", ansi: "yellow" # bright_orange
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
t.palette :light do |p|
|
|
30
31
|
# Base tones (light background, dark foreground)
|
|
31
|
-
p.color :bg0, hex: "#
|
|
32
|
-
p.color :bg1, hex: "#
|
|
33
|
-
p.color :bg2, hex: "#
|
|
34
|
-
p.color :bg3, hex: "#
|
|
35
|
-
p.color :bg4, hex: "#
|
|
36
|
-
p.color :fg1, hex: "#
|
|
37
|
-
p.color :fg4, hex: "#
|
|
38
|
-
p.color :gray, hex: "#
|
|
32
|
+
p.color :bg0, hex: "#fbf1c7", ansi: "white" # light0
|
|
33
|
+
p.color :bg1, hex: "#ebdbb2", ansi: "white" # light1
|
|
34
|
+
p.color :bg2, hex: "#d5c4a1", ansi: "white" # light2
|
|
35
|
+
p.color :bg3, hex: "#bdae93", ansi: "white" # light3
|
|
36
|
+
p.color :bg4, hex: "#a89984", ansi: "brightblack" # light4
|
|
37
|
+
p.color :fg1, hex: "#3c3836", ansi: "black" # dark1 (Normal guifg)
|
|
38
|
+
p.color :fg4, hex: "#7c6f64", ansi: "brightblack" # dark4
|
|
39
|
+
p.color :gray, hex: "#928374", ansi: "brightblack" # gray_244
|
|
39
40
|
|
|
40
|
-
#
|
|
41
|
-
p.color :red, hex: "#
|
|
42
|
-
p.color :green, hex: "#
|
|
43
|
-
p.color :yellow, hex: "#
|
|
44
|
-
p.color :blue, hex: "#
|
|
45
|
-
p.color :purple, hex: "#
|
|
46
|
-
p.color :aqua, hex: "#
|
|
47
|
-
p.color :orange, hex: "#
|
|
41
|
+
# Faded accent colors
|
|
42
|
+
p.color :red, hex: "#9d0006", ansi: "red" # faded_red
|
|
43
|
+
p.color :green, hex: "#79740e", ansi: "green" # faded_green
|
|
44
|
+
p.color :yellow, hex: "#b57614", ansi: "yellow" # faded_yellow
|
|
45
|
+
p.color :blue, hex: "#076678", ansi: "blue" # faded_blue
|
|
46
|
+
p.color :purple, hex: "#8f3f71", ansi: "magenta" # faded_purple
|
|
47
|
+
p.color :aqua, hex: "#427b58", ansi: "cyan" # faded_aqua
|
|
48
|
+
p.color :orange, hex: "#af3a03", ansi: "red" # faded_orange
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
t.default_colors foreground: :fg1, background: :bg0
|
|
@@ -56,7 +57,7 @@ Textbringer::Theme.define "gruvbox" do |t|
|
|
|
56
57
|
t.face :string, foreground: :green
|
|
57
58
|
t.face :number, foreground: :purple
|
|
58
59
|
t.face :constant, foreground: :purple
|
|
59
|
-
t.face :function_name, foreground: :green
|
|
60
|
+
t.face :function_name, foreground: :green, bold: true
|
|
60
61
|
t.face :type, foreground: :yellow
|
|
61
62
|
t.face :variable, foreground: :blue
|
|
62
63
|
t.face :operator
|
|
@@ -2,29 +2,30 @@
|
|
|
2
2
|
# Based on https://github.com/tomasr/molokai
|
|
3
3
|
# Original Monokai theme by Wimer Hazenberg; darker variant by Hamish Stuart Macpherson
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
# Dark only.
|
|
5
|
+
# GUI hex values from the source's guifg/guibg definitions.
|
|
6
|
+
# Dark only (default darker variant, s:molokai_original = 0).
|
|
7
7
|
|
|
8
8
|
Textbringer::Theme.define "molokai" do |t|
|
|
9
9
|
t.palette :dark do |p|
|
|
10
|
-
# Background / foreground
|
|
11
|
-
p.color :bg, hex: "#
|
|
12
|
-
p.color :bg1, hex: "#
|
|
13
|
-
p.color :bg2, hex: "#
|
|
14
|
-
p.color :fg, hex: "#
|
|
15
|
-
p.color :comment, hex: "#
|
|
16
|
-
p.color :gray, hex: "#
|
|
17
|
-
p.color :silver, hex: "#
|
|
18
|
-
p.color :mid_gray, hex: "#
|
|
10
|
+
# Background / foreground
|
|
11
|
+
p.color :bg, hex: "#1b1d1e", ansi: "black" # Normal guibg
|
|
12
|
+
p.color :bg1, hex: "#403d3d", ansi: "brightblack" # Visual guibg
|
|
13
|
+
p.color :bg2, hex: "#1b1d1e", ansi: "black" # floating window bg (same as bg)
|
|
14
|
+
p.color :fg, hex: "#f8f8f2", ansi: "white" # Normal guifg
|
|
15
|
+
p.color :comment, hex: "#7e8e91", ansi: "brightblack" # Comment guifg
|
|
16
|
+
p.color :gray, hex: "#455354", ansi: "brightblack" # StatusLine guifg
|
|
17
|
+
p.color :silver, hex: "#f8f8f2", ansi: "white" # StatusLine guibg = fg
|
|
18
|
+
p.color :mid_gray, hex: "#808080", ansi: "brightblack" # PmenuSel guibg
|
|
19
|
+
p.color :delim, hex: "#8f8f8f", ansi: "white" # Delimiter guifg
|
|
19
20
|
|
|
20
21
|
# Accent colors
|
|
21
|
-
p.color :pink, hex: "#
|
|
22
|
-
p.color :green, hex: "#
|
|
23
|
-
p.color :yellow, hex: "#
|
|
24
|
-
p.color :purple, hex: "#
|
|
25
|
-
p.color :orange, hex: "#
|
|
26
|
-
p.color :cyan, hex: "#
|
|
27
|
-
p.color :search, hex: "#
|
|
22
|
+
p.color :pink, hex: "#f92672", ansi: "red" # Keyword guifg
|
|
23
|
+
p.color :green, hex: "#a6e22e", ansi: "green" # Function guifg
|
|
24
|
+
p.color :yellow, hex: "#e6db74", ansi: "yellow" # String guifg
|
|
25
|
+
p.color :purple, hex: "#ae81ff", ansi: "magenta" # Number guifg
|
|
26
|
+
p.color :orange, hex: "#fd971f", ansi: "yellow" # Identifier guifg
|
|
27
|
+
p.color :cyan, hex: "#66d9ef", ansi: "cyan" # Type guifg
|
|
28
|
+
p.color :search, hex: "#ffe792", ansi: "yellow" # Search guibg
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
t.default_colors foreground: :fg, background: :bg
|
|
@@ -40,22 +41,19 @@ Textbringer::Theme.define "molokai" do |t|
|
|
|
40
41
|
t.face :type, foreground: :cyan
|
|
41
42
|
t.face :variable, foreground: :orange
|
|
42
43
|
t.face :operator, foreground: :pink
|
|
43
|
-
t.face :punctuation
|
|
44
|
+
t.face :punctuation, foreground: :delim
|
|
44
45
|
t.face :builtin, foreground: :cyan
|
|
45
46
|
t.face :property, foreground: :orange
|
|
46
47
|
|
|
47
48
|
# Basic faces
|
|
48
|
-
# StatusLine: ctermfg=238 (#444444) on ctermbg=253 (#DADADA)
|
|
49
49
|
t.face :mode_line, foreground: :gray, background: :silver
|
|
50
50
|
t.face :link, foreground: :cyan, underline: true
|
|
51
51
|
t.face :control
|
|
52
52
|
t.face :region, background: :bg1
|
|
53
|
-
# Search: ctermfg=0 ctermbg=222
|
|
54
53
|
t.face :isearch, foreground: :bg, background: :search
|
|
55
54
|
t.face :floating_window, foreground: :fg, background: :bg2
|
|
56
55
|
|
|
57
56
|
# Completion faces
|
|
58
|
-
# Pmenu: ctermfg=81 ctermbg=16; PmenuSel: ctermfg=252 ctermbg=242
|
|
59
57
|
t.face :completion_popup, foreground: :cyan, background: :bg
|
|
60
58
|
t.face :completion_popup_selected, foreground: :fg, background: :mid_gray
|
|
61
59
|
|
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
# Sonokai theme for Textbringer (default style)
|
|
2
2
|
# Based on https://github.com/sainnhe/sonokai
|
|
3
3
|
#
|
|
4
|
+
# GUI hex values from the source's default style palette.
|
|
4
5
|
# A dark theme only. Falls back to dark palette on light terminals.
|
|
5
6
|
|
|
6
7
|
Textbringer::Theme.define "sonokai" do |t|
|
|
7
8
|
t.palette :dark do |p|
|
|
8
9
|
# Base tones
|
|
9
|
-
p.color :black, hex: "#
|
|
10
|
-
p.color :bg_dim, hex: "#
|
|
11
|
-
p.color :bg0, hex: "#
|
|
12
|
-
p.color :bg1, hex: "#
|
|
13
|
-
p.color :bg2, hex: "#
|
|
14
|
-
p.color :bg3, hex: "#
|
|
15
|
-
p.color :bg4, hex: "#
|
|
16
|
-
p.color :fg, hex: "#
|
|
17
|
-
p.color :grey, hex: "#
|
|
18
|
-
p.color :grey_dim, hex: "#
|
|
10
|
+
p.color :black, hex: "#181819", ansi: "black"
|
|
11
|
+
p.color :bg_dim, hex: "#222327", ansi: "black"
|
|
12
|
+
p.color :bg0, hex: "#2c2e34", ansi: "black"
|
|
13
|
+
p.color :bg1, hex: "#33353f", ansi: "brightblack"
|
|
14
|
+
p.color :bg2, hex: "#363944", ansi: "brightblack"
|
|
15
|
+
p.color :bg3, hex: "#3b3e48", ansi: "brightblack"
|
|
16
|
+
p.color :bg4, hex: "#414550", ansi: "brightblack"
|
|
17
|
+
p.color :fg, hex: "#e2e2e3", ansi: "white"
|
|
18
|
+
p.color :grey, hex: "#7f8490", ansi: "white"
|
|
19
|
+
p.color :grey_dim, hex: "#595f6f", ansi: "brightblack"
|
|
19
20
|
|
|
20
21
|
# Accent colors
|
|
21
|
-
p.color :red, hex: "#
|
|
22
|
-
p.color :orange, hex: "#
|
|
23
|
-
p.color :yellow, hex: "#
|
|
24
|
-
p.color :green, hex: "#
|
|
25
|
-
p.color :blue, hex: "#
|
|
26
|
-
p.color :purple, hex: "#
|
|
22
|
+
p.color :red, hex: "#fc5d7c", ansi: "red"
|
|
23
|
+
p.color :orange, hex: "#f39660", ansi: "yellow"
|
|
24
|
+
p.color :yellow, hex: "#e7c664", ansi: "yellow"
|
|
25
|
+
p.color :green, hex: "#9ed072", ansi: "green"
|
|
26
|
+
p.color :blue, hex: "#76cce0", ansi: "cyan"
|
|
27
|
+
p.color :purple, hex: "#b39df3", ansi: "magenta"
|
|
28
|
+
|
|
29
|
+
# Filled colors for UI
|
|
30
|
+
p.color :filled_blue, hex: "#85d3f2", ansi: "cyan"
|
|
27
31
|
end
|
|
28
32
|
|
|
29
33
|
t.default_colors foreground: :fg, background: :bg0
|
|
@@ -48,12 +52,12 @@ Textbringer::Theme.define "sonokai" do |t|
|
|
|
48
52
|
t.face :link, foreground: :blue, underline: true
|
|
49
53
|
t.face :control
|
|
50
54
|
t.face :region, background: :bg4
|
|
51
|
-
t.face :isearch, foreground: :
|
|
55
|
+
t.face :isearch, foreground: :green, background: :bg0, reverse: true
|
|
52
56
|
t.face :floating_window, foreground: :fg, background: :bg_dim
|
|
53
57
|
|
|
54
58
|
# Completion faces
|
|
55
59
|
t.face :completion_popup, foreground: :fg, background: :bg2
|
|
56
|
-
t.face :completion_popup_selected, foreground: :bg0, background: :
|
|
60
|
+
t.face :completion_popup_selected, foreground: :bg0, background: :filled_blue
|
|
57
61
|
|
|
58
62
|
# Dired faces
|
|
59
63
|
t.face :dired_directory, foreground: :green
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Tokyo Night theme for Textbringer
|
|
2
2
|
# Based on https://github.com/folke/tokyonight.nvim
|
|
3
|
-
# Night variant (dark only).
|
|
4
|
-
#
|
|
3
|
+
# Night variant (dark only).
|
|
4
|
+
# GUI hex values from the source palette definitions.
|
|
5
5
|
|
|
6
6
|
Textbringer::Theme.define "tokyonight" do |t|
|
|
7
7
|
t.palette :dark do |p|
|
|
@@ -9,7 +9,7 @@ Textbringer::Theme.define "tokyonight" do |t|
|
|
|
9
9
|
p.color :bg, hex: "#1a1b26", ansi: "black" # bg
|
|
10
10
|
p.color :bg_dark, hex: "#16161e", ansi: "black" # bg_dark → popups, statusline
|
|
11
11
|
p.color :bg_hl, hex: "#292e42", ansi: "brightblack" # bg_highlight → floating windows
|
|
12
|
-
p.color :bg_vis, hex: "#
|
|
12
|
+
p.color :bg_vis, hex: "#283357", ansi: "brightblack" # bg_visual = blend(blue0, 0.4, bg)
|
|
13
13
|
p.color :sel_bg, hex: "#343a55", ansi: "brightblack" # PmenuSel bg = blend(fg_gutter, 0.8, bg)
|
|
14
14
|
p.color :search, hex: "#3d59a1", ansi: "blue" # bg_search = blue0
|
|
15
15
|
p.color :fg, hex: "#c0caf5", ansi: "white" # fg
|
data/lib/textbringer/utils.rb
CHANGED
|
@@ -418,6 +418,22 @@ module Textbringer
|
|
|
418
418
|
RbConfig::CONFIG["ruby_install_name"]
|
|
419
419
|
end
|
|
420
420
|
|
|
421
|
+
def with_clean_env(&block)
|
|
422
|
+
env = ENV.to_h.reject { |k, _| k.start_with?("RBENV_") }
|
|
423
|
+
unless Gem.win_platform?
|
|
424
|
+
env["PATH"] = env["PATH"].split(File::PATH_SEPARATOR).reject { |path|
|
|
425
|
+
/.rbenv\/(versions|libexec)/.match?(path)
|
|
426
|
+
}.join(File::PATH_SEPARATOR)
|
|
427
|
+
end
|
|
428
|
+
if defined?(Bundler)
|
|
429
|
+
Bundler.with_unbundled_env do
|
|
430
|
+
block.call(env)
|
|
431
|
+
end
|
|
432
|
+
else
|
|
433
|
+
block.call(env)
|
|
434
|
+
end
|
|
435
|
+
end
|
|
436
|
+
|
|
421
437
|
[
|
|
422
438
|
:beginning_of_buffer?,
|
|
423
439
|
:end_of_buffer?,
|
data/lib/textbringer/version.rb
CHANGED
data/screenshot.png
CHANGED
|
Binary file
|