
    Mh                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ erddlmZ ddlmZ ddgZeZd!dZd!dZd"dZd#d$d Z dS )%z2
Key binding handlers for displaying completions.
    )annotationsN)TYPE_CHECKING)in_terminal)CompleteEvent
Completionget_common_complete_suffix)StyleAndTextTuples)KeyBindings)KeyPressEvent)Keys)
get_cwidth)ApplicationPromptSessiongenerate_completions!display_completions_like_readlineeventEreturnNonec                z    | j         }|j        r|                                 dS |                    d           dS )z{
    Tab-completion: where the first tab completes the common suffix and the
    second tab lists all the completions.
    T)insert_common_partN)current_buffercomplete_statecomplete_nextstart_completion)r   bs     n/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/key_binding/bindings/completion.pyr   r   #   sL    
 	A 	 4		d33333    c                   | j         }|j        dS t          d          }t          |j                            |j        |                    }t          |j        |          }t          |          dk    rC|                    |d         j	                    |
                    |d         j                   dS |r|
                    |           dS |rt          | j        |           dS dS )a  
    Key binding handler for readline-style tab completion.
    This is meant to be as similar as possible to the way how readline displays
    completions.

    Generate the completions immediately (blocking) and display them above the
    prompt in columns.

    Usage::

        # Call this handler when 'Tab' has been pressed.
        key_bindings.add(Keys.ControlI)(display_completions_like_readline)
    NT)completion_requested   r   )r   	completerr   listget_completionsdocumentr   lendelete_before_cursorstart_positioninsert_texttext"_display_completions_like_readlineapp)r   r   complete_eventcompletionscommon_suffixs        r   r   r   1   s     	A{"===Nq{221:~NNOOK /qz;GGM ;1	A ==>>>	k!n)*****	 C	m$$$$$	 C*59kBBBBBC Cr   r-   Application[object]r/   list[Completion]asyncio.Task[None]c                   	
 ddl m ddlm  j                                        }|j        }|j        }t          |t          d D                       dz             
t          d|
z            |dz
  z  t          t          j        t                    t                    z                      d 
fd
	d 	fd}                      |                      S )z
    Display the list of completions in columns above the prompt.
    This will ask for a confirmation if there are too many completions to fit
    on a single page and provide a paginator to walk through them.
    r   )to_formatted_text)create_confirm_sessionc              3  >   K   | ]}t          |j                  V  d S )N)r   display_text).0cs     r   	<genexpr>z5_display_completions_like_readline.<locals>.<genexpr>i   s,      HHq
1>22HHHHHHr   r"   pageintr   r   c                  	 | z  | dz   z           t          t          j        t                    t	                    z                      		fdt                    D             }g }t          	          D ]}t                    D ]}	 ||         |         }d|j        pdz   }|                     |j        |                     t          |j
                  z
  }|                    |j        d|z  f           y# t          $ r Y w xY w|                    d           
                     |d                     d S )	Nr"   c                6    g | ]}|z  |d z   z           S )r"    )r9   ipage_completionspage_row_counts     r   
<listcomp>zG_display_completions_like_readline.<locals>.display.<locals>.<listcomp>w   sA     
 
 
 Q/1q5N2JJK
 
 
r   z+class:readline-like-completions.completion  )style )rE   
zclass:readline-like-completions)r=   mathceilr'   floatrangerF   extenddisplayr   r8   append
IndexError
print_text)r<   page_columnsresultrr:   
completionrF   paddingrB   rC   r-   column_countr/   completions_per_pagemax_compl_widthr5   s           @@r   rN   z3_display_completions_like_readline.<locals>.displayp   s   &''4!87K*KK
 TYs+;'<'<u\?R?R'RSSTT
 
 
 
 
<((
 
 

 &(~&& 	& 	&A<((  !-a!3JI"(.BE MM"3"3J4Fe"T"T"TUUU .
:;R0S0SSGMM:#3S7]"CDDDD!   DMM*%%%%((1RSSTTTTTs   A5D
DDc                 &  K   t          d          4 d{V  t                    k    r dt                     d                                           d{V } | rdt                    D ]S} |           |dz
  k    r=t	          d                                           d{V }|s ddd          d{V  dS Tn%j                                         n d           ddd          d{V  dS # 1 d{V swxY w Y   dS )	z
Coroutine.T)render_cli_doneNzDisplay all z possibilities?r"   --MORE--r   )r   r'   prompt_asyncrL   _create_more_sessionoutputflush)	confirmr<   	show_morer-   r/   rX   r6   rN   
page_counts	      r   	run_complz5_display_completions_like_readline.<locals>.run_compl   s0     t444 	 	 	 	 	 	 	 	;"666 6 6D3{#3#3DDD! !,..! ! ! ! ! !  ' %j 1 1 
' 
':>11.B */ /*lnn)- )- )- )- )- )-I $- ' &'	 	 	 	 	 	 	 	 	 	 	 	 	 	
' J$$&&&& 


1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BD 'D  
D
D
)r<   r=   r   r   )r   r   )prompt_toolkit.formatted_textr5   prompt_toolkit.shortcuts.promptr6   r_   get_sizecolumnsrowsminmaxr=   rI   rJ   r'   rK   create_background_task)r-   r/   	term_size
term_widthterm_heightrd   rW   rX   r6   rN   rY   rc   r5   s   ``    @@@@@@@r   r,   r,   U   sp    @?????FFFFFF 
##%%I"J.K
 CHHKHHHHH1L O q*788L';?;TYs;//%8L2M2MMNNOOJU U U U U U U U U U UD          8 %%iikk222r   r\   messagestrPromptSession[bool]c                J   ddl m} t                      }|                    d          |                    d          |                    d          |                    t          j                  |                    t          j                  |                    t          j                  dd
                                                                        }|                    d          |                    d          |                    d          |                    d          |                    t          j                  dd                                                            }|                    t          j	                  dd            } || |d          S )zH
    Create a `PromptSession` object for displaying the "--MORE--".
    r   r   rG   yYr   r   r   r   c                <    | j                             d           d S )NTrS   r-   exitr   s    r   _yesz"_create_more_session.<locals>._yes   s      		d#####r   nNqQc                <    | j                             d           d S )NFrw   rx   rz   s    r   _noz!_create_more_session.<locals>._no   s      		e$$$$$r   c                    dS )zDisable inserting of text.Nr@   rz   s    r   _ignorez%_create_more_session.<locals>._ignore   s      r   T)key_bindingserase_when_doner   r   r   r   )
prompt_toolkit.shortcutsr   r
   addr   ControlJControlMControlIControlCAny)rp   r   bindingsr{   r   r   s         r   r^   r^      s    766666}}H\\#\\#\\#\\$-  \\$-  \\$-  $ $ $ !  !  !    $ \\#\\#\\#\\#\\$-  % % % !     
% \\$(% % % % =xNNNNr   r   )r-   r1   r/   r2   r   r3   )r\   )rp   rq   r   rr   )!__doc__
__future__r   asynciorI   typingr   *prompt_toolkit.application.run_in_terminalr   prompt_toolkit.completionr   r   r   re   r	   'prompt_toolkit.key_binding.key_bindingsr
   (prompt_toolkit.key_binding.key_processorr   prompt_toolkit.keysr   prompt_toolkit.utilsr   prompt_toolkit.applicationr   r   r   __all__r   r   r   r,   r^   r@   r   r   <module>r      s    # " " " " "               B B B B B B         
 = < < < < < ? ? ? ? ? ? B B B B B B $ $ $ $ $ $ + + + + + + 7666666666666 '
 4 4 4 4!C !C !C !CHY3 Y3 Y3 Y3xO O O O O O Or   