[PR] dylanaraps/neofetch#2356 from CarterLi - Resolution (macOS): improve detection

Upstream PR: https://github.com/dylanaraps/neofetch/pull/2356
Thanks to @CarterLi

Co-authored-by: 李通洲 <zhangsongcui3371@sina.com>
This commit is contained in:
Azalea 2023-08-10 13:09:28 -07:00
commit 391ff75cd1

View file

@ -3819,36 +3819,42 @@ get_song() {
get_resolution() {
case $os in
"Mac OS X"|"macOS")
if type -p screenresolution >/dev/null; then
resolution="$(screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}')"
resolution="${resolution//x??@/ @ }"
else
resolution="$(system_profiler SPDisplaysDataType |\
awk '/Resolution:/ {printf $2"x"$4" @ "$6"Hz, "}')"
resolution=""
temp_plist="/tmp/neofetch_system_profiler_SPDisplaysDataType.xml" # PlistBuddy doesn't support reading from /dev/stdin
if system_profiler SPDisplaysDataType -xml > $temp_plist; then
for ((gpu=0; gpu<999; gpu++)); do
if PlistBuddy -c "print 0:_items:${gpu}" $temp_plist &> /dev/null; then
for ((display=0; display<999; display++)); do
if spdisplays_resolution="$(PlistBuddy -c "print 0:_items:${gpu}:spdisplays_ndrvs:${display}:_spdisplays_resolution" $temp_plist)" 2>/dev/null; then
spdisplays_resolution="${spdisplays_resolution//.[0-9][0-9]/}"
if spdisplays_pixels="$(PlistBuddy -c "print 0:_items:${gpu}:spdisplays_ndrvs:${display}:_spdisplays_pixels" $temp_plist)" 2>/dev/null; then
scaled_x="$(echo $spdisplays_resolution | awk '{print $1}')"
output_x="$(echo $spdisplays_pixels | awk '{print $1}')"
let scale_factor=$output_x/$scaled_x
[[ $scale_factor > 1 ]] && spdisplays_resolution="${spdisplays_resolution// @/ @${scale_factor}x @}"
fi
if [[ -e "/Library/Preferences/com.apple.windowserver.plist" ]]; then
scale_factor="$(PlistBuddy -c "Print DisplayAnyUserSets:0:0:Resolution" \
/Library/Preferences/com.apple.windowserver.plist)"
spdisplays_resolution="${spdisplays_resolution// x /x}"
[[ $gpu > 0 || $display > 0 ]] && resolution+=", "
resolution+="${spdisplays_resolution}"
else
scale_factor=""
break
fi
# If no refresh rate is empty.
[[ "$resolution" == *"@ Hz"* ]] && \
resolution="${resolution//@ Hz}"
[[ "${scale_factor%.*}" == 2 ]] && \
resolution="${resolution// @/@2x @}"
done
else
break
fi
done
if [[ "$refresh_rate" == "off" ]]; then
resolution="${resolution// @ [0-9][0-9]Hz}"
resolution="${resolution// @ [0-9][0-9][0-9]Hz}"
resolution="${resolution/ @ [0-9][0-9][0.9]Hz}"
resolution="${resolution/ @ [0-9][0.9]Hz}"
resolution="${resolution/ @ [0-9]Hz}"
else
resolution="${resolution// @ 0Hz}"
fi
[[ "$resolution" == *"0Hz"* ]] && \
resolution="${resolution// @ 0Hz}"
rm $temp_plist
fi
;;
"Windows")