You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
7.9 KiB
182 lines
7.9 KiB
#!/usr/bin/env zsh |
|
#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 |
|
|
|
# Taken from NeoFetch (slightly modified) |
|
get_term() { |
|
local term |
|
# If function was run, stop here. |
|
#((term_run == 1)) && return |
|
|
|
# Workaround for macOS systems that |
|
# don't support the block below. |
|
case "$TERM_PROGRAM" in |
|
"iTerm.app") term="iTerm2" ;; |
|
"Terminal.app") term="Apple Terminal" ;; |
|
"Hyper") term="HyperTerm" ;; |
|
*) term="${TERM_PROGRAM/\.app}" ;; |
|
esac |
|
|
|
# Check $PPID for terminal emulator. |
|
while [[ -z "$term" ]]; do |
|
parent="$(get_ppid "$parent")" |
|
name="$(get_process_name "$parent")" |
|
|
|
case "${name// }" in |
|
"${SHELL/*\/}" | *"sh" | "tmux"* | "screen" | "su"*) ;; |
|
"login"* | *"Login"* | "init" | "(init)") term="$(tty)" ;; |
|
"ruby" | "1" | "systemd" | "sshd"* | "python"* | "USER"*"PID"*) break ;; |
|
"gnome-terminal-") term="gnome-terminal" ;; |
|
*) term="${name##*/}" ;; |
|
esac |
|
done |
|
|
|
# Log that the function was run. |
|
#term_run=1 |
|
|
|
echo "${term}" |
|
} |
|
|
|
get_term_font() { |
|
local term="${1}" |
|
#((term_run != 1)) && get_term |
|
|
|
case "$term" in |
|
"alacritty"*) |
|
term_font="$(awk -F ':|#' '/normal:/ {getline; print}' "${XDG_CONFIG_HOME}/alacritty/alacritty.yml")" |
|
term_font="${term_font/*family:}" |
|
term_font="${term_font/$'\n'*}" |
|
term_font="${term_font/\#*}" |
|
;; |
|
|
|
"Apple_Terminal") |
|
term_font="$(osascript -e 'tell application "Terminal" to font name of window frontmost')" |
|
;; |
|
"iTerm2") |
|
# Unfortunately the profile name is not unique, but it seems to be the only thing |
|
# that identifies an active profile. There is the "id of current session of current window" |
|
# thou, but that does not match to a guid in the plist. |
|
# So, be warned! Collisions may occur! |
|
# See: https://groups.google.com/forum/#!topic/iterm2-discuss/0tO3xZ4Zlwg |
|
# and: https://gitlab.com/gnachman/iterm2/issues/5586 |
|
local currentProfileName=$(osascript -e 'tell application "iTerm2" to profile name of current session of current window') |
|
|
|
# Warning: Dynamic profiles are not taken into account here! |
|
# https://www.iterm2.com/documentation-dynamic-profiles.html |
|
|
|
local nonAsciiFont |
|
|
|
# Count Guids in "New Bookmarks"; they should be unique |
|
local profilesCount=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null | grep -c "Guid") |
|
for idx in $(seq 0 "${profilesCount}"); do |
|
local profileName=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Name:" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null) |
|
if [[ "${profileName}" == "${currentProfileName}" ]]; then |
|
# "Normal Font" |
|
term_font=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Normal\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist) |
|
|
|
# Font for non-ascii characters |
|
# Only check for a different non-ascii font, if the user checked |
|
# the "use a different font for non-ascii text" switch. |
|
local useDifferentFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Use\ Non-ASCII\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist) |
|
if [[ "$useDifferentFont" == "true" ]]; then |
|
local nonAsciiFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Non\ Ascii\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist) |
|
if [[ "$term_font" != "$nonAsciiFont" ]]; then |
|
term_font="$term_font (normal) / $nonAsciiFont (non-ascii)" |
|
fi |
|
fi |
|
fi |
|
done |
|
;; |
|
|
|
"deepin-terminal"*) |
|
term_font="$(awk -F '=' '/font=/ {a=$2} /font_size/ {b=$2} END{print a " " b}' "${XDG_CONFIG_HOME}/deepin/deepin-terminal/config.conf")" |
|
;; |
|
|
|
"Hyper"*) |
|
term_font="$(awk -F "," '/fontFamily/ {a=$1} END{print a}' "${HOME}/.hyper.js" | awk -F "'" '{a=$2} END{print a}')" |
|
;; |
|
|
|
"konsole"*) |
|
# Get Process ID of current konsole window / tab |
|
child="$(get_ppid "$$")" |
|
|
|
konsole_instances=($(qdbus | grep 'org.kde.konsole')) |
|
|
|
for i in "${konsole_instances[@]}"; do |
|
konsole_sessions=($(qdbus "${i}" | grep '/Sessions/')) |
|
for session in "${konsole_sessions[@]}"; do |
|
if ((child == "$(qdbus "${i}" "${session}" processId)")); then |
|
profile="$(qdbus "${i}" "${session}" environment | awk -F '=' '/KONSOLE_PROFILE_NAME/ {print $2}')" |
|
break |
|
fi |
|
done |
|
[[ "$profile" ]] && break |
|
done |
|
|
|
# We could have two profile files for the same profile name, take first match |
|
profile_filename="$(grep -l "Name=${profile}" "${HOME}"/.local/share/konsole/*.profile)" |
|
profile_filename="${profile_filename/$'\n'*}" |
|
[[ "$profile_filename" ]] && term_font="$(awk -F '=|,' '/Font=/ {print $2 " " $3}' "$profile_filename")" |
|
;; |
|
|
|
"mintty") |
|
term_font="$(awk -F '=' '!/^($|#)/ && /Font/ {printf $2; exit}' "${HOME}/.minttyrc")" |
|
;; |
|
|
|
"pantheon"*) |
|
term_font="$(gsettings get org.pantheon.terminal.settings font)" |
|
[[ -z "${term_font//\'}" ]] && term_font="$(gsettings get org.gnome.desktop.interface monospace-font-name)" |
|
term_font="$(trim_quotes "$term_font")" |
|
;; |
|
|
|
"sakura"*) |
|
term_font="$(awk -F '=' '/^font=/ {a=$2} END{print a}' "${XDG_CONFIG_HOME}/sakura/sakura.conf")" |
|
;; |
|
|
|
"terminology") |
|
term_font="$(strings "${XDG_CONFIG_HOME}/terminology/config/standard/base.cfg" | awk '/^font\.name$/{print a}{a=$0}')" |
|
term_font="${term_font/.pcf}" |
|
term_font="${term_font/:*}" |
|
;; |
|
|
|
"termite") |
|
[[ -f "${XDG_CONFIG_HOME}/termite/config" ]] && termite_config="${XDG_CONFIG_HOME}/termite/config" |
|
term_font="$(awk -F '= ' '/\[options\]/ {opt=1} /^font/ {if(opt==1) a=$2; opt=0} END{print a}' "/etc/xdg/termite/config" "$termite_config")" |
|
;; |
|
|
|
"urxvt" | "urxvtd" | "rxvt-unicode" | "xterm") |
|
term_font="$(grep -i -F "${term/d}*font" < <(xrdb -query))" |
|
term_font="${term_font/*font:}" |
|
term_font="$(trim "$term_font")" |
|
|
|
# Xresources has two different font formats, this checks which |
|
# one is in use and formats it accordingly. |
|
case "$term_font" in |
|
*"xft:"*) |
|
term_font="${term_font/xft:}" |
|
term_font="${term_font/:*}" |
|
;; |
|
|
|
"-"*) term_font="$(awk -F '\\-' '{printf $3}' <<< "$term_font")" ;; |
|
esac |
|
;; |
|
|
|
"xfce4-terminal") |
|
term_font="$(awk -F '=' '/^FontName/ {a=$2} END{print a}' "${XDG_CONFIG_HOME}/xfce4/terminal/terminalrc")" |
|
;; |
|
esac |
|
|
|
echo "${term_font}" |
|
} |
|
|
|
local currentTerminal=$(get_term) |
|
local currentFont=$(get_term_font "${currentTerminal}") |
|
print -P "===== Font debugging =====" |
|
print -P "You are using %F{blue}${currentTerminal}%f with Font %F{blue}${currentFont}%f\n" |
|
|
|
if [[ $(echo "${currentFont}" | grep -c -E "Powerline|Awesome|Nerd") -eq 0 ]]; then |
|
print -P "%F{yellow}WARNING%f It does not seem like you use an Powerline-enabled or Awesome Terminal Font!" |
|
print -P "Please make sure that your font settings are correct!" |
|
else |
|
print -P "Your font settings seem to be all right. If you still have issues," |
|
print -P "it is more likely to be a font issue than a Powerlevel9k related one." |
|
fi
|
|
|