11 |
11 |
#
|
12 |
12 |
# Examples:
|
13 |
13 |
#
|
14 |
|
# subtle wm - Change to browser view and search for 'subtle wm' via Google
|
15 |
|
# urxvt @editor - Open urxvt on view @editor with random tag
|
16 |
|
# urxvt @editor #work - Open urxvt on view @editor with tag #work
|
17 |
|
# urxvt #work - Open urxvt and tag with tag #work
|
18 |
|
# +urxvt - Open urxvt and set full mode
|
19 |
|
# ^urxvt - Open urxvt and set floating mode
|
20 |
|
# *urxvt - Open urxvt and set sticky mode
|
21 |
|
# urx<Tab> - Open urxvt (tab completion)
|
|
14 |
# g subtle wm - Change to browser view and search for 'subtle wm' via Google
|
|
15 |
# urxvt @editor - Open urxvt on view @editor with random tag
|
|
16 |
# urxvt @editor #work - Open urxvt on view @editor with tag #work
|
|
17 |
# urxvt #work - Open urxvt and tag with tag #work
|
|
18 |
# nautilus --no-desktop - Open nautilus without the desktop
|
|
19 |
# +urxvt - Open urxvt and set full mode
|
|
20 |
# ^urxvt - Open urxvt and set floating mode
|
|
21 |
# *urxvt - Open urxvt and set sticky mode
|
|
22 |
# urx<Tab> - Open urxvt (tab completion)
|
22 |
23 |
#
|
23 |
24 |
# http://subforge.org/wiki/subtle-contrib/Wiki#Launcher
|
24 |
25 |
#
|
... | ... | |
35 |
36 |
|
36 |
37 |
# Check for subtlext version
|
37 |
38 |
major, minor, teeny = Subtlext::VERSION.split(".").map(&:to_i)
|
38 |
|
if(2470 > teeny)
|
|
39 |
if(major == 0 and minor == 9 and 2470 > teeny)
|
39 |
40 |
puts ">>> ERROR: %s needs at least subtle `0.9.2470' (found: %s)" % [
|
40 |
41 |
$0, Subtlext::VERSION
|
41 |
42 |
]
|
... | ... | |
53 |
54 |
module Subtle # {{{
|
54 |
55 |
module Contrib # {{{
|
55 |
56 |
# Precompile regexps
|
56 |
|
RE_COMMAND = Regexp.new(/^([+\^\*]*[A-Za-z0-9_-]+)([ ][@#][A-Za-z0-9_-]+)*$/)
|
57 |
|
RE_MODES = Regexp.new(/^([+\^\*]*)([A-Za-z0-9_-]+)/)
|
|
57 |
RE_COMMAND = Regexp.new(/^([+\^\*]*[A-Za-z0-9_\-\/'"\s]+)(\s[@#][A-Za-z0-9_-]+)*$/)
|
|
58 |
RE_MODES = Regexp.new(/^([+\^\*]*)([A-Za-z0-9_\-\/'"\s]+)/)
|
|
59 |
RE_SEARCH = Regexp.new(/^[gs]\s.*/)
|
58 |
60 |
RE_URI = Regexp.new(/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix)
|
59 |
61 |
RE_CHROME = Regexp.new(/chrom[e|ium]|iron/i)
|
60 |
62 |
RE_FIREFOX = Regexp.new(/navigator/i)
|
... | ... | |
219 |
221 |
@candidate = URI.parse(string)
|
220 |
222 |
|
221 |
223 |
info("Goto %s" % [ @candidate.to_s ])
|
|
224 |
elsif(RE_SEARCH.match(string))
|
|
225 |
@candidate = URI.parse("http://www.google.com/#q=%s" % [
|
|
226 |
URI.escape(string.gsub(/^[gs]\s/, ''))
|
|
227 |
])
|
|
228 |
|
|
229 |
info("Goto %s" % [ @candidate.to_s ])
|
222 |
230 |
elsif(RE_COMMAND.match(string))
|
223 |
231 |
@candidate = string
|
224 |
232 |
@parsed_tags = []
|
... | ... | |
233 |
241 |
when "@" then @parsed_views << arg[1..-1]
|
234 |
242 |
when "+", "^", "*"
|
235 |
243 |
app, @parsed_modes, @parsed_app = RE_MODES.match(arg).to_a
|
236 |
|
else @parsed_app = arg
|
|
244 |
else
|
|
245 |
if @parsed_app.empty?
|
|
246 |
@parsed_app += arg
|
|
247 |
else
|
|
248 |
@parsed_app += " " + arg
|
|
249 |
end
|
237 |
250 |
end
|
238 |
251 |
end
|
239 |
252 |
|
... | ... | |
259 |
272 |
else
|
260 |
273 |
info("Launch %s%s" % [ modes2text(@parsed_modes), @parsed_app ])
|
261 |
274 |
end
|
262 |
|
else
|
263 |
|
@candidate = URI.parse("http://www.google.com/#q=%s" % [
|
264 |
|
URI.escape(string)
|
265 |
|
])
|
266 |
|
|
267 |
|
info("Goto %s" % [ @candidate.to_s ])
|
268 |
275 |
end
|
269 |
276 |
end # }}}
|
270 |
277 |
|
... | ... | |
499 |
506 |
Subtle::Contrib::Launcher.run
|
500 |
507 |
end
|
501 |
508 |
|
502 |
|
# vim:ts=2:bs=2:sw=2:et:fdm=marker
|
|
509 |
# vim:ts=2:bs=2:sw=2:et:fdm=marker
|