LINUX.ORG.RU
ФорумTalks

[быдлокодерство][bash]Prompt adam2 from zsh

 


0

0

Мне понравилась тема приглашения adam2 из zsh и возникла мысль портировать её на bash. Предлагаю вашему вниманию первую версию (доделывать есть что). Перенесено свойство сохранять ширину при смене текущего каталога/юзернейма/хостнейма. При выводе текущего каталога не происходит подстановка «~» вместо $HOME (постараюсь пофиксить). Не предусмотрена ситуация возможной нехватки места в первой строке (временно, я думаю). Исполнение не безупречно с точки зрения качества кода - одни глобальные переменные для цветов тянут на расстрел ;-) (в оригинале, впрочем, тоже костыли имеются).

Сам код (добавьте в ~/.bashrc, закомментировав свой PS1):

C1='\e[36m';
C2='\e[36;1m'
C3='\e[32;1m'
C4='\e[30;1m'
C5='\e[37;1m'
C6='\e[0m'

function prompt_adam2(){
WHOAMI=$(whoami);
HOSTNAME=$(hostname);
PWD_LEN=$((`expr length "$PWD"`+2));
USER_AT_HOST_LEN=$(($(expr length ${WHOAMI})+$(expr length ${HOSTNAME})+3));
WIDTH=$(tput cols);
DASHES=$((${WIDTH}-${USER_AT_HOST_LEN}-${PWD_LEN}-3));
PROMPT=( ${C2}.${C6}${C1}-${C6}${C4}\(${C6}${C3}${PWD}${C6}${C4}\)${C6}${C1}\
$(for (( i=1; i<=$DASHES; i++)); do echo -n '-'; done)\
${C6}${C4}\(${C6}${C1}$(whoami)${C6}${C2}@${C6}${C1}$(hostname)\
${C6}${C4}\)${C6}${C1}-${C6} );
echo -en ${PROMPT[@]}
}
export PROMPT_COMMAND=prompt_adam2;
export PS1=${C2}"'"${C6}${C2}-${C6}${C1}-${C6}${C5}'> '${C6};

Надеюсь, кому-нибудь пригодится :-)

★★★★★

Ах да, во второй строке не прямая кавычка, а обратная, но я не осилил её заэкранировать - в лучшем случае отображается, но с руганью...

GotF ★★★★★
() автор топика

> При выводе текущего каталога не происходит подстановка «~» вместо $HOME (постараюсь пофиксить).

local newPWD=«$(print -D $PWD)»

Ja-Ja-Hey-Ho ★★★★★
()

+ сделайте снимок экрана как оно выглядит

P.S. фак, НГ уже рядом :D

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

А я уже нашёл кусок кода для преобразования, завтра разберусь в нём и исправлю.

GotF ★★★★★
() автор топика

Переделана реализация приглашения. Вместо своего велосипеда, путь выводится стандартной подстановкой \w. Затруднена смена цветовой схемы (кажется, из-за подстановки эскейп-последовательностей через переменные были глюки с пропаданием части приглашения при пролистывании очень длинных команд в истории). Переменная $PROMPT_COMMAND более не используется ввиду пропадания первой строки приглашения при ресете терминала. В остальном порт полнофункционален, за исключением невозможности транкейтить слишком длинные $PWD (доделаю позже).

Код:

function prompt_adam2(){
local WHOAMI=$(whoami);
local HOSTNAME=$(hostname);
local USER_AT_HOST_LEN=$(($(expr length ${WHOAMI})+$(expr length ${HOSTNAME})+3));
local WIDTH=$(tput cols);
if [[ "$HOME" == ${PWD:0:${#HOME}} ]]; then
	local PWD_LEN=$(($(expr length "$PWD")-$(expr length "$HOME")+3));
else
	local PWD_LEN=$(($(expr length "$PWD")+2));
fi
local DASHES=$((${WIDTH}-${USER_AT_HOST_LEN}-${PWD_LEN}-3));
for (( i=1; i<=$DASHES; i++)); do
	echo -n '-';
done
}

export PS1='\[\e[36;1m\].\[\e[0m\]\[\e[36m\]-\[\e[30;1m\](\[\e[0m\]\
\[\e[32;1m\]\w\[\e[0m\]\[\e[30;1m\])\[\e[0m\]\[\e[36m\]`prompt_adam2`\
\[\e[30;1m\](\[\e[0m\]\[\e[36m\]\u\[\e[1m\]@\[\e[0m\]\[\e[36m\]\h\
\[\e[30;1m\])\[\e[0m\]\[\e[36m\]-\[\e[0m\]\n\
\[\e[36;1m\]\`\[\e[0m\]\[\e[36m\]--\[\e[0m\]\[\e[37;1m\]>\[\e[0m\] '

P.S.: скриншот выше по теме.

GotF ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.