omnibar 0.0.6 → 0.0.7
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/.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
|