-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* lib/optparse.rb: shell completion support for bash.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- Loading branch information
Showing
4 changed files
with
127 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#! /bin/bash | ||
# Completion for bash: | ||
# | ||
# (1) install this file, | ||
# | ||
# (2) load the script, and | ||
# . ~/.profile.d/rb_optparse.bash | ||
# | ||
# (3) define completions in your .bashrc, | ||
# rb_optparse command_using_optparse_1 | ||
# rb_optparse command_using_optparse_2 | ||
|
||
_rb_optparse() { | ||
COMPREPLY=($("${COMP_WORDS[0]}" --help=complete="${COMP_WORDS[COMP_CWORD]}")) | ||
return 0 | ||
} | ||
|
||
rb_optparse () { | ||
[ $# = 0 ] || complete -o default -F _rb_optparse "$@" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
require 'test/unit' | ||
require 'optparse' | ||
|
||
class TestOptionParser < Test::Unit::TestCase | ||
end | ||
class TestOptionParser::BashCompletion < Test::Unit::TestCase | ||
def setup | ||
@opt = OptionParser.new | ||
@opt.define("-z", "zzz") {} | ||
@opt.define("--foo") {} | ||
@opt.define("--bar=BAR") {} | ||
@opt.define("--for=TYPE", [:hello, :help, :zot]) {} | ||
end | ||
|
||
def test_empty | ||
assert_equal([], @opt.candidate("")) | ||
end | ||
|
||
def test_one_hyphen | ||
assert_equal(%w[-z --foo --bar= --for=], @opt.candidate("-")) | ||
end | ||
|
||
def test_two_hyphen | ||
assert_equal(%w[--foo --bar= --for=], @opt.candidate("--")) | ||
end | ||
|
||
def test_long_f | ||
assert_equal(%w[--foo --for=], @opt.candidate("--f")) | ||
end | ||
|
||
def test_long_for_option | ||
assert_equal(%w[--for=], @opt.candidate("--for")) | ||
end | ||
|
||
def test_long_for_option_args | ||
assert_equal(%w[hello help zot], @opt.candidate("--for=")) | ||
end | ||
|
||
def test_long_for_option_complete | ||
assert_equal(%w[hello help], @opt.candidate("--for=h")) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters