#!/bin/sh ## SPDX-FileCopyrightText: 2024 Benjamin Grande M. S. ## ## 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). if test -n "${TERM_RESIZE_DISABLE:-}"; then exit 0 fi test -t 0 || exit 0 ## 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 0 ## 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 active_console="$(cat /sys/class/tty/console/active)" term_file_wanted="${term_file_wanted} ${active_console}" unset active_console 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 0 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 resize_cmd="$(resize)" eval "${resize_cmd}" >/dev/null exit 0 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 # shellcheck disable=3045,SC2034 IFS='[;R' read -r -t 1 -s -d R _ rows cols _ &2 stty echo unset rows cols exit 1 } if test "${COLUMNS}" = "${cols}" && test "${LINES}" = "${rows}";then stty echo unset rows cols exit 0 elif test "${rows}" -gt 0 && test "${cols}" -gt 0;then stty echo cols "${cols}" rows "${rows}" unset rows cols exit 0 fi echo "error: cannot resize screen: unsupported terminal emulator" >&2 stty echo unset rows cols exit 1