mirror of
				https://github.com/gaschz/dotfiles.git
				synced 2025-11-04 05:28:56 +01:00 
			
		
		
		
	feat: add tool to resize terminal size
Inspired by the Archlinux Wiki. The Arch Wiki does not provide a copyrights page, it is therefore hard to credit the contributors Recent commit c6de5e8046d4965fde910ee3b0c9c0709899609c is 7 years old, with reference to $wgRightsPage. Individual contributors can't be referenced but there is credit to the specific page in the Arch wiki. https://gitlab.archlinux.org/archlinux/infrastructure/-/blob/master/roles/archwiki/templates/LocalSettings.php.j2
This commit is contained in:
		
							parent
							
								
									e5a92af8af
								
							
						
					
					
						commit
						50e80029b3
					
				@ -77,9 +77,9 @@ newline=$'\n'
 | 
			
		||||
 | 
			
		||||
if test "${color_prompt:-}" = "yes"; then
 | 
			
		||||
  # shellcheck disable=SC2154
 | 
			
		||||
  PS1="\$(_reset_line)\[\033[35m\][\[${reset_color}\]${debian_chroot:+($debian_chroot)}\[${usercolor}\]\u@\h \[${dircolor}\]\w\[${reset_color}\]\$(_git_prompt_info)\[\033[35m\]]\[${reset_color}\]${newline-}\$(_print_ec)${ps1_symbol} "
 | 
			
		||||
  PS1="\$(_reset_line)\$(resize-terminal)\[\033[35m\][\[${reset_color}\]${debian_chroot:+($debian_chroot)}\[${usercolor}\]\u@\h \[${dircolor}\]\w\[${reset_color}\]\$(_git_prompt_info)\[\033[35m\]]\[${reset_color}\]${newline-}\$(_print_ec)${ps1_symbol} "
 | 
			
		||||
else
 | 
			
		||||
  PS1="\$(_reset_line)[${debian_chroot:+($debian_chroot)}\u@\h:\w\$(_git_prompt_info)]${newline-}\$(_print_ec)${ps1_symbol} "
 | 
			
		||||
  PS1="\$(_reset_line)\$(resize-terminal)[${debian_chroot:+($debian_chroot)}\u@\h:\w\$(_git_prompt_info)]${newline-}\$(_print_ec)${ps1_symbol} "
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "${TERM-}" in
 | 
			
		||||
 | 
			
		||||
@ -71,10 +71,10 @@ if test "${color_prompt-}" = "yes"; then
 | 
			
		||||
  autoload -U colors && colors
 | 
			
		||||
  [[ "${COLORTERM-}" == (24bit|truecolor) || "${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolor
 | 
			
		||||
 | 
			
		||||
  PS1="%F{magenta}[%{$usercolor%}%n@%M%F{reset_color%} %{$dircolor%}%50<...<%~%<<%F{reset_color%}\$(_git_prompt_info)%F{magenta}]%F{reset_color}${newline-}${ps1_symbol} "
 | 
			
		||||
  PS1="\$(resize-terminal)%F{magenta}[%{$usercolor%}%n@%M%F{reset_color%} %{$dircolor%}%50<...<%~%<<%F{reset_color%}\$(_git_prompt_info)%F{magenta}]%F{reset_color}${newline-}${ps1_symbol} "
 | 
			
		||||
  RPS1="%(?..(%{"$'\e[31m'"%}%?%{$reset_color%}%)%<<)"
 | 
			
		||||
else
 | 
			
		||||
  PS1="[%n@%M %~\$(_git_prompt_info)]${newline}${ps1_symbol} "
 | 
			
		||||
  PS1="\$(resize-terminal)[%n@%M %~\$(_git_prompt_info)]${newline}${ps1_symbol} "
 | 
			
		||||
  RPS1="%(?..(%?%)%<<)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										83
									
								
								files/sh/.local/bin/resize-terminal
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										83
									
								
								files/sh/.local/bin/resize-terminal
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
## SPDX-FileCopyrightText: 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
 | 
			
		||||
##
 | 
			
		||||
## SPDX-License-Identifier: GFDL-1.3-or-later
 | 
			
		||||
##
 | 
			
		||||
## Credits: https://wiki.archlinux.org/title/Working_with_the_serial_console#Resizing_a_terminal
 | 
			
		||||
##
 | 
			
		||||
## Resize terminal columns and lines to current window size.
 | 
			
		||||
## Useful for terminals over link (serial console, socat's pty etc).
 | 
			
		||||
 | 
			
		||||
test -t 0 || exit
 | 
			
		||||
 | 
			
		||||
## If argument is provided, allow user to bypass tty check.
 | 
			
		||||
if test "${#}" -eq 0; then
 | 
			
		||||
  ## Shells on graphical sessions (terminal emulators) are skipped.
 | 
			
		||||
  test "${XDG_SESSION_TYPE:-}" = "tty" || exit
 | 
			
		||||
  ## Serial ports and devices are desired.
 | 
			
		||||
  term_file="$(tty)"
 | 
			
		||||
  term_file_wanted="ttyUSB ttyS"
 | 
			
		||||
  ## Consoles are desired.
 | 
			
		||||
  if test -r /sys/class/tty/console/active; then
 | 
			
		||||
    term_file_wanted="${term_file_wanted} $(cat /sys/class/tty/console/active)"
 | 
			
		||||
  fi
 | 
			
		||||
  term_file_active=0
 | 
			
		||||
  for tf in $(printf %s"${term_file_wanted}"); do
 | 
			
		||||
    case "${term_file}" in
 | 
			
		||||
      *"/${tf}"*) term_file_active=1;;
 | 
			
		||||
      *) ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
  unset tf term_file term_file_wanted
 | 
			
		||||
  ## Terminal can handle screen resizing by itself.
 | 
			
		||||
  if test "${term_file_active}" = "0"; then
 | 
			
		||||
    unset term_file_active
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  unset term_file_active
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
## POSIX compliant.
 | 
			
		||||
# shellcheck disable=SC3045
 | 
			
		||||
if ! echo R | read -r -t 1 -sd R 2>/dev/null; then
 | 
			
		||||
  ## Fast but depends on XTerm.
 | 
			
		||||
  if has resize; then
 | 
			
		||||
    eval "$(resize)" >/dev/null
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  ## Slow due to heavy stty calls.
 | 
			
		||||
  termios="$(stty -g)"
 | 
			
		||||
  stty raw -echo min 0 time 1
 | 
			
		||||
  printf '\0337\033[r\033[99999;99999H\033[6n\0338' >/dev/tty
 | 
			
		||||
  IFS='[;R' read -r _ rows cols _ </dev/tty
 | 
			
		||||
  stty "$termios" cols "$cols" rows "$rows"
 | 
			
		||||
  unset termios
 | 
			
		||||
  exit
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
## Non-POSIX compliant and fast.
 | 
			
		||||
stty -echo
 | 
			
		||||
printf '\e7\e[r\033[99999;99999H\e[6n\e8' >/dev/tty
 | 
			
		||||
# shellcheck disable=3045,SC2034
 | 
			
		||||
IFS='[;R' read -r -t 1 -s -d R _ rows cols _ </dev/tty || {
 | 
			
		||||
  echo "error: cannot resize screen: unsupported terminal emulator" >&2
 | 
			
		||||
  stty echo
 | 
			
		||||
  unset rows cols
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if test ${COLUMNS} -eq "${cols}" && test ${LINES} -eq "${rows}";then
 | 
			
		||||
  stty echo
 | 
			
		||||
  unset rows cols
 | 
			
		||||
  exit
 | 
			
		||||
elif test "${rows}" -gt 0 && test "${cols}" -gt 0;then
 | 
			
		||||
  stty echo cols "${cols}" rows "${rows}"
 | 
			
		||||
  unset rows cols
 | 
			
		||||
  exit
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "error: cannot resize screen: unsupported terminal emulator" >&2
 | 
			
		||||
stty echo
 | 
			
		||||
unset rows cols
 | 
			
		||||
exit 1
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user