aboutsummaryrefslogtreecommitdiff
path: root/debug/iterm.zsh
blob: 702175ff52cd3cb79a08ba4a1699fa96fe40f0b6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env zsh
#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8

if [[ "$TERM_PROGRAM" != "iTerm.app" ]]; then
    print "Your Terminal Emulator does not appear to be iTerm2!"
    print "This debug script is intended only for iTerm2 terminals."
    exit 1
fi

if [[ ! -x "/usr/libexec/PlistBuddy" ]]; then
    print "To use this debug script, you need to install XCode!"
    exit 2
fi

local normalFont
local type
local command
local ambiguousDoubleWidth
local minimumContrast
local useDifferentFont

# 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" though, 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
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

# 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"
        normalFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Normal\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
        type=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Terminal\ Type:" ~/Library/Preferences/com.googlecode.iterm2.plist)
        command=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Command:" ~/Library/Preferences/com.googlecode.iterm2.plist)
        ambiguousDoubleWidth=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Ambiguous\ Double\ Width:" ~/Library/Preferences/com.googlecode.iterm2.plist)
        minimumContrast=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Minimum\ Contrast:" ~/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.
        useDifferentFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Use\ Non-ASCII\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
        if [[ "$useDifferentFont" == "true" ]]; then
            nonAsciiFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Non\ Ascii\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
            if [[ "$normalFont" != "$nonAsciiFont" ]]; then
                normalFont="$normalFont (normal) / $nonAsciiFont (non-ascii)"
            fi
        fi
        break
    fi
done

print -P "You use %F{blue}iTerm2%f with the following settings:"
print -P "  Font: ${normalFont}"
print -P "  Terminal-Type: ${type}"
print -P "  Command: ${command}"

#############################
# Analyse possible problems #
#############################
local problemsFound
if [[ "${ambiguousDoubleWidth}" == "true" ]]; then
    problemsFound="${problemsFound}\n  * Please uncheck 'Treat ambiguous characters as double-width'."
fi
if (( minimumContrast > 0 )); then
    problemsFound="${problemsFound}\n  * Please set minimum contrast to zero."
fi
if [[ $(echo "${normalFont}" | grep -c -E "Powerline|Awesome|Nerd|Source Code Pro") -eq 0 ]]; then
    problemsFound="${problemsFound}\n  * It does not seem like you use an Powerline-enabled or Awesome Terminal Font!"
fi

#############################
# Output problems           #
#############################
if [[ -n "${problemsFound}" ]]; then
    print -P "\n"
    print -P "%F{yellow}Possible Problems found:%f"
    print -P "${problemsFound}"
else
    print -P "%F{green}No Problems found%f. Yay!"
fi