Маленькая 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_ma if 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)
