Что: 6ea149598ae74304104b558b8e0024acf2c3b01a Когда: 2022-02-13 20:36:54+03:00 ------------------------------------------------------------------------ Темы: zsh ------------------------------------------------------------------------ Снова играюсь с изменением PS1 http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=9e0a9b2f9d90cf0846f4719b03bde806c301543c http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=356830a520698605c70154fa2750189b0273566b http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=6a00c557dd831561223801b4ed93b9ac48d61d89 Решил что надо бы показывать нахожусь ли я сейчас в Python virtualenv, нахожусь ли во включённом autoenv. Плюс показывать нахожусь ли в git-е. Для последнего решил использовать родной zsh функционал для работы с VCS. Посмотрел на код -- идёт вызов git rev-parse, но хотя бы никаких "git status" тяжёлых не вызывается при всём этом (что тормозило). Показываю только 8 символов от хэша коммита, плюс особый режим типа того что мы сейчас находимся в "rebase". Для отображения virtualenv/autoenv показываю однобуквенные флаги, которые храню в уже имеющимся PSVAR массиве. Прежде у меня PS1 каждый раз, при каждой инициализации строки приглашения или смене vi-режима, создавалась с нуля, проверяя что и как надо выводить, динамически её изменяя. Теперь использую родные возможности %(X.Y.Z) if/then/else условий и PROMPT_SUBST, который предварительно делает раскрытие переменных. PS1 устанавливается только один раз при запуске, а дальше динамически меняются только _VIMODE и PSVAR переменные, плюс vcs_info сообщение. Прежде использовал отдельную переменную $timer для учёта времени выполнения команды, а в качестве текущего времени $SECONDS. Сегодня понял что можно же только $SECONDS использовать, обнуляя её перед каждой командой. Документация говорит что это особая изменяемая переменная -- наверное как раз намёк на то, чтобы её и использовать в этом контексте. Почти всё показывается только опционально. Минимально строка приглашения показывает только: путь до текущей директории (два последних элемента) и vi-режим. Максиально строка может показывать (разделяя элементы разными цветами и стилями): путь, "V" флаг virtualenv, "A" флаг autoenv, кол-во фоновых задач, режим git-а (rebase, amend, и т.д.), часть хэша git-а, не успешный код возврата команды, время выполнения команды (если больше секунды), vi-режим. Насчёт информации о Git-е я не уверен в её пользе, буду смотреть. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20%D0%A1%D0%BD%D0%BE%D0%B2%D0%B0%20%D0%B8%D0%B3%D1%80%D0%B0%D1%8E%D1%81%D1%8C%20%D1%81%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20PS1%20%286ea149598ae74304104b558b8e0024acf2c3b01a%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0