Skip to content

Commit 5fe9c29

Browse files
Copilotnixel2007
andauthored
add completions command with bash support
Agent-Logs-Url: https://github.com/oscript-library/ovm/sessions/a756b324-c974-4864-b444-6e841a0c276e Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
1 parent 4c8d305 commit 5fe9c29

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

features/completions.feature

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#language: ru
2+
3+
Функциональность: Генерация скрипта автодополнения
4+
5+
Как пользователь ovm
6+
Я хочу получить скрипт автодополнения для моей оболочки
7+
Чтобы удобно использовать ovm в терминале
8+
9+
Контекст:
10+
Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm"
11+
12+
Сценарий: Генерация completions для bash
13+
Когда Я выполняю команду "oscript ./src/cmd/ovm.os completions --shell bash"
14+
Тогда я вижу в консоли вывод "_ovm_completions"
15+
И я вижу в консоли вывод "complete -F _ovm_completions ovm"
16+
17+
Сценарий: Генерация completions для bash с коротким флагом
18+
Когда Я выполняю команду "oscript ./src/cmd/ovm.os completions -s bash"
19+
Тогда я вижу в консоли вывод "_ovm_completions"
20+
И я вижу в консоли вывод "complete -F _ovm_completions ovm"
21+
22+
Сценарий: Ошибка при указании неподдерживаемой оболочки
23+
Когда Я выполняю команду "oscript ./src/cmd/ovm.os completions --shell zsh"
24+
Тогда я вижу в консоли вывод "не поддерживается"
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
&ЛогOVM
2+
Перем Лог;
3+
4+
&Опция(Имя = "shell s", Описание = "Тип оболочки для генерации completions (поддерживается: bash)")
5+
&ТСтрока
6+
&ПоУмолчанию("bash")
7+
&ВОкружении("OVM_COMPLETIONS_SHELL")
8+
Перем ТипОболочки;
9+
10+
&КомандаПриложения(Имя = "completions", Описание = "Вывести скрипт автодополнения команд для выбранной оболочки")
11+
Процедура ПриСозданииОбъекта()
12+
КонецПроцедуры
13+
14+
&ВыполнениеКоманды
15+
Процедура ВыполнениеКоманды() Экспорт
16+
17+
Если НРег(ТипОболочки) = "bash" Тогда
18+
Лог.Информация(СкриптCompletionsBash());
19+
Иначе
20+
ВызватьИсключение СтрШаблон("Оболочка ""%1"" не поддерживается. Поддерживаемые оболочки: bash", ТипОболочки);
21+
КонецЕсли;
22+
23+
КонецПроцедуры
24+
25+
Функция СкриптCompletionsBash()
26+
27+
Скрипт =
28+
"# ovm bash completions
29+
# Добавьте строку ниже в ~/.bashrc для активации автодополнения:
30+
# source <(ovm completions --shell bash)
31+
32+
_ovm_completions() {
33+
local cur prev words cword
34+
_init_completion 2>/dev/null || {
35+
COMPREPLY=()
36+
cur=""${COMP_WORDS[COMP_CWORD]}""
37+
prev=""${COMP_WORDS[COMP_CWORD-1]}""
38+
words=(""${COMP_WORDS[@]}"")
39+
cword=$COMP_CWORD
40+
}
41+
42+
local commands=""install i list ls use u which w config run r uninstall delete d completions""
43+
44+
if [ $cword -eq 1 ]; then
45+
COMPREPLY=($(compgen -W ""$commands"" -- ""$cur""))
46+
return 0
47+
fi
48+
49+
local command=""${words[1]}""
50+
51+
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+
;;
80+
*)
81+
;;
82+
esac
83+
84+
return 0
85+
}
86+
87+
complete -F _ovm_completions ovm";
88+
89+
Возврат Скрипт;
90+
91+
КонецФункции

0 commit comments

Comments
 (0)