Stops the terminal sending focus events when process is running

Jonathan Hodgson 5 years ago
parent a0355dbf88
commit 0988d27e7a
  1. 17
      shells/zsh/includes/focus.zsh

@ -1,11 +1,11 @@
#Gain focus #Gain focus
gain_focus(){ gain_focus(){
export HASFOCUS="true" export HASFOCUS="true"
set_prompts set_prompts
zle reset-prompt zle reset-prompt
} }
zle -N gain_focus zle -N gain_focus
bindkey '\033[I' gain_focus # Gain Focus
loose_focus(){ loose_focus(){
export HASFOCUS="false" export HASFOCUS="false"
@ -13,10 +13,21 @@ loose_focus(){
zle reset-prompt zle reset-prompt
} }
zle -N loose_focus 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 # This makes sc (and maybe other terminals?) send escape codes to the shell when focus is gained / lost
printf '\033[?1004h' printf '\033[?1004h'
bindkey '\033[I' gain_focus # Gain Focus }
bindkey '\033[O' loose_focus # Loose Focus add-zsh-hook precmd listen_for_focus
HASFOCUS="true" HASFOCUS="true"

Loading…
Cancel
Save