omnibar 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/Gemfile.lock +2 -2
- data/Rakefile +1 -2
- data/db/ansi.json +258 -0
- data/lib/ansi.rb +45 -6
- data/lib/omnibar.rb +6 -6
- data/lib/omnibar/app.rb +7 -4
- data/lib/omnibar/queries/calculate.rb +25 -4
- data/lib/omnibar/queries/docs.rb +15 -0
- data/lib/omnibar/queries/duck_duck_go.rb +8 -0
- data/lib/omnibar/queries/emoji.rb +337 -332
- data/lib/omnibar/queries/github.rb +15 -3
- data/lib/omnibar/queries/google.rb +12 -0
- data/lib/omnibar/queries/popular.rb +5 -1
- data/lib/omnibar/queries/snippet.rb +8 -5
- data/lib/omnibar/queries/spell.rb +14 -1
- data/lib/omnibar/queries/system.rb +5 -1
- data/lib/omnibar/query.rb +30 -4
- data/lib/omnibar/renderer.rb +0 -1
- data/lib/omnibar/state.rb +2 -2
- data/lib/omnibar/version.rb +1 -1
- data/lib/omnibar/view.rb +13 -9
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89901327f67e2c6978f867ae24b906fc604b56ad
|
4
|
+
data.tar.gz: 3be4ad5cdd64cf4413cb73e3e87775e2190e22bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8193d63a0129aaf5fc30d5d3444958c07862e9201adfce4d34c929d29edf50938a0033a55a79468b77396be994c6dfe8dd064045e86c49f8c1d6eb05af9fcb0
|
7
|
+
data.tar.gz: 52be6f30e7e997e787741ff42209aaaa5ae160ee85c385957177b2d982338cd0759ee31add06e13934777e47414df5784def08fedd44e4045585208d96a0b053
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
omnibar (0.0.
|
4
|
+
omnibar (0.0.7)
|
5
5
|
amatch (~> 0.4.0)
|
6
6
|
dry-configurable (~> 0.7.0)
|
7
7
|
ffi-aspell (~> 1.1, >= 1.1.0)
|
@@ -28,7 +28,7 @@ GEM
|
|
28
28
|
ruby_parser (3.10.1)
|
29
29
|
sexp_processor (~> 4.9)
|
30
30
|
sexp_processor (4.10.0)
|
31
|
-
tins (1.
|
31
|
+
tins (1.16.3)
|
32
32
|
|
33
33
|
PLATFORMS
|
34
34
|
ruby
|
data/Rakefile
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require
|
2
|
-
task :default => :spec
|
1
|
+
require 'bundler/gem_tasks'
|
data/db/ansi.json
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
{
|
2
|
+
"Black": 0,
|
3
|
+
"Maroon": 1,
|
4
|
+
"Green": 2,
|
5
|
+
"Olive": 3,
|
6
|
+
"Navy": 4,
|
7
|
+
"Purple": 5,
|
8
|
+
"Teal": 6,
|
9
|
+
"Silver": 7,
|
10
|
+
"Grey": 8,
|
11
|
+
"Red": 9,
|
12
|
+
"Lime": 10,
|
13
|
+
"Yellow": 11,
|
14
|
+
"Blue": 12,
|
15
|
+
"Fuchsia": 13,
|
16
|
+
"Aqua": 14,
|
17
|
+
"White": 15,
|
18
|
+
"Grey0": 16,
|
19
|
+
"NavyBlue": 17,
|
20
|
+
"DarkBlue": 18,
|
21
|
+
"Blue2": 19,
|
22
|
+
"Blue3": 20,
|
23
|
+
"Blue1": 21,
|
24
|
+
"DarkGreen": 22,
|
25
|
+
"DeepSkyBlue4": 23,
|
26
|
+
"DeepSkyBlue4": 24,
|
27
|
+
"DeepSkyBlue4": 25,
|
28
|
+
"DodgerBlue3": 26,
|
29
|
+
"DodgerBlue2": 27,
|
30
|
+
"Green4": 28,
|
31
|
+
"SpringGreen4": 29,
|
32
|
+
"Turquoise4": 30,
|
33
|
+
"DeepSkyBlue3": 31,
|
34
|
+
"DeepSkyBlue3": 32,
|
35
|
+
"DodgerBlue1": 33,
|
36
|
+
"Green3": 34,
|
37
|
+
"SpringGreen3": 35,
|
38
|
+
"DarkCyan": 36,
|
39
|
+
"LightSeaGreen": 37,
|
40
|
+
"DeepSkyBlue2": 38,
|
41
|
+
"DeepSkyBlue1": 39,
|
42
|
+
"Green3": 40,
|
43
|
+
"SpringGreen3": 41,
|
44
|
+
"SpringGreen2": 42,
|
45
|
+
"Cyan3": 43,
|
46
|
+
"DarkTurquoise": 44,
|
47
|
+
"Turquoise2": 45,
|
48
|
+
"Green1": 46,
|
49
|
+
"SpringGreen2": 47,
|
50
|
+
"SpringGreen1": 48,
|
51
|
+
"MediumSpringGreen": 49,
|
52
|
+
"Cyan2": 50,
|
53
|
+
"Cyan1": 51,
|
54
|
+
"DarkRed": 52,
|
55
|
+
"DeepPink4": 53,
|
56
|
+
"Purple2": 54,
|
57
|
+
"Purple4": 55,
|
58
|
+
"Purple3": 56,
|
59
|
+
"BlueViolet": 57,
|
60
|
+
"Orange4": 58,
|
61
|
+
"Grey37": 59,
|
62
|
+
"MediumPurple4": 60,
|
63
|
+
"SlateBlue3": 61,
|
64
|
+
"SlateBlue3": 62,
|
65
|
+
"RoyalBlue1": 63,
|
66
|
+
"Chartreuse4": 64,
|
67
|
+
"DarkSeaGreen4": 65,
|
68
|
+
"PaleTurquoise4": 66,
|
69
|
+
"SteelBlue": 67,
|
70
|
+
"SteelBlue3": 68,
|
71
|
+
"CornflowerBlue": 69,
|
72
|
+
"Chartreuse3": 70,
|
73
|
+
"DarkSeaGreen4": 71,
|
74
|
+
"CadetBlue": 72,
|
75
|
+
"CadetBlue": 73,
|
76
|
+
"SkyBlue3": 74,
|
77
|
+
"SteelBlue1": 75,
|
78
|
+
"Chartreuse3": 76,
|
79
|
+
"PaleGreen3": 77,
|
80
|
+
"SeaGreen3": 78,
|
81
|
+
"Aquamarine3": 79,
|
82
|
+
"MediumTurquoise": 80,
|
83
|
+
"SteelBlue1": 81,
|
84
|
+
"Chartreuse2": 82,
|
85
|
+
"SeaGreen2": 83,
|
86
|
+
"SeaGreen1": 84,
|
87
|
+
"SeaGreen1": 85,
|
88
|
+
"Aquamarine1": 86,
|
89
|
+
"DarkSlateGray2": 87,
|
90
|
+
"DarkRed": 88,
|
91
|
+
"DeepPink4": 89,
|
92
|
+
"DarkMagenta": 90,
|
93
|
+
"DarkMagenta": 91,
|
94
|
+
"DarkViolet": 92,
|
95
|
+
"Purple5": 93,
|
96
|
+
"Orange4": 94,
|
97
|
+
"LightPink4": 95,
|
98
|
+
"Plum4": 96,
|
99
|
+
"MediumPurple3": 97,
|
100
|
+
"MediumPurple3": 98,
|
101
|
+
"SlateBlue1": 99,
|
102
|
+
"Yellow4": 100,
|
103
|
+
"Wheat4": 101,
|
104
|
+
"Grey53": 102,
|
105
|
+
"LightSlateGrey": 103,
|
106
|
+
"MediumPurple": 104,
|
107
|
+
"LightSlateBlue": 105,
|
108
|
+
"Yellow4": 106,
|
109
|
+
"DarkOliveGreen3": 107,
|
110
|
+
"DarkSeaGreen": 108,
|
111
|
+
"LightSkyBlue3": 109,
|
112
|
+
"LightSkyBlue3": 110,
|
113
|
+
"SkyBlue2": 111,
|
114
|
+
"Chartreuse2": 112,
|
115
|
+
"DarkOliveGreen3": 113,
|
116
|
+
"PaleGreen3": 114,
|
117
|
+
"DarkSeaGreen3": 115,
|
118
|
+
"DarkSlateGray3": 116,
|
119
|
+
"SkyBlue1": 117,
|
120
|
+
"Chartreuse1": 118,
|
121
|
+
"LightGreen": 119,
|
122
|
+
"LightGreen": 120,
|
123
|
+
"PaleGreen1": 121,
|
124
|
+
"Aquamarine1": 122,
|
125
|
+
"DarkSlateGray1": 123,
|
126
|
+
"Red3": 124,
|
127
|
+
"DeepPink4": 125,
|
128
|
+
"MediumVioletRed": 126,
|
129
|
+
"Magenta3": 127,
|
130
|
+
"DarkViolet": 128,
|
131
|
+
"Purple6": 129,
|
132
|
+
"DarkOrange3": 130,
|
133
|
+
"IndianRed": 131,
|
134
|
+
"HotPink3": 132,
|
135
|
+
"MediumOrchid3": 133,
|
136
|
+
"MediumOrchid": 134,
|
137
|
+
"MediumPurple2": 135,
|
138
|
+
"DarkGoldenrod": 136,
|
139
|
+
"LightSalmon3": 137,
|
140
|
+
"RosyBrown": 138,
|
141
|
+
"Grey63": 139,
|
142
|
+
"MediumPurple2": 140,
|
143
|
+
"MediumPurple1": 141,
|
144
|
+
"Gold3": 142,
|
145
|
+
"DarkKhaki": 143,
|
146
|
+
"NavajoWhite3": 144,
|
147
|
+
"Grey69": 145,
|
148
|
+
"LightSteelBlue3": 146,
|
149
|
+
"LightSteelBlue": 147,
|
150
|
+
"Yellow3": 148,
|
151
|
+
"DarkOliveGreen3": 149,
|
152
|
+
"DarkSeaGreen3": 150,
|
153
|
+
"DarkSeaGreen2": 151,
|
154
|
+
"LightCyan3": 152,
|
155
|
+
"LightSkyBlue1": 153,
|
156
|
+
"GreenYellow": 154,
|
157
|
+
"DarkOliveGreen2": 155,
|
158
|
+
"PaleGreen1": 156,
|
159
|
+
"DarkSeaGreen2": 157,
|
160
|
+
"DarkSeaGreen1": 158,
|
161
|
+
"PaleTurquoise1": 159,
|
162
|
+
"Red3": 160,
|
163
|
+
"DeepPink3": 161,
|
164
|
+
"DeepPink3": 162,
|
165
|
+
"Magenta3": 163,
|
166
|
+
"Magenta3": 164,
|
167
|
+
"Magenta2": 165,
|
168
|
+
"DarkOrange3": 166,
|
169
|
+
"IndianRed": 167,
|
170
|
+
"HotPink3": 168,
|
171
|
+
"HotPink2": 169,
|
172
|
+
"Orchid": 170,
|
173
|
+
"MediumOrchid1": 171,
|
174
|
+
"Orange3": 172,
|
175
|
+
"LightSalmon3": 173,
|
176
|
+
"LightPink3": 174,
|
177
|
+
"Pink3": 175,
|
178
|
+
"Plum3": 176,
|
179
|
+
"Violet": 177,
|
180
|
+
"Gold3": 178,
|
181
|
+
"LightGoldenrod3": 179,
|
182
|
+
"Tan": 180,
|
183
|
+
"MistyRose3": 181,
|
184
|
+
"Thistle3": 182,
|
185
|
+
"Plum2": 183,
|
186
|
+
"Yellow3": 184,
|
187
|
+
"Khaki3": 185,
|
188
|
+
"LightGoldenrod2": 186,
|
189
|
+
"LightYellow3": 187,
|
190
|
+
"Grey84": 188,
|
191
|
+
"LightSteelBlue1": 189,
|
192
|
+
"Yellow2": 190,
|
193
|
+
"DarkOliveGreen1": 191,
|
194
|
+
"DarkOliveGreen1": 192,
|
195
|
+
"DarkSeaGreen1": 193,
|
196
|
+
"Honeydew2": 194,
|
197
|
+
"LightCyan1": 195,
|
198
|
+
"Red1": 196,
|
199
|
+
"DeepPink2": 197,
|
200
|
+
"DeepPink1": 198,
|
201
|
+
"DeepPink1": 199,
|
202
|
+
"Magenta2": 200,
|
203
|
+
"Magenta1": 201,
|
204
|
+
"OrangeRed1": 202,
|
205
|
+
"IndianRed1": 203,
|
206
|
+
"IndianRed1": 204,
|
207
|
+
"HotPink": 205,
|
208
|
+
"HotPink": 206,
|
209
|
+
"MediumOrchid1": 207,
|
210
|
+
"DarkOrange": 208,
|
211
|
+
"Salmon1": 209,
|
212
|
+
"LightCoral": 210,
|
213
|
+
"PaleVioletRed1": 211,
|
214
|
+
"Orchid2": 212,
|
215
|
+
"Orchid1": 213,
|
216
|
+
"Orange1": 214,
|
217
|
+
"SandyBrown": 215,
|
218
|
+
"LightSalmon1": 216,
|
219
|
+
"LightPink1": 217,
|
220
|
+
"Pink1": 218,
|
221
|
+
"Plum1": 219,
|
222
|
+
"Gold1": 220,
|
223
|
+
"LightGoldenrod2": 221,
|
224
|
+
"LightGoldenrod2": 222,
|
225
|
+
"NavajoWhite1": 223,
|
226
|
+
"MistyRose1": 224,
|
227
|
+
"Thistle1": 225,
|
228
|
+
"Yellow1": 226,
|
229
|
+
"LightGoldenrod1": 227,
|
230
|
+
"Khaki1": 228,
|
231
|
+
"Wheat1": 229,
|
232
|
+
"Cornsilk1": 230,
|
233
|
+
"Grey100": 231,
|
234
|
+
"Grey3": 232,
|
235
|
+
"Grey7": 233,
|
236
|
+
"Grey11": 234,
|
237
|
+
"Grey15": 235,
|
238
|
+
"Grey19": 236,
|
239
|
+
"Grey23": 237,
|
240
|
+
"Grey27": 238,
|
241
|
+
"Grey30": 239,
|
242
|
+
"Grey35": 240,
|
243
|
+
"Grey39": 241,
|
244
|
+
"Grey42": 242,
|
245
|
+
"Grey46": 243,
|
246
|
+
"Grey50": 244,
|
247
|
+
"Grey54": 245,
|
248
|
+
"Grey58": 246,
|
249
|
+
"Grey62": 247,
|
250
|
+
"Grey66": 248,
|
251
|
+
"Grey70": 249,
|
252
|
+
"Grey74": 250,
|
253
|
+
"Grey78": 251,
|
254
|
+
"Grey82": 252,
|
255
|
+
"Grey85": 253,
|
256
|
+
"Grey89": 254,
|
257
|
+
"Grey93": 255
|
258
|
+
}
|
data/lib/ansi.rb
CHANGED
@@ -1,15 +1,25 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
# This module contains helpers for various ansi-code operations
|
2
4
|
module ANSI
|
3
5
|
# ANSI color escape codes set the foreground and background colors.
|
4
6
|
# Forground color is a number between 30 and 37.
|
5
7
|
# Background color is a number between 40 and 47.
|
6
8
|
# The ones place represents the same color for both.
|
7
|
-
COLORS =
|
9
|
+
COLORS = JSON.parse(File.read(File.expand_path('../db/ansi.json', File.dirname(__FILE__)))).freeze
|
8
10
|
|
9
11
|
def self.clear_screen
|
10
12
|
$stdout.write "\e[2J"
|
11
13
|
end
|
12
14
|
|
15
|
+
def self.save_screen
|
16
|
+
$stdout.write `tput smcup`
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.restore_screen
|
20
|
+
$stdout.write `tput rmcup`
|
21
|
+
end
|
22
|
+
|
13
23
|
def self.move_cursor(row, col)
|
14
24
|
$stdout.write "\e[#{row + 1};#{col + 1}H"
|
15
25
|
end
|
@@ -21,17 +31,22 @@ module ANSI
|
|
21
31
|
move_cursor(row, col)
|
22
32
|
end
|
23
33
|
|
24
|
-
def self.color(text, fg:
|
25
|
-
fg = COLORS.
|
26
|
-
bg = COLORS.
|
27
|
-
|
28
|
-
"
|
34
|
+
def self.color(text, fg: nil, bg: nil, res: true)
|
35
|
+
fg = COLORS[@private.snake_to_camel(fg)] if fg
|
36
|
+
bg = COLORS[@private.snake_to_camel(bg)] if bg
|
37
|
+
fg = "\e[38;5;#{fg}m" if fg
|
38
|
+
bg = "\e[48;5;#{bg}m" if bg
|
39
|
+
"#{fg}#{bg}#{text}#{reset if res}"
|
29
40
|
end
|
30
41
|
|
31
42
|
def self.reset
|
32
43
|
"\e[0m"
|
33
44
|
end
|
34
45
|
|
46
|
+
def self.strip(text)
|
47
|
+
text.gsub(/\e\[[0-9,;]+\w/, '')
|
48
|
+
end
|
49
|
+
|
35
50
|
def self.position
|
36
51
|
res = ''
|
37
52
|
$stdin.raw do |stdin|
|
@@ -55,4 +70,28 @@ module ANSI
|
|
55
70
|
width: win[1]
|
56
71
|
}
|
57
72
|
end
|
73
|
+
|
74
|
+
def self.print_colors
|
75
|
+
colors = COLORS.keys.count
|
76
|
+
groups = COLORS.to_a.sort_by { |p| p[1] }.each_slice(colors / 3).to_a.map(&:to_h)
|
77
|
+
|
78
|
+
groups.first.keys.length.times.each do |i|
|
79
|
+
3.times do |j|
|
80
|
+
name = groups[j].keys[i]
|
81
|
+
code = groups[j][name]
|
82
|
+
|
83
|
+
pad = ' ' * (40 - (name.length * 2))
|
84
|
+
lpad = ' ' * (3 - code.digits.count)
|
85
|
+
print "#{lpad}#{code} \e[38;5;#{code}m#{name}\e[0m \e[48;5;#{code}m#{name}\e[0m #{pad}"
|
86
|
+
end
|
87
|
+
print "\n"
|
88
|
+
end
|
89
|
+
true
|
90
|
+
end
|
91
|
+
|
92
|
+
@private = Module.new do
|
93
|
+
def self.snake_to_camel(string)
|
94
|
+
string.to_s.split('_').map(&:capitalize).join
|
95
|
+
end
|
96
|
+
end
|
58
97
|
end
|
data/lib/omnibar.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'dry-configurable'
|
3
3
|
require 'fuzzy_match'
|
4
4
|
require 'amatch'
|
5
|
+
require 'logger'
|
5
6
|
|
6
7
|
require_relative 'ansi'
|
7
8
|
|
@@ -15,6 +16,8 @@ require_relative 'omnibar/view'
|
|
15
16
|
module Omnibar
|
16
17
|
extend Dry::Configurable
|
17
18
|
|
19
|
+
setting :log, Logger.new('log/omnibar.log'), reader: true rescue nil
|
20
|
+
|
18
21
|
setting :queries, []
|
19
22
|
|
20
23
|
setting :github do
|
@@ -31,13 +34,14 @@ module Omnibar
|
|
31
34
|
setting :prompt, ->(width) { (' ' * width) << ANSI.color('★', fg: :magenta) }
|
32
35
|
|
33
36
|
setting :highlight do
|
34
|
-
setting :fg, :
|
35
|
-
setting :bg, :
|
37
|
+
setting :fg, :white
|
38
|
+
setting :bg, :grey15
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
39
42
|
setting :events do
|
40
43
|
setting :after_start, ->(app) {}
|
44
|
+
setting :keypress, ->(state) {}
|
41
45
|
setting :after_perform, -> {}
|
42
46
|
end
|
43
47
|
|
@@ -52,7 +56,3 @@ FuzzyMatch.engine = :amatch
|
|
52
56
|
# Require all the queries
|
53
57
|
dir = File.join(File.dirname(File.expand_path(__FILE__)), 'omnibar/queries')
|
54
58
|
Dir["#{dir}/*.rb"].each { |file| require file }
|
55
|
-
|
56
|
-
# Move fallback queries to the end
|
57
|
-
Omnibar.config.queries << Omnibar.config.queries.delete(Omnibar::DuckDuckGo)
|
58
|
-
Omnibar.config.queries << Omnibar.config.queries.delete(Omnibar::Google)
|
data/lib/omnibar/app.rb
CHANGED
@@ -12,7 +12,7 @@ module Omnibar
|
|
12
12
|
|
13
13
|
def run
|
14
14
|
IO.console.raw do
|
15
|
-
ANSI.
|
15
|
+
ANSI.save_screen
|
16
16
|
ANSI.move_cursor(0, 0)
|
17
17
|
loop do
|
18
18
|
render
|
@@ -36,9 +36,9 @@ module Omnibar
|
|
36
36
|
@state.backspace
|
37
37
|
when "\e", "\e["
|
38
38
|
handle_input(char)
|
39
|
-
when "\e[A" # Up Arrow
|
39
|
+
when "\e[A", "\v" # Up Arrow, ctrl-k
|
40
40
|
@state.select_up
|
41
|
-
when "\e[B" # Down Arrow
|
41
|
+
when "\e[B", "\n" # Down Arrow, ctrl-j
|
42
42
|
@state.select_down
|
43
43
|
when "\e[C"
|
44
44
|
@state.move_cursor_left
|
@@ -50,8 +50,11 @@ module Omnibar
|
|
50
50
|
perform_action!
|
51
51
|
reset_state!
|
52
52
|
else
|
53
|
+
puts char.inspect
|
53
54
|
@state.add_to_input(char)
|
54
55
|
end
|
56
|
+
|
57
|
+
Omnibar.config.events.keypress.call(@state)
|
55
58
|
end
|
56
59
|
|
57
60
|
def reset_state!
|
@@ -64,7 +67,7 @@ module Omnibar
|
|
64
67
|
end
|
65
68
|
|
66
69
|
def quit
|
67
|
-
ANSI.
|
70
|
+
ANSI.restore_screen
|
68
71
|
exit 0
|
69
72
|
end
|
70
73
|
end
|