LINUX.ORG.RU

Помогите написать PROMPT для zsh

 , , ,


0

1

Мне очень нравится стандартный PROMPT «redhat» в zsh, но я хочу что-то поменьше.
Система у меня по сути однопользовательская, потому user@host можно сократить, тогда и квадратные скобки не нужны.
При этом мне не нравится, что написано только название текущей директории, а не полный путь. Это было бы трудно сочетать с минимализмом, так как пришлось бы отдать целую строчку.
Мне нужно, чтобы было так:

  • Если я не рут: в консоли просто «$ > ».
  • Если я рут: в консоли «# > », причём символ '#' жирный и красный.
  • При этом в любом случае в заголовке терминала должно отображаться только %~ или выполняемая команда, если она выполняется (как в дефолте, только нужно убрать вначале «user@host»).
  • Не показывать ":-(", если программа завершилась с ошибкой, но отдельной строчкой вывести код ошибки красным (это классная фича, хотя редко полезна).

Я, конечно, очень классно придумал, но потыкался и не смог это реализовать. Потому прошу помощи.
Заранее спасибо всем, кто окажет помощь.

★★★★★

у меня так

function jobcount { echo ' ' | jobs | wc -l | tr -d «0» } PS1='\[\e[1;32m\] \w >\[\e[1;31m\]$(jobcount)\[\e[0m\] '

anonymous ()

лентяй!

# ZSH Theme
# Based on grzh theme


prompt_lazy_setup () {

# make some aliases for the colours: (coud use normal escap.seq's too)
    for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
        local PR_$color="%{$fg[${(L)color}]%}"
    done
    local PR_NO_COLOR="%{$terminfo[sgr0]%}"
    local PR_BOLD="%{$terminfo[bold]%}"

# Check the UID
if [[ $UID -ge 1000 ]]; then # normal user
  eval PR_USER="${PR_GREEN}%n${PR_NO_COLOR}"
  eval PR_USER_OP="${PR_GREEN}%#${PR_NO_COLOR}"
  local PR_PROMPT="$PR_BLUE$> $PR_NO_COLOR"
elif [[ $UID -eq 0 ]]; then # root
  eval PR_USER="${PR_RED}%n${PR_NO_COLOR}"
  eval PR_USER_OP="${PR_RED}%#${PR_NO_COLOR}"
  local PR_PROMPT="$PR_BOLD$PR_RED#> $PR_NO_COLOR"
fi

#PROMPT="${user_host} ${current_dir} ${rvm_ruby} ${git_branch}$PR_PROMPT "
PROMPT="${gbox_top}${current_dir}
${gbox_bottom}$PR_PROMPT"
RPS1="${return_code}"
}

prompt_lazy_setup "$@"

Цвета сам поменяешь.

cyberstorm ()
Ответ на: лентяй! от cyberstorm

Да, для возврата кода ещё добавь:

#define parametres
    local return_code="%(?..%{$PR_BOLD$PR_RED%}%? «┘%{$PR_NO_COLOR%})"
    
####Это опционально####
    #local user_host="${PR_USER}${PR_CYAN}@${PR_HOST}"
    #local current_dir="%{$PR_BOLD$PR_GREEN%}%~%{$PR_NO_COLOR%}"
    #local gbox_top="%{$PR_BOLD$PR_BLUE%}╔═%{$PR_NO_COLOR%}"
    #local gbox_bottom="%{$PR_BOLD$PR_BLUE%}╚═%{$PR_NO_COLOR%}"
    #local PR_PROMPT="$PR_BOLD$PR_BLUE» $PR_NO_COLOR"

cyberstorm ()

Толком не понял что ты хочешь, срочно нужен видеоролик
Вот, как добавить код

Использование условий доступно прямо в теле приглашения: %(x.true-text.false-text)

например проверка root`овости:

PROMPT=%(!."root"."hrensobachiy")

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