o
    �õ±j÷  ã                   @  sÞ   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rRddlmZ ddlmZ ddgZeZd#dd„Zd#dd„Zd$dd„Zd%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                 C  s(   | j }|jr| ¡  dS |jd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   Úb© r   ú¡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/prompt_toolkit/key_binding/bindings/completion.pyr   #   s   c                 C  sš   | j }|jdu r
dS tdd�}t|j |j|¡ƒ}t|j|ƒ}t|ƒdkr8| |d j	 ¡ | 
|d j¡ dS |rA| 
|¡ dS |rKt| 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_suffixr   r   r   r   1   s   

ÿr*   úApplication[object]r,   úlist[Completion]úasyncio.Task[None]c                   sº   ddl m‰ ddlm‰ ˆ j ¡ }|j}|j}t|t	dd„ ˆD ƒƒd ƒ‰t	d|ˆ ƒ‰ˆ|d  ‰t
t tˆƒtˆƒ ¡ƒ‰d‡ ‡‡‡‡‡fdd„‰d‡ ‡‡‡‡‡fd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                 s  s   � | ]}t |jƒV  qd S )N)r   Údisplay_text)Ú.0Úcr   r   r   Ú	<genexpr>i   s   € z5_display_completions_like_readline.<locals>.<genexpr>r   ÚpageÚintr   r   c              
     sî   ˆ| ˆ | d ˆ … ‰ t t tˆ ƒtˆƒ ¡ƒ‰‡ ‡fdd„tˆƒD ƒ}g }tˆƒD ]A}tˆƒD ]5}z*|| | }d|jp?d }| ˆ|j|d�¡ ˆt	|j
ƒ }| |jd| f¡ W q1 tyf   Y q1w | d¡ q+ˆ ˆ|d	ƒ¡ d S )
Nr   c                   s$   g | ]}ˆ |ˆ |d  ˆ … ‘qS )r   r   )r4   Úi©Úpage_completionsÚpage_row_countr   r   Ú
<listcomp>w   s    ÿÿzG_display_completions_like_readline.<locals>.display.<locals>.<listcomp>z+class:readline-like-completions.completion Ú )Ústyleú )r>   Ú
zclass:readline-like-completions)r8   ÚmathÚceilr$   ÚfloatÚranger?   ÚextendÚdisplayr   r3   ÚappendÚ
IndexErrorÚ
print_text)r7   Úpage_columnsÚresultÚrr5   Ú
completionr?   Úpadding)r*   Úcolumn_countr,   Úcompletions_per_pageÚmax_compl_widthr1   r:   r   rG   p   s.   ÿþÿÿz3_display_completions_like_readline.<locals>.displayc               	   “  s  �t dd�4 I dH šl tˆƒˆkrQˆdtˆƒ› d�ƒ ¡ I dH } | rKtˆƒD ]#}ˆ|ƒ |ˆd krItdƒ ¡ I dH }|sI W d  ƒI dH  dS q&n ˆ j ¡  nˆdƒ W d  ƒI dH  dS W d  ƒI dH  dS W d  ƒI dH  dS 1 I dH s|w   Y  dS )	z
Coroutine.T)Úrender_cli_doneNzDisplay all z possibilities?r   ú--MORE--r   )r   r$   Úprompt_asyncrE   Ú_create_more_sessionÚoutputÚflush)Úconfirmr7   Ú	show_more)r*   r,   rQ   r2   rG   Ú
page_countr   r   Ú	run_compl’   s:   €ÿþÿþí€	
èë	.÷z5_display_completions_like_readline.<locals>.run_complN)r7   r8   r   r   )r   r   )Úprompt_toolkit.formatted_textr1   Úprompt_toolkit.shortcuts.promptr2   rW   Úget_sizeÚcolumnsÚrowsÚminÚmaxr8   rB   rC   r$   rD   Úcreate_background_task)r*   r,   Ú	term_sizeÚ
term_widthÚterm_heightr\   r   )	r*   rP   r,   rQ   r2   rG   rR   r[   r1   r   r)   U   s   
ÿ"r)   rT   ÚmessageÚstrúPromptSession[bool]c              	   C  sÀ   ddl m} tƒ }| d¡| d¡| d¡| tj¡| tj¡| tj¡dd
d„ƒƒƒƒƒƒ}| d¡| d¡| d¡| d¡| tj¡ddd„ƒƒƒƒƒ}| tj	¡ddd„ƒ}|| |dd�S )zH
    Create a `PromptSession` object for displaying the "--MORE--".
    r   r   r@   ÚyÚYr   r   r   r   c                 S  ó   | j jdd� d S )NT©rL   ©r*   Úexit©r   r   r   r   Ú_yes¹   s   z"_create_more_session.<locals>._yesÚnÚNÚqÚQc                 S  rm   )NFrn   ro   rq   r   r   r   Ú_noÂ   s   z!_create_more_session.<locals>._noc                 S  s   dS )zDisable inserting of text.Nr   rq   r   r   r   Ú_ignoreÊ   s    z%_create_more_session.<locals>._ignoreT)Úkey_bindingsÚerase_when_doneN©r   r   r   r   )
Úprompt_toolkit.shortcutsr   r	   Úaddr   ÚControlJÚControlMÚControlIÚControlCÚAny)rh   r   Úbindingsrr   rw   rx   r   r   r   rV   ±   s$   




rV   r{   )r*   r.   r,   r/   r   r0   )rT   )rh   ri   r   rj   )!Ú__doc__Ú
__future__r   ÚasynciorB   Útypingr   Ú*prompt_toolkit.application.run_in_terminalr   Úprompt_toolkit.completionr   r   r   r]   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)   rV   r   r   r   r   Ú<module>   s.    þ


$\