summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md14
-rwxr-xr-xdebug/iterm.zsh86
-rw-r--r--functions/icons.zsh51
3 files changed, 135 insertions, 16 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7cfcd4a3..cbb9d16b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+## next
+
+### Add debug script for iTerm2 issues
+
+A new script `debug/iterm.zsh` was added for easier spotting problems with your iTerm2 configuration.
+
+### Add debug script for font issues
+
+A new script `debug/font-issues.zsh` was added, so that problems with your font could be spotted easier.
+
+### `ram` changes
+
+The `ram` segment now shows the available ram instead of free.
+
## v0.6.0
- Fixed a bug where the tag display was broken on detached HEADs.
diff --git a/debug/iterm.zsh b/debug/iterm.zsh
new file mode 100755
index 00000000..702175ff
--- /dev/null
+++ b/debug/iterm.zsh
@@ -0,0 +1,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
diff --git a/functions/icons.zsh b/functions/icons.zsh
index 7cf090a2..413ea19b 100644
--- a/functions/icons.zsh
+++ b/functions/icons.zsh
@@ -160,22 +160,23 @@ case $POWERLEVEL9K_MODE in
LEFT_SUBSEGMENT_SEPARATOR $'\uE0B1' # 
RIGHT_SUBSEGMENT_SEPARATOR $'\uE0B3' # 
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
- ROOT_ICON $'\u26A1' # ⚡
+ ROOT_ICON $'\uE614 ' # 
RUBY_ICON $'\uF219 ' # 
AWS_ICON $'\uF270' # 
- AWS_EB_ICON $'\U1F331 ' # 🌱
+ AWS_EB_ICON $'\UF1BD ' # 
BACKGROUND_JOBS_ICON $'\uF013 ' # 
TEST_ICON $'\uF188' # 
- TODO_ICON $'\u2611' # ☑
- BATTERY_ICON $'\uF241 ' # 
- OK_ICON $'\u2713' # ✓
- FAIL_ICON $'\u2718' # ✘
+ TODO_ICON $'\uF133' # 
+ BATTERY_ICON $'\UF240 ' # 
+ DISK_ICON $'\uF0A0' # 
+ OK_ICON $'\uF00C' # 
+ FAIL_ICON $'\uF00D' # 
SYMFONY_ICON $'\uE757' # 
- NODE_ICON $'\u2B22' # ⬢
+ NODE_ICON $'\uE617 ' # 
MULTILINE_FIRST_PROMPT_PREFIX $'\u256D'$'\U2500' # ╭─
MULTILINE_SECOND_PROMPT_PREFIX $'\u2570'$'\U2500 ' # ╰─
APPLE_ICON $'\uF179' # 
- FREEBSD_ICON $'\U1F608 ' # 😈
+ FREEBSD_ICON $'\UF30E ' # 
LINUX_ICON $'\uF17C' # 
SUNOS_ICON $'\uF185 ' # 
HOME_ICON $'\uF015' # 
@@ -193,17 +194,23 @@ case $POWERLEVEL9K_MODE in
VCS_INCOMING_CHANGES_ICON $'\uF01A ' # 
VCS_OUTGOING_CHANGES_ICON $'\uF01B ' # 
VCS_TAG_ICON $'\uF02B ' # 
- VCS_BOOKMARK_ICON $'\uF462' # 
+ VCS_BOOKMARK_ICON $'\uF461 ' # 
VCS_COMMIT_ICON $'\uE729 ' # 
- VCS_BRANCH_ICON $'\uF126' # 
+ VCS_BRANCH_ICON $'\uF126 ' # 
VCS_REMOTE_BRANCH_ICON $'\uE728 ' # 
VCS_GIT_ICON $'\uF113 ' # 
+ VCS_GIT_GITHUB_ICON $'\uE709 ' # 
+ VCS_GIT_BITBUCKET_ICON $'\uE703 ' # 
+ VCS_GIT_GITLAB_ICON $'\uF296 ' # 
VCS_HG_ICON $'\uF0C3 ' # 
- VCS_SVN_ICON '(svn) '
- RUST_ICON $'\uE7A8' # 
- PYTHON_ICON $'\uE73C' # 
+ VCS_SVN_ICON $'\uE72D ' # 
+ RUST_ICON $'\uE7A8 ' # 
+ PYTHON_ICON $'\UE73C ' # 
SWIFT_ICON $'\uE755' # 
- PUBLIC_IP_ICON ''
+ PUBLIC_IP_ICON $'\UF0AC' # 
+ LOCK_ICON $'\UF023' # 
+ EXECUTION_TIME_ICON $'\uF252' # 
+ SSH_ICON $'\uF489' # 
)
;;
*)
@@ -308,8 +315,20 @@ function print_icon() {
fi
}
+# Get a list of configured icons
+# * $1 string - If "original", then the original icons are printed,
+# otherwise "print_icon" is used, which takes the users
+# overrides into account.
get_icon_names() {
- for key in ${(@k)icons}; do
- echo "POWERLEVEL9K_$key: ${icons[$key]}"
+ # Iterate over a ordered list of keys of the icons array
+ for key in ${(@kon)icons}; do
+ echo -n "POWERLEVEL9K_$key: "
+ if [[ "${1}" == "original" ]]; then
+ # print the original icons as they are defined in the array above
+ echo "${icons[$key]}"
+ else
+ # print the icons as they are configured by the user
+ echo "$(print_icon "$key")"
+ fi
done
}