diff --git a/src/config.zsh b/src/config.zsh index 73d98fe..7b68191 100644 --- a/src/config.zsh +++ b/src/config.zsh @@ -1,3 +1,4 @@ +zmodload zsh/datetime #--------------------------------------------------------------------# # Global Configuration Variables # @@ -47,3 +48,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 ee1129f..c6b24c0 100644 --- a/src/widgets.zsh +++ b/src/widgets.zsh @@ -22,6 +22,14 @@ _zsh_autosuggest_modify() { _zsh_autosuggest_invoke_original_widget $@ retval=$? + 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 4e3c62e..11458a8 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 # @@ -74,6 +75,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 # #--------------------------------------------------------------------# @@ -240,6 +248,14 @@ _zsh_autosuggest_modify() { _zsh_autosuggest_invoke_original_widget $@ retval=$? + 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