function precmd {
# Set color variables
setopt extended_glob prompt_subst
autoload colors zsh/terminfo
if [[ "$terminfo[colors]" -ge 8 ]]; then
colors
fi
for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
(( count = $count + 1 ))
done
PR_NO_COLOR="%{$terminfo[sgr0]%}"
PR_HBAR="─"
#PR_HBAR="—"
PR_ULCORNER="┌"
PR_LLCORNER="└"
#PR_ULCORNER="├"
#PR_LLCORNER="├"
PR_LRCORNER="┘"
PR_URCORNER="┐"
# typeset -A altchar
# set -A altchar ${(s..)terminfo[acsc]}
# PR_SET_CHARSET="%{$terminfo[enacs]%}"
# PR_SHIFT_IN="%{$terminfo[smacs]%}"
# PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
# PR_HBAR=${altchar[q]:--}
# PR_ULCORNER=${altchar[l]:--}
# PR_LLCORNER=${altchar[m]:--}
# PR_LRCORNER=${altchar[j]:--}
# PR_URCORNER=${altchar[k]:--}
# Set the width of terminal
(( TERMWIDTH = ${COLUMNS} - 1 ))
# Truncate the path of current directory if it's too long
PR_FILLBAR=""
PR_PWDLEN=""
promptsize=${#${(%):---(%n@%m:%l)---()--}}
pwdsize=${#${(%):-%~}}
if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then
(( PR_PWDLEN = $TERMWIDTH - $promptsize ))
else
PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize+$pwdsize)))..${PR_HBAR}.)}"
fi
print -Pn "\e]0;%n@%m:%~\a"
}
PROMPT=$'$PR_SET_CHARSET$PR_YELLOW$PR_ULCORNER$PR_HBAR($PR_BLUE%(!.${PR_RED}root.%n)$PR_BLUE@%m:%l$PR_YELLOW)$PR_HBAR$PR_HBAR${(e)PR_FILLBAR}$PR_HBAR($PR_BLUE%$PR_PWDLEN<...<%~%<<$PR_YELLOW)$PR_HBAR>\n$PR_LLCORNER$PR_HBAR(%(?..$PR_RED%?$PR_YELLOW:)$PR_BLUE%D{%H:%M}$PR_YELLOW)$PR_HBAR$PR_HBAR$PR_NO_COLOR '
# Right prompt
#RPROMPT=' $PR_YELLOW$PR_HBAR$PR_HBAR($PR_BLUE%D{%a,%b%d}$PR_YELLOW)$PR_HBAR$PR_LRCORNER$PR_NO_COLOR'
# Multi-line prompt
PS2='$PR_YELLOW$PR_HBAR$PR_HBAR($PR_BLUE%_$PR_YELLOW)$PR_HBAR$PR_HBAR$PR_NO_COLOR '
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
Куча людей гонится за многострочным промптом и никто даже не удосуживается исправить чудеса просходящие в консоли происходящие при ресайзе терминала. Давай, будь мужиком запости скрины до и после ресайза. Наверно уезжающий чёрт знает куда промпт тоже «удобно»?
У меня нет никаких серваков. Но на других, «неосновных» машинах обычно добавлен их хостнейм, потому что часто возникала путаница. Ну и вообще, в заголовке XTerm у меня выводится [user@host: ~] :)
И часто ты так делаешь? Лично я не ресайзю терминал почти никогда — он всегда занимает настолько много места, насколько может себе позволить. В случае GUI окно по дефолту максимизировано.
Может, перечислишь юзкейсы, при которых полезен ресайз терминала? Пока может прийти в голову только необходимость видеть ещё одно окно, но в этом случае я обычно лёгким движением руки по тачпаду делаю терминал полупрозрачным. В случае, если видеть 2 окна надо длительное время, гораздо удобнее уменьшить высоту терминала, чем ширину (поскольку второе окно — браузер или пдфка, а им очень не нравится, когда их ширина около 640, особенно первому). А при изменении высоты никаких спецэффектов с промптом не возникает.
Поэтому лично я не испытываю никаких трудностей при моём стиле работы. Зато в том же баше, если в промпте стоит \w, а текущий каталог слишком длинный, то промпт разнесёт ещё покруче, даже без ресайза окна по горизонтали, а у меня хотя бы ограничитель стоит.
запости скрины
Не хочу, у меня там дефолтная убунта, которую я только что поставил.
никто даже не удосуживается исправить чудеса
Если знаешь, как заставить zsh при получении SIGWINCH выполнить функцию из zshrc, то возьми и расскажи, чего впустую болтать? Если так переживаешь о проблеме, то почему до сих пор никто не видел твоих патчей на zsh, в которых по SIGWINCH производится стирание старого промпта и перерисовка?
Куча людей гонится за многострочным промптом
Лично мне он нужен только по одной простой причине: я хочу, чтобы начало команды было всегда на одном месте, а не летало от левого края экрана до правого в зависимости от длины пути текущего каталога. Если же команда завершается с кодом >0, то код завершения отображается в нижней строке, начало команды немного (немного, а не на пол-экрана, удобство не нарушается) сдвигается вправо, а я сразу замечаю, что предыдующая команда завершилась неудачно.
я поспорил кое с кем, что получу в ответ нечто в стиле 'не нужно/я же не использую/итд' и выиграл! Я, пожалуй, лучше попрошу GotF поделиться его вариантом, тебе то это всё равно неинтересно. На самом деле минимум одно решение есть, его минут за 5-15 реально загуглить
Очевидно, что нормальный человек будет пользоваться тем, что удобно ему, а не тем, что ему неудобно. Тут надо выбирать то, что больше нужно: или двухстрочный промпт, или ресайз по ширине. Мне больше нужно первое.
Я, пожалуй, лучше попрошу GotF поделиться его вариантом
Удачи, я у себя его проверил — он также не работает так, как тебе нравится.
Ошибаешься, а это означает, что мой ответ ты не читал полностью, потому что тебе он неинтересен, тебе интересно было прочитать или не прочитать там «не нужно».
На самом деле минимум одно решение есть, его минут за 5-15 реально загуглить
Это там, где первую строку в precmd запихать? Против ресайза по ширине не поможет.
мм...ты наверно не понял как именно мне нравится. у меня нет разделителей, например, на весь экран, просто команда получается вводится на второй строке. мне чаще всего приходится что-то делать из под винды через путти, а там вот реально жопа почему-то получается при ресайзе на многострочных промптах, и приглашение выскакивает много раз, в итоге, подёргав немного мышкой окно путти, можно добиться уезжания курсора в самый низ сейчас проверил твой промпт и adam2 на нативном линуксовом терминале - такого ужаса нет, небольшие артефакты этого вашего разделителя на весь экран за ужасы не считаются
мне чаще всего приходится что-то делать из под винды через путти
на винфак
а там вот реально жопа почему-то получается при ресайзе на многострочных промптах, и приглашение выскакивает много раз, в итоге, подёргав немного мышкой окно путти, можно добиться уезжания курсора в самый низ
Я ненавижу тмуксы в тмуксе. Посему - пользую вкладки терминала, где у каждого сервака свой тмукс. Да и даже так - каждый раз хостнейм тмукса не смотрю, а промт - всегда перед глазами, в отличие от статусбара тмукса :) ЗЫ: старался побольше раз упомянуть тмукс :)
Может, перечислишь юзкейсы, при которых полезен ресайз терминала? Пока может прийти в голову только необходимость видеть ещё одно окно, но в этом случае я обычно лёгким движением руки по тачпаду делаю терминал полупрозрачным.
А если, например, в одном терминале man, в другом набираешь, то как читать через полупрозрачное окно?
А если, например, в одном терминале man, в другом набираешь, то как читать через полупрозрачное окно?
Если ман в терминале, то он вообще будет в отдельной вкладке, а не окне, потому что несколько окон терминала я никогда не открываю — между ними менее удобно переключаться, чем между вкладками. И если открыть два окна терминала одно над другим, то читать, наверное, будет неудобно из-за накладывающихся символов. Если это нужно, то можно поступить так, как я предложил в исходном сообщении после этой цитаты, т.е. разделить экран на 2 окна, чтобы одно было сверху, другое снизу.