|
|
@ -1,9 +1,67 @@
|
|
|
|
#!/usr/bin/env zsh
|
|
|
|
#!/usr/bin/env zsh
|
|
|
|
#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
|
|
|
|
#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source functions/colors.zsh
|
|
|
|
|
|
|
|
source functions/icons.zsh
|
|
|
|
|
|
|
|
source functions/utilities.zsh
|
|
|
|
|
|
|
|
# Map our $OS to neofetch $os
|
|
|
|
|
|
|
|
os="$OS"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trim() {
|
|
|
|
|
|
|
|
set -f
|
|
|
|
|
|
|
|
# shellcheck disable=2048,2086
|
|
|
|
|
|
|
|
set -- $*
|
|
|
|
|
|
|
|
printf '%s\n' "${*//[[:space:]]/}"
|
|
|
|
|
|
|
|
set +f
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
get_ppid() {
|
|
|
|
|
|
|
|
# Get parent process ID of PID.
|
|
|
|
|
|
|
|
case "$os" in
|
|
|
|
|
|
|
|
"Windows")
|
|
|
|
|
|
|
|
ppid="$(ps -p "${1:-$PPID}" | awk '{printf $2}')"
|
|
|
|
|
|
|
|
ppid="${ppid/PPID}"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"Linux")
|
|
|
|
|
|
|
|
ppid="$(grep -i -F "PPid:" "/proc/${1:-$PPID}/status")"
|
|
|
|
|
|
|
|
ppid="$(trim "${ppid/PPid:}")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
|
|
|
ppid="$(ps -p "${1:-$PPID}" -o ppid=)"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf "%s" "$ppid"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
get_process_name() {
|
|
|
|
|
|
|
|
# Get PID name.
|
|
|
|
|
|
|
|
case "$os" in
|
|
|
|
|
|
|
|
"Windows")
|
|
|
|
|
|
|
|
name="$(ps -p "${1:-$PPID}" | awk '{printf $8}')"
|
|
|
|
|
|
|
|
name="${name/COMMAND}"
|
|
|
|
|
|
|
|
name="${name/*\/}"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"Linux")
|
|
|
|
|
|
|
|
name="$(< "/proc/${1:-$PPID}/comm")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
|
|
|
name="$(ps -p "${1:-$PPID}" -o comm=)"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf "%s" "$name"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Taken from NeoFetch (slightly modified)
|
|
|
|
# Taken from NeoFetch (slightly modified)
|
|
|
|
get_term() {
|
|
|
|
get_term() {
|
|
|
|
local term
|
|
|
|
local term
|
|
|
|
|
|
|
|
|
|
|
|
# If function was run, stop here.
|
|
|
|
# If function was run, stop here.
|
|
|
|
# ((term_run == 1)) && return
|
|
|
|
# ((term_run == 1)) && return
|
|
|
|
|
|
|
|
|
|
|
@ -16,16 +74,34 @@ get_term() {
|
|
|
|
*) term="${TERM_PROGRAM/\.app}" ;;
|
|
|
|
*) term="${TERM_PROGRAM/\.app}" ;;
|
|
|
|
esac
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Most likely TosWin2 on FreeMiNT - quick check
|
|
|
|
|
|
|
|
[[ "$TERM" == "tw52" || "$TERM" == "tw100" ]] && \
|
|
|
|
|
|
|
|
term="TosWin2"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[ "$SSH_CONNECTION" ]] && \
|
|
|
|
|
|
|
|
term="$SSH_TTY"
|
|
|
|
|
|
|
|
|
|
|
|
# Check $PPID for terminal emulator.
|
|
|
|
# Check $PPID for terminal emulator.
|
|
|
|
while [[ -z "$term" ]]; do
|
|
|
|
while [[ -z "$term" ]]; do
|
|
|
|
parent="$(get_ppid "$parent")"
|
|
|
|
parent="$(get_ppid "$parent")"
|
|
|
|
|
|
|
|
[[ -z "$parent" ]] && break
|
|
|
|
name="$(get_process_name "$parent")"
|
|
|
|
name="$(get_process_name "$parent")"
|
|
|
|
|
|
|
|
|
|
|
|
case "${name// }" in
|
|
|
|
case "${name// }" in
|
|
|
|
"${SHELL/*\/}" | *"sh" | "tmux"* | "screen" | "su"*) ;;
|
|
|
|
"${SHELL/*\/}"|*"sh"|"screen"|"su"*) ;;
|
|
|
|
"login"* | *"Login"* | "init" | "(init)") term="$(tty)" ;;
|
|
|
|
|
|
|
|
"ruby" | "1" | "systemd" | "sshd"* | "python"* | "USER"*"PID"*) break ;;
|
|
|
|
"login"*|*"Login"*|"init"|"(init)")
|
|
|
|
|
|
|
|
term="$(tty)"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"ruby"|"1"|"tmux"*|"systemd"|"sshd"*|"python"*|"USER"*"PID"*|"kdeinit"*|"launchd"*)
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"gnome-terminal-") term="gnome-terminal" ;;
|
|
|
|
"gnome-terminal-") term="gnome-terminal" ;;
|
|
|
|
|
|
|
|
"urxvtd") term="urxvt" ;;
|
|
|
|
|
|
|
|
*"nvim") term="Neovim Terminal" ;;
|
|
|
|
|
|
|
|
*"NeoVimServer"*) term="VimR Terminal" ;;
|
|
|
|
*) term="${name##*/}" ;;
|
|
|
|
*) term="${name##*/}" ;;
|
|
|
|
esac
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
done
|
|
|
@ -42,70 +118,119 @@ get_term_font() {
|
|
|
|
|
|
|
|
|
|
|
|
case "$term" in
|
|
|
|
case "$term" in
|
|
|
|
"alacritty"*)
|
|
|
|
"alacritty"*)
|
|
|
|
term_font="$(awk -F ':|#' '/normal:/ {getline; print}' "${XDG_CONFIG_HOME}/alacritty/alacritty.yml")"
|
|
|
|
shopt -s nullglob
|
|
|
|
|
|
|
|
confs=({$XDG_CONFIG_HOME,$HOME}/{alacritty,}/{.,}alacritty.ym?)
|
|
|
|
|
|
|
|
shopt -u nullglob
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[ -f "${confs[0]}" ]] || return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
term_font="$(awk -F ':|#' '/normal:/ {getline; print}' "${confs[0]}")"
|
|
|
|
term_font="${term_font/*family:}"
|
|
|
|
term_font="${term_font/*family:}"
|
|
|
|
term_font="${term_font/$'\n'*}"
|
|
|
|
term_font="${term_font/$'\n'*}"
|
|
|
|
term_font="${term_font/\#*}"
|
|
|
|
term_font="${term_font/\#*}"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"Apple_Terminal")
|
|
|
|
"Apple_Terminal")
|
|
|
|
term_font="$(osascript -e 'tell application "Terminal" to font name of window frontmost')"
|
|
|
|
term_font="$(osascript <<END
|
|
|
|
|
|
|
|
tell application "Terminal" to font name of window frontmost
|
|
|
|
|
|
|
|
END
|
|
|
|
|
|
|
|
)"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"iTerm2")
|
|
|
|
"iTerm2")
|
|
|
|
# Unfortunately the profile name is not unique, but it seems to be the only thing
|
|
|
|
# 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"
|
|
|
|
# that identifies an active profile. There is the "id of current session of current win-
|
|
|
|
# thou, but that does not match to a guid in the plist.
|
|
|
|
# dow" though, but that does not match to a guid in the plist.
|
|
|
|
# So, be warned! Collisions may occur!
|
|
|
|
# So, be warned, collisions may occur!
|
|
|
|
# See: https://groups.google.com/forum/#!topic/iterm2-discuss/0tO3xZ4Zlwg
|
|
|
|
# See: https://groups.google.com/forum/#!topic/iterm2-discuss/0tO3xZ4Zlwg
|
|
|
|
# and: https://gitlab.com/gnachman/iterm2/issues/5586
|
|
|
|
local current_profile_name profiles_count profile_name diff_font
|
|
|
|
local currentProfileName=$(osascript -e 'tell application "iTerm2" to profile name of current session of current window')
|
|
|
|
|
|
|
|
|
|
|
|
current_profile_name="$(osascript <<END
|
|
|
|
|
|
|
|
tell application "iTerm2" to profile name \
|
|
|
|
|
|
|
|
of current session of current window
|
|
|
|
|
|
|
|
END
|
|
|
|
|
|
|
|
)"
|
|
|
|
|
|
|
|
|
|
|
|
# Warning: Dynamic profiles are not taken into account here!
|
|
|
|
# Warning: Dynamic profiles are not taken into account here!
|
|
|
|
# https://www.iterm2.com/documentation-dynamic-profiles.html
|
|
|
|
# https://www.iterm2.com/documentation-dynamic-profiles.html
|
|
|
|
|
|
|
|
font_file="${HOME}/Library/Preferences/com.googlecode.iterm2.plist"
|
|
|
|
local nonAsciiFont
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Count Guids in "New Bookmarks"; they should be unique
|
|
|
|
# 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")
|
|
|
|
profiles_count="$(/usr/libexec/PlistBuddy -c "Print ':New Bookmarks:'" "$font_file" | \
|
|
|
|
for idx in $(seq 0 "${profilesCount}"); do
|
|
|
|
grep -w -c "Guid")"
|
|
|
|
local profileName=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Name:" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null)
|
|
|
|
|
|
|
|
if [[ "${profileName}" == "${currentProfileName}" ]]; then
|
|
|
|
for ((i=0; i<profiles_count; i++)); do
|
|
|
|
|
|
|
|
profile_name="$(/usr/libexec/PlistBuddy -c "Print ':New Bookmarks:${i}:Name:'" "$font_file")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "$profile_name" == "$current_profile_name" ]]; then
|
|
|
|
# "Normal Font"
|
|
|
|
# "Normal Font"
|
|
|
|
term_font=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Normal\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
|
|
|
|
term_font="$(/usr/libexec/PlistBuddy -c "Print ':New Bookmarks:${i}:Normal Font:'" \
|
|
|
|
|
|
|
|
"$font_file")"
|
|
|
|
|
|
|
|
|
|
|
|
# Font for non-ascii characters
|
|
|
|
# Font for non-ascii characters
|
|
|
|
# Only check for a different non-ascii font, if the user checked
|
|
|
|
# Only check for a different non-ascii font, if the user checked
|
|
|
|
# the "use a different font for non-ascii text" switch.
|
|
|
|
# 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)
|
|
|
|
diff_font="$(/usr/libexec/PlistBuddy -c "Print ':New Bookmarks:${i}:Use Non-ASCII Font:'" \
|
|
|
|
if [[ "$useDifferentFont" == "true" ]]; then
|
|
|
|
"$font_file")"
|
|
|
|
local nonAsciiFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Non\ Ascii\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
|
|
|
|
|
|
|
|
if [[ "$term_font" != "$nonAsciiFont" ]]; then
|
|
|
|
if [[ "$diff_font" == "true" ]]; then
|
|
|
|
term_font="$term_font (normal) / $nonAsciiFont (non-ascii)"
|
|
|
|
non_ascii="$(/usr/libexec/PlistBuddy -c "Print ':New Bookmarks:${i}:Non Ascii Font:'" \
|
|
|
|
fi
|
|
|
|
"$font_file")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[ "$term_font" != "$non_ascii" ]] && \
|
|
|
|
|
|
|
|
term_font="$term_font (normal) / $non_ascii (non-ascii)"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"deepin-terminal"*)
|
|
|
|
"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")"
|
|
|
|
term_font="$(awk -F '=' '/font=/ {a=$2} /font_size/ {b=$2} END {print a " " b}' \
|
|
|
|
|
|
|
|
"${XDG_CONFIG_HOME}/deepin/deepin-terminal/config.conf")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"GNUstep_Terminal")
|
|
|
|
|
|
|
|
term_font="$(awk -F '>|<' '/>TerminalFont</ {getline; f=$3}
|
|
|
|
|
|
|
|
/>TerminalFontSize</ {getline; s=$3} END {print f " " s}' \
|
|
|
|
|
|
|
|
"${HOME}/GNUstep/Defaults/Terminal.plist")"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"Hyper"*)
|
|
|
|
"Hyper"*)
|
|
|
|
term_font="$(awk -F "," '/fontFamily/ {a=$1} END{print a}' "${HOME}/.hyper.js" | awk -F "'" '{a=$2} END{print a}')"
|
|
|
|
term_font="$(awk -F':|,' '/fontFamily/ {print $2; exit}' "${HOME}/.hyper.js")"
|
|
|
|
|
|
|
|
term_font="$(trim_quotes "$term_font")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"kitty"*)
|
|
|
|
|
|
|
|
shopt -s nullglob
|
|
|
|
|
|
|
|
confs=({$KITTY_CONFIG_DIRECTORY,$XDG_CONFIG_HOME,~/Library/Preferences}/kitty/kitty.con?)
|
|
|
|
|
|
|
|
shopt -u nullglob
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[ -f "${confs[0]}" ]] || return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
term_font="$(awk '/^([[:space:]]*|[^#_])font_family[[:space:]]+/ {
|
|
|
|
|
|
|
|
$1 = "";
|
|
|
|
|
|
|
|
gsub(/^[[:space:]]/, "");
|
|
|
|
|
|
|
|
font = $0
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/^([[:space:]]*|[^#_])font_size[[:space:]]+/ {
|
|
|
|
|
|
|
|
size = $2
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
END { print font " " size}' "${confs[0]}")"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"konsole"*)
|
|
|
|
"konsole"*)
|
|
|
|
# Get Process ID of current konsole window / tab
|
|
|
|
# Get Process ID of current konsole window / tab
|
|
|
|
child="$(get_ppid "$$")"
|
|
|
|
child="$(get_ppid "$$")"
|
|
|
|
|
|
|
|
|
|
|
|
konsole_instances=($(qdbus | grep 'org.kde.konsole'))
|
|
|
|
IFS=$'\n' read -d "" -ra konsole_instances < <(qdbus | grep -F 'org.kde.konsole')
|
|
|
|
|
|
|
|
|
|
|
|
for i in "${konsole_instances[@]}"; do
|
|
|
|
for i in "${konsole_instances[@]}"; do
|
|
|
|
konsole_sessions=($(qdbus "${i}" | grep '/Sessions/'))
|
|
|
|
IFS=$'\n' read -d "" -ra konsole_sessions < <(qdbus "$i" | grep -F '/Sessions/')
|
|
|
|
|
|
|
|
|
|
|
|
for session in "${konsole_sessions[@]}"; do
|
|
|
|
for session in "${konsole_sessions[@]}"; do
|
|
|
|
if ((child == "$(qdbus "${i}" "${session}" processId)")); then
|
|
|
|
if ((child == "$(qdbus "$i" "$session" processId)")); then
|
|
|
|
profile="$(qdbus "${i}" "${session}" environment | awk -F '=' '/KONSOLE_PROFILE_NAME/ {print $2}')"
|
|
|
|
profile="$(qdbus "$i" "$session" environment |\
|
|
|
|
|
|
|
|
awk -F '=' '/KONSOLE_PROFILE_NAME/ {print $2}')"
|
|
|
|
break
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
@ -113,9 +238,53 @@ get_term_font() {
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# We could have two profile files for the same profile name, take first match
|
|
|
|
# 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="$(grep -l "Name=${profile}" "$HOME"/.local/share/konsole/*.profile)"
|
|
|
|
profile_filename="${profile_filename/$'\n'*}"
|
|
|
|
profile_filename="${profile_filename/$'\n'*}"
|
|
|
|
[[ "$profile_filename" ]] && term_font="$(awk -F '=|,' '/Font=/ {print $2 " " $3}' "$profile_filename")"
|
|
|
|
|
|
|
|
|
|
|
|
[[ "$profile_filename" ]] && \
|
|
|
|
|
|
|
|
term_font="$(awk -F '=|,' '/Font=/ {print $2 " " $3}' "$profile_filename")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"lxterminal"*)
|
|
|
|
|
|
|
|
term_font="$(awk -F '=' '/fontname=/ {print $2; exit}' \
|
|
|
|
|
|
|
|
"${XDG_CONFIG_HOME}/lxterminal/lxterminal.conf")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"mate-terminal")
|
|
|
|
|
|
|
|
# To get the actual config we have to create a temporarily file with the
|
|
|
|
|
|
|
|
# --save-config option.
|
|
|
|
|
|
|
|
mateterm_config="/tmp/mateterm.cfg"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Ensure /tmp exists and we do not overwrite anything.
|
|
|
|
|
|
|
|
if [[ -d /tmp && ! -f "$mateterm_config" ]]; then
|
|
|
|
|
|
|
|
mate-terminal --save-config="$mateterm_config"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
role="$(xprop -id "${WINDOWID}" WM_WINDOW_ROLE)"
|
|
|
|
|
|
|
|
role="${role##* }"
|
|
|
|
|
|
|
|
role="${role//\"}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
profile="$(awk -F '=' -v r="$role" \
|
|
|
|
|
|
|
|
'$0~r {
|
|
|
|
|
|
|
|
getline;
|
|
|
|
|
|
|
|
if(/Maximized/) getline;
|
|
|
|
|
|
|
|
if(/Fullscreen/) getline;
|
|
|
|
|
|
|
|
id=$2"]"
|
|
|
|
|
|
|
|
} $0~id {if(id) {getline; print $2; exit}}' \
|
|
|
|
|
|
|
|
"$mateterm_config")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rm -f "$mateterm_config"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mate_get() {
|
|
|
|
|
|
|
|
gsettings get org.mate.terminal.profile:/org/mate/terminal/profiles/"$1"/ "$2"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "$(mate_get "$profile" "use-system-font")" == "true" ]]; then
|
|
|
|
|
|
|
|
term_font="$(gsettings get org.mate.interface monospace-font-name)"
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
term_font="$(mate_get "$profile" "font")"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
term_font="$(trim_quotes "$term_font")"
|
|
|
|
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"mintty")
|
|
|
|
"mintty")
|
|
|
@ -124,30 +293,91 @@ get_term_font() {
|
|
|
|
|
|
|
|
|
|
|
|
"pantheon"*)
|
|
|
|
"pantheon"*)
|
|
|
|
term_font="$(gsettings get org.pantheon.terminal.settings font)"
|
|
|
|
term_font="$(gsettings get org.pantheon.terminal.settings font)"
|
|
|
|
[[ -z "${term_font//\'}" ]] && term_font="$(gsettings get org.gnome.desktop.interface monospace-font-name)"
|
|
|
|
|
|
|
|
|
|
|
|
[[ -z "${term_font//\'}" ]] && \
|
|
|
|
|
|
|
|
term_font="$(gsettings get org.gnome.desktop.interface monospace-font-name)"
|
|
|
|
|
|
|
|
|
|
|
|
term_font="$(trim_quotes "$term_font")"
|
|
|
|
term_font="$(trim_quotes "$term_font")"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"qterminal")
|
|
|
|
|
|
|
|
term_font="$(awk -F '=' '/fontFamily=/ {a=$2} /fontSize=/ {b=$2} END {print a " " b}' \
|
|
|
|
|
|
|
|
"${XDG_CONFIG_HOME}/qterminal.org/qterminal.ini")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"sakura"*)
|
|
|
|
"sakura"*)
|
|
|
|
term_font="$(awk -F '=' '/^font=/ {a=$2} END{print a}' "${XDG_CONFIG_HOME}/sakura/sakura.conf")"
|
|
|
|
term_font="$(awk -F '=' '/^font=/ {print $2; exit}' \
|
|
|
|
|
|
|
|
"${XDG_CONFIG_HOME}/sakura/sakura.conf")"
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"st")
|
|
|
|
|
|
|
|
term_font="$(ps -o command= -p "$parent" | grep -F -- "-f")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "$term_font" ]]; then
|
|
|
|
|
|
|
|
term_font="${term_font/*-f/}"
|
|
|
|
|
|
|
|
term_font="${term_font/ -*/}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
# On Linux we can get the exact path to the running binary through the procfs
|
|
|
|
|
|
|
|
# (in case `st` is launched from outside of $PATH) on other systems we just
|
|
|
|
|
|
|
|
# have to guess and assume `st` is invoked from somewhere in the users $PATH
|
|
|
|
|
|
|
|
[[ -L /proc/$parent/exe ]] && binary="/proc/$parent/exe" || binary="$(type -p st)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Grep the output of strings on the `st` binary for anything that looks vaguely
|
|
|
|
|
|
|
|
# like a font definition. NOTE: There is a slight limitation in this approach.
|
|
|
|
|
|
|
|
# Technically "Font Name" is a valid font. As it doesn't specify any font options
|
|
|
|
|
|
|
|
# though it is hard to match it correctly amongst the rest of the noise.
|
|
|
|
|
|
|
|
[[ -n "$binary" ]] && \
|
|
|
|
|
|
|
|
term_font="$(strings "$binary" | grep -F -m 1 \
|
|
|
|
|
|
|
|
-e "pixelsize=" \
|
|
|
|
|
|
|
|
-e "size=" \
|
|
|
|
|
|
|
|
-e "antialias=" \
|
|
|
|
|
|
|
|
-e "autohint=")"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
term_font="${term_font/xft:}"
|
|
|
|
|
|
|
|
term_font="${term_font/:*}"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"terminology")
|
|
|
|
"terminology")
|
|
|
|
term_font="$(strings "${XDG_CONFIG_HOME}/terminology/config/standard/base.cfg" | awk '/^font\.name$/{print a}{a=$0}')"
|
|
|
|
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/.pcf}"
|
|
|
|
term_font="${term_font/:*}"
|
|
|
|
term_font="${term_font/:*}"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"termite")
|
|
|
|
"termite")
|
|
|
|
[[ -f "${XDG_CONFIG_HOME}/termite/config" ]] && termite_config="${XDG_CONFIG_HOME}/termite/config"
|
|
|
|
[[ -f "${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")"
|
|
|
|
termite_config="${XDG_CONFIG_HOME}/termite/config"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
term_font="$(awk -F '= ' '/\[options\]/ {
|
|
|
|
|
|
|
|
opt=1
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/^\s*font/ {
|
|
|
|
|
|
|
|
if(opt==1) a=$2;
|
|
|
|
|
|
|
|
opt=0
|
|
|
|
|
|
|
|
} END {print a}' "/etc/xdg/termite/config" \
|
|
|
|
|
|
|
|
"$termite_config")"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"urxvt" | "urxvtd" | "rxvt-unicode" | "xterm")
|
|
|
|
"urxvt" | "urxvtd" | "rxvt-unicode" | "xterm")
|
|
|
|
term_font="$(grep -i -F "${term/d}*font" < <(xrdb -query))"
|
|
|
|
xrdb="$(xrdb -query)"
|
|
|
|
term_font="${term_font/*font:}"
|
|
|
|
term_font="$(grep -im 1 -e "^${term/d}"'\**\.*font' -e '^\*font' <<< "$xrdb")"
|
|
|
|
|
|
|
|
term_font="${term_font/*"*font:"}"
|
|
|
|
|
|
|
|
term_font="${term_font/*".font:"}"
|
|
|
|
|
|
|
|
term_font="${term_font/*"*.font:"}"
|
|
|
|
term_font="$(trim "$term_font")"
|
|
|
|
term_font="$(trim "$term_font")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[ -z "$term_font" && "$term" == "xterm" ]] && \
|
|
|
|
|
|
|
|
term_font="$(grep '^XTerm.vt100.faceName' <<< "$xrdb")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
term_font="$(trim "${term_font/*"faceName:"}")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# xft: isn't required at the beginning so we prepend it if it's missing
|
|
|
|
|
|
|
|
[[ "${term_font:0:1}" != "-" && \
|
|
|
|
|
|
|
|
"${term_font:0:4}" != "xft:" ]] && \
|
|
|
|
|
|
|
|
term_font="xft:$term_font"
|
|
|
|
|
|
|
|
|
|
|
|
# Xresources has two different font formats, this checks which
|
|
|
|
# Xresources has two different font formats, this checks which
|
|
|
|
# one is in use and formats it accordingly.
|
|
|
|
# one is in use and formats it accordingly.
|
|
|
|
case "$term_font" in
|
|
|
|
case "$term_font" in
|
|
|
@ -156,12 +386,23 @@ get_term_font() {
|
|
|
|
term_font="${term_font/:*}"
|
|
|
|
term_font="${term_font/:*}"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"-"*) term_font="$(awk -F '\\-' '{printf $3}' <<< "$term_font")" ;;
|
|
|
|
"-"*)
|
|
|
|
|
|
|
|
IFS=- read -r _ _ term_font _ <<< "$term_font"
|
|
|
|
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
"xfce4-terminal")
|
|
|
|
"xfce4-terminal")
|
|
|
|
term_font="$(awk -F '=' '/^FontName/ {a=$2} END{print a}' "${XDG_CONFIG_HOME}/xfce4/terminal/terminalrc")"
|
|
|
|
term_font="$(awk -F '=' '/^FontName/{a=$2}/^FontUseSystem=TRUE/{a=$0} END {print a}' \
|
|
|
|
|
|
|
|
"${XDG_CONFIG_HOME}/xfce4/terminal/terminalrc")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[[ "$term_font" == "FontUseSystem=TRUE" ]] && \
|
|
|
|
|
|
|
|
term_font="$(gsettings get org.gnome.desktop.interface monospace-font-name)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
term_font="$(trim_quotes "$term_font")"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Default fallback font hardcoded in terminal-preferences.c
|
|
|
|
|
|
|
|
[[ -z "$term_font" ]] && term_font="Monospace 12"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
|
|