zsh (перевод)

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
StarMAUGLI
Сообщения: 1650
Зарегистрирован: 10 сен 2016, 10:16
Решено: 19
Откуда: Москва
Благодарил (а): 697 раз
Поблагодарили: 187 раз
Контактная информация:

zsh (перевод)

#21

19 авг 2018, 10:48

Предлагаю на расмотрение три (с половиной) варианта способа настройки приглашения в файле .zshrc
==========================
Вариант 1.1. Настройка через ключи (похоже на настройку в bash, но здесь без цветов). Музой послужила статья Алексея Федорчука (aka alv) http://www.alv.me/zsh/#02
==========================

Код: Выделить всё

# Приглашение для пользователей в виде стрелки
PROMPT='%B%n @%m [zsh]%~%b=>'

# Приглашение с правой стороны консоль, каталог, дата, время
RPROMPT='%B%y [zsh]%d %D %T%b'
Где
PROMPT - стандартное (левое) приглашение
RPROMPT - дополнительное (правое) "приглашение". Для использования не обязательно. По факту приглашением не является (в него нельзя ввести команду). Но RPROMPT может выводить дополнительную и/или справочную информацию в зависимости от ваших настроек.
Знак = назначает выбранные вами опции (обязателен)
Конструкция '...' - заключает в себе все то, что вы хотите отобразить в приглашении (обязательна. особенно при наличии пробелов и кириллических символов. дополнительного экранирования слешом не требует).

(Некоторые) необязательные параметры, которые могут быть использованы, как в левом, так и в правом приглашениях:
Конструкция %B ... %b - аналогична тегам <bold> ... </bold> в html, в которые заключается текст, который приобретает "полужирное" начертание. В повседневной работе такое выделение помогает, понять (если вы не используете цветные схемы) где вы в последний раз вводили команду и где ее предстоит вводить вновь (и соответственно откуда до куда читать (и/или копровать) последний "выхлоп консоли").
%n - возвращает имя текущего пользователя. Если вы по команде su перейдете в режим суперпользователя, то приглашение изменится на тот вид, который настроен в файле .zhsrc, но лежит в папке root. Поэтому рекомендуется настраивать оба файла. Если вы хотите, что бы у всех пользователей и суперпользователя оболочка была настроена одинаково, то вы можете скопировать данный файл во все домашние папки, пробросить ссылки или расположить файл по адресу ... (где он будет считываться всеми пользователями как файл по умолчанию.
@ - (перед ' @' у меня еще присутствует пробел) - произвольные текстовые символы. Пробел я добавил потому, что мне показалось, что имя пользователя и хостнейм сливаются и плохо читаются.
%m - возвращает хостнейм компьютера на котором вы сейчас работаете. (Если вы по ssh подключитесь к удаленному компьютеру, то хостнейм должен измениться с вашего, на хостнейм удаленного компьютера).
[zsh] - тоже произвольные текстовые символы. Рекомендуется вписывать в приглашение тем пользователям, которые активно показывают содержимое своей консоли в интернете (например на нашем форуме). Будь это неофит у которого ничего не получается -> эксперту, или, наоборот, эксперт -> дающий рекомендации новичку. Дабы, обеим сторонам было сразу понятно о каком шелле идет речь (ибо отличия в написании команды могут быть весьма существенными и могут сбить с толку кого угодно).
%~ - возвращает путь к текущему каталогу начиная от домашнего каталога /home/user
=> - произвольные символы, подсмотренные у Федорчука и подменяющие стандартные символы приглашений %( ! . # . $ ) (можно было вставить и их)
%y - возвращает номер консоли в которой сейчас работает пользователь
%d - возвращает путь к текущему каталогу относительно корневого каталога /
%D - возвращает текущую дату
%T - возвращает текущее время (время в этих часах показывает (фиксирует время), когда командная строка ОСВОБОДИЛАСЬ, и НЕ МЕНЯЕТСЯ ни когда вы набираете команду, ни когда вы ее посылаете на исполнение)
Еще можно использовать такие последовательности как
%M - Полное имя компьютера
%* - Время в формате HH:MM:SS
%U ... %u - Начало и конец подчеркивания
https://eax.me/zsh/
==========================
Вариант 1.2. Тоже настройка через ключи (тоже похоже на настройку в bash, но здесь с цветами, правда меньше допов, но их изучив Вар. 1 можно допилить по аналогии).
https://wiki.archlinux.org/index.php/Zs ... 0.BD.D0.B4
==========================
Пример
Это пример двустороннего промта:

Код: Выделить всё

PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg_no_bold[yellow]%}%1~ %{$reset_color%}%#"
RPROMPT="[%{$fg_no_bold[yellow]%}%?%{$reset_color%}]"
%1~ - означает вывести только один текущий каталог, по аналогии можно добавить %2 или %3 и т.д.
Доступные цвета - red green yellow blue magenta cyan black white
(вроде бы еще поддерживается и grey)
==========================
Вариант 2. Использование тем приглашений "из коробки". Потырено почти без купюр отсюда
https://www.altlinux.org/DotFiles/Shell ... 0.B8.D1.8F
==========================
Если вы хотите придумать оригинальное и удобное приглашение, то сначала я рекомендую вам взглянуть на уже существующие. Вдруг там вы найдете подходящую или решите позаимствовать из понравившийся нужный элемент. Выполните следующие команды:

Код: Выделить всё

$ autoload promptinit  # После перезагрузки, у меня показало все темы и без этой подготовки
$ promptinit  # И без этой тоже
$ prompt -l
Currently available prompt themes:
adam1 adam2 bart bigfade clint default elite2 elite fade fire off oliver pws redhat restore suse walters zefram
В результате вы увидите список из 18 тем.
(??)Попробовать понравившуюся можно командой promptinit название_темы(??)Чего-то "попробовать" этой командой у меня не особо получилось. ЧЯДНТ?(??)
Команда prompt -p выдает примеры всех установленных тем строки приглашения. (которые ею же можно, не отходя от кассы, и просмотреть).
Например,

Код: Выделить всё

$ prompt -p fade
После набора prompt -p можно было выбирать из тем клавишей Tab. Одновременно можно выбрать для просмотра несколько тем, записав их в команду через пробел. Если не выбирать ни какую тему, и запустить просто prompt -p , то zsh попытается показать вам все доступные темы, которые могут попросту не уместиться на мониторе и вы увидите только несколько последних. Некоторые из предустановленных тем допускают запуск с параметрами меняющими цветовую схему.
Самая спартанская тема под названием "off" в ней присутствует только один знак указывающий место перед курсором.
В теме "pws" относительно темы "off" в начале строки добавляется время.
Тема "oliver" ведет подсчет введенных пользователем команд.
Тему "default" мы видели сразу после установки zsh, что и подвигло разбираться в оформлении тем.
Самая навороченая по количеству цветов, пожалуй, тема "fire". Разработчики постарались выдавить максимум из палитры в 8 цветов.
Темы "redhat" и "suse" имитируют приглашение из известных одноименных дистрибутивов. Похожим на "redhat" оформлением приглашения командной строки встречал нас bash сразу после установки ArchLinux
Тема "restore" это ваша текущая тема.
Наиболее уравновешенными лично мне показались темы "fade" и "bigfade".
В файл .zshrc добавляется через конструкцию

Код: Выделить всё

autoload -U compinit promptinit
compinit
promptinit

# Эта настройка установит тему fade для приглашения командной строки
prompt fade white grey blue # синтаксис параметров надо проверить возможно параметры задаются чуть по другому
https://wiki.archlinux.org/index.php/Zs ... %B8%D0%B9)
==========================
Вариант 3. Настройка приглашения программированием. Способ подсмотрен здесь
http://dobroserver.ru/delaem-iz-zsh-morozhenku
и перетащен сюда "как есть" (т.е. "мопед не мой").
==========================
Prompt и заголовок
Если вы раньше настраивали шелл, то возможно помните жуткие последовательности символов в подобном стиле:

Код: Выделить всё

PROMPT=$'%{\e[0;30m%}[%{\e[0;35m%}%`%{\e[0;30m%}]%{\e[0m%} '
Конечно zsh позволяет использовать и их, но мы же не будем сыпать в вафельный рожок рублёные гвозди? Сделаем всё красиво.
Зададим цвета:

Код: Выделить всё

autoload -U colors && colors

for color in red green yellow blue magenta cyan black white; do
    eval $color='%{$fg_no_bold[${color}]%}'
    #eval ${color}_bold='%{$fg_bold[${color}]%}'
done

reset="%{$reset_color%}"
Покажем хост при подключении через ssh:

Код: Выделить всё

if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then
  host="${black}[${blue}%m${black}] " #SSH
else
  unset host # no SSH
fi
Теперь можно задать prompt:

Код: Выделить всё

if [ "$EUID" -eq 0 ]; then
  PROMPT="${host}${red}[${magenta}%2`${red}]${reset} " # root
else
  PROMPT="${host}${black}[${magenta}%2`${black}]${reset} " # user
fi
Закорючки %2` означают две директории в пути. Подробнее здесь. Если показывать одну, то это слишком мало, а если полный путь, то слишком много.

А выглядит это примерно так:

Мне не нравится слишком раздутая статусная строка, поэтому я не отображаю пользователя, правую строку и прочую шушеру.
И установим заголовок для терминала:

Код: Выделить всё

case $TERM in
    xterm*|rxvt*|screen*)
         precmd() { print -Pn "\e]0;%m:%`\a" }
         preexec () { print -Pn "\e]0;$1\a" }
        ;;
esac
Тут всегда будет отображаться хост и полный путь.

Закрыто

Вернуться в «Системные утилиты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей