Update fresh prompt
* When a command fails, don't print the error code at the end of the
  first line but directly after the git stats.
* Remove `cr` from `prompt_opts` since there is no longer a new line in
  `PS1`, combined with above, this result in no new lines being inserted
  when the terminal becomes narrower e.g. a horizontal tmux split.
* Remove `fresh_visible_length` function and instead use the length of
  string variables e.g. `${#userhost}`.
			
			
This commit is contained in:
		
							parent
							
								
									c636dd078c
								
							
						
					
					
						commit
						df819f58a8
					
				| @ -31,24 +31,24 @@ prompt_fresh_setup() { | |||||||
|     add-zsh-hook -d preexec fresh_almostontop |     add-zsh-hook -d preexec fresh_almostontop | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   if [ "$USERNAME" = "root" ]; then |   if [ "$USER" = "root" ]; then | ||||||
|     local user="%{%F{9}%}%n%{%f%}" |     local user="%{%F{1}%}%n%{%f%}" | ||||||
|   else |   else | ||||||
|     local user="%{%F{35}%}%n%{%f%}" |     local user="%{%F{35}%}%n%{%f%}" | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|  |   local userhost=$USER | ||||||
|   if [ "$SSH_CONNECTION" != "" ]; then |   if [ "$SSH_CONNECTION" != "" ]; then | ||||||
|     local user="%{%F{35}%}$user%{%f%}@%{%F{244}%}%M%{%f%}" |     local user="$user@%{%F{244}%}%M%{%f%}" | ||||||
|  |     local userhost="$userhost@`hostname`" | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   local length=`fresh_visible_length "$user"` |  | ||||||
| 
 |  | ||||||
|   PS1="«$user» " |   PS1="«$user» " | ||||||
|   PS2="${(l:$length + 1:: :)}» " |   PS2="«${(l:${#userhost}:: :)}» " | ||||||
| 
 | 
 | ||||||
|   RPS1='$(fresh_rprompt)' |   RPS1='$(fresh_rprompt)' | ||||||
| 
 | 
 | ||||||
|   prompt_opts=(cr percent sp subst) |   prompt_opts=(percent sp subst) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| prompt_cleanup() { | prompt_cleanup() { | ||||||
| @ -119,18 +119,15 @@ fresh_line_one() { | |||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   # Construct the prompt string |  | ||||||
|   local line="$time_stamp $directory $git" |  | ||||||
| 
 |  | ||||||
|   # Print the first line of the prompt |   # Print the first line of the prompt | ||||||
|   if [[ $exit_code -eq 0 ]]; then |   if [[ $exit_code -ne 0 ]]; then | ||||||
|     print -P "$line" |  | ||||||
|   else |  | ||||||
|     # The last command failed, display its error code at the right |     # The last command failed, display its error code at the right | ||||||
|     local result=" %{%B%F{1}%}$exit_code%{%f%b%}" |     local result=" %{%B%F{1}%}$exit_code%{%f%b%}" | ||||||
|     local length=`fresh_visible_length "$line$result"` |  | ||||||
|     print -P "$line${(l:COLUMNS - $length - 1:: :)}$result" |  | ||||||
|   fi |   fi | ||||||
|  | 
 | ||||||
|  |   # Construct the prompt string | ||||||
|  |   local line="$time_stamp $directory $git$result" | ||||||
|  |   print -P "$line" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fresh_rprompt() { | fresh_rprompt() { | ||||||
| @ -150,10 +147,6 @@ fresh_almostontop() { | |||||||
|   print -P "$PROMPT"'$1' |   print -P "$PROMPT"'$1' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fresh_visible_length() { |  | ||||||
|   echo $(( ${#${(S%%)1//(\%(KF1]|)\{*\}|\%[Bbkf])}} )) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| fresh_compile_git_prompt() { | fresh_compile_git_prompt() { | ||||||
|   # Compile a simple C executable which parses the output of `git status |   # Compile a simple C executable which parses the output of `git status | ||||||
|   # --procelain` to greatly decrease the time taken to render the prompt |   # --procelain` to greatly decrease the time taken to render the prompt | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user