Популярная оболочка Fish только что выпустила новую бета-версию — 4.0! Это большое изменение, потому что это первая версия после полной переработки. Изначально оболочка Fish была написана на C++, но теперь она написана на Rust. Это означает, что основной код оболочки был полностью изменён.
В этом первом бета-релизе Fish shell 4.0 много изменений, как больших, так и маленьких. Вот несколько основных моментов:
Разработчики Fish Shell выбрали Rust в качестве целевого языка для переписывания по нескольким ключевым причинам.
Rust — это язык системного программирования с широкой поддержкой платформ, большим и активным сообществом и хорошими шансами оставаться актуальным в будущем. Это было ключевым фактором, поскольку разработчики хотели обеспечить долгосрочную жизнеспособность проекта.
Разработчики также посчитали, что функции безопасности и надёжности Rust помогут предотвратить ошибки и сделают оболочку более стабильной. Это было особенно важно, поскольку оболочка используется для управления компьютером, и ошибки могут иметь серьёзные последствия.
Что ещё более важно, уникальная особенность Rust в плане потоковой безопасности позволяет решить проблему включения параллельного режима в Fish Shell. Это было давней целью разработчиков, но в C++ было трудно добиться безопасной реализации.
В конце концов разработчики рассмотрели другие языки, но в итоге решили, что Rust подходит лучше всего.
Они исключили такие языки, как Java, Python и другие скриптовые языки, из-за опасений по поводу задержки запуска и использования памяти.
Язык Go считался неподходящим из-за обработки системного вызова fork
.
Другие языки системного программирования, такие как D, Nim и Zig, считались слишком нишевыми, а это означало, что у них было меньше разработчиков и выше риск стать неактуальными в будущем.
Этот бета-выпуск (4.0b1) оболочки Fish включает в себя значительную переработку основного кода с C++ на Rust. Он предлагает ряд заметных улучшений и исправлений:
Во-первых, Fish теперь запрашивает кодировку клавиатуры modifyOtherKeys
XTerm и прогрессивные улучшения протокола клавиатуры Kitty, которые могут позволить привязывать больше комбинаций клавиш в зависимости от поддержки терминала.
Кроме того, bind
теперь поддерживает синтаксис, понятный человеку. Fish теперь можно создать в виде самоустанавливающегося двоичного файла.
Во-вторых, есть много улучшений для написания сценариев и интерактивного использования. Например, ctrl-c
при вводе команды просто очистит командную строку, а не выведет ^C
и новую подсказку.
Привязки теперь также могут сочетать специальные функции ввода и команды оболочки. Поиск в истории ctrl-r
теперь использует синтаксис glob и работает только с заменой строки или команды в позиции курсора, что упрощает комбинирование команд из истории. Сокращения теперь можно ограничить конкретными командами.
В-третьих, есть ряд улучшений в работе с текстом, в том числе то, что история отмены больше не обрезается после каждой команды, а ctrl-v
теперь удаляет управляющие символы ASCII из вставленного текста.
Также есть несколько новых или улучшенных сочетаний клавиш, в том числе alt-o
для открытия текущей команды в редакторе и shift-delete
для удаления текущего элемента поиска и перехода к следующему более старому элементу во время поиска по истории с помощью стрелки вверх.
Также был внесён ряд улучшений в автозаполнение, например, автозаполнение по вкладкам для конкретных команд теперь может предлагать результаты, первый символ которых — точка, а автозаполнение параметров теперь использует фильтрацию нечётких последовательностей.
Наконец, в этом выпуске улучшена поддержка терминалов, в том числе то, что Fish теперь помечает области ввода и вывода команд (с помощью OSC 133) для интеграции с терминалом и безоговорочно сообщает о рабочем каталоге (с помощью OSC 7).
Это лишь краткий обзор многочисленных изменений в этом выпуске. Более подробную информацию вы можете найти в примечаниях к выпуску на GitHub.
Этот бета-релиз — большой шаг вперёд для Fish. Интересно, что ждёт эту популярную оболочку в будущем! Если вы хотите попробовать, вы можете скачать её со страницы релизов Fish на GitHub.
Пожалуйста, обратите внимание, что это бета-версия, поэтому в ней могут быть ошибки. Если вы используете Fish для важной работы, лучше дождаться финальной версии.
Но если вам нравится пробовать что-то новое и помогать с тестированием, то вперёд, попробуйте! Вы можете сообщить о любых найденных вами проблемах на странице Fish на GitHub.