From 3614099fd59c9cfeb842c10a3da9ab99db317e1a Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Tue, 10 Sep 2019 23:49:09 +0300 Subject: [PATCH] image: fix terminal size issues. Closes #1314 --- neofetch | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/neofetch b/neofetch index d8254255..d6112c13 100755 --- a/neofetch +++ b/neofetch @@ -3700,6 +3700,45 @@ get_w3m_img_path() { get_window_size() { # This functions gets the current window size in # pixels. + # + # We first try to use the escape sequence "\033[14t" + # to get the terminal window size in pixels. If this + # fails we then fallback to using "xdotool" or other + # programs. + + # Tmux has a special way of reading escape sequences + # so we have to use a slightly different sequence to + # get the terminal size. + if [[ "$image_backend" == "tycat" ]]; then + printf '%b' '\e}qs\000' + + elif [[ -z $VTE_VERSION ]]; then + case "${TMUX:-null}" in + "null") printf '%b' '\e[14t' ;; + *) printf '%b' '\ePtmux;\e\e[14t\e\\ ' ;; + esac + fi + + # The escape codes above print the desired output as + # user input so we have to use read to store the out + # -put as a variable. + # The 1 second timeout is required for older bash + case "${BASH_VERSINFO[0]}" in + 4|5) IFS=';t' read -d t -t 0.05 -sra term_size ;; + *) IFS=';t' read -d t -t 1 -sra term_size ;; + esac + unset IFS + + # Split the string into height/width. + if [[ "$image_backend" == "tycat" ]]; then + term_width="$((term_size[2] * term_size[0]))" + term_height="$((term_size[3] * term_size[1]))" + + else + term_height="${term_size[1]}" + term_width="${term_size[2]}" + fi + [[ "$image_backend" == "kitty" ]] && IFS=x read -r term_width term_height <<< "$(kitty +kitten icat --print-window-size)"