capistrano task autocompletion for bash
Remembering all those capistrano tasks can be tough for the sleep-impaired startup employee.... Help yourself out with this autocomplete script:
RUBY:
-
#!/usr/bin/env ruby
-
-
# Save this somewhere, chmod 755 it, then add
-
# complete -C path/to/this/script -o default cap
-
# to your ~/.bashrc
-
#
-
# If you update your tasks, just $ rm ~/.captabs*
-
#
-
-
exit 0 unless /^cap\b/ =~ ENV["COMP_LINE"]
-
-
def cap_silent_tasks
-
if File.exists?(dotcache = File.join(File.expand_path('~'), ".captabs-#{Dir.pwd.hash}"))
-
File.read(dotcache)
-
else
-
tasks = `cap -qT`
-
tasks = tasks.select{|task| task =~ /^cap/ }.join
-
File.open(dotcache, 'w') { |f| f.puts tasks }
-
tasks
-
end
-
end
-
-
after_match = $'
-
task_match = (after_match.empty? || after_match =~ /\s$/) ? nil : after_match.split.last
-
tasks = cap_silent_tasks.split("\n")[1..-1].map { |line| line.split[1] }
-
tasks = tasks.select { |t| /^#{Regexp.escape task_match}/ =~ t } if task_match
-
-
# handle namespaces
-
if task_match =~ /^([-\w:]+:)/
-
upto_last_colon = $1
-
after_match = $'
-
tasks = tasks.map { |t| (t =~ /^#{Regexp.escape upto_last_colon}([-\w:]+)$/) ? "#{$1}" : t }
-
end
-
-
puts tasks
-
exit 0

Can you give us an example of what this Ruby script does?
Unix already supports tab completions...
What is an "auto completion", per se'?
Happy programming!
March 12th, 2008 at 2:29 am
Hi Luke. Congrats on the launch of weplay. Wow, the site rocks way harder than Exile on Mainstreet!!! I think you are really onto something big. Congrats on your new endeavor, and get some sleep.
March 26th, 2008 at 11:21 am