ruby-zoom 4.3.2 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/z +19 -5
- data/bin/zc +19 -5
- data/bin/zf +19 -5
- data/bin/zg +19 -5
- data/bin/zl +19 -5
- data/bin/zr +19 -5
- data/lib/zoom.rb +18 -12
- data/lib/zoom/cache.rb +3 -1
- data/lib/zoom/cache/result.rb +0 -12
- data/lib/zoom/profile.rb +49 -66
- data/lib/zoom/profile/ack.rb +21 -0
- data/lib/zoom/profile/ag.rb +20 -0
- data/lib/zoom/profile/find.rb +1 -1
- data/lib/zoom/profile/grep.rb +21 -0
- data/lib/zoom/profile/passwords.rb +2 -5
- data/lib/zoom/profile/pt.rb +14 -0
- data/lib/zoom/profile/unsafe_c.rb +1 -4
- data/lib/zoom/profile/unsafe_java.rb +2 -5
- data/lib/zoom/profile/unsafe_js.rb +2 -5
- data/lib/zoom/profile/unsafe_php.rb +3 -7
- data/lib/zoom/profile/unsafe_python.rb +1 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cae14a1830640da75b5ab95bc66e0039676601a2
|
4
|
+
data.tar.gz: a027b2d2e95ffc2a151bad4fe9d05ef9c4d2db13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac0e4985295cb5d5b5cb44b75acee5b3ae174aebd916c2f939fa5b1979e80d355edaa5da51d871a2c51c7d7e46264e0575e85927160a375a1e71890bb6a14b1f
|
7
|
+
data.tar.gz: fb425a3f9d85016af48964168ed8e2afeb102a8f68841b8321357d667c36bffa9018af49673b570da119e0a356902d35d43a7164e174361f87976ee35f41f7f1
|
data/bin/z
CHANGED
@@ -20,6 +20,7 @@ def parse(args)
|
|
20
20
|
options = Hash.new
|
21
21
|
options["action"] = "exec"
|
22
22
|
options["cache_file"] = nil
|
23
|
+
options["translate_flags"] = Hash.new
|
23
24
|
options["use"] = nil
|
24
25
|
options["verbose"] = false
|
25
26
|
|
@@ -83,6 +84,14 @@ def parse(args)
|
|
83
84
|
exit ZoomExit::GOOD
|
84
85
|
end
|
85
86
|
|
87
|
+
opts.on(
|
88
|
+
"-i",
|
89
|
+
"--ignore=PATTERN",
|
90
|
+
"Ignore files/directories matching PATTERN"
|
91
|
+
) do |pattern|
|
92
|
+
options["translate_flags"]["ignore"] = pattern
|
93
|
+
end
|
94
|
+
|
86
95
|
opts.on("-l", "--list", "List profiles") do
|
87
96
|
options["action"] = "list_profiles"
|
88
97
|
end
|
@@ -95,7 +104,11 @@ def parse(args)
|
|
95
104
|
options["use"] = name
|
96
105
|
end
|
97
106
|
|
98
|
-
opts.on("-w", "--
|
107
|
+
opts.on("-w", "--word-regexp", "Only match whole words") do
|
108
|
+
options["translate_flags"]["word-regexp"] = ""
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on("--which", "Display current profile") do
|
99
112
|
options["action"] = "which"
|
100
113
|
end
|
101
114
|
|
@@ -221,7 +234,7 @@ def parse(args)
|
|
221
234
|
end
|
222
235
|
|
223
236
|
options["pattern"] = path
|
224
|
-
options["
|
237
|
+
options["pass_args"] = args.join(" ")
|
225
238
|
|
226
239
|
return options
|
227
240
|
end
|
@@ -307,10 +320,11 @@ begin
|
|
307
320
|
else
|
308
321
|
# Search and cache results
|
309
322
|
header = Hash.new
|
310
|
-
header["
|
311
|
-
header["args"] = options["subargs"]
|
312
|
-
header["pattern"] = options["pattern"]
|
323
|
+
header["args"] = options["pass_args"]
|
313
324
|
header["paths"] = options["paths"]
|
325
|
+
header["pattern"] = options["pattern"]
|
326
|
+
header["profile_name"] = options["use"]
|
327
|
+
header["translate"] = options["translate_flags"]
|
314
328
|
zoom.run(header)
|
315
329
|
end
|
316
330
|
rescue SystemExit
|
data/bin/zc
CHANGED
@@ -20,6 +20,7 @@ def parse(args)
|
|
20
20
|
options = Hash.new
|
21
21
|
options["action"] = "exec"
|
22
22
|
options["cache_file"] = nil
|
23
|
+
options["translate_flags"] = Hash.new
|
23
24
|
options["use"] = nil
|
24
25
|
options["verbose"] = false
|
25
26
|
|
@@ -83,6 +84,14 @@ def parse(args)
|
|
83
84
|
exit ZoomExit::GOOD
|
84
85
|
end
|
85
86
|
|
87
|
+
opts.on(
|
88
|
+
"-i",
|
89
|
+
"--ignore=PATTERN",
|
90
|
+
"Ignore files/directories matching PATTERN"
|
91
|
+
) do |pattern|
|
92
|
+
options["translate_flags"]["ignore"] = pattern
|
93
|
+
end
|
94
|
+
|
86
95
|
opts.on("-l", "--list", "List profiles") do
|
87
96
|
options["action"] = "list_profiles"
|
88
97
|
end
|
@@ -95,7 +104,11 @@ def parse(args)
|
|
95
104
|
options["use"] = name
|
96
105
|
end
|
97
106
|
|
98
|
-
opts.on("-w", "--
|
107
|
+
opts.on("-w", "--word-regexp", "Only match whole words") do
|
108
|
+
options["translate_flags"]["word-regexp"] = ""
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on("--which", "Display current profile") do
|
99
112
|
options["action"] = "which"
|
100
113
|
end
|
101
114
|
|
@@ -221,7 +234,7 @@ def parse(args)
|
|
221
234
|
end
|
222
235
|
|
223
236
|
options["pattern"] = path
|
224
|
-
options["
|
237
|
+
options["pass_args"] = args.join(" ")
|
225
238
|
|
226
239
|
return options
|
227
240
|
end
|
@@ -307,10 +320,11 @@ begin
|
|
307
320
|
else
|
308
321
|
# Search and cache results
|
309
322
|
header = Hash.new
|
310
|
-
header["
|
311
|
-
header["args"] = options["subargs"]
|
312
|
-
header["pattern"] = options["pattern"]
|
323
|
+
header["args"] = options["pass_args"]
|
313
324
|
header["paths"] = options["paths"]
|
325
|
+
header["pattern"] = options["pattern"]
|
326
|
+
header["profile_name"] = options["use"]
|
327
|
+
header["translate"] = options["translate_flags"]
|
314
328
|
zoom.run(header)
|
315
329
|
end
|
316
330
|
rescue SystemExit
|
data/bin/zf
CHANGED
@@ -20,6 +20,7 @@ def parse(args)
|
|
20
20
|
options = Hash.new
|
21
21
|
options["action"] = "exec"
|
22
22
|
options["cache_file"] = nil
|
23
|
+
options["translate_flags"] = Hash.new
|
23
24
|
options["use"] = nil
|
24
25
|
options["verbose"] = false
|
25
26
|
|
@@ -83,6 +84,14 @@ def parse(args)
|
|
83
84
|
exit ZoomExit::GOOD
|
84
85
|
end
|
85
86
|
|
87
|
+
opts.on(
|
88
|
+
"-i",
|
89
|
+
"--ignore=PATTERN",
|
90
|
+
"Ignore files/directories matching PATTERN"
|
91
|
+
) do |pattern|
|
92
|
+
options["translate_flags"]["ignore"] = pattern
|
93
|
+
end
|
94
|
+
|
86
95
|
opts.on("-l", "--list", "List profiles") do
|
87
96
|
options["action"] = "list_profiles"
|
88
97
|
end
|
@@ -95,7 +104,11 @@ def parse(args)
|
|
95
104
|
options["use"] = name
|
96
105
|
end
|
97
106
|
|
98
|
-
opts.on("-w", "--
|
107
|
+
opts.on("-w", "--word-regexp", "Only match whole words") do
|
108
|
+
options["translate_flags"]["word-regexp"] = ""
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on("--which", "Display current profile") do
|
99
112
|
options["action"] = "which"
|
100
113
|
end
|
101
114
|
|
@@ -221,7 +234,7 @@ def parse(args)
|
|
221
234
|
end
|
222
235
|
|
223
236
|
options["pattern"] = path
|
224
|
-
options["
|
237
|
+
options["pass_args"] = args.join(" ")
|
225
238
|
|
226
239
|
return options
|
227
240
|
end
|
@@ -307,10 +320,11 @@ begin
|
|
307
320
|
else
|
308
321
|
# Search and cache results
|
309
322
|
header = Hash.new
|
310
|
-
header["
|
311
|
-
header["args"] = options["subargs"]
|
312
|
-
header["pattern"] = options["pattern"]
|
323
|
+
header["args"] = options["pass_args"]
|
313
324
|
header["paths"] = options["paths"]
|
325
|
+
header["pattern"] = options["pattern"]
|
326
|
+
header["profile_name"] = options["use"]
|
327
|
+
header["translate"] = options["translate_flags"]
|
314
328
|
zoom.run(header)
|
315
329
|
end
|
316
330
|
rescue SystemExit
|
data/bin/zg
CHANGED
@@ -20,6 +20,7 @@ def parse(args)
|
|
20
20
|
options = Hash.new
|
21
21
|
options["action"] = "exec"
|
22
22
|
options["cache_file"] = nil
|
23
|
+
options["translate_flags"] = Hash.new
|
23
24
|
options["use"] = nil
|
24
25
|
options["verbose"] = false
|
25
26
|
|
@@ -83,6 +84,14 @@ def parse(args)
|
|
83
84
|
exit ZoomExit::GOOD
|
84
85
|
end
|
85
86
|
|
87
|
+
opts.on(
|
88
|
+
"-i",
|
89
|
+
"--ignore=PATTERN",
|
90
|
+
"Ignore files/directories matching PATTERN"
|
91
|
+
) do |pattern|
|
92
|
+
options["translate_flags"]["ignore"] = pattern
|
93
|
+
end
|
94
|
+
|
86
95
|
opts.on("-l", "--list", "List profiles") do
|
87
96
|
options["action"] = "list_profiles"
|
88
97
|
end
|
@@ -95,7 +104,11 @@ def parse(args)
|
|
95
104
|
options["use"] = name
|
96
105
|
end
|
97
106
|
|
98
|
-
opts.on("-w", "--
|
107
|
+
opts.on("-w", "--word-regexp", "Only match whole words") do
|
108
|
+
options["translate_flags"]["word-regexp"] = ""
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on("--which", "Display current profile") do
|
99
112
|
options["action"] = "which"
|
100
113
|
end
|
101
114
|
|
@@ -221,7 +234,7 @@ def parse(args)
|
|
221
234
|
end
|
222
235
|
|
223
236
|
options["pattern"] = path
|
224
|
-
options["
|
237
|
+
options["pass_args"] = args.join(" ")
|
225
238
|
|
226
239
|
return options
|
227
240
|
end
|
@@ -307,10 +320,11 @@ begin
|
|
307
320
|
else
|
308
321
|
# Search and cache results
|
309
322
|
header = Hash.new
|
310
|
-
header["
|
311
|
-
header["args"] = options["subargs"]
|
312
|
-
header["pattern"] = options["pattern"]
|
323
|
+
header["args"] = options["pass_args"]
|
313
324
|
header["paths"] = options["paths"]
|
325
|
+
header["pattern"] = options["pattern"]
|
326
|
+
header["profile_name"] = options["use"]
|
327
|
+
header["translate"] = options["translate_flags"]
|
314
328
|
zoom.run(header)
|
315
329
|
end
|
316
330
|
rescue SystemExit
|
data/bin/zl
CHANGED
@@ -20,6 +20,7 @@ def parse(args)
|
|
20
20
|
options = Hash.new
|
21
21
|
options["action"] = "exec"
|
22
22
|
options["cache_file"] = nil
|
23
|
+
options["translate_flags"] = Hash.new
|
23
24
|
options["use"] = nil
|
24
25
|
options["verbose"] = false
|
25
26
|
|
@@ -83,6 +84,14 @@ def parse(args)
|
|
83
84
|
exit ZoomExit::GOOD
|
84
85
|
end
|
85
86
|
|
87
|
+
opts.on(
|
88
|
+
"-i",
|
89
|
+
"--ignore=PATTERN",
|
90
|
+
"Ignore files/directories matching PATTERN"
|
91
|
+
) do |pattern|
|
92
|
+
options["translate_flags"]["ignore"] = pattern
|
93
|
+
end
|
94
|
+
|
86
95
|
opts.on("-l", "--list", "List profiles") do
|
87
96
|
options["action"] = "list_profiles"
|
88
97
|
end
|
@@ -95,7 +104,11 @@ def parse(args)
|
|
95
104
|
options["use"] = name
|
96
105
|
end
|
97
106
|
|
98
|
-
opts.on("-w", "--
|
107
|
+
opts.on("-w", "--word-regexp", "Only match whole words") do
|
108
|
+
options["translate_flags"]["word-regexp"] = ""
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on("--which", "Display current profile") do
|
99
112
|
options["action"] = "which"
|
100
113
|
end
|
101
114
|
|
@@ -221,7 +234,7 @@ def parse(args)
|
|
221
234
|
end
|
222
235
|
|
223
236
|
options["pattern"] = path
|
224
|
-
options["
|
237
|
+
options["pass_args"] = args.join(" ")
|
225
238
|
|
226
239
|
return options
|
227
240
|
end
|
@@ -307,10 +320,11 @@ begin
|
|
307
320
|
else
|
308
321
|
# Search and cache results
|
309
322
|
header = Hash.new
|
310
|
-
header["
|
311
|
-
header["args"] = options["subargs"]
|
312
|
-
header["pattern"] = options["pattern"]
|
323
|
+
header["args"] = options["pass_args"]
|
313
324
|
header["paths"] = options["paths"]
|
325
|
+
header["pattern"] = options["pattern"]
|
326
|
+
header["profile_name"] = options["use"]
|
327
|
+
header["translate"] = options["translate_flags"]
|
314
328
|
zoom.run(header)
|
315
329
|
end
|
316
330
|
rescue SystemExit
|
data/bin/zr
CHANGED
@@ -20,6 +20,7 @@ def parse(args)
|
|
20
20
|
options = Hash.new
|
21
21
|
options["action"] = "exec"
|
22
22
|
options["cache_file"] = nil
|
23
|
+
options["translate_flags"] = Hash.new
|
23
24
|
options["use"] = nil
|
24
25
|
options["verbose"] = false
|
25
26
|
|
@@ -83,6 +84,14 @@ def parse(args)
|
|
83
84
|
exit ZoomExit::GOOD
|
84
85
|
end
|
85
86
|
|
87
|
+
opts.on(
|
88
|
+
"-i",
|
89
|
+
"--ignore=PATTERN",
|
90
|
+
"Ignore files/directories matching PATTERN"
|
91
|
+
) do |pattern|
|
92
|
+
options["translate_flags"]["ignore"] = pattern
|
93
|
+
end
|
94
|
+
|
86
95
|
opts.on("-l", "--list", "List profiles") do
|
87
96
|
options["action"] = "list_profiles"
|
88
97
|
end
|
@@ -95,7 +104,11 @@ def parse(args)
|
|
95
104
|
options["use"] = name
|
96
105
|
end
|
97
106
|
|
98
|
-
opts.on("-w", "--
|
107
|
+
opts.on("-w", "--word-regexp", "Only match whole words") do
|
108
|
+
options["translate_flags"]["word-regexp"] = ""
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on("--which", "Display current profile") do
|
99
112
|
options["action"] = "which"
|
100
113
|
end
|
101
114
|
|
@@ -221,7 +234,7 @@ def parse(args)
|
|
221
234
|
end
|
222
235
|
|
223
236
|
options["pattern"] = path
|
224
|
-
options["
|
237
|
+
options["pass_args"] = args.join(" ")
|
225
238
|
|
226
239
|
return options
|
227
240
|
end
|
@@ -307,10 +320,11 @@ begin
|
|
307
320
|
else
|
308
321
|
# Search and cache results
|
309
322
|
header = Hash.new
|
310
|
-
header["
|
311
|
-
header["args"] = options["subargs"]
|
312
|
-
header["pattern"] = options["pattern"]
|
323
|
+
header["args"] = options["pass_args"]
|
313
324
|
header["paths"] = options["paths"]
|
325
|
+
header["pattern"] = options["pattern"]
|
326
|
+
header["profile_name"] = options["use"]
|
327
|
+
header["translate"] = options["translate_flags"]
|
314
328
|
zoom.run(header)
|
315
329
|
end
|
316
330
|
rescue SystemExit
|
data/lib/zoom.rb
CHANGED
@@ -27,18 +27,21 @@ class Zoom
|
|
27
27
|
profile.go(@config.editor, results)
|
28
28
|
end
|
29
29
|
|
30
|
-
def repeat
|
30
|
+
def repeat(shortcut = true)
|
31
31
|
return if (@cache.empty?)
|
32
|
-
run(@cache.header)
|
32
|
+
run(@cache.header, shortcut)
|
33
33
|
end
|
34
34
|
|
35
|
-
def run(header)
|
36
|
-
|
37
|
-
args
|
38
|
-
|
39
|
-
|
35
|
+
def run(header, shortcut = true)
|
36
|
+
# Ensure header has no nil
|
37
|
+
["args", "paths", "pattern", "profile_name"].each do |key|
|
38
|
+
header[key] ||= ""
|
39
|
+
end
|
40
|
+
header["pwd"] = Dir.pwd
|
41
|
+
header["translate"] ||= Array.new
|
40
42
|
|
41
|
-
|
43
|
+
profile_name = header["profile_name"]
|
44
|
+
if (profile_name.empty?)
|
42
45
|
profile_name = @config.current_profile_name
|
43
46
|
header["profile_name"] = profile_name
|
44
47
|
end
|
@@ -48,10 +51,9 @@ class Zoom
|
|
48
51
|
end
|
49
52
|
|
50
53
|
profile = @config.get_profile(profile_name)
|
51
|
-
if (
|
54
|
+
if (!profile.pattern.empty?)
|
52
55
|
header["pattern"] = profile.pattern
|
53
56
|
end
|
54
|
-
header["pwd"] = Dir.pwd
|
55
57
|
|
56
58
|
begin
|
57
59
|
# Clear cache
|
@@ -60,11 +62,15 @@ class Zoom
|
|
60
62
|
# Store needed details
|
61
63
|
@cache.header(header)
|
62
64
|
|
65
|
+
# This will translate and/or append args such that the
|
66
|
+
# output will be something Zoom can process
|
67
|
+
header = profile.preprocess(header)
|
68
|
+
|
63
69
|
# Execute profile
|
64
|
-
@cache.write(profile.exe(
|
70
|
+
@cache.write(profile.exe(header))
|
65
71
|
|
66
72
|
# Display results from cache
|
67
|
-
@cache.shortcut(@config)
|
73
|
+
@cache.shortcut(@config) if (shortcut)
|
68
74
|
rescue Interrupt
|
69
75
|
# ^C
|
70
76
|
end
|
data/lib/zoom/cache.rb
CHANGED
@@ -82,7 +82,9 @@ class Zoom::Cache
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def parse_tags(input)
|
85
|
-
|
85
|
+
if (input.nil? || input.empty?)
|
86
|
+
raise Zoom::Error::InvalidTag.new
|
87
|
+
end
|
86
88
|
|
87
89
|
tags = Array.new
|
88
90
|
input.split(",").each do |num|
|
data/lib/zoom/cache/result.rb
CHANGED
@@ -5,10 +5,6 @@ class Zoom::Cache::Result
|
|
5
5
|
attr_reader :match
|
6
6
|
attr_reader :tag
|
7
7
|
|
8
|
-
def args
|
9
|
-
return @cache.args
|
10
|
-
end
|
11
|
-
|
12
8
|
def grep_like?
|
13
9
|
return @grep_like
|
14
10
|
end
|
@@ -35,14 +31,6 @@ class Zoom::Cache::Result
|
|
35
31
|
end
|
36
32
|
end
|
37
33
|
|
38
|
-
def paths
|
39
|
-
return @cache.paths
|
40
|
-
end
|
41
|
-
|
42
|
-
def pattern
|
43
|
-
return @cache.pattern
|
44
|
-
end
|
45
|
-
|
46
34
|
def profile_name
|
47
35
|
return @cache.profile_name
|
48
36
|
end
|
data/lib/zoom/profile.rb
CHANGED
@@ -3,16 +3,19 @@ require "scoobydoo"
|
|
3
3
|
require "shellwords"
|
4
4
|
|
5
5
|
class Zoom::Profile < Hash
|
6
|
+
attr_reader :format_flags
|
6
7
|
attr_reader :pattern
|
7
8
|
attr_reader :taggable
|
8
9
|
|
9
10
|
def after(a = nil)
|
10
11
|
self["after"] = a.strip if (a)
|
12
|
+
self["after"] ||= ""
|
11
13
|
return self["after"]
|
12
14
|
end
|
13
15
|
|
14
16
|
def before(b = nil)
|
15
17
|
self["before"] = b.strip if (b)
|
18
|
+
self["before"] ||= ""
|
16
19
|
return self["before"]
|
17
20
|
end
|
18
21
|
|
@@ -20,86 +23,28 @@ class Zoom::Profile < Hash
|
|
20
23
|
return self["class"]
|
21
24
|
end
|
22
25
|
|
23
|
-
def exe(
|
24
|
-
# Use hard-coded pattern if defined
|
25
|
-
if (@pattern && !@pattern.empty? && (pattern != @pattern))
|
26
|
-
args += " #{pattern}"
|
27
|
-
pattern = @pattern
|
28
|
-
end
|
29
|
-
|
30
|
-
# If not pattern and no after, then return nothing
|
31
|
-
if (pattern.nil? || pattern.empty?)
|
32
|
-
return "" if (after.nil? || after.empty?)
|
33
|
-
end
|
34
|
-
|
26
|
+
def exe(header)
|
35
27
|
# Emulate grep
|
36
28
|
case operator.split("/")[-1]
|
37
|
-
when "ack", "ack-grep"
|
38
|
-
cmd = [
|
39
|
-
before,
|
40
|
-
operator,
|
41
|
-
"-H --nobreak --nocolor --noheading -s",
|
42
|
-
flags,
|
43
|
-
args,
|
44
|
-
pattern.shellescape,
|
45
|
-
paths,
|
46
|
-
after
|
47
|
-
].join(" ").strip
|
48
|
-
when "ag"
|
49
|
-
cmd = [
|
50
|
-
before,
|
51
|
-
operator,
|
52
|
-
"--filename --nobreak --nocolor --noheading --silent",
|
53
|
-
flags,
|
54
|
-
args,
|
55
|
-
pattern.shellescape,
|
56
|
-
paths,
|
57
|
-
after
|
58
|
-
].join(" ").strip
|
59
29
|
when "find"
|
60
30
|
cmd = [
|
61
31
|
before,
|
62
32
|
operator,
|
63
|
-
paths,
|
64
|
-
flags,
|
65
|
-
args,
|
66
|
-
"\"#{pattern}\"",
|
67
|
-
after
|
68
|
-
].join(" ").strip
|
69
|
-
when "grep"
|
70
|
-
cmd = [
|
71
|
-
before,
|
72
|
-
operator,
|
73
|
-
"--color=never -EHInRs",
|
74
|
-
flags,
|
75
|
-
args,
|
76
|
-
"--exclude-dir=.bzr",
|
77
|
-
"--exclude-dir=.git",
|
78
|
-
"--exclude-dir=.git-crypt",
|
79
|
-
"--exclude-dir=.svn",
|
80
|
-
pattern.shellescape,
|
81
|
-
paths,
|
82
|
-
after
|
83
|
-
].join(" ").strip
|
84
|
-
when "pt"
|
85
|
-
cmd = [
|
86
|
-
before,
|
87
|
-
operator,
|
88
|
-
"-e --nocolor --nogroup",
|
33
|
+
header["paths"],
|
89
34
|
flags,
|
90
|
-
args,
|
91
|
-
pattern
|
92
|
-
paths,
|
35
|
+
header["args"],
|
36
|
+
header["pattern"],
|
93
37
|
after
|
94
38
|
].join(" ").strip
|
95
39
|
else
|
96
40
|
cmd = [
|
97
41
|
before,
|
98
42
|
operator,
|
43
|
+
@format_flags,
|
99
44
|
flags,
|
100
|
-
args,
|
101
|
-
pattern,
|
102
|
-
paths,
|
45
|
+
header["args"],
|
46
|
+
header["pattern"],
|
47
|
+
header["paths"],
|
103
48
|
after
|
104
49
|
].join(" ").strip
|
105
50
|
end
|
@@ -108,6 +53,7 @@ class Zoom::Profile < Hash
|
|
108
53
|
|
109
54
|
def flags(f = nil)
|
110
55
|
self["flags"] = f.strip if (f)
|
56
|
+
self["flags"] ||= ""
|
111
57
|
return self["flags"]
|
112
58
|
end
|
113
59
|
|
@@ -187,6 +133,7 @@ class Zoom::Profile < Hash
|
|
187
133
|
|
188
134
|
def name(n = nil)
|
189
135
|
self["name"] = n.strip if (n)
|
136
|
+
self["name"] ||= ""
|
190
137
|
return self["name"]
|
191
138
|
end
|
192
139
|
|
@@ -200,6 +147,38 @@ class Zoom::Profile < Hash
|
|
200
147
|
return self["operator"]
|
201
148
|
end
|
202
149
|
|
150
|
+
def preprocess(header)
|
151
|
+
# Use hard-coded pattern if defined
|
152
|
+
pattern = header["pattern"]
|
153
|
+
if (@pattern && !@pattern.empty? && (pattern != @pattern))
|
154
|
+
header["args"] += " #{pattern}"
|
155
|
+
header["pattern"] = @pattern
|
156
|
+
end
|
157
|
+
|
158
|
+
case operator.split("/")[-1]
|
159
|
+
when /^ack(-grep)?$/, "ag", "grep", "pt"
|
160
|
+
header["pattern"] = header["pattern"].shellescape
|
161
|
+
when "find"
|
162
|
+
# If additional args are passed, then assume pattern is
|
163
|
+
# actually and arg
|
164
|
+
if (header["args"] && !header["args"].empty?)
|
165
|
+
header["args"] += " #{header["pattern"]}"
|
166
|
+
header["pattern"] = ""
|
167
|
+
end
|
168
|
+
|
169
|
+
# If pattern was provided then assume it's an iname search
|
170
|
+
if (header["pattern"] && !header["pattern"].empty?)
|
171
|
+
header["pattern"] = "-iname \"#{header["pattern"]}\""
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
# Translate any needed flags
|
176
|
+
header["args"] += " #{translate(header["translate"])}"
|
177
|
+
header["args"].strip!
|
178
|
+
|
179
|
+
return header
|
180
|
+
end
|
181
|
+
|
203
182
|
def self.profile_by_name(clas)
|
204
183
|
clas.split("::").inject(Object) do |mod, class_name|
|
205
184
|
mod.const_get(class_name)
|
@@ -236,6 +215,10 @@ class Zoom::Profile < Hash
|
|
236
215
|
ret.push(hilight_after(after)) if (!after.empty?)
|
237
216
|
return ret.join(" ").strip
|
238
217
|
end
|
218
|
+
|
219
|
+
def translate(from)
|
220
|
+
return ""
|
221
|
+
end
|
239
222
|
end
|
240
223
|
|
241
224
|
require "zoom/profile/ack"
|
data/lib/zoom/profile/ack.rb
CHANGED
@@ -6,6 +6,27 @@ class Zoom::Profile::Ack < Zoom::Profile
|
|
6
6
|
end
|
7
7
|
|
8
8
|
super(n, o, f, b, a)
|
9
|
+
@format_flags = [
|
10
|
+
"-H",
|
11
|
+
"--follow",
|
12
|
+
"--nobreak",
|
13
|
+
"--nocolor",
|
14
|
+
"--noheading",
|
15
|
+
"-s"
|
16
|
+
].join(" ")
|
9
17
|
@taggable = true
|
10
18
|
end
|
19
|
+
|
20
|
+
def translate(from)
|
21
|
+
to = Array.new
|
22
|
+
from.each do |flag, value|
|
23
|
+
case flag
|
24
|
+
when "ignore"
|
25
|
+
to.push("--type-set=zoom:match:/#{value}/ --zoom")
|
26
|
+
when "word-regexp"
|
27
|
+
to.push("-w")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
return to.join(" ")
|
31
|
+
end
|
11
32
|
end
|
data/lib/zoom/profile/ag.rb
CHANGED
@@ -1,6 +1,26 @@
|
|
1
1
|
class Zoom::Profile::Ag < Zoom::Profile
|
2
2
|
def initialize(n, o = "ag", f = "-S", b = "", a = "")
|
3
3
|
super(n, o, f, b, a)
|
4
|
+
@format_flags = [
|
5
|
+
"--filename",
|
6
|
+
"--nobreak",
|
7
|
+
"--nocolor",
|
8
|
+
"--noheading",
|
9
|
+
"--silent"
|
10
|
+
].join(" ")
|
4
11
|
@taggable = true
|
5
12
|
end
|
13
|
+
|
14
|
+
def translate(from)
|
15
|
+
to = Array.new
|
16
|
+
from.each do |flag, value|
|
17
|
+
case flag
|
18
|
+
when "ignore"
|
19
|
+
to.push("--ignore=#{value}")
|
20
|
+
when "word-regexp"
|
21
|
+
to.push("-w")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
return to.join(" ")
|
25
|
+
end
|
6
26
|
end
|
data/lib/zoom/profile/find.rb
CHANGED
data/lib/zoom/profile/grep.rb
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
class Zoom::Profile::Grep < Zoom::Profile
|
2
2
|
def initialize(n, o = "grep", f = "-i", b = "", a = "")
|
3
3
|
super(n, o, f, b, a)
|
4
|
+
@format_flags = [
|
5
|
+
"--color=never",
|
6
|
+
"-EHInRs",
|
7
|
+
"--exclude-dir=.bzr",
|
8
|
+
"--exclude-dir=.git",
|
9
|
+
"--exclude-dir=.git-crypt",
|
10
|
+
"--exclude-dir=.svn"
|
11
|
+
].join(" ")
|
4
12
|
@taggable = true
|
5
13
|
end
|
14
|
+
|
15
|
+
def translate(from)
|
16
|
+
to = Array.new
|
17
|
+
from.each do |flag, value|
|
18
|
+
case flag
|
19
|
+
when "ignore"
|
20
|
+
to.push("--exclude=#{value}")
|
21
|
+
when "word-regexp"
|
22
|
+
to.push("-w")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
return to.join(" ")
|
26
|
+
end
|
6
27
|
end
|
@@ -4,10 +4,7 @@ clas = Zoom::ProfileManager.default_profile.capitalize
|
|
4
4
|
superclass = Zoom::Profile.profile_by_name("Zoom::Profile::#{clas}")
|
5
5
|
class Zoom::Profile::Passwords < superclass
|
6
6
|
def initialize(n, o = nil, f = "", b = "", a = "")
|
7
|
-
# I don't care about test code
|
8
|
-
after = "| \\grep -v \"^[^:]*test[^:]*:[0-9]+:\""
|
9
7
|
flags = ""
|
10
|
-
|
11
8
|
op = Zoom::ProfileManager.default_profile
|
12
9
|
case op
|
13
10
|
when /^ack(-grep)?$/
|
@@ -20,8 +17,8 @@ class Zoom::Profile::Passwords < superclass
|
|
20
17
|
flags = "-ai"
|
21
18
|
end
|
22
19
|
|
23
|
-
super(n, op, flags
|
24
|
-
@pattern = "(key|pass(word
|
20
|
+
super(n, op, flags)
|
21
|
+
@pattern = "(key|pass(wd|word)?)[^:=,>]? *[:=,>]"
|
25
22
|
@taggable = true
|
26
23
|
end
|
27
24
|
end
|
data/lib/zoom/profile/pt.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
class Zoom::Profile::Pt < Zoom::Profile
|
2
2
|
def initialize(n, o = "pt", f = "-S", b = "", a = "")
|
3
3
|
super(n, o, f, b, a)
|
4
|
+
@format_flags = "-e --nocolor --nogroup"
|
4
5
|
@taggable = true
|
5
6
|
end
|
7
|
+
|
8
|
+
def translate(from)
|
9
|
+
to = Array.new
|
10
|
+
from.each do |flag, value|
|
11
|
+
case flag
|
12
|
+
when "ignore"
|
13
|
+
to.push("--ignore=#{value}")
|
14
|
+
when "word-regexp"
|
15
|
+
to.push("-w")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
return to.join(" ")
|
19
|
+
end
|
6
20
|
end
|
@@ -4,10 +4,7 @@ clas = Zoom::ProfileManager.default_profile.capitalize
|
|
4
4
|
superclass = Zoom::Profile.profile_by_name("Zoom::Profile::#{clas}")
|
5
5
|
class Zoom::Profile::UnsafeC < superclass
|
6
6
|
def initialize(n, o = nil, f = "", b = "", a = "")
|
7
|
-
# I don't care about test code
|
8
|
-
after = "| \\grep -v \"^[^:]*test[^:]*:[0-9]+:\""
|
9
7
|
flags = ""
|
10
|
-
|
11
8
|
op = Zoom::ProfileManager.default_profile
|
12
9
|
case op
|
13
10
|
when /^ack(-grep)?$/
|
@@ -20,7 +17,7 @@ class Zoom::Profile::UnsafeC < superclass
|
|
20
17
|
flags = "-i --include=\"*.[ch]\" --include=\"*.[ch]pp\""
|
21
18
|
end
|
22
19
|
|
23
|
-
super(n, op, flags
|
20
|
+
super(n, op, flags)
|
24
21
|
@pattern = [
|
25
22
|
"(",
|
26
23
|
[
|
@@ -4,10 +4,7 @@ clas = Zoom::ProfileManager.default_profile.capitalize
|
|
4
4
|
superclass = Zoom::Profile.profile_by_name("Zoom::Profile::#{clas}")
|
5
5
|
class Zoom::Profile::UnsafeJava < superclass
|
6
6
|
def initialize(n, o = nil, f = "", b = "", a = "")
|
7
|
-
# I don't care about test code
|
8
|
-
after = "| \\grep -v \"^[^:]*test[^:]*:[0-9]+:\""
|
9
7
|
flags = ""
|
10
|
-
|
11
8
|
op = Zoom::ProfileManager.default_profile
|
12
9
|
case op
|
13
10
|
when /^ack(-grep)?$/
|
@@ -24,8 +21,8 @@ class Zoom::Profile::UnsafeJava < superclass
|
|
24
21
|
].join(" ")
|
25
22
|
end
|
26
23
|
|
27
|
-
super(n, op, flags
|
28
|
-
@pattern = "(sun\\.misc\\.)?Unsafe|readObject\\(
|
24
|
+
super(n, op, flags)
|
25
|
+
@pattern = "(sun\\.misc\\.)?Unsafe|readObject\\("
|
29
26
|
@taggable = true
|
30
27
|
end
|
31
28
|
end
|
@@ -4,10 +4,7 @@ clas = Zoom::ProfileManager.default_profile.capitalize
|
|
4
4
|
superclass = Zoom::Profile.profile_by_name("Zoom::Profile::#{clas}")
|
5
5
|
class Zoom::Profile::UnsafeJs < superclass
|
6
6
|
def initialize(n, o = nil, f = "", b = "", a = "")
|
7
|
-
# I don't care about test code
|
8
|
-
after = "| \\grep -v \"^[^:]*test[^:]*:[0-9]+:\""
|
9
7
|
flags = ""
|
10
|
-
|
11
8
|
op = Zoom::ProfileManager.default_profile
|
12
9
|
case op
|
13
10
|
when /^ack(-grep)?$/
|
@@ -20,8 +17,8 @@ class Zoom::Profile::UnsafeJs < superclass
|
|
20
17
|
flags = "-i --include=\"*.js\""
|
21
18
|
end
|
22
19
|
|
23
|
-
super(n, op, flags
|
24
|
-
@pattern = "\\.((eval|html)\\(|innerHTML)"
|
20
|
+
super(n, op, flags)
|
21
|
+
@pattern = "\\.((append|eval|html)\\(|innerHTML)"
|
25
22
|
@taggable = true
|
26
23
|
end
|
27
24
|
end
|
@@ -4,10 +4,7 @@ clas = Zoom::ProfileManager.default_profile.capitalize
|
|
4
4
|
superclass = Zoom::Profile.profile_by_name("Zoom::Profile::#{clas}")
|
5
5
|
class Zoom::Profile::UnsafePhp < superclass
|
6
6
|
def initialize(n, o = nil, f = "", b = "", a = "")
|
7
|
-
# I don't care about test code
|
8
|
-
after = "| \\grep -v \"^[^:]*test[^:]*:[0-9]+:\""
|
9
7
|
flags = ""
|
10
|
-
|
11
8
|
op = Zoom::ProfileManager.default_profile
|
12
9
|
case op
|
13
10
|
when /^ack(-grep)?$/
|
@@ -25,12 +22,13 @@ class Zoom::Profile::UnsafePhp < superclass
|
|
25
22
|
].join(" ")
|
26
23
|
end
|
27
24
|
|
28
|
-
super(n, op, flags
|
25
|
+
super(n, op, flags)
|
29
26
|
# From here: https://www.eukhost.com/blog/webhosting/dangerous-php-functions-must-be-disabled/
|
30
27
|
# OMG is anything safe?!
|
31
28
|
@pattern = [
|
32
29
|
"\\`|",
|
33
30
|
"\\$_GET\\[|",
|
31
|
+
"(include|require)(_once)?|",
|
34
32
|
"(",
|
35
33
|
[
|
36
34
|
"apache_(child_terminate|setenv)",
|
@@ -42,7 +40,6 @@ class Zoom::Profile::UnsafePhp < superclass
|
|
42
40
|
"fp(ut)?",
|
43
41
|
"ftp_(connect|exec|get|login|(nb_f)?put|raw(list)?)",
|
44
42
|
"highlight_file",
|
45
|
-
"include(_once)?",
|
46
43
|
"ini_(alter|get_all|restore)",
|
47
44
|
"inject_code",
|
48
45
|
"mysql_pconnect",
|
@@ -52,10 +49,9 @@ class Zoom::Profile::UnsafePhp < superclass
|
|
52
49
|
"php_uname",
|
53
50
|
"phpAds_(remoteInfo|XmlRpc|xmlrpc(De|En)code)",
|
54
51
|
"popen",
|
55
|
-
"posix_(getpwuid|kill|mkfifo|set(pg|s|u)id|
|
52
|
+
"posix_(getpwuid|kill|mkfifo|set(pg|s|u)id|uname)",
|
56
53
|
"preg_replace",
|
57
54
|
"proc_(close|get_status|nice|open|terminate)",
|
58
|
-
"require(_once)?",
|
59
55
|
"(shell_)?exec",
|
60
56
|
"sys(log|tem)",
|
61
57
|
"xmlrpc_entity_decode"
|
@@ -4,10 +4,7 @@ clas = Zoom::ProfileManager.default_profile.capitalize
|
|
4
4
|
superclass = Zoom::Profile.profile_by_name("Zoom::Profile::#{clas}")
|
5
5
|
class Zoom::Profile::UnsafePython < superclass
|
6
6
|
def initialize(n, o = nil, f = "", b = "", a = "")
|
7
|
-
# I don't care about test code
|
8
|
-
after = "| \\grep -v \"^[^:]*test[^:]*:[0-9]+:\""
|
9
7
|
flags = ""
|
10
|
-
|
11
8
|
op = Zoom::ProfileManager.default_profile
|
12
9
|
case op
|
13
10
|
when /^ack(-grep)?$/
|
@@ -20,7 +17,7 @@ class Zoom::Profile::UnsafePython < superclass
|
|
20
17
|
flags = "-i --include=\"*.py\""
|
21
18
|
end
|
22
19
|
|
23
|
-
super(n, op, flags
|
20
|
+
super(n, op, flags)
|
24
21
|
@pattern = [
|
25
22
|
"(",
|
26
23
|
[
|