Images: Rewrite functions
This commit is contained in:
parent
7d1d49a1a7
commit
5ccbb39fbf
|
@ -287,8 +287,8 @@ disk_display="off"
|
||||||
|
|
||||||
|
|
||||||
# Image Source
|
# Image Source
|
||||||
# --image wall, ascii, /path/to/img, /path/to/dir/, off
|
# --image wallpaper, /path/to/img, /path/to/dir/, off
|
||||||
image="wall"
|
image_source="wallpaper"
|
||||||
|
|
||||||
# Thumbnail directory
|
# Thumbnail directory
|
||||||
thumbnail_dir="$HOME/.cache/thumbnails/neofetch"
|
thumbnail_dir="$HOME/.cache/thumbnails/neofetch"
|
||||||
|
|
260
neofetch
260
neofetch
|
@ -1797,56 +1797,46 @@ get_cols() {
|
||||||
|
|
||||||
# IMAGES
|
# IMAGES
|
||||||
|
|
||||||
get_wallpaper() {
|
get_image_backend() {
|
||||||
case "$os" in
|
get_w3m_img_path
|
||||||
"Linux" | "BSD")
|
|
||||||
if type -p feh >/dev/null && [[ -f "$HOME/.fehbg" ]]; then
|
|
||||||
img="$(awk -F\' '/feh/ {printf $2}' "$HOME/.fehbg")"
|
|
||||||
|
|
||||||
elif type -p nitrogen >/dev/null; then
|
# Fallback to ascii mode if imagemagick isn't installed.
|
||||||
img="$(awk -F'=' '/file/ {printf $2;exit;}' "$XDG_CONFIG_HOME/nitrogen/bg-saved.cfg")"
|
type -p convert >/dev/null 2>&1 || image_backend="ascii"
|
||||||
|
|
||||||
elif type -p gsettings >/dev/null; then
|
case "${image_backend:=image}" in
|
||||||
# Get DE if user has disabled the function.
|
"image")
|
||||||
[[ -z "$de" ]] && get_de
|
case "$image_source" in
|
||||||
|
"wall"*) get_wallpaper 2>/dev/null ;;
|
||||||
|
"off") image_backend="off"; return ;;
|
||||||
|
*)
|
||||||
|
if [[ -d "$image_source" ]]; then
|
||||||
|
files=("${image_source%/}"/*.{png,jpg,jpeg})
|
||||||
|
img="$(printf "%s" "${files[RANDOM % (${#files[@]} - 1)]}")"
|
||||||
|
else
|
||||||
|
img="$image_source"
|
||||||
|
fi
|
||||||
|
|
||||||
case "$de" in
|
[ ! -f "$img" ] && { image_backend="ascii"; get_ascii 2>/dev/null; return; }
|
||||||
"MATE"*) img="$(gsettings get org.mate.background picture-filename)" ;;
|
|
||||||
*) img="$(gsettings get org.gnome.desktop.background picture-uri)" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Strip quotes etc from the path.
|
|
||||||
img="${img/'file://'}"
|
|
||||||
img="${img//\'}"
|
|
||||||
img="${img//\%20/ }"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
"Mac OS X")
|
|
||||||
img="$(osascript -e 'tell application "System Events" to picture of current desktop')"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"Windows")
|
|
||||||
case "$distro" in
|
|
||||||
"Windows XP")
|
|
||||||
img="/cygdrive/c/Documents and Settings/${USER}"
|
|
||||||
img+="/Local Settings/Application Data/Microsoft"
|
|
||||||
img+="/Wallpaper1.bmp"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"Windows"*)
|
|
||||||
img="$APPDATA/Microsoft/Windows/Themes"
|
|
||||||
img+="/TranscodedWallpaper.jpg"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if [[ -n "$ITERM_PROFILE" ]]; then
|
||||||
|
image_program="iterm2"
|
||||||
|
|
||||||
|
elif [[ "$(tycat 2>/dev/null)" ]]; then
|
||||||
|
image_program="tycat"
|
||||||
|
|
||||||
|
else
|
||||||
|
image_program="w3m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make_thumbnail
|
||||||
|
display_image
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
"ascii") get_ascii 2>/dev/null ;;
|
||||||
|
"off") ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# If img is an xml file don't use it.
|
|
||||||
[[ "${img/*\./}" == "xml" ]] && img=""
|
|
||||||
|
|
||||||
# Error msg
|
|
||||||
[[ -z "$img" ]] && err "Image: Wallpaper detection failed, falling back to ascii mode."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_ascii() {
|
get_ascii() {
|
||||||
|
@ -1921,28 +1911,86 @@ get_ascii() {
|
||||||
export LC_ALL=C
|
export LC_ALL=C
|
||||||
}
|
}
|
||||||
|
|
||||||
get_image() {
|
get_w3m_img_path() {
|
||||||
# Fallback to ascii mode if imagemagick isn't installed.
|
if [[ -x "$w3m_img_path" ]]; then
|
||||||
type -p convert >/dev/null 2>&1 || image="ascii"
|
return
|
||||||
|
|
||||||
case "$image" in
|
elif [[ -x "/usr/lib/w3m/w3mimgdisplay" ]]; then
|
||||||
"wall") get_wallpaper 2>/dev/null ;;
|
w3m_img_path="/usr/lib/w3m/w3mimgdisplay"
|
||||||
"ascii") get_ascii; return ;;
|
|
||||||
*)
|
elif [[ -x "/usr/libexec/w3m/w3mimgdisplay" ]]; then
|
||||||
if [[ -d "$image" ]]; then
|
w3m_img_path="/usr/libexec/w3m/w3mimgdisplay"
|
||||||
files=("${image%/}"/*.{png,jpg,jpeg})
|
|
||||||
img="$(printf "%s" "${files[RANDOM % (${#files[@]} - 1)]}")"
|
elif [[ -x "/usr/lib64/w3m/w3mimgdisplay" ]]; then
|
||||||
else
|
w3m_img_path="/usr/lib64/w3m/w3mimgdisplay"
|
||||||
img="$image"
|
|
||||||
|
elif [[ -x "/usr/libexec64/w3m/w3mimgdisplay" ]]; then
|
||||||
|
w3m_img_path="/usr/libexec64/w3m/w3mimgdisplay"
|
||||||
|
|
||||||
|
else
|
||||||
|
image_backend="ascii"
|
||||||
|
err "Image: w3m-img wasn't found on your system, falling back to ascii mode."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_wallpaper() {
|
||||||
|
case "$os" in
|
||||||
|
"Linux" | "BSD")
|
||||||
|
if type -p feh >/dev/null && [[ -f "$HOME/.fehbg" ]]; then
|
||||||
|
img="$(awk -F\' '/feh/ {printf $2}' "$HOME/.fehbg")"
|
||||||
|
|
||||||
|
elif type -p nitrogen >/dev/null; then
|
||||||
|
img="$(awk -F'=' '/file/ {printf $2;exit;}' "$XDG_CONFIG_HOME/nitrogen/bg-saved.cfg")"
|
||||||
|
|
||||||
|
elif type -p gsettings >/dev/null; then
|
||||||
|
# Get DE if user has disabled the function.
|
||||||
|
[[ -z "$de" ]] && get_de
|
||||||
|
|
||||||
|
case "$de" in
|
||||||
|
"MATE"*) img="$(gsettings get org.mate.background picture-filename)" ;;
|
||||||
|
*) img="$(gsettings get org.gnome.desktop.background picture-uri)" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Strip quotes etc from the path.
|
||||||
|
img="${img/'file://'}"
|
||||||
|
img="${img//\'}"
|
||||||
|
img="${img//\%20/ }"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
"Mac OS X")
|
||||||
|
img="$(osascript -e 'tell application "System Events" to picture of current desktop')"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"Windows")
|
||||||
|
case "$distro" in
|
||||||
|
"Windows XP")
|
||||||
|
img="/cygdrive/c/Documents and Settings/${USER}"
|
||||||
|
img+="/Local Settings/Application Data/Microsoft"
|
||||||
|
img+="/Wallpaper1.bmp"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"Windows"*)
|
||||||
|
img="$APPDATA/Microsoft/Windows/Themes"
|
||||||
|
img+="/TranscodedWallpaper.jpg"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# If img is an xml file don't use it.
|
||||||
|
[[ "${img/*\./}" == "xml" ]] && img=""
|
||||||
|
|
||||||
|
# Error msg
|
||||||
|
[[ -z "$img" ]] && err "Image: Wallpaper detection failed, falling back to ascii mode."
|
||||||
|
}
|
||||||
|
|
||||||
|
make_thumbnail() {
|
||||||
if [[ -n "$TMUX" ]]; then
|
if [[ -n "$TMUX" ]]; then
|
||||||
printf "%b" "\033Ptmux;\033\033[14t\033\033[c\033\\"
|
printf "%b" "\033Ptmux;\033\033[14t\033\033[c\033\\"
|
||||||
read_flags="-d c"
|
read_flags="-d c"
|
||||||
|
|
||||||
elif [[ "$image_backend" == "tycat" ]]; then
|
elif [[ "$image_program" == "tycat" ]]; then
|
||||||
printf "%b" "\033}qs\000"
|
printf "%b" "\033}qs\000"
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -1954,7 +2002,7 @@ get_image() {
|
||||||
builtin read -s -t 1 ${read_flags} -r term_size
|
builtin read -s -t 1 ${read_flags} -r term_size
|
||||||
|
|
||||||
# Split the string
|
# Split the string
|
||||||
if [[ "$image_backend" == "tycat" ]]; then
|
if [[ "$image_program" == "tycat" ]]; then
|
||||||
term_size=(${term_size//;/ })
|
term_size=(${term_size//;/ })
|
||||||
term_width="$((term_size[2] * term_size[0]))"
|
term_width="$((term_size[2] * term_size[0]))"
|
||||||
term_height="$((term_size[3] * term_size[1]))"
|
term_height="$((term_size[3] * term_size[1]))"
|
||||||
|
@ -1969,7 +2017,7 @@ get_image() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get terminal width and height if \033[14t is unsupported.
|
# Get terminal width and height if \033[14t is unsupported.
|
||||||
if (("${#term_size}" <= 5)) && [[ "$image_backend" != "tycat" ]]; then
|
if (("${#term_size}" <= 5)) && [[ "$image_program" != "tycat" ]]; then
|
||||||
if type -p xdotool >/dev/null 2>&1 && \
|
if type -p xdotool >/dev/null 2>&1 && \
|
||||||
[[ "$image_backend" != "iterm2" ]]; then
|
[[ "$image_backend" != "iterm2" ]]; then
|
||||||
|
|
||||||
|
@ -1981,7 +2029,7 @@ get_image() {
|
||||||
elif type -p xwininfo >/dev/null 2>&1 && \
|
elif type -p xwininfo >/dev/null 2>&1 && \
|
||||||
type -p xdpyinfo >/dev/null 2>&1 || \
|
type -p xdpyinfo >/dev/null 2>&1 || \
|
||||||
type -p xprop >/dev/null 2>&1 && \
|
type -p xprop >/dev/null 2>&1 && \
|
||||||
[[ "$image_backend" != "iterm2" ]]; then
|
[[ "$image_program" != "iterm2" ]]; then
|
||||||
|
|
||||||
if type -p xdpyinfo >/dev/null 2>&1; then
|
if type -p xdpyinfo >/dev/null 2>&1; then
|
||||||
current_window="$(xdpyinfo | grep -F "focus" | grep -E -o "0x[0-9a-f]+")"
|
current_window="$(xdpyinfo | grep -F "focus" | grep -E -o "0x[0-9a-f]+")"
|
||||||
|
@ -2121,60 +2169,24 @@ get_image() {
|
||||||
img="$thumbnail_dir/$imgname"
|
img="$thumbnail_dir/$imgname"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_w3m_img_path() {
|
|
||||||
if [[ -x "$w3m_img_path" ]]; then
|
|
||||||
return
|
|
||||||
|
|
||||||
elif [[ -x "/usr/lib/w3m/w3mimgdisplay" ]]; then
|
|
||||||
w3m_img_path="/usr/lib/w3m/w3mimgdisplay"
|
|
||||||
|
|
||||||
elif [[ -x "/usr/libexec/w3m/w3mimgdisplay" ]]; then
|
|
||||||
w3m_img_path="/usr/libexec/w3m/w3mimgdisplay"
|
|
||||||
|
|
||||||
elif [[ -x "/usr/lib64/w3m/w3mimgdisplay" ]]; then
|
|
||||||
w3m_img_path="/usr/lib64/w3m/w3mimgdisplay"
|
|
||||||
|
|
||||||
elif [[ -x "/usr/libexec64/w3m/w3mimgdisplay" ]]; then
|
|
||||||
w3m_img_path="/usr/libexec64/w3m/w3mimgdisplay"
|
|
||||||
|
|
||||||
else
|
|
||||||
image="ascii"
|
|
||||||
err "Image: w3m-img wasn't found on your system, falling back to ascii mode."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_image_backend() {
|
|
||||||
if [[ -n "$ITERM_PROFILE" ]]; then
|
|
||||||
image_backend="iterm2"
|
|
||||||
|
|
||||||
elif [[ "$(tycat 2>/dev/null)" ]]; then
|
|
||||||
image_backend="tycat"
|
|
||||||
|
|
||||||
else
|
|
||||||
image_backend="w3m"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
display_image() {
|
display_image() {
|
||||||
if [[ "$image" != "ascii" ]]; then
|
case "$image_program" in
|
||||||
case "$image_backend" in
|
"w3m")
|
||||||
"w3m")
|
# Add a tiny delay to fix issues with images not
|
||||||
# Add a tiny delay to fix issues with images not
|
# appearing in specific terminal emulators.
|
||||||
# appearing in specific terminal emulators.
|
sleep 0.05
|
||||||
sleep 0.05
|
printf "%b\n" "0;1;$xoffset;$yoffset;$width;$height;;;;;$img\n4;\n3;" |\
|
||||||
printf "%b\n" "0;1;$xoffset;$yoffset;$width;$height;;;;;$img\n4;\n3;" |\
|
"$w3m_img_path" -bg "$background_color" >/dev/null & 2>&1 || padding="\033[0C"
|
||||||
"$w3m_img_path" -bg "$background_color" >/dev/null & 2>&1 || padding="\033[0C"
|
;;
|
||||||
;;
|
|
||||||
|
|
||||||
"iterm2")
|
"iterm2")
|
||||||
printf "%b\a\n" "\033]1337;File=width=${width}px;height=${height}px;inline=1:$(base64 < "$img")"
|
printf "%b\a\n" "\033]1337;File=width=${width}px;height=${height}px;inline=1:$(base64 < "$img")"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"tycat")
|
"tycat")
|
||||||
tycat "$img"
|
tycat "$img"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# SCREENSHOT
|
# SCREENSHOT
|
||||||
|
@ -2742,7 +2754,7 @@ get_term_padding() {
|
||||||
|
|
||||||
dynamic_prompt() {
|
dynamic_prompt() {
|
||||||
# Calculate image height in terminal cells.
|
# Calculate image height in terminal cells.
|
||||||
if [[ "$image" != "ascii" ]]; then
|
if [[ "$image_backend" != "ascii" ]]; then
|
||||||
get_term_padding 2>/dev/null
|
get_term_padding 2>/dev/null
|
||||||
lines="$(((height + (${border:-0} * 2) + ${yoffset:-0}) / font_height))"
|
lines="$(((height + (${border:-0} * 2) + ${yoffset:-0}) / font_height))"
|
||||||
fi
|
fi
|
||||||
|
@ -3007,8 +3019,8 @@ get_args() {
|
||||||
|
|
||||||
# Image
|
# Image
|
||||||
--image)
|
--image)
|
||||||
image="$2"
|
image_source="$2"
|
||||||
case "$2" in "-"* | "") image="ascii" ;; esac
|
case "$2" in "-"* | "") image_backend="ascii" ;; esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--image_size | --size) image_size="$2" ;;
|
--image_size | --size) image_size="$2" ;;
|
||||||
|
@ -3027,7 +3039,7 @@ get_args() {
|
||||||
|
|
||||||
# Ascii
|
# Ascii
|
||||||
--ascii)
|
--ascii)
|
||||||
image="ascii"
|
image_backend="ascii"
|
||||||
ascii="$2"
|
ascii="$2"
|
||||||
case "$2" in "-"* | "") ascii="distro" ;; esac
|
case "$2" in "-"* | "") ascii="distro" ;; esac
|
||||||
;;
|
;;
|
||||||
|
@ -3105,21 +3117,9 @@ main() {
|
||||||
# Hide the cursor and disable line wrap
|
# Hide the cursor and disable line wrap
|
||||||
printf "\033[?25l\033[?7l"
|
printf "\033[?25l\033[?7l"
|
||||||
|
|
||||||
# Display the image
|
get_image_backend
|
||||||
if [[ "$image" != "off" ]]; then
|
|
||||||
get_image_backend
|
|
||||||
|
|
||||||
# Find w3mimgdisplay
|
|
||||||
[[ "$image_backend" == "w3m" ]] && \
|
|
||||||
[[ "$image" != "ascii" ]] && \
|
|
||||||
get_w3m_img_path
|
|
||||||
|
|
||||||
# Get the image src
|
|
||||||
get_image
|
|
||||||
|
|
||||||
# Display the image if enabled
|
|
||||||
display_image
|
|
||||||
|
|
||||||
|
if [[ "$image_backend" != "off" ]]; then
|
||||||
# Set cursor position next to ascii art
|
# Set cursor position next to ascii art
|
||||||
printf "%b" "\033[$((${lines:-0} - ${prompt_loc:-0}))A"
|
printf "%b" "\033[$((${lines:-0} - ${prompt_loc:-0}))A"
|
||||||
|
|
||||||
|
@ -3132,12 +3132,12 @@ main() {
|
||||||
print_info 2>/dev/null
|
print_info 2>/dev/null
|
||||||
|
|
||||||
# Prompt calculation
|
# Prompt calculation
|
||||||
if [[ "$image" != "off" ]]; then
|
if [[ "$image_backend" != "off" ]]; then
|
||||||
dynamic_prompt
|
dynamic_prompt
|
||||||
|
|
||||||
# w3m-img: Draw the image a second time to fix
|
# w3m-img: Draw the image a second time to fix
|
||||||
# rendering issues in specific terminal emulators.
|
# rendering issues in specific terminal emulators.
|
||||||
[[ "$image_backend" == "w3m" ]] && display_image
|
[[ "$image_program" == "w3m" ]] && display_image
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Re-enable line wrap
|
# Re-enable line wrap
|
||||||
|
|
Reference in New Issue