#Gain focus
gain_focus(){
	export HASFOCUS="true"
	set_prompts
	zle reset-prompt
}
zle -N gain_focus
bindkey '\033[I' gain_focus # Gain Focus

loose_focus(){
	export HASFOCUS="false"
	set_prompts
	zle reset-prompt
}
zle -N loose_focus
bindkey '\033[O' loose_focus # Loose Focus

# Stop terminal from sending focus events before a process runs
# This eliviates the issue of getting weird characters when a read (or similar) prompt is visible
dont_listen_for_focus(){
	printf '\033[?1004l'
}
add-zsh-hook preexec dont_listen_for_focus

# Make the terminal send focus events again when the prompt is being drawn
# This almost works, although, if a long running process finishes in the background, that terminal will still look like it has focus
listen_for_focus(){
	# This makes sc (and maybe other terminals?) send escape codes to the shell when focus is gained / lost
	printf '\033[?1004h'
}
add-zsh-hook precmd listen_for_focus

HASFOCUS="true"