diff --git a/src/config.zsh b/src/config.zsh index 8a83e4d..34346fc 100644 --- a/src/config.zsh +++ b/src/config.zsh @@ -1,3 +1,4 @@ +zmodload zsh/datetime #--------------------------------------------------------------------# # Global Configuration Variables # @@ -46,3 +47,10 @@ ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( vi-forward-blank-word vi-forward-blank-word-end ) + +# EPOCH of the last changed widget call +ZSH_AUTOSUGGEST_LAST_MODIFY_TIME=$EPOCHREALTIME + +# Lower bound for the time between changes that will cause autosuggest +# to suspend suggestions for the current edit. +ZSH_AUTOSUGGEST_CUTOFF_PERIOD=0.05 diff --git a/src/widgets.zsh b/src/widgets.zsh index be7d2e6..42e3f21 100644 --- a/src/widgets.zsh +++ b/src/widgets.zsh @@ -16,6 +16,14 @@ _zsh_autosuggest_modify() { # Original widget modifies the buffer _zsh_autosuggest_invoke_original_widget $@ + local time_passed=$(($EPOCHREALTIME - $ZSH_AUTOSUGGEST_LAST_MODIFY_TIME)) + + if (( $time_passed < $ZSH_AUTOSUGGEST_CUTOFF_PERIOD )); then + return 1 + fi + + ZSH_AUTOSUGGEST_LAST_MODIFY_TIME=$EPOCHREALTIME + # Get a new suggestion if the buffer is not empty after modification local suggestion if [ $#BUFFER -gt 0 ]; then diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index 17d1eaa..a2dc21b 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -24,6 +24,7 @@ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. +zmodload zsh/datetime #--------------------------------------------------------------------# # Global Configuration Variables # @@ -73,6 +74,13 @@ ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( vi-forward-blank-word-end ) +# EPOCH of the last changed widget call +ZSH_AUTOSUGGEST_LAST_MODIFY_TIME=$EPOCHREALTIME + +# Lower bound for the time between changes that will cause autosuggest +# to suspend suggestions for the current edit. +ZSH_AUTOSUGGEST_CUTOFF_PERIOD=0.05 + #--------------------------------------------------------------------# # Handle Deprecated Variables/Widgets # #--------------------------------------------------------------------# @@ -233,6 +241,14 @@ _zsh_autosuggest_modify() { # Original widget modifies the buffer _zsh_autosuggest_invoke_original_widget $@ + local time_passed=$(($EPOCHREALTIME - $ZSH_AUTOSUGGEST_LAST_MODIFY_TIME)) + + if (( $time_passed < $ZSH_AUTOSUGGEST_CUTOFF_PERIOD )); then + return 1 + fi + + ZSH_AUTOSUGGEST_LAST_MODIFY_TIME=$EPOCHREALTIME + # Get a new suggestion if the buffer is not empty after modification local suggestion if [ $#BUFFER -gt 0 ]; then