dsc | 14 +++++++++----- t/reorder.t | 18 ++++++++++++++++++ diff --git a/dsc b/dsc index 5ff2c22117bd02517065a9f82ac428e0bfbd9d4dbab3f041218ac02ae112a90c..69abd63041fe2451ca04f4db1966c94ba98c3c295aa4ebd99446e1aa948b0b74 100755 --- a/dsc +++ b/dsc @@ -20,7 +20,8 @@ puts -nonewline stderr {Usage: dsc list [-v] [prefix] -- list all available options dsc add opt -- add /*/ section dsc del opt -- delete /*/ section - dsc reorder opt p -- change order of option to "p" in /*/ section + dsc reorder opt p -- set opt's position in list to "p" + dsc reorder opt [+-]p -- increment/decrement opt's position in list dsc del "" -- delete the whole configuration, useful for import dsc has opt -- check if specified /*/ option exists dsc set opt value -- set option's value @@ -253,14 +254,17 @@ list-opt-reorder $dir $l puts $dir/$tail } reorder { - set p 0 - if {[llength $argv] > 1} { - set p $(+[lindex $argv 1]) - } set dir [file dirname $arg] set l [list-opt-ordered $dir] set arg [file tail $arg] set i [lsearch $l $arg] + set p 0 + if {[llength $argv] > 1} { + set p [lindex $argv 1] + if {[string match {[-+]*} $p]} { + eval "set p \$(\$i $p)" + } + } set l [lreplace $l $i $i] set l [linsert $l $p $arg] list-opt-reorder $dir $l diff --git a/t/reorder.t b/t/reorder.t index 34525061fbcbe35cdf54bd3dfc6970eb3170b621aebcc8ba1411203d66c0360b..fcc9824f8678f37b4f8bde72130050b82672a8c882c3542f71d77fae4817509b 100755 --- a/t/reorder.t +++ b/t/reorder.t @@ -62,4 +62,22 @@ EOF test_expect_success "get" "dsc get net/* >out" test_expect_success "cmp" "test_cmp out expected" +test_expect_success "3 -> -2" "dsc reorder net/3rd -2" +cat >expected <out" +test_expect_success "cmp" "test_cmp out expected" + +test_expect_success "2 -> +2" "dsc reorder net/2nd +2" +cat >expected <out" +test_expect_success "cmp" "test_cmp out expected" + test_done