[О блоге] [наверх] [пред] [2022-02-13 20:36:54+03:00] [6ea149598ae74304104b558b8e0024acf2c3b01a]
Темы: [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-е я не уверен в её пользе,
буду смотреть.

    [оставить комментарий]