Skip to content

Commit cd4e354

Browse files
nixel2007Copilot
andcommitted
Smart completions for 'ovm use' and 'ovm install' version aliases
- Adds dynamic suggestions for positional version arguments: - 'ovm use <TAB>' → installed versions via 'ovm ls -q' - 'ovm install <TAB>' → available remote versions via 'ovm ls -r' (first column extracted with awk to strip the URL part) - Option completions (starting with '-') still work as before: when the current token starts with a dash, only options are offered. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 5a53682 commit cd4e354

1 file changed

Lines changed: 30 additions & 5 deletions

File tree

src/cmd/Классы/КомандаCompletions.os

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,17 @@
7474
СтрокаОпций = СтрСоединить(ОписаниеКоманды.Опции, " ");
7575

7676
СтрокиCase.Добавить(" " + ПаттернCase + ")");
77-
СтрокиCase.Добавить(" COMPREPLY=($(compgen -W """ + СтрокаОпций + """ -- ""$cur""))");
77+
Если ЗначениеЗаполнено(ОписаниеКоманды.КомандаВерсий) Тогда
78+
СтрокиCase.Добавить(" if [[ ""$cur"" == -* ]]; then");
79+
СтрокиCase.Добавить(" COMPREPLY=($(compgen -W """ + СтрокаОпций + """ -- ""$cur""))");
80+
СтрокиCase.Добавить(" else");
81+
СтрокиCase.Добавить(" local versions");
82+
СтрокиCase.Добавить(" versions=$(ovm " + ОписаниеКоманды.КомандаВерсий + " 2>/dev/null | awk '{print $1}')");
83+
СтрокиCase.Добавить(" COMPREPLY=($(compgen -W ""$versions"" -- ""$cur""))");
84+
СтрокиCase.Добавить(" fi");
85+
Иначе
86+
СтрокиCase.Добавить(" COMPREPLY=($(compgen -W """ + СтрокаОпций + """ -- ""$cur""))");
87+
КонецЕсли;
7888
СтрокиCase.Добавить(" ;;");
7989
КонецЕсли;
8090
КонецЦикла;
@@ -131,10 +141,11 @@
131141
Для Каждого Команда Из КорневаяКоманда.ПолучитьПодкоманды() Цикл
132142
Команда.НачалоЗапуска();
133143

134-
ОписаниеКоманды = Новый Структура("Имена, Опции, Подкоманды");
135-
ОписаниеКоманды.Имена = Команда.ПолучитьСинонимы();
136-
ОписаниеКоманды.Опции = ПолучитьОпцииКоманды(Команда);
137-
ОписаниеКоманды.Подкоманды = ПолучитьПодкомандыКоманды(Команда);
144+
ОписаниеКоманды = Новый Структура("Имена, Опции, Подкоманды, КомандаВерсий");
145+
ОписаниеКоманды.Имена = Команда.ПолучитьСинонимы();
146+
ОписаниеКоманды.Опции = ПолучитьОпцииКоманды(Команда);
147+
ОписаниеКоманды.Подкоманды = ПолучитьПодкомандыКоманды(Команда);
148+
ОписаниеКоманды.КомандаВерсий = КомандаПолученияВерсий(ОписаниеКоманды.Имена);
138149

139150
Результат.Добавить(ОписаниеКоманды);
140151
КонецЦикла;
@@ -161,6 +172,20 @@
161172

162173
КонецФункции
163174

175+
Функция КомандаПолученияВерсий(ИменаКоманды)
176+
177+
Для Каждого Имя Из ИменаКоманды Цикл
178+
Если Имя = "use" Тогда
179+
Возврат "ls -q";
180+
ИначеЕсли Имя = "install" Тогда
181+
Возврат "ls -r";
182+
КонецЕсли;
183+
КонецЦикла;
184+
185+
Возврат "";
186+
187+
КонецФункции
188+
164189
Функция ПолучитьОпцииКоманды(Команда)
165190

166191
Опции = Новый Массив();

0 commit comments

Comments
 (0)