рдлрд┐рд░ рднреА рдмреИрд╢ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдЕрдЪреНрдЫреА рдХрд╣рд╛рдиреА

рдореИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВред рдХрдо рд╕реЗ рдХрдо рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд╛рдо рдХреА рдХрд┐рддрд╛рдм рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЕрдкрдирд╛ рд▓рдЧрднрдЧ рд╕рд╛рд░рд╛ рд╕рдордп рдХрдВрд╕реЛрд▓ рдореЗрдВ рдФрд░ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдмрд┐рддрд╛рддрд╛ рд╣реВрдБред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреИрд╢ рдкрд╕рдВрдж рд╣реИред рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рддрдХ рдореИрдВ рдЕрдкрдиреЗ рдХрдИ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдФрд░ рдкрд░рд┐рдЪрд┐рддреЛрдВ рдХреА рд╕рд▓рд╛рд╣ рд╕реБрдирдХрд░ рдЬрд╝рд╢ рдореЗрдВ рд░рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдореИрдВ рдмреИрд╢ рд╣реЛрдХрд░ рд▓реМрдЯ рдЖрдпрд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХреЛрдИ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реИред



Zsh рд╕реБрдВрджрд░, рд╕реБрдЦрдж, рд▓рд╛рдирдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕рдХреА рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореИрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рд╕реЗ рдирд╣реАрдВ рд▓рдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: zsh рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛ рдХреЗ рдХрд╛рд░рдг рдХрдИ рдмрд╛рд░, рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ - zsh рдиреЗ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рддрд╛рд░рд╛рдВрдХрди рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд╛рди рд░рдЦрд╛ (рдореИрдВ рдЪрдпрдирд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛)ред рдПрдХ рдЕрдВрддрд░рд┐рдХреНрд╖ рдФрд░ / usr рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЙрд╕ рдорд╣рд╛рдХрд╛рд╡реНрдп рдмрдЧ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ? рдореЗрд░рд╛ рднреА рдпрд╣реА рд╣рд╛рд▓ рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж рдЧреАрддрд╛, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдорджрдж рдХреАред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ zsh рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдореИрдВ рдереЛрдбрд╝рд╛ рд╣реЛрд╢рд┐рдпрд╛рд░ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрд╛ рд╣реЛрддрд╛, рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрддрд╛, рд▓реЗрдХрд┐рди рд╣рдо, рдХрдареЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдмреИрд╢ рдФрд░ рд╡рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рд┐рдкрд╕реНрдЯрд░реНрд╕ рдФрд░ рдЕрдиреНрдп рдореЙрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЧреНрд▓реИрдорд░рд╕ zsh рдФрд░ рдЯреЗрдХреНрд╕реНрдЯрдореЗрдЯ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ;)

рдореИрдВ рдХреБрдЫ рднреА рдореВрд▓ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рдореИрдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рд╡рд┐рд╡рд░рдг рдкрдврд╝рдирд╛ рдкрд╕рдВрдж рдерд╛, рдФрд░ рдпрджрд┐ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд┐рддреНрд░ рдЙрдирд╕реЗ рдЬреБрдбрд╝реЗ рдереЗ, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдХрдИ рдмрд╛рд░ рдЗрди рд▓реЗрдЦреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рднреА рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗред

рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдореИрдВрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдХреБрдЫ рдЖрд╕рд╛рди рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдмрдВрдз рдореЗрдВ рд╣реИ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдареАрдХ рд╣реИ, рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдХрд╣рд╛рдБ рд░рд╣рддрд╛ рд╣реВрдБ:
GNU bash, version 4.2.28(2)-release (i386-apple-darwin11.3.0) 



рдирд┐рдордВрддреНрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЗрди рдлреАрдб рдЬреЛрдбрд╝реЗрдВ



рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд░ рджрд┐рди рдореБрдарднреЗрдбрд╝ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдмреИрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдЖрджреЗрд╢ рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдлрд╝реАрдб рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреВрд░рд╛ рди рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг):

рдмреЗрд╢рдХ, рдХреБрдЫ рднреА рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рд╡рд╣реА zsh рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЖрдкрдХреЛ рдмреИрд╢ рдЯреНрд░рд┐рдХ рд╕рд┐рдЦрд╛рдПрдВрдЧреЗред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (PS1) рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░ рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдХрд░реНрд╕рд░ рд▓рд╛рдЗрди рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд░реНрдг рдкрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд▓рд╛рдЗрди рдлреАрдб (рдЪрд░рд┐рддреНрд░ "\ n") рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рднрд╛рдЧрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
 echo -en "\033[6n" && read -sdR CURPOS 

рдирддреАрдЬрддрди, CURPOS рдЪрд░ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛: "^ [[4; 12R", рдЬрд╣рд╛рдВ 4 рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдФрд░ 12 рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд░реНрдг рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╣рдорд╛рд░реЗ bash config (~ / .bashrc рдпрд╛ ~ / .bash_profile) рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред
 # setup color variables color_is_on= color_red= color_green= color_yellow= color_blue= color_white= color_gray= color_bg_red= color_off= if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then color_is_on=true color_red="\[$(/usr/bin/tput setaf 1)\]" color_green="\[$(/usr/bin/tput setaf 2)\]" color_yellow="\[$(/usr/bin/tput setaf 3)\]" color_blue="\[$(/usr/bin/tput setaf 6)\]" color_white="\[$(/usr/bin/tput setaf 7)\]" color_gray="\[$(/usr/bin/tput setaf 8)\]" color_off="\[$(/usr/bin/tput sgr0)\]" color_error="$(/usr/bin/tput setab 1)$(/usr/bin/tput setaf 7)" color_error_off="$(/usr/bin/tput sgr0)" fi function prompt_command { # get cursor position and add new line if we're not in first column exec < /dev/tty local OLDSTTY=$(stty -g) stty raw -echo min 0 echo -en "\033[6n" > /dev/tty && read -sdR CURPOS stty $OLDSTTY [[ ${CURPOS##*;} -gt 1 ]] && echo "${color_error}тЖ╡${color_error_off}" } PROMPT_COMMAND=prompt_command 

рдореБрдЦреНрдпрдордВрддреНрд░реАред рдЕрджреНрдпрддрди
PROMPT_COMMAND рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯреА рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рджреЗрдЦрд╛ рдерд╛, рдЗрд╕ рд╣реИрдХ рдХреЗ рдмрд┐рдирд╛, $ CURPOS рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлреВрд▓реЛрдВ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ - рдиреАрдЪреЗ рд╡реЗ рд╕рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред рд╣рдорд╛рд░реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

рдПрдХ рд▓рд╛рд▓ рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░, рд╣рд╛рдБ, 21 рд╡реАрдВ рд╕рджреА рдпрд╛рд░реНрдб рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо utf-th рд▓реЛрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред рдкреНрд░рддреАрдХ "be", рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕реЗ рдХреБрдЫ рд╕рд░рд▓ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреАрдХ "%", рдЬреИрд╕рд╛ рдХрд┐ zsh рдореЗрдВ рд╣реИред

рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ



рдХрдВрд╕реЛрд▓ рд╕реЗ рдЧрд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп (рдХреЗрд╡рд▓ рдЧреБрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ - рд╣рдо рдкреБрд░рд╛рдиреЗ рд╕реНрдХреВрд▓ рдХреЗ рдХрдареЛрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ!) рдпрд╣ рдЧрд┐рдЯ рдХреА рд╡рд░реНрддрдорд╛рди рд╢рд╛рдЦрд╛ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рдХреНрдпрд╛ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдпрд╛ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛ рдерд╛ рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╡рд░реНрддрдорд╛рди рд╡рд╛рддрд╛рд╡рд░рдг (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╕рд░реНрд╡рд░, рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рднрдВрдбрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ) ), рдФрд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ - рд╕реАрдзреЗ рдХрдорд╛рдВрдб рдЬреЛ рд╣рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЕрд╕рд╛рдорд╛рдиреНрдп рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдкрд┐рдЫрд▓реА рдпреЛрдЬрдирд╛ рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реВрдВред рднреВрдЧреЛрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди __git_ps1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ geit рдХреЗ рд▓рд┐рдП рдмреИрд╢-рд╕рдорд╛рдкрди рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдпрд╛ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ "рдмреИрд╕рд╛рдЦреА" рд▓рд┐рдЦреЗрдВред рдореИрдВ рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ __git_ps1 рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдореБрдЭреЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рди рдХреЗрд╡рд▓ рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдмрд▓реНрдХрд┐ рднрдВрдбрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рднреА, рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧреЛрдВ рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред рджреВрд╕рд░реЗ, рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ / рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ, рдЙрдирдХреА рдЧрд╣рд░рд╛рдИ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ред

рджрд░рдЕрд╕рд▓, рдЧрд┐рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдШрдЯрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
 # get git status function parse_git_status { # clear git variables GIT_BRANCH= GIT_DIRTY= # exit if no git found in system local GIT_BIN=$(which git 2>/dev/null) [[ -z $GIT_BIN ]] && return # check we are in git repo local CUR_DIR=$PWD while [ ! -d ${CUR_DIR}/.git ] && [ ! $CUR_DIR = "/" ]; do CUR_DIR=${CUR_DIR%/*}; done [[ ! -d ${CUR_DIR}/.git ]] && return # 'git repo for dotfiles' fix: show git status only in home dir and other git repos [[ $CUR_DIR == $HOME ]] && [[ $PWD != $HOME ]] && return # get git branch GIT_BRANCH=$($GIT_BIN symbolic-ref HEAD 2>/dev/null) [[ -z $GIT_BRANCH ]] && return GIT_BRANCH=${GIT_BRANCH#refs/heads/} # get git status local GIT_STATUS=$($GIT_BIN status --porcelain 2>/dev/null) [[ -n $GIT_STATUS ]] && GIT_DIRTY=true } 

рдореИрдВ рдкрд╛рд░реНрд╕ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рдлрд╛рдЗрд▓реЗрдВ рдЬреЛ рдХрдорд┐рдЯ (рдХреИрд╢реНрдб) рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЕрдирдЯреНрд░реИрдХ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЬрд╛рдирдХрд╛рд░реА рдереАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕рд░рд▓ рд╣реИ: рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЧрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╣рдо рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИрдВ, рдкреБрди: рдлрд╛рдЗрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рд░реВрдЯ рддрдХ рд╕рднреА рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рд╕реЗ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ ".it" рдлреЛрд▓реНрдбрд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдмреНрд░рд╛рдВрдЪ рдХрд╛ рдирд╛рдо рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рд╣реИред рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ uncommittedред рд╣рдорд╛рд░реЗ рдкреНрд░реЙрдореНрдкреНрдЯ_рдХрд╛рдо рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдПрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рдмрдирд╛рдПрдБ:
 function prompt_command { local PS1_GIT= local PWDNAME=$PWD ... # beautify working firectory name if [ $HOME == $PWD ]; then PWDNAME="~" elif [ $HOME == ${PWD:0:${#HOME}} ]; then PWDNAME="~${PWD:${#HOME}}" fi # parse git status and get git variables parse_git_status # build b/w prompt for git [[ ! -z $GIT_BRANCH ]] && PS1_GIT=" (git: ${GIT_BRANCH})" local color_user= if $color_is_on; then # set user color case `id -u` in 0) color_user=$color_red ;; *) color_user=$color_green ;; esac # build git status for prompt if [ ! -z $GIT_BRANCH ]; then if [ -z $GIT_DIRTY ]; then PS1_GIT=" (git: ${color_green}${GIT_BRANCH}${color_off})" else PS1_GIT=" (git: ${color_red}${GIT_BRANCH}${color_off})" fi fi fi # set new color prompt PS1="${color_user}${USER}${color_off}@${color_yellow}${HOSTNAME}${color_off}:${color_white}${PWDNAME}${color_off}${PS1_GIT}\nтЮЬ " } 

рдпрд╣рд╛рдБ рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЪрд░ PWDNAME рдХреЗ тАЛтАЛрдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк "\ w" рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░реЙрдореНрдкреНрдЯ_рдХреЙрдорд░реНрд╕ рдлрдВрдХреНрд╢рди рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рд╢реАрд░реНрд╖рдХ рднреА рд╣реИ:
 # set title echo -ne "\033]0;${USER}@${HOSTNAME}:${PWDNAME}"; echo -ne "\007" 

рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "w" рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЕрдЬрдЧрд░ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдирд╛рдо рдмрддрд╛рдПрдВ



рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдЬреЛ рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдкрд╛рдпрдердиред рдЙрд╕рдХреЗ рд▓рд┐рдП virtualenv рдирд╛рдордХ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рд╣реИред рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ - рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╢ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдмреЗрд╣рдж рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╢ рдЖрдордВрддреНрд░рдг рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡реЗрдирд╡ рдХрд╛ рдирд╛рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИ:

рд╣рдордиреЗ рд▓рдВрдмрд┐рддрдирд╡ рдХреЛ рд╣рдорд╛рд░реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░реЙрдореНрдкреНрдЯ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ:
 export VIRTUAL_ENV_DISABLE_PROMPT=1 

рдФрд░ рдирд╛рдо рд╡реЗрд╡ рдЦреБрдж рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
 function prompt_command { local PS1_VENV= ... [[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${VIRTUAL_ENV#$WORKON_HOME})" if $color_is_on; then ... # build python venv status for prompt [[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${color_blue}${VIRTUAL_ENV#$WORKON_HOME}${color_off})" fi # set new color prompt PS1="${color_user}${USER}${color_off}@${color_yellow}${HOSTNAME}${color_off}:${color_white}\w${color_off}${PS1_GIT}${PS1_VENV}\nтЮЬ " } 


рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╢рд╛рдирджрд╛рд░ рд╣реИред

рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреАрдореЗрдВ



рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╕рдХреНрд░рд┐рдп рдХрд╛рдо рдХреЗ рд╕рд╛рде, рдЗрдирдкреБрдЯ рдХрдорд╛рдВрдб рдФрд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд░рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ:

рдмреЗрд╢рдХ, рдЙрджрд╛рд╣рд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдВрдХреЗрддрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЬреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдореИрдВрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдХреА рдкреВрд░реА рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг рдореЗрдВ рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ - рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЧрдпрд╛:

рдпрд╣рд╛рдБ рд╣реИ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:
 function prompt_command { ... # build b/w prompt for git and vertial env [[ ! -z $GIT_BRANCH ]] && PS1_GIT=" (git: ${GIT_BRANCH})" [[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${VIRTUAL_ENV#$WORKON_HOME})" # calculate fillsize local fillsize=$(($COLUMNS-$(printf "${USER}@${HOSTNAME}:${PWDNAME}${PS1_GIT}${PS1_VENV} " | wc -c | tr -d " "))) local FILL=$color_gray while [ $fillsize -gt 0 ]; do FILL="${FILL}тФА"; fillsize=$(($fillsize-1)); done FILL="${FILL}${color_off}" ... # set new color prompt PS1="${color_user}${USER}${color_off}@${color_yellow}${HOSTNAME}${color_off}:${color_white}${PWDNAME}${color_off}${PS1_GIT}${PS1_VENV} ${FILL}\nтЮЬ " } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдЬреНрдЮрд╛рдд рдХрд░реЗрдВ, рдЗрд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдЪреМрдбрд╝рд╛рдИ ($ COLUMNS рдЪрд░) рд╕реЗ рдШрдЯрд╛рдПрдВ рдФрд░ рдЗрд╕ рд▓рдВрдмрд╛рдИ рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ ASCII- рд╡рд░реНрдг "тФА" (рдлрд┐рд░ рд╕реЗ, рдпрджрд┐ рд▓реЛрдХреЗрд▓ рдЕрдирдХреЛрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЕрдзрд┐рдХ рд░рдВрдЧ


рдпрджрд┐ рдЯрд░реНрдорд┐рдирд▓ 256 рд░рдВрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ:
 color_pink="\[$(/usr/bin/tput setaf 99)\]" 


рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рд╕рдд рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдлреНрдЯрд░рд╡рд░реНрдб рдпрд╛ "рдХреВрд▓ рд╕реНрдЯреЛрд░реА, рднрд╛рдИ!"



рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдорд╛рд╣реМрд▓ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рдЖрдк рдХреЛрдИ рднреА рдЪреАрдЬ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред рдмреИрд╢ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдмрд╕ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рд╣реЛрдЧреАред рд╡реИрд╕реЗ, рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЬрд╝реАрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХреБрдЫ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЗрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреЛ рдореИрдВ рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ред

рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдЧрд╛рдбрд╝реА рд╣реИ, рдФрд░ рд╣рд░ рдХреЛрдИ рдЬреЛ рдкрд╣рд▓реА рдмрд╛рд░ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рджреВрд╕рд░реЗ) рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрдордВрддреНрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдврд╝рддрд╛ рд╣реИ ред рдФрд░, рд╣рд╛рдВ, ShG, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ;) рдореБрдЭреЗ рдХрднреА рднреА рдЕрдлреАрдо рдХреЗ рдиреАрдЪреЗ рдХрд╛ рдЯрд░реНрдорд┐рдирд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛ = (рджреБрдЦ)

рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдирд╛ рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рддрд╛ - рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ: github.com/dreadatour/dotfiles ( .bash_profile рдлрд╝рд╛рдЗрд▓)ред

UPD : рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
 function prompt_command { # get cursor position and add new line if we're not in first column exec < /dev/tty local OLDSTTY=$(stty -g) stty raw -echo min 0 echo -en "\033[6n" > /dev/tty && read -sdR CURPOS stty $OLDSTTY [[ ${CURPOS##*;} -gt 1 ]] && echo "${color_error}тЖ╡${color_error_off}" } PROMPT_COMMAND=prompt_command 

рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╣реИрдХ рдХреЗ рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓реМрдЯ рдЖрдпрд╛, рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
 function prompt_command { # get cursor position and add new line if we're not in first column echo -en "\033[6n" && read -sdR CURPOS [[ ${CURPOS##*;} -gt 1 ]] && echo "${color_error}тЖ╡${color_error_off}" } PROMPT_COMMAND=prompt_command 


UPD2 : рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, - рдлрд┐рдХреНрд╕реНрдб рдмрдЧ, рдмреЗрд╣рддрд░ рдХреЛрдбред рдЕрдм Prom_command рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 # setup color variables color_is_on= color_red= color_green= color_yellow= color_blue= color_white= color_gray= color_bg_red= color_off= color_user= if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then color_is_on=true color_red="\[$(/usr/bin/tput setaf 1)\]" color_green="\[$(/usr/bin/tput setaf 2)\]" color_yellow="\[$(/usr/bin/tput setaf 3)\]" color_blue="\[$(/usr/bin/tput setaf 6)\]" color_white="\[$(/usr/bin/tput setaf 7)\]" color_gray="\[$(/usr/bin/tput setaf 8)\]" color_off="\[$(/usr/bin/tput sgr0)\]" color_error="$(/usr/bin/tput setab 1)$(/usr/bin/tput setaf 7)" color_error_off="$(/usr/bin/tput sgr0)" # set user color case `id -u` in 0) color_user=$color_red ;; *) color_user=$color_green ;; esac fi # some kind of optimization - check if git installed only on config load PS1_GIT_BIN=$(which git 2>/dev/null) function prompt_command { local PS1_GIT= local PS1_VENV= local GIT_BRANCH= local GIT_DIRTY= local PWDNAME=$PWD # beautify working directory name if [[ "${HOME}" == "${PWD}" ]]; then PWDNAME="~" elif [[ "${HOME}" == "${PWD:0:${#HOME}}" ]]; then PWDNAME="~${PWD:${#HOME}}" fi # parse git status and get git variables if [[ ! -z $PS1_GIT_BIN ]]; then # check we are in git repo local CUR_DIR=$PWD while [[ ! -d "${CUR_DIR}/.git" ]] && [[ ! "${CUR_DIR}" == "/" ]] && [[ ! "${CUR_DIR}" == "~" ]] && [[ ! "${CUR_DIR}" == "" ]]; do CUR_DIR=${CUR_DIR%/*}; done if [[ -d "${CUR_DIR}/.git" ]]; then # 'git repo for dotfiles' fix: show git status only in home dir and other git repos if [[ "${CUR_DIR}" != "${HOME}" ]] || [[ "${PWD}" == "${HOME}" ]]; then # get git branch GIT_BRANCH=$($PS1_GIT_BIN symbolic-ref HEAD 2>/dev/null) if [[ ! -z $GIT_BRANCH ]]; then GIT_BRANCH=${GIT_BRANCH#refs/heads/} # get git status local GIT_STATUS=$($PS1_GIT_BIN status --porcelain 2>/dev/null) [[ -n $GIT_STATUS ]] && GIT_DIRTY=1 fi fi fi fi # build b/w prompt for git and virtual env [[ ! -z $GIT_BRANCH ]] && PS1_GIT=" (git: ${GIT_BRANCH})" [[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${VIRTUAL_ENV#$WORKON_HOME})" # calculate prompt length local PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+${#PS1_GIT}+${#PS1_VENV}+3)) local FILL= # if length is greater, than terminal width if [[ $PS1_length -gt $COLUMNS ]]; then # strip working directory name PWDNAME="...${PWDNAME:$(($PS1_length-$COLUMNS+3))}" else # else calculate fillsize local fillsize=$(($COLUMNS-$PS1_length)) FILL=$color_gray while [[ $fillsize -gt 0 ]]; do FILL="${FILL}тФА"; fillsize=$(($fillsize-1)); done FILL="${FILL}${color_off}" fi if $color_is_on; then # build git status for prompt if [[ ! -z $GIT_BRANCH ]]; then if [[ -z $GIT_DIRTY ]]; then PS1_GIT=" (git: ${color_green}${GIT_BRANCH}${color_off})" else PS1_GIT=" (git: ${color_red}${GIT_BRANCH}${color_off})" fi fi # build python venv status for prompt [[ ! -z $VIRTUAL_ENV ]] && PS1_VENV=" (venv: ${color_blue}${VIRTUAL_ENV#$WORKON_HOME}${color_off})" fi # set new color prompt PS1="${color_user}${USER}${color_off}@${color_yellow}${HOSTNAME}${color_off}:${color_white}${PWDNAME}${color_off}${PS1_GIT}${PS1_VENV} ${FILL}\nтЮЬ " # get cursor position and add new line if we're not in first column # cool'n'dirty trick (http://stackoverflow.com/a/2575525/1164595) # XXX FIXME: this hack broke ssh =( # exec < /dev/tty # local OLDSTTY=$(stty -g) # stty raw -echo min 0 # echo -en "\033[6n" > /dev/tty && read -sdR CURPOS # stty $OLDSTTY echo -en "\033[6n" && read -sdR CURPOS [[ ${CURPOS##*;} -gt 1 ]] && echo "${color_error}тЖ╡${color_error_off}" # set title echo -ne "\033]0;${USER}@${HOSTNAME}:${PWDNAME}"; echo -ne "\007" } # set prompt command (title update and color prompt) PROMPT_COMMAND=prompt_command # set new b/w prompt (will be overwritten in 'prompt_command' later for color prompt) PS1='\u@\h:\w\$ ' 


Source: https://habr.com/ru/post/In145008/


All Articles