Merge pull request #384 from dylanaraps/img
Image mode: Add support for terminal emulators that don't support \033[14t
This commit is contained in:
commit
4414ac6df2
2 changed files with 81 additions and 43 deletions
35
README.md
35
README.md
|
@ -86,6 +86,21 @@ Have a look at the wiki, I've updated/added some new pages!<br \>
|
||||||
- Alpine Linux: You also need `ncurses`.
|
- Alpine Linux: You also need `ncurses`.
|
||||||
|
|
||||||
|
|
||||||
|
##### Image mode
|
||||||
|
|
||||||
|
These dependencies are required for image mode to work.
|
||||||
|
|
||||||
|
- Displaying images: `w3m-img` \[1\] or `iTerm2` or `Terminology` \[2\]
|
||||||
|
- Thumbnail creation: `imagemagick`
|
||||||
|
- Window size: A terminal emulator that supports `\033[14t` \[3\] or `xdotool` or `xwininfo + xprop` or `xwininfo + xdpyinfo`
|
||||||
|
|
||||||
|
\[1\] `w3m-img` is sometimes bundled together with `w3m`.
|
||||||
|
|
||||||
|
\[2\] Image support is built into Terminology and iTerm2, and doesn't require w3m-img.
|
||||||
|
|
||||||
|
\[3\] See this wiki page to find out if your terminal emulator supports `\033[14t` or if you need an additonal dependency.
|
||||||
|
|
||||||
|
|
||||||
##### iOS
|
##### iOS
|
||||||
|
|
||||||
These dependencies can all be installed through Cydia.<br \>
|
These dependencies can all be installed through Cydia.<br \>
|
||||||
|
@ -99,19 +114,18 @@ Note: The cydia package installs these dependencies for you.
|
||||||
- `Gawk`
|
- `Gawk`
|
||||||
- `grep`
|
- `grep`
|
||||||
|
|
||||||
|
|
||||||
### Optional dependencies:
|
### Optional dependencies:
|
||||||
|
|
||||||
- Desktop Environment and Window Manager: `xprop` \[1\]
|
|
||||||
- Displaying images: `w3m-img` \[2\] \[3\] or `iTerm2` or `Terminology` \[4\]
|
|
||||||
- Thumbnail creation: `imagemagick`
|
|
||||||
- Displaying song information from Google Play Music Desktop Player: [`gpmdp-remote`](https://github.com/iAndrewT/gpmdp-remote)
|
- Displaying song information from Google Play Music Desktop Player: [`gpmdp-remote`](https://github.com/iAndrewT/gpmdp-remote)
|
||||||
|
- Desktop Environment and Window Manager: `xprop` \[1\]
|
||||||
|
|
||||||
##### Linux / BSD / Solaris
|
##### Linux / BSD / Solaris
|
||||||
|
|
||||||
- Wallpaper: `feh`, `nitrogen` or `gsettings`
|
- Wallpaper: `feh`, `nitrogen` or `gsettings`
|
||||||
- Current Song: `mpc`, `cmus`, `moc`, `spotify`, `gpmdc`
|
- Current Song: `mpc`, `cmus`, `moc`, `spotify`, `gpmdc`
|
||||||
- Resolution: `xorg-xrandr` or `xorg-xdpyinfo` \[5\]
|
- Resolution: `xorg-xrandr` or `xorg-xdpyinfo` \[2\]
|
||||||
- Screenshot: `scrot` \[6\]
|
- Screenshot: `scrot` \[3\]
|
||||||
|
|
||||||
##### OSX
|
##### OSX
|
||||||
|
|
||||||
|
@ -128,17 +142,10 @@ Note: The cydia package installs these dependencies for you.
|
||||||
|
|
||||||
\[1\] See **[#79](https://github.com/dylanaraps/neofetch/issues/79)** about why this is now a required dependency.
|
\[1\] See **[#79](https://github.com/dylanaraps/neofetch/issues/79)** about why this is now a required dependency.
|
||||||
|
|
||||||
\[2\] `w3m-img` is sometimes bundled together with `w3m`.
|
\[2\] Xrandr is prefered over xdpyinfo as Xrandr supports multi monitor and refresh rate display in the<br \>
|
||||||
|
|
||||||
\[3\] Image support only works in certain terminal emulators. The script will fallback to ascii mode on<br \>
|
|
||||||
terminal emulators that don't support the xterm escape sequences we're using for image sizing.
|
|
||||||
|
|
||||||
\[4\] Image support is built into Terminology and iTerm2, and doesn't require w3m-img.
|
|
||||||
|
|
||||||
\[5\] Xrandr is prefered over xdpyinfo as Xrandr supports multi monitor and refresh rate display in the<br \>
|
|
||||||
output.
|
output.
|
||||||
|
|
||||||
\[6\] You can use the launch flag `--scrot_cmd` or change the config option `$scrot_cmd` to your screenshot<br \>
|
\[3\] You can use the launch flag `--scrot_cmd` or change the config option `$scrot_cmd` to your screenshot<br \>
|
||||||
program's cmd and neofetch will use it instead of scrot.
|
program's cmd and neofetch will use it instead of scrot.
|
||||||
|
|
||||||
|
|
||||||
|
|
45
neofetch
45
neofetch
|
@ -2089,6 +2089,30 @@ getimage() {
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Get terminal width and height
|
# Get terminal width and height
|
||||||
|
if type -p xdotool >/dev/null 2>&1 && \
|
||||||
|
[ "$image_backend" != "iterm2" ]; then
|
||||||
|
|
||||||
|
current_window="$(xdotool getactivewindow)"
|
||||||
|
eval "$(xdotool getwindowgeometry --shell "$current_window")"
|
||||||
|
term_height="$HEIGHT"
|
||||||
|
term_width="$WIDTH"
|
||||||
|
|
||||||
|
elif type -p xwininfo >/dev/null 2>&1 && \
|
||||||
|
type -p xdpyinfo >/dev/null 2>&1 || \
|
||||||
|
type -p xprop >/dev/null 2>&1 && \
|
||||||
|
[ "$image_backend" != "iterm2" ]; then
|
||||||
|
|
||||||
|
if type -p xdpyinfo >/dev/null 2>&1; then
|
||||||
|
current_window="$(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)"
|
||||||
|
elif type -p xprop >/dev/null 2>&1; then
|
||||||
|
current_window="$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
term_size="$(xwininfo -id "$current_window" | awk -F ': ' '/Width|Height/ {printf $2 " "}')"
|
||||||
|
term_width="${term_size/ *}"
|
||||||
|
term_height="${term_size/${term_width}}"
|
||||||
|
|
||||||
|
else
|
||||||
if [ -n "$TMUX" ]; then
|
if [ -n "$TMUX" ]; then
|
||||||
printf "%b%s" "\033Ptmux;\033\033[14t\033\033[c\033\\"
|
printf "%b%s" "\033Ptmux;\033\033[14t\033\033[c\033\\"
|
||||||
read_flags="-d c"
|
read_flags="-d c"
|
||||||
|
@ -2119,9 +2143,12 @@ getimage() {
|
||||||
term_width="${term_size/*';'}"
|
term_width="${term_size/*';'}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
[ "${#term_size}" -le 5 ] && no_esc="1"
|
||||||
|
fi
|
||||||
|
|
||||||
# If $img isn't a file or the terminal doesn't support xterm escape sequences,
|
# If $img isn't a file or the terminal doesn't support xterm escape sequences,
|
||||||
# fallback to ascii mode.
|
# fallback to ascii mode.
|
||||||
if [ ! -f "$img" ] || ([ "${#term_size}" -le 5 ] && [ "$image_backend" != "tycat" ]); then
|
if [ ! -f "$img" ] || ([ "$no_esc" == 1 ] && [ "$image_backend" != "tycat" ]); then
|
||||||
image="ascii"
|
image="ascii"
|
||||||
getascii
|
getascii
|
||||||
|
|
||||||
|
@ -2879,25 +2906,25 @@ kdeconfigdir() {
|
||||||
|
|
||||||
dynamicprompt() {
|
dynamicprompt() {
|
||||||
# Calculate image height in terminal cells.
|
# Calculate image height in terminal cells.
|
||||||
# The '+ 4' adds a gap between the prompt and the content.
|
# The '+ 1' adds a gap between the prompt and the content.
|
||||||
[ "$image" != "ascii" ] && \
|
[ "$image" != "ascii" ] && \
|
||||||
lines="$((${height:-1} / ${font_height:-1} + 4))"
|
lines="$((${height:-1} / ${font_height:-1} + 1))"
|
||||||
|
|
||||||
# If the info is higher than the ascii/image place the prompt
|
# If the info is higher than the ascii/image place the prompt
|
||||||
# based on the info height instead of the ascii/image height.
|
# based on the info height instead of the ascii/image height.
|
||||||
if [ "${lines:-0}" -lt "${info_height:-0}" ]; then
|
if [ "${lines:-0}" -lt "${info_height:-0}" ]; then
|
||||||
lines="0"
|
lines="0"
|
||||||
else
|
else
|
||||||
lines="$((lines - info_height - 4))"
|
lines="$((lines - info_height + $((${yoffset:-1} / ${font_height:-1}))))"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set the prompt location
|
# Set the prompt location
|
||||||
[ "$image" != "off" ] && printf "\033[${lines/-*/0}B"
|
[ "$image" != "off" ] && printf "\033[${lines/-*/0}B"
|
||||||
|
|
||||||
# Add some padding if the lines are above 0
|
# Add some padding
|
||||||
if [ "$lines" -gt 0 ]; then
|
[ "$image_backend" != "w3m" ] && \
|
||||||
|
[ "$lines" -gt 0 ] && \
|
||||||
printf "\n\n"
|
printf "\n\n"
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
@ -3290,6 +3317,10 @@ main() {
|
||||||
printinfo
|
printinfo
|
||||||
[ "$image" != "off" ] && dynamicprompt
|
[ "$image" != "off" ] && dynamicprompt
|
||||||
|
|
||||||
|
# w3m-img: Draw the image a second time to fix
|
||||||
|
# rendering issues in specific terminal emulators.
|
||||||
|
[ "$image_backend" == "w3m" ] && displayimage
|
||||||
|
|
||||||
# Re-enable line wrap
|
# Re-enable line wrap
|
||||||
printf "%b%s" "\033[?7h"
|
printf "%b%s" "\033[?7h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue