diff --git a/tools/cmd/hyperlinked_grep/main.go b/tools/cmd/hyperlinked_grep/main.go index d57a6a856..4c77c3984 100644 --- a/tools/cmd/hyperlinked_grep/main.go +++ b/tools/cmd/hyperlinked_grep/main.go @@ -235,19 +235,26 @@ func parse_args(args ...string) (delegate_to_rg bool, sanitized_args []string, k } } } else if strings.HasPrefix(x, "-") { - sanitized_args = append(sanitized_args, x) - for _, ch := range x[1 : len(x)-1] { - target := alias_map[string(ch)] - if target != "" { - handle_bool_option(target) + ok := true + chars := make([]string, len(x)-1) + for i, ch := range x[1:] { + chars[i] = string(ch) + _, ok = alias_map[string(ch)] + if !ok { + break } } - target := alias_map[string(rune(x[len(x)-1]))] - if target != "" { + if !ok { + sanitized_args = append(sanitized_args, x) + continue + } + for _, ch := range chars { + target := alias_map[ch] if options_that_expect_args[target] { expecting_option_arg = target } else { handle_bool_option(target) + sanitized_args = append(sanitized_args, "-"+ch) } } } else { diff --git a/tools/cmd/hyperlinked_grep/main_test.go b/tools/cmd/hyperlinked_grep/main_test.go index a6d8413c7..ba6e3ccb4 100644 --- a/tools/cmd/hyperlinked_grep/main_test.go +++ b/tools/cmd/hyperlinked_grep/main_test.go @@ -86,5 +86,8 @@ func TestRgArgParsing(t *testing.T) { } check_args("--count --max-depth 10 --XxX yyy abcd", "--count --max-depth 10 --XxX yyy abcd") check_args("--max-depth=10 --kitten hyperlink=none abcd", "--max-depth=10 abcd") + check_args("-m 10 abcd", "--max-count 10 abcd") + check_args("-nm 10 abcd", "-n --max-count 10 abcd") + check_args("-mn 10 abcd", "-n --max-count 10 abcd") }