Маленькая open source утилита clink значительно расширяет возможности интерпретатора командной строки cme.exe, встроенного в операционную систему Windows. Хитрость в том, что clink использует известную библиотеку readline, которая создана и поддерживается в рамках проекта GNU и обеспечивает интерфейс командной строки и обработку строк в bash.
Таким образом, после установки clink интерпретатор cmd.exe начинает вести себя, словно командная оболочка bash — со всеми её продвинутыми функциями, автодополнением командной строки, редактированием, историей команд и так далее.
Для полного описания новых возможностей cmd.exe см. список функций и «горячих клавиш» readline. Вот некоторые из них:
- Удобное автодополнение путей (TAB)
- Вставка из буфера обмена (Ctrl-V)
- Поддержка автодополнения при указании исполняемых файлов/команд и переменных окружения
- Функции Undo/Redo (Ctrl-_ или Ctrl-X, Ctrl-U)
- Улучшенная история командной строки
- Сохранение предыдущих сессий
- Поиск по истории (Ctrl-R и Ctrl-S)
- Расширенная история (например, !!, !<string< и !$)
- Скрипты автодополнения на Lua
Утилита clink протестирована и успешно работает на Windows XP SP3 и выше.
В домашней директории clink находится ряд скриптов в качестве примеров, как можно использовать Lua. Вот один из них.
-- Globals; -- rl_line_buffer : The current command line. -- rl_point : Current location of the cursor. function example_match_generator(text, first, last) -- Arguments; -- text : The word being completed, as tokenised by Readline. -- first : The index into rl_line_buffer where 'text' starts. -- last : Index into rl_line_buffer where 'text' ends. -- Returns; -- true : No further generator functions should be called. -- false : Generator has done nothing. Try the next generator. -- In this simple example generate a match when the user types -- the following; my_maif not rl_line_buffer == "my_ma" then return false end clink.add_match("my_match") return true end -- clink.register_match_generator( , ) clink.register_match_generator(example_match_generator, 50)