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
@@ -3,17 +3,29 @@ module Omnibar
|
|
3
3
|
def result
|
4
4
|
repo = search.find(input)
|
5
5
|
return repo if repo
|
6
|
-
return input if
|
6
|
+
return input if repo_full_name?
|
7
7
|
end
|
8
8
|
|
9
|
-
def search
|
10
|
-
@fm
|
9
|
+
def self.search
|
10
|
+
@fm ||= FuzzyMatch.new(Omnibar.config.github.repos)
|
11
11
|
end
|
12
12
|
|
13
13
|
def perform!
|
14
14
|
param = result.downcase.gsub(/\s/, '-')
|
15
15
|
open_in_browser "https://github.com/#{param}"
|
16
16
|
end
|
17
|
+
|
18
|
+
def relevance
|
19
|
+
if repo_full_name?
|
20
|
+
0.75
|
21
|
+
elsif result
|
22
|
+
input.levenshtein_similar(result)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def repo_full_name?
|
27
|
+
input.match?(/^[\w-]+\/[\w-]+$/)
|
28
|
+
end
|
17
29
|
end
|
18
30
|
end
|
19
31
|
|
@@ -1,5 +1,17 @@
|
|
1
1
|
module Omnibar
|
2
2
|
class Google < Query
|
3
|
+
def label
|
4
|
+
[
|
5
|
+
ANSI.color('G', res: false, fg: :blue),
|
6
|
+
ANSI.color('o', res: false, fg: :red),
|
7
|
+
ANSI.color('o', res: false, fg: :yellow),
|
8
|
+
ANSI.color('g', res: false, fg: :blue),
|
9
|
+
ANSI.color('l', res: false, fg: :green),
|
10
|
+
ANSI.color('e', res: false, fg: :red),
|
11
|
+
ANSI.reset
|
12
|
+
].join
|
13
|
+
end
|
14
|
+
|
3
15
|
def perform!
|
4
16
|
param = input.gsub(/\s/, '+')
|
5
17
|
open_in_browser "https://www.google.com/search?q=#{param}"
|
@@ -4,10 +4,14 @@ module Omnibar
|
|
4
4
|
search.find(input)
|
5
5
|
end
|
6
6
|
|
7
|
-
def search
|
7
|
+
def self.search
|
8
8
|
@fm ||= FuzzyMatch.new(Omnibar.config.popular.sites)
|
9
9
|
end
|
10
10
|
|
11
|
+
def relevance
|
12
|
+
input.levenshtein_similar(result) if result
|
13
|
+
end
|
14
|
+
|
11
15
|
def perform!
|
12
16
|
return if input.match?(/^fac?e?b?o?o?k?/)
|
13
17
|
open_in_browser "https://#{result}"
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Omnibar
|
2
2
|
class Snippet < Query
|
3
3
|
def result
|
4
|
-
key = search.find(input)
|
5
4
|
value = snippets[key]
|
6
5
|
"#{key} :: #{value}" if (key and value)
|
7
6
|
end
|
@@ -10,12 +9,16 @@ module Omnibar
|
|
10
9
|
Omnibar.config.snippets
|
11
10
|
end
|
12
11
|
|
13
|
-
def
|
14
|
-
|
12
|
+
def key
|
13
|
+
search.find(input)
|
15
14
|
end
|
16
15
|
|
17
|
-
def
|
18
|
-
|
16
|
+
def relevance
|
17
|
+
input.levenshtein_similar(key) if result
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.search
|
21
|
+
@fz ||= FuzzyMatch.new(Omnibar.config.snippets.keys)
|
19
22
|
end
|
20
23
|
|
21
24
|
def perform!
|
@@ -3,7 +3,11 @@ require 'ffi/aspell'
|
|
3
3
|
module Omnibar
|
4
4
|
class Spell < Query
|
5
5
|
def result
|
6
|
-
|
6
|
+
return unless using_keyword?
|
7
|
+
|
8
|
+
words = input.split(' ')
|
9
|
+
return ' ' if words.length == 1
|
10
|
+
speller.suggestions(words.last).first
|
7
11
|
end
|
8
12
|
|
9
13
|
def self.speller
|
@@ -17,5 +21,14 @@ module Omnibar
|
|
17
21
|
def perform!
|
18
22
|
copy_to_clipboard result
|
19
23
|
end
|
24
|
+
|
25
|
+
def using_keyword?
|
26
|
+
input.match?(/^spe?l?l?/)
|
27
|
+
end
|
28
|
+
|
29
|
+
def relevance
|
30
|
+
return 1 if using_keyword?
|
31
|
+
0
|
32
|
+
end
|
20
33
|
end
|
21
34
|
end
|
@@ -16,12 +16,16 @@ module Omnibar
|
|
16
16
|
search.find(input)
|
17
17
|
end
|
18
18
|
|
19
|
+
def relevance
|
20
|
+
input.levenshtein_similar(result) if result
|
21
|
+
end
|
22
|
+
|
19
23
|
def search
|
20
24
|
@fz ||= FuzzyMatch.new(COMMANDS.keys)
|
21
25
|
end
|
22
26
|
|
23
27
|
def perform!
|
24
|
-
|
28
|
+
run_silently COMMANDS[result]
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
data/lib/omnibar/query.rb
CHANGED
@@ -3,26 +3,38 @@ module Omnibar
|
|
3
3
|
attr_reader :input
|
4
4
|
|
5
5
|
def initialize(input)
|
6
|
-
@input = input
|
6
|
+
@input = input
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.inherited(subclass)
|
10
10
|
Omnibar.config.queries.push(subclass)
|
11
11
|
super(subclass)
|
12
|
+
subclass.prepend(MethodAugmentations)
|
12
13
|
end
|
13
14
|
|
14
15
|
# TODO: Convert result to class
|
15
16
|
# TODO: Allow multiple results per query
|
16
17
|
def preview_text
|
17
18
|
res = result
|
18
|
-
|
19
|
-
[name, res.strip] unless res.nil? || res.empty?
|
19
|
+
[label, res.strip] unless res.nil? || res.empty?
|
20
20
|
end
|
21
21
|
|
22
22
|
def result
|
23
23
|
input
|
24
24
|
end
|
25
25
|
|
26
|
+
def label
|
27
|
+
self.class.name.split('::').last.gsub(/[A-Z]/) { |w| ' ' << w }.strip
|
28
|
+
end
|
29
|
+
|
30
|
+
def search
|
31
|
+
self.class.search
|
32
|
+
end
|
33
|
+
|
34
|
+
def relevance
|
35
|
+
0
|
36
|
+
end
|
37
|
+
|
26
38
|
def perform!; end
|
27
39
|
|
28
40
|
def copy_to_clipboard(value)
|
@@ -34,7 +46,21 @@ module Omnibar
|
|
34
46
|
end
|
35
47
|
|
36
48
|
def run_silently(*command)
|
37
|
-
`#{command.join(' ')} >/dev/null 2>&1
|
49
|
+
`#{command.join(' ')} >/dev/null 2>&1 &`
|
50
|
+
end
|
51
|
+
|
52
|
+
module MethodAugmentations
|
53
|
+
def result
|
54
|
+
return if input == ''
|
55
|
+
super
|
56
|
+
end
|
57
|
+
|
58
|
+
def relevance
|
59
|
+
value = super
|
60
|
+
value = 1 if value == true
|
61
|
+
value = 0.01 unless value
|
62
|
+
value
|
63
|
+
end
|
38
64
|
end
|
39
65
|
end
|
40
66
|
end
|
data/lib/omnibar/renderer.rb
CHANGED
data/lib/omnibar/state.rb
CHANGED
@@ -34,7 +34,7 @@ module Omnibar
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def queries
|
37
|
-
Omnibar.config.queries.map { |q| q.new(input) }
|
37
|
+
Omnibar.config.queries.map { |q| q.new(input) }.sort_by(&:relevance).reverse
|
38
38
|
end
|
39
39
|
|
40
40
|
def visible_queries
|
@@ -42,7 +42,7 @@ module Omnibar
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def current_query
|
45
|
-
visible_queries[selection] || Query.new
|
45
|
+
visible_queries[selection] || Query.new('')
|
46
46
|
end
|
47
47
|
|
48
48
|
# TODO: Sort results based on relevance / certainty
|
data/lib/omnibar/version.rb
CHANGED
data/lib/omnibar/view.rb
CHANGED
@@ -36,30 +36,34 @@ module Omnibar
|
|
36
36
|
text = [
|
37
37
|
lpad(result.first, max_label_length),
|
38
38
|
rpad(result.last, ANSI.size[:width] - max_label_length - 2)
|
39
|
-
]
|
39
|
+
]
|
40
40
|
|
41
41
|
if i == @state.selection
|
42
|
-
text
|
43
|
-
|
44
|
-
|
42
|
+
text.map { |t| highlight(t) }.join(highlight(': '))
|
43
|
+
else
|
44
|
+
text.join(': ')
|
45
45
|
end
|
46
|
-
|
47
|
-
text
|
48
46
|
end
|
49
47
|
end
|
50
48
|
|
49
|
+
def highlight(text)
|
50
|
+
ANSI.color(text,
|
51
|
+
fg: Omnibar.config.render.highlight.fg,
|
52
|
+
bg: Omnibar.config.render.highlight.bg)
|
53
|
+
end
|
54
|
+
|
51
55
|
def rpad(text, length = ANSI.size[:width])
|
52
|
-
textlength = text.length + non_ascii_chars(text).length
|
56
|
+
textlength = ANSI.strip(text).length + non_ascii_chars(text).length
|
53
57
|
text + (' ' * [0, (length - textlength)].max)
|
54
58
|
end
|
55
59
|
|
56
60
|
def lpad(text, length = ANSI.size[:width])
|
57
|
-
textlength = text.length + non_ascii_chars(text).length
|
61
|
+
textlength = ANSI.strip(text).length + non_ascii_chars(text).length
|
58
62
|
(' ' * [0, (length - textlength)].max) + text
|
59
63
|
end
|
60
64
|
|
61
65
|
def max_label_length
|
62
|
-
@mll ||= (@state.results.map(&:first).map(&:length).max || 0) + 1
|
66
|
+
@mll ||= (@state.results.map(&:first).map { |s| ANSI.strip(s) }.map(&:length).max || 0) + 1
|
63
67
|
end
|
64
68
|
|
65
69
|
def non_ascii_chars(string)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omnibar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Evan Shreve
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-configurable
|
@@ -122,11 +122,13 @@ files:
|
|
122
122
|
- Rakefile
|
123
123
|
- bin/console
|
124
124
|
- bin/setup
|
125
|
+
- db/ansi.json
|
125
126
|
- exe/omnibar
|
126
127
|
- lib/ansi.rb
|
127
128
|
- lib/omnibar.rb
|
128
129
|
- lib/omnibar/app.rb
|
129
130
|
- lib/omnibar/queries/calculate.rb
|
131
|
+
- lib/omnibar/queries/docs.rb
|
130
132
|
- lib/omnibar/queries/duck_duck_go.rb
|
131
133
|
- lib/omnibar/queries/emoji.rb
|
132
134
|
- lib/omnibar/queries/github.rb
|