From 9fb96753069b919deaaacb6f659be2339dfeb4d2 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 29 Apr 2016 14:46:24 -0600 Subject: [PATCH] Fix #141: Disable suggestions for widgets called from widgets --- src/widgets.zsh | 23 +++++++++++++---------- test/widgets/accept_test.zsh | 8 ++++---- test/widgets/clear_test.zsh | 2 +- test/widgets/modify_test.zsh | 2 +- test/widgets/partial_accept_test.zsh | 4 ++-- zsh-autosuggestions.zsh | 23 +++++++++++++---------- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/widgets.zsh b/src/widgets.zsh index ee1129f..1ae42cc 100644 --- a/src/widgets.zsh +++ b/src/widgets.zsh @@ -22,17 +22,20 @@ _zsh_autosuggest_modify() { _zsh_autosuggest_invoke_original_widget $@ retval=$? - # Get a new suggestion if the buffer is not empty after modification - local suggestion - if [ $#BUFFER -gt 0 ]; then - suggestion="$(_zsh_autosuggest_suggestion "$BUFFER")" - fi + # Only fetch suggestions at the first level of widget recursion + if [ -z "${funcstack[(rn:2:)_zsh_autosuggest_widget_*]}" ]; then + # Get a new suggestion if the buffer is not empty after modification + local suggestion + if [ $#BUFFER -gt 0 ]; then + suggestion="$(_zsh_autosuggest_suggestion "$BUFFER")" + fi - # Add the suggestion to the POSTDISPLAY - if [ -n "$suggestion" ]; then - POSTDISPLAY="${suggestion#$BUFFER}" - else - unset POSTDISPLAY + # Add the suggestion to the POSTDISPLAY + if [ -n "$suggestion" ]; then + POSTDISPLAY="${suggestion#$BUFFER}" + else + unset POSTDISPLAY + fi fi return $retval diff --git a/test/widgets/accept_test.zsh b/test/widgets/accept_test.zsh index f126091..a0ae167 100644 --- a/test/widgets/accept_test.zsh +++ b/test/widgets/accept_test.zsh @@ -24,7 +24,7 @@ testCursorAtEnd() { stub _zsh_autosuggest_invoke_original_widget - _zsh_autosuggest_accept 'original-widget' + _zsh_autosuggest_widget_accept 'original-widget' assertTrue \ 'original widget not invoked' \ @@ -48,7 +48,7 @@ testCursorNotAtEnd() { stub _zsh_autosuggest_invoke_original_widget - _zsh_autosuggest_accept 'original-widget' + _zsh_autosuggest_widget_accept 'original-widget' assertTrue \ 'original widget not invoked' \ @@ -73,7 +73,7 @@ testViCursorAtEnd() { stub _zsh_autosuggest_invoke_original_widget - _zsh_autosuggest_accept 'original-widget' + _zsh_autosuggest_widget_accept 'original-widget' assertTrue \ 'original widget not invoked' \ @@ -98,7 +98,7 @@ testViCursorNotAtEnd() { stub _zsh_autosuggest_invoke_original_widget - _zsh_autosuggest_accept 'original-widget' + _zsh_autosuggest_widget_accept 'original-widget' assertTrue \ 'original widget not invoked' \ diff --git a/test/widgets/clear_test.zsh b/test/widgets/clear_test.zsh index f0500c5..b901728 100644 --- a/test/widgets/clear_test.zsh +++ b/test/widgets/clear_test.zsh @@ -19,7 +19,7 @@ testClear() { BUFFER='ec' POSTDISPLAY='ho hello' - _zsh_autosuggest_clear 'original-widget' + _zsh_autosuggest_widget_clear 'original-widget' assertEquals \ 'BUFFER was modified' \ diff --git a/test/widgets/modify_test.zsh b/test/widgets/modify_test.zsh index 4dfd30d..88c2d4c 100644 --- a/test/widgets/modify_test.zsh +++ b/test/widgets/modify_test.zsh @@ -25,7 +25,7 @@ testModify() { _zsh_autosuggest_suggestion \ 'echo hello' - _zsh_autosuggest_modify 'original-widget' + _zsh_autosuggest_widget_modify 'original-widget' assertTrue \ 'original widget not invoked' \ diff --git a/test/widgets/partial_accept_test.zsh b/test/widgets/partial_accept_test.zsh index 60c78a6..706819b 100644 --- a/test/widgets/partial_accept_test.zsh +++ b/test/widgets/partial_accept_test.zsh @@ -25,7 +25,7 @@ testCursorMovesOutOfBuffer() { _zsh_autosuggest_invoke_original_widget \ 'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"' - _zsh_autosuggest_partial_accept 'original-widget' + _zsh_autosuggest_widget_partial_accept 'original-widget' assertTrue \ 'original widget not invoked' \ @@ -51,7 +51,7 @@ testCursorStaysInBuffer() { _zsh_autosuggest_invoke_original_widget \ 'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"' - _zsh_autosuggest_partial_accept 'original-widget' + _zsh_autosuggest_widget_partial_accept 'original-widget' assertTrue \ 'original widget not invoked' \ diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index 4e3c62e..9c0f821 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -240,17 +240,20 @@ _zsh_autosuggest_modify() { _zsh_autosuggest_invoke_original_widget $@ retval=$? - # Get a new suggestion if the buffer is not empty after modification - local suggestion - if [ $#BUFFER -gt 0 ]; then - suggestion="$(_zsh_autosuggest_suggestion "$BUFFER")" - fi + # Only fetch suggestions at the first level of widget recursion + if [ -z "${funcstack[(rn:2:)_zsh_autosuggest_widget_*]}" ]; then + # Get a new suggestion if the buffer is not empty after modification + local suggestion + if [ $#BUFFER -gt 0 ]; then + suggestion="$(_zsh_autosuggest_suggestion "$BUFFER")" + fi - # Add the suggestion to the POSTDISPLAY - if [ -n "$suggestion" ]; then - POSTDISPLAY="${suggestion#$BUFFER}" - else - unset POSTDISPLAY + # Add the suggestion to the POSTDISPLAY + if [ -n "$suggestion" ]; then + POSTDISPLAY="${suggestion#$BUFFER}" + else + unset POSTDISPLAY + fi fi return $retval