[options] <обязательный_аргумент> [необязательные_аргументы]...
Пример:
comand -c utf8 file.txt x y
Сложноcть в том, что необязательные аргументы могут содержать тире, т.е. могут быть похожи на опции:
comand -c utf8 file.txt -z
Это ещё не проблема, если у самой command нет таких опций. Тогда помогает установка setting(AppSettings::AllowLeadingHyphen) и тире прокатывают как разрешённая часть аргумента.
Но если у command есть такая опция, то этот аргумент с тире воспринимается как опция самой command, игнорируя AllowLeadingHyphen.
Вопрос мой, видимо, сводится к следующему — как сказать clap-у, что всё, что идёт после <обязательный аргумент> — это никакие не опции и парсить их не надо?
В общем, если вдруг кому надо. Сделал так: 1. Убрал необязательный параметр, соответственно обязательный параметр стал последним. 2. Для App указал настройку setting(AppSettings::TrailingVarArg) — это приводит к тому, что все аргументы, которые не описаны и идут после последнего описанного, засовываются списком в последний описанный аргумент (и что важно — при этом они не парсятся, берутся как есть). 3. К сожалению это означает, что дальше уже вручную, без clap-а, нужно разбивать этот список на первый аргумент и все остальные. Ну да это не сложно.
ты можешь список скормить App::get_matches_from
мм... не понял. Создать второй App и пропустить через него список, полученный из первого, в котором был get_matches?
Кстати я такое делал через структопт по моему
Структопт это тот же клап, так что всё-равно непонятно, как сделать.
Обсуждают сегодня