]> arthur.barton.de Git - ax-zsh.git/blobdiff - core/11_terminal/11_terminal.zshrc
11_terminal: Implement a cache for axzsh_is_widechar_terminal()
[ax-zsh.git] / core / 11_terminal / 11_terminal.zshrc
index f26a13195e8be2689350169d138538587eec6273..6d4c9880e2d992b82960dfaeecd39433d76507ec 100644 (file)
@@ -21,6 +21,29 @@ function axzsh_is_utf_terminal {
 }
 alias isutfenv=axzsh_is_utf_terminal
 
+# Check if terminal supports "wide" characters.
+# <https://unix.stackexchange.com/questions/184345/detect-how-much-of-unicode-my-terminal-supports-even-through-screen>
+typeset -g _axzsh_is_widechar_terminal_cache
+function axzsh_is_widechar_terminal {
+       if [[ -z "$_axzsh_is_widechar_terminal_cache" ]]; then
+               # No cached result, call test function ...
+               _axzsh_is_widechar_terminal
+               _axzsh_is_widechar_terminal_cache=$?
+       fi
+       return $_axzsh_is_widechar_terminal_cache
+}
+function _axzsh_is_widechar_terminal {
+       [[ -t 1 ]] || return 1
+       [[ -z "$AXZSH_PLUGIN_CHECK" ]] || return 1
+       axzsh_is_utf_terminal || return 1
+       echo -ne "🍀\033[6n"
+       read -s -d\[ garbage
+       read -s -d R pos
+       echo -ne "\033[1K\r"
+       [[ "${pos#*;}" -eq 2 ]] || return 1
+       return 0
+}
+
 # Test for "modern" terminal
 function axzsh_is_modern_terminal {
        [[ "$TERM" = screen* ]] && return 0
@@ -107,6 +130,8 @@ function axzsh_terminal_title_preexec {
 
 preexec_functions+=(axzsh_terminal_title_preexec)
 
+alias axttyinfo="nocorrect zsh $AXZSH/bin/axttyinfo"
+
 axzsh_is_dumb_terminal && return 0
 
 # Colors