summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Ritter <dritter03@googlemail.com>2017-03-10 04:02:42 +0300
committerDominik Ritter <dritter03@googlemail.com>2017-03-10 04:02:42 +0300
commitc30d6108b1f00a64f65a6608b2a3755a5430fbca (patch)
tree5d9ce7a3d7b6957f2d7187f719ac18276500798b
parent349b2c315f296a0de6c294cb803a9c691600ed6c (diff)
Add font issue debugger script
-rwxr-xr-xdebug/font-issues.zsh178
1 files changed, 178 insertions, 0 deletions
diff --git a/debug/font-issues.zsh b/debug/font-issues.zsh
new file mode 100755
index 00000000..b61543d4
--- /dev/null
+++ b/debug/font-issues.zsh
@@ -0,0 +1,178 @@
+#!/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 "You are using %F{blue}${currentTerminal}%f with Font %F{blue}${currentFont}%f"
+
+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!"
+fi