diff --git a/README.md b/README.md
index 8ae5209f..9005216e 100644
--- a/README.md
+++ b/README.md
@@ -63,18 +63,17 @@ your distro's logo or any ascii art of your choice!
## Dependencies
-
### Required dependencies:
- `Bash 4.0+`
-- `xprop` \[3\]
+- `xprop` \[1\]
- `procps-ng`
- Not required on OS X
### Optional dependencies:
-- Displaying images: `w3m-img` \[1\] or `iTerm2` \[2\]
+- Displaying images: `w3m-img` \[2\] \[3\] or `iTerm2` \[4\]
- Thumbnail creation: `imagemagick`
##### Linux / BSD
@@ -82,16 +81,20 @@ your distro's logo or any ascii art of your choice!
- Wallpaper: `feh`, `nitrogen` or `gsettings`
- Current Song: `mpc` or `cmus`
- Resolution: `xorg-xdpyinfo`
-- Screenshot: `scrot` \[4\]
+- Screenshot: `scrot` \[5\]
-\[1\] `w3m-img` is sometimes bundled together with `w3m`.
-\[2\] You can enable the `iTerm2` image backend by using the launch flag `--image_backend iterm2` or by
+\[1\] See **[#79](https://github.com/dylanaraps/fetch/issues/79)** about why this is now a required dependency.
+
+\[2\] `w3m-img` is sometimes bundled together with `w3m`.
+
+\[3\] Image support only works in certain terminal emulators. The script will fallback to ascii mode on
+terminal emulators that don't support the xterm escape sequences we're using for image sizing.
+
+\[4\] You can enable the `iTerm2` image backend by using the launch flag `--image_backend iterm2` or by
changing the config option `$image_backend` to `iterm2`.
-\[3\] See **[#79](https://github.com/dylanaraps/fetch/issues/79)** about why this is now a required dependency.
-
-\[4\] You can use the launch flag `--scrot_cmd` or change the config option `$scrot_cmd` to your screenshot
+\[5\] You can use the launch flag `--scrot_cmd` or change the config option `$scrot_cmd` to your screenshot
program's cmd and fetch will use it instead of scrot.
@@ -170,19 +173,6 @@ You can launch the script without a config file by using the flag `--config none
specify a custom config location using `--config path/to/config`.
-#### Sizing the image correctly
-
-**NOTE:** For the images to be sized correctly you need to set the `$font_width` variable.
-If you don't know your font width in pixels keep trying values until the image is half the
-terminal width.
-
-Once `font_width` is set the image will by default take up half the terminal width. You can
-use the launch flag `--size px` or change the config option `$image_size` to set it to a custom
-size in pixels.
-
-You can also use the launch flag `--font_width` to set it on the fly.
-
-
#### Setting the prompt height
If your shell prompt's height is greater than 1 line high, you'll need to change a config
@@ -290,7 +280,6 @@ alias fetch2="fetch \
--size px Size in pixels to make the image.
--image_backend w3m/iterm2 Which program to use to draw images.
--shuffle_dir path/to/dir Which directory to shuffle for an image.
- --font_width px Used to automatically size the image
--image_position left/right Where to display the image: (Left/Right)
--crop_mode mode Which crop mode to use
Takes the values: normal, fit, fill
diff --git a/config/config b/config/config
index 092585fc..e4c2fac7 100644
--- a/config/config
+++ b/config/config
@@ -267,15 +267,10 @@ crop_mode="normal"
# east/southwest/south/southeast
crop_offset="center"
-# Font width
-# --font_width num
-# Used when calculating dynamic image size
-font_width=5
-
# Image size
# The image is half the terminal width by default.
-# --size half, px
-image_size="half"
+# --size auto, px
+image_size="auto"
# Right gap between image and text
# --gap num
diff --git a/fetch b/fetch
index 708f2bbc..5d1b4a3c 100755
--- a/fetch
+++ b/fetch
@@ -285,15 +285,10 @@ crop_mode="normal"
# east/southwest/south/southeast
crop_offset="center"
-# Font width
-# Used when calculating dynamic image size
-# --font_width num
-font_width=5
-
# Image size
# The image is half the terminal width by default.
-# --size half, px
-image_size="half"
+# --size auto, px
+image_size="auto"
# Right gap between image and text
# --gap num
@@ -1882,8 +1877,21 @@ getimage () {
;;
esac
- # If $img isn't a file, fallback to ascii mode.
- if [ ! -f "$img" ]; then
+ # Get terminal width and height
+ printf "%b%s" '\033[14t'
+
+ index=0
+ while IFS= read -s -r -n 1 -t 0.25 char; do
+ case "$index" in
+ "0") [ "$char" == ";" ] && index=$((index + 1)) ;;
+ "1") [ "$char" == ";" ] && index=$((index + 1)) || term_height="${term_height}${char}" ;;
+ "2") [ "$char" == "t" ] && break || term_width="${term_width}${char}"
+ esac
+ done
+
+ # If $img isn't a file or the terminal doesn't support xterm escape sequences,
+ # fallback to ascii mode.
+ if [ ! -f "$img" ] || [ -z "$term_height" ]; then
# Fallback to ascii mode
image="ascii"
getascii
@@ -1891,14 +1899,22 @@ getimage () {
return
fi
- # Get lines and columns
+ # Get terminal lines and columns
columns=$(tput cols)
lines=$(tput lines)
+ # Calculate font size
+ font_width=$((term_width / columns))
+ font_height=$((term_height / lines))
+
# Image size is half of the terminal
- [ "$image_size" == "half" ] && \
+ if [ "$image_size" == "auto" ]; then
image_size=$((columns * font_width / 2))
+ [ "$((term_height - term_height / 4))" -lt "$image_size" ] && \
+ image_size=$((term_height - term_height / 4))
+ fi
+
# Where to draw the image
case "$image_position" in
"left")
@@ -2334,7 +2350,6 @@ usage () { cat << EOF
--size px Size in pixels to make the image.
--image_backend w3m/iterm2 Which program to use to draw images.
--shuffle_dir path/to/dir Which directory to shuffle for an image.
- --font_width px Used to automatically size the image
--image_position left/right Where to display the image: (Left/Right)
--crop_mode mode Which crop mode to use
Takes the values: normal, fit, fill
@@ -2449,7 +2464,6 @@ while [ "$1" ]; do
--size) image_size="$2" ;;
--image_backend) image_backend="$2" ;;
--shuffle_dir) shuffle_dir="$2" ;;
- --font_width) font_width="$2" ;;
--image_position) image_position="$2" ;;
--crop_mode) crop_mode="$2" ;;
--crop_offset) crop_offset="$2" ;;