1+ #Использовать annotations
2+
13&ЛогOVM
24Перем Лог ;
35
6+ &Пластилин
7+ Перем Поделка ;
8+
49&Опция (Имя = "shell s" , Описание = "Тип оболочки для генерации автодополнения (поддерживается: bash)" )
510&ТСтрока
611&ПоУмолчанию ("bash" )
2429
2530Функция СкриптАвтодополненияBash ()
2631
32+ СписокКоманд = ПолучитьСписокКоманд();
33+
34+ МассивИменВсехКоманд = Новый Массив();
35+ СтрокиCase = Новый Массив();
36+
37+ Для Каждого ОписаниеКоманды Из СписокКоманд Цикл
38+ Для Каждого ИмяКоманды Из ОписаниеКоманды.Имена Цикл
39+ МассивИменВсехКоманд.Добавить(ИмяКоманды);
40+ КонецЦикла ;
41+
42+ ПаттернCase = СтрСоединить (ОписаниеКоманды.Имена, "|" );
43+ СтрокаОпций = СтрСоединить (ОписаниеКоманды.Опции, " " );
44+
45+ СтрокиCase.Добавить(" " + ПаттернCase + ")" );
46+ СтрокиCase.Добавить(" COMPREPLY=($(compgen -W "" " + СтрокаОпций + """ -- "" $cur"" ))" );
47+ СтрокиCase.Добавить(" ;;" );
48+ КонецЦикла ;
49+
50+ ВсеКоманды = СтрСоединить (МассивИменВсехКоманд, " " );
51+ ТелоCase = СтрСоединить (СтрокиCase, Символы.ПС);
52+
2753 Скрипт =
2854"# ovm bash completions
2955# Добавьте строку ниже в ~/.bashrc для активации автодополнения:
@@ -39,7 +65,7 @@ _ovm_completions() {
3965 cword=$COMP_CWORD
4066 }
4167
42- local commands="" install i list ls use u which w config run r uninstall delete d completions ""
68+ local commands="" " + ВсеКоманды + " ""
4369
4470 if [ $cword -eq 1 ]; then
4571 COMPREPLY=($(compgen -W "" $commands"" -- "" $cur"" ))
@@ -49,34 +75,7 @@ _ovm_completions() {
4975 local command="" ${words[1]}""
5076
5177 case "" $command"" in
52- install|i)
53- COMPREPLY=($(compgen -W "" --name --clean --x86 --fdd --help"" -- "" $cur"" ))
54- ;;
55- list|ls)
56- COMPREPLY=($(compgen -W "" --remote --all --quiet --help"" -- "" $cur"" ))
57- ;;
58- use|u)
59- COMPREPLY=($(compgen -W "" --install --help"" -- "" $cur"" ))
60- ;;
61- which|w)
62- COMPREPLY=($(compgen -W "" --help"" -- "" $cur"" ))
63- ;;
64- run|r)
65- COMPREPLY=($(compgen -W "" --help"" -- "" $cur"" ))
66- ;;
67- config)
68- COMPREPLY=($(compgen -W "" --help"" -- "" $cur"" ))
69- ;;
70- uninstall|delete|d)
71- COMPREPLY=($(compgen -W "" --force --all --help"" -- "" $cur"" ))
72- ;;
73- completions)
74- if [ "" $prev"" = "" --shell"" ] || [ "" $prev"" = "" -s"" ]; then
75- COMPREPLY=($(compgen -W "" bash"" -- "" $cur"" ))
76- else
77- COMPREPLY=($(compgen -W "" --shell --help"" -- "" $cur"" ))
78- fi
79- ;;
78+ " + ТелоCase + "
8079 *)
8180 ;;
8281 esac
@@ -89,3 +88,68 @@ complete -F _ovm_completions ovm";
8988 Возврат Скрипт;
9089
9190КонецФункции
91+
92+ Функция ПолучитьСписокКоманд ()
93+
94+ ОпределенияКоманд = Поделка.ПолучитьОпределенияЖелудей("КомандаПриложения" );
95+
96+ Результат = Новый Массив();
97+
98+ Для Каждого КлючЗначение Из ОпределенияКоманд Цикл
99+ ОпределениеЖелудя = КлючЗначение.Значение;
100+ Конструктор = ОпределениеЖелудя.Завязь().ДанныеМетода();
101+
102+ АннотацияПодкоманды = РаботаСАннотациями.НайтиАннотацию(Конструктор.Аннотации, "ПодкомандаПриложения" );
103+ Если АннотацияПодкоманды <> Неопределено Тогда
104+ Продолжить ;
105+ КонецЕсли ;
106+
107+ АннотацияКоманды = РаботаСАннотациями.НайтиАннотацию(Конструктор.Аннотации, "КомандаПриложения" );
108+ Если АннотацияКоманды = Неопределено Тогда
109+ Продолжить ;
110+ КонецЕсли ;
111+
112+ ИмяКоманды = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияКоманды, "Имя" );
113+ Если НЕ ЗначениеЗаполнено (ИмяКоманды) Тогда
114+ Продолжить ;
115+ КонецЕсли ;
116+
117+ ЧастиИмени = СтрРазделить (ИмяКоманды, " " );
118+ Опции = ПолучитьОпцииКоманды(ОпределениеЖелудя);
119+
120+ ОписаниеКоманды = Новый Структура("Имена, Опции" );
121+ ОписаниеКоманды.Имена = ЧастиИмени;
122+ ОписаниеКоманды.Опции = Опции;
123+
124+ Результат.Добавить(ОписаниеКоманды);
125+ КонецЦикла ;
126+
127+ Возврат Результат;
128+
129+ КонецФункции
130+
131+ Функция ПолучитьОпцииКоманды (ОпределениеЖелудя )
132+
133+ Опции = Новый Массив();
134+ Опции.Добавить("--help" );
135+
136+ Свойства = ОпределениеЖелудя.Свойства();
137+ Для Каждого Свойство Из Свойства Цикл
138+ АннотацияОпции = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Опция" );
139+ Если АннотацияОпции = Неопределено Тогда
140+ Продолжить ;
141+ КонецЕсли ;
142+
143+ ИмяОпции = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияОпции, "Имя" );
144+ Для Каждого ЧастьОпции Из СтрРазделить (ИмяОпции, " " ) Цикл
145+ Если СтрДлина (ЧастьОпции) = 1 Тогда
146+ Опции.Добавить("-" + ЧастьОпции);
147+ Иначе
148+ Опции.Добавить("--" + ЧастьОпции);
149+ КонецЕсли ;
150+ КонецЦикла ;
151+ КонецЦикла ;
152+
153+ Возврат Опции;
154+
155+ КонецФункции
0 commit comments