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



Оставить мнение