
    %eL                        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mZmZmZmZmZmZ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mZm Z  ddl!m"Z" g dZ#eZ$ddZ%ddZ&ddZ'dS )    )annotations)get_app)Bufferindentunindent)CompleteEvent)
	Conditionemacs_insert_mode
emacs_modehas_arghas_selectionin_paste_modeis_multilineis_read_onlyshift_selection_modevi_search_direction_reversed)Binding)KeyPressEvent)Keys)SelectionType   )ConditionalKeyBindingsKeyBindingsKeyBindingsBase   )get_by_name)load_emacs_bindingsload_emacs_search_bindings#load_emacs_shift_selection_bindingsreturnr   c                 >   t                      } | j        t          } d          dzd            }  d          t          d                       d	          t          d
                       d|          t          d                       d          t          d                       d          t          d                       d          t          d                       d          t          d                       ddd|          t          d                       d|          t          d                       dd          t          d                       dd|          t          d                       dd|          t          d                       dd          t          d                       dd |          t          d!                       dd"|          t          d#                       dd|          t          d$                       dd%|          t          d&                       dd'|          t          d(                       d)          t          d*                       d+          t          d,                       d-d. |/          t          d0                       dd1d2 |/          t          d0                       dd3t                     t          d4                       dd5t                     t          d6                       dd7|          t          d8                       dd9|          t          d8                       dd|          t          d:                       dd;|          t          d<                       d=          t          d>                       d?t                     t          d@                       ddA          t          dB                       ddC          t          dD                       ddE          t          dF                      dG          dzdH            } dI          dzdJ            }d{fdL}dMD ]} ||            ddNt
                     dzdO            } dNt          dP                     dzdQ            }t          d|dS            }	  ddT||	z            t          dU                       dT||	z  t           z            t          dU                     d}d[ d\t          j	                  dzfd]            }
 dd\t          j	                  dzfd^            } dd_          dzd`            } ddE          dzda            } ddb|          dzdc            } ddd|          dzde            } dd          dzdf            } dg          dzdh            } dit                     dzdj            } dit                    dzdk            } dlt                     dddmt                    dzdn                        } ddot                    dzdp            } ddq          dzdr            } dds          dzdt            } ddu|          dzdv            } dwd5t                    dzdx            } dwd3t                    dzdy            }t          | t                    S )~z!
    Some e-macs extensions.
    escapeeventEr    Nonec                    dS )a\  
        By default, ignore escape key.

        (If we don't put this here, and Esc is followed by a key which sequence
        is not handled, we'll insert an Escape character in the input stream.
        Something we don't want and happens to easily in emacs mode.
        Further, people can always use ControlQ to do a quoted insert.)
        N r#   s    Ilib/python3.11/site-packages/prompt_toolkit/key_binding/bindings/emacs.py_escz!load_emacs_bindings.<locals>._esc/   s	     	    zc-abeginning-of-linezc-bbackward-charzc-deletefilterz	kill-wordzc-eend-of-linezc-fforward-charc-leftbackward-wordc-rightforward-wordzc-xryyankc-ybczcapitalize-worddflzdowncase-worduzuppercase-wordzyank-pop	backspacezbackward-kill-word\zdelete-horizontal-spacec-homebeginning-of-bufferc-endend-of-bufferzc-_c                    dS NFr'   es    r)   <lambda>z%load_emacs_bindings.<locals>.<lambda>Q   s     r+   )save_beforer/   undozc-uc                    dS rG   r'   rH   s    r)   rJ   z%load_emacs_bindings.<locals>.<lambda>U   s     r+   <zbeginning-of-history>zend-of-history.zyank-last-arg_zyank-nth-arg#zinsert-commentzc-ozoperate-and-get-nextzc-qzquoted-insert(zstart-kbd-macro)zend-kbd-macrorI   zcall-last-kbd-macrozc-nc                8    | j                                          dS )z
Next line.N)current_buffer	auto_downr(   s    r)   _nextz"load_emacs_bindings.<locals>._nextk   s     	&&(((((r+   zc-pc                F    | j                             | j                   dS )zPrevious line.countN)rV   auto_upargr(   s    r)   _prevz"load_emacs_bindings.<locals>._prevp   s&     	$$59$55555r+   strc                j       t                      d           d	 fd                        }dS )
ze
        Handle input of arguments.
        The first number needs to be preceded by escape.
        r.   r"   r#   r$   r    r%   c                2    |                                 d S N)append_to_arg_count)r#   r;   s    r)   rQ   z4load_emacs_bindings.<locals>.handle_digit.<locals>._{   s     %%a(((((r+   Nr#   r$   r    r%   )r   )r;   rQ   handles   ` r)   handle_digitz)load_emacs_bindings.<locals>.handle_digitu   s_     
'	"	"	"	!			) 	) 	) 	) 	) 
	 
#	"	) 	) 	)r+   
0123456789-c                B    | j         |                     d           dS dS ) Nrh   )_argrc   r(   s    r)   
_meta_dashz'load_emacs_bindings.<locals>._meta_dash   s.     :%%c***** r+   c                 :    t                      j        j        dk    S )Nrh   )r   key_processorr]   r'   r+   r)   rJ   z%load_emacs_bindings.<locals>.<lambda>   s    '))*A*E*L r+   c                (    d| j         j        _        dS )zp
        When '-' is typed again, after exactly '-' has been given as an
        argument, ignore this.
        rh   N)apprn   r]   r(   s    r)   _dashz"load_emacs_bindings.<locals>._dash   s     '*	###r+   boolc                 2    t                      j        j        S rb   )r   rV   is_returnabler'   r+   r)   rt   z*load_emacs_bindings.<locals>.is_returnable   s    yy'55r+   enterzaccept-linebuffr   charr[   intc                    |dk     r| j                             |d|           }n| j                             |d|          }|| xj        |z  c_        d S d S )Nr   T)in_current_liner[   )documentfind_backwardsfindcursor_position)rv   rw   r[   matchs       r)   character_searchz-load_emacs_bindings.<locals>.character_search   sx    199M00d5& 1  EE M&&tT&OOE  E)     r+   zc-]c                @     | j         | j        | j                   dS )z:When Ctl-] + a character is pressed. go to that character.NrV   datar]   r#   r   s    r)   
_goto_charz'load_emacs_bindings.<locals>._goto_char   s'     	-uz59EEEEEr+   c                B     | j         | j        | j                    dS )zLike Ctl-], but backwards.Nr   r   s    r)   _goto_char_backwardsz1load_emacs_bindings.<locals>._goto_char_backwards   s)     	-uzEI:FFFFFr+   ac                    dS )zPrevious sentence.Nr'   r(   s    r)   _prev_sentencez+load_emacs_bindings.<locals>._prev_sentence         r+   c                    dS )zMove to end of sentence.Nr'   r(   s    r)   _end_of_sentencez-load_emacs_bindings.<locals>._end_of_sentence   r   r+   tc                    dS )z<
        Swap the last two words before the cursor.
        Nr'   r(   s    r)   _swap_charactersz-load_emacs_bindings.<locals>._swap_characters   r   r+   *c                    | j         }t          dd          }t          |j                            |j        |                    }d                    d |D                       }|                    |           dS )zR
        `meta-*`: Insert all possible completions of the preceding text.
        FT)text_insertedcompletion_requested c              3  $   K   | ]}|j         V  d S rb   )text).0r;   s     r)   	<genexpr>zGload_emacs_bindings.<locals>._insert_all_completions.<locals>.<genexpr>   s$      !>!>Q!&!>!>!>!>!>!>r+   N)rV   r   list	completerget_completionsr{   joininsert_text)r#   rv   complete_eventcompletionstext_to_inserts        r)   _insert_all_completionsz4load_emacs_bindings.<locals>._insert_all_completions   s    
 # 'UQUVVVN**4=.II
 

 !>!>+!>!>!>>>(((((r+   c                    | j         }|j        j        r+|xj        |j                            d          z  c_        dS |xj        |j                                        z  c_        dS )zc
        Move cursor back and forth between the start and end of the current
        line.
        Fafter_whitespaceN)rV   r{   is_cursor_at_the_end_of_liner~   get_start_of_line_positionget_end_of_line_positionr#   buffers     r)   _toggle_start_endz.load_emacs_bindings.<locals>._toggle_start_end   s{     %?7 	Q""fo&P&P!& 'Q ' ' """" ""fo&N&N&P&PP""""r+   zc-@c                f    | j         }|j        r"|                    t          j                   dS dS )zN
        Start of the selection (if the current buffer is not empty).
        selection_typeN)rV   r   start_selectionr   
CHARACTERSr#   rv   s     r)   _start_selectionz-load_emacs_bindings.<locals>._start_selection   sC     #9 	J  0H IIIII	J 	Jr+   c-gc                6    d| j         _        d| j         _        dS )zK
        Control + G: Cancel completion menu and validation state.
        N)rV   complete_statevalidation_errorr(   s    r)   _cancelz$load_emacs_bindings.<locals>._cancel   s     
 /3+04---r+   c                8    | j                                          dS )#
        Cancel selection.
        N)rV   exit_selectionr(   s    r)   _cancel_selectionz.load_emacs_bindings.<locals>._cancel_selection   s    
 	++-----r+   zc-wkc                v    | j                                         }| j        j                            |           dS )z$
        Cut selected text.
        N)rV   cut_selectionrp   	clipboardset_datar#   r   s     r)   _cutz!load_emacs_bindings.<locals>._cut   s7     #1133	$$T*****r+   wc                v    | j                                         }| j        j                            |           dS )z%
        Copy selected text.
        N)rV   copy_selectionrp   r   r   r   s     r)   _copyz"load_emacs_bindings.<locals>._copy	  s7    
 #2244	$$T*****r+   leftc                t    | j         }|xj        |j                            | j                  pdz  c_        dS )z3
        Cursor to start of previous word.
        rZ   r   N)rV   r~   r{   find_previous_word_beginningr]   r   s     r)   _start_of_wordz+load_emacs_bindings.<locals>._start_of_word  sC    
 %O88uy8IINQ	
r+   rightc                    | j         }|xj        |j                            | j                  p|j                                        z  c_        dS )z/
        Cursor to start of next word.
        rZ   N)rV   r~   r{   find_next_word_beginningr]   get_end_of_document_positionr   s     r)   _start_next_wordz-load_emacs_bindings.<locals>._start_next_word  sT    
 %O44594EE >;;==	
r+   /c                z    | j         }|j        r|                                 dS |                    d           dS )z 
        M-/: Complete.
        T)select_firstN)rV   r   complete_nextstart_completion)r#   r:   s     r)   	_completez&load_emacs_bindings.<locals>._complete&  sJ    
   	2OOD11111r+   c-cc                H   | j         }|xj        |j                            d          z  c_        |j                                        \  }}|j                            |          \  }}|j                            |          \  }}t          |||dz   | j                   dS )z'
        Indent selected text.
        Tr   r   rZ   N)rV   r~   r{   r   selection_rangetranslate_index_to_positionr   r]   r#   r   from_torQ   s        r)   _indentz$load_emacs_bindings.<locals>._indent1  s    
 %&/"L"L! #M #
 #
 	
 O3355	r?>>uEEq;;B??Avub1fEI666666r+   c                    | j         }|j                                        \  }}|j                            |          \  }}|j                            |          \  }}t	          |||dz   | j                   dS )z)
        Unindent selected text.
        r   rZ   N)rV   r{   r   r   r   r]   r   s        r)   	_unindentz&load_emacs_bindings.<locals>._unindentB  sx    
 %O3355	r?>>uEEq;;B??AQei888888r+   rd   )r;   r_   r    r%   )r    rr   )rv   r   rw   r_   r[   rx   r    r%   )r   addr
   r   r   r   r	   r   r   Anyr   r   )key_bindingsinsert_moder*   rX   r^   rf   r;   rl   rq   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   re   s                              @@r)   r   r   $   sx
    ==LF#KVH	 	 	 	 FF5MM+122333FF5MM+o..///*FF:k***;{+C+CDDDFF5MM+m,,---FF5MM+n--...FF8[11222FF9k.11222/FF5#s;///F0C0CDDD%FF5%%%k&&9&9:::FF8S+o66777-FF8S---k:K.L.LMMM-FF8S---k+.F.FGGGFF8S+n55666-FF8S---k/.J.JKKK-FF8S---k:J.K.KLLL-FF8S---k*.E.EFFF5FF8[555kBV6W6WXXX.FF8T+...{;T/U/UVVVFF8[!677888FF7OOK00111DFF5DDDF   LFF5%oo{KKKF   1FF8S-000=S1T1TUUU0FF8S-000=M1N1NOOO-FF8S---k/.J.JKKK-FF8S---k/.J.JKKK/FF8U;///N0K0KLLL-FF8S---k:J.K.KLLLFF5MM+455666
 )FF5-(((_)E)EFFFFF5#{#455666FF5#{?33444FF5#{#899:::VE]]) ) ) ]) VE]]6 6 6 ]6	) 	) 	) 	) 	) 	)   QVHc7(++++ + + ,++
 VC	"L"LMMNNN* * * ON* 6 6 6 Y6 BFF8W[=%@AAAM""  
 HFF7;6,FGGGM""  	* 	* 	* 	* VE48F F F F F F
 VHeTX&&G G G G G '&G
 VHc    VHc# # # # VHc+...   /. VHc+...) ) ) /.)  VE5Q Q Q Q VE]]J J J ]J VE=.)))5 5 5 *)5 VE-(((. . . )(. VE-(((VE3M222+ + + 32 )(+ VHc-000+ + + 10+ VHf
 
 
 
 VHg
 
 
 
 VHc+...2 2 2 /.2 VE3}---7 7 7 .-7  VE3}---
9 
9 
9 .-
9 ",
;;;r+   c                    t                      } | j        }ddlm}   |d          |j                     |d          |j                     |d          |j                     |d          |j                     |d          |j                     |d          |j                     |d          |j                     |d          |j                     |d	          |j	                     |d
d          |j	                     |dt          t           z            |j                     |dt          t           z            |j                     |dt          t          z            |j                     |dt          t          z            |j                    |dt                    dd            } |dt                    dd            }t          | t                    S )Nr   )searchzc-rzc-sr   r   updownru   r"   T)eager?r.   r   nr#   r$   r    r%   c                ^    | j                             | j        j        d| j                   dS )zJump to next match.Finclude_current_positionr[   NrV   apply_searchrp   current_search_stater]   r(   s    r)   
_jump_nextz.load_emacs_search_bindings.<locals>._jump_next  s>     	))I*%*) 	* 	
 	
 	
 	
 	
r+   Nc                `    | j                             | j        j         d| j                   dS )zJump to previous match.Fr   Nr   r(   s    r)   
_jump_prevz.load_emacs_search_bindings.<locals>._jump_prev  sA     	))Y++%*) 	* 	
 	
 	
 	
 	
r+   rd   )r   r   rj   r    start_reverse_incremental_search start_forward_incremental_searchabort_searchreverse_incremental_searchforward_incremental_searchaccept_searchr   r   r   r   )r   re   r   r   r   s        r)   r   r   R  s~   ==LF FF5MM&9:::FF5MM&9:::FF5MM&%&&&FF5MM&%&&&FF5MM&3444FF5MM&3444FF4LL2333FF6NN64555FF7OOF())) !FF84   !5666 EFF3|'C&CCDDD/   EFF3|'C&CCDDD/   DFF3|&BBCCC/   DFF3|&BBCCC/   VC%%%
 
 
 &%
 VC%%%
 
 
 &%
 ",
;;;r+   c                 8  	 t                      } | j        }d%d	 |dt                      |dt                      |d	t                      |d
t                      |dt                      |dt                      |dt                      |dt                      |dt                      |dt                     d%	fd                                                                                                                        } |dt                     |dt                     |d	t                     |d
t                     |dt                     |dt                     |dt                     |dt                     |dt                     |dt                    d%	fd                                                                                                                        } |t          j        t                    d%d            } |dt          t          z            d%d            } |dt                    d%d            } |dt                    d%d            } |dt                     |dt                     |dt                     |dt                     |dt                     |dt                     |d t                     |d!t                     |d"t                     |d#t                    d%d$                                                                                                                        }t          | t                    S )&z?
    Bindings to select text with shift + cursor movements
    r#   r$   r    r%   c                \   | j         d         j        }|t          j        k    r"| j                            | j                   dS |t          j        k    r"| j                            | j                   dS t          j	        dt          j
        dt          j        dt          j        dt          j        dt          j        d	t          j        d
t          j        di}	 t#          ||                   }t%          |t&                    r|                    |            dS dS # t*          $ r Y dS w xY w)z
        Used for the shift selection mode. When called with
        a shift + movement key press event, moves the cursor
        as if shift is not pressed.
        r   rZ   Nr-   r1   r,   r0   r3   r5   rC   rE   )key_sequencekeyr   ShiftUprV   r\   r]   	ShiftDownrW   	ShiftLeft
ShiftRight	ShiftHomeShiftEndControlShiftLeftControlShiftRightControlShiftHomeControlShiftEndr   
isinstancer   callKeyError)r#   r   key_to_commandbindings       r)   unshift_movez9load_emacs_shift_selection_bindings.<locals>.unshift_move  s(     #'$, ((uy(999F$.   ***;;;F NOO^N/M=!?"N!#8 /	1
	$!."566G '7++ $U#####$ $  	 	 	DD	s   D 
D+*D+zs-leftr.   zs-rightzs-upzs-downzs-homezs-endzc-s-leftz	c-s-rightzc-s-homezc-s-endc                   | j         }|j        rs|                    t          j                   |j        |j                                         |j        } |            |j        |k    r|                                 dS dS dS )z8
        Start selection with shift + movement.
        r   N)	rV   r   r   r   r   selection_stateenter_shift_moder~   r   )r#   rv   original_positionr  s      r)   r   z=load_emacs_shift_selection_bindings.<locals>._start_selection  s     #9 	&  0H III#/ $55777 !% 4L#'888 ##%%%%%	& 	& 98r+   c                     |            | j         }|j        +|j        |j        j        k    r|                                 dS dS dS )z&
        Extend the selection
        N)rV   r  r~   original_cursor_positionr   )r#   rv   r  s     r)   _extend_selectionz>load_emacs_shift_selection_bindings.<locals>._extend_selection  s`     	U#+#t';'TTT##%%%%% ,+TTr+   c                |    | j                                          t          d                              |            dS )z4
        Replace selection by what is typed
        zself-insertN)rV   r   r   r
  r(   s    r)   _replace_selectionz?load_emacs_shift_selection_bindings.<locals>._replace_selection  s;    
 	**,,,M""''.....r+   ru   c                    | j                                          | j                             t                                  dS )z2
        A newline replaces the selection
        )copy_marginN)rV   r   newliner   r(   s    r)   _newlinez5load_emacs_shift_selection_bindings.<locals>._newline   s@    
 	**,,,$$]__1D$EEEEEr+   r@   c                8    | j                                          dS )z#
        Delete selection.
        N)rV   r   r(   s    r)   _deletez4load_emacs_shift_selection_bindings.<locals>._delete  s    
 	**,,,,,r+   r9   c                    | j         }|j        r|                                 t          d                              |            dS )zS
        In shift selection mode, yanking (pasting) replace the selection.
        r8   N)rV   r  r   r   r
  r   s     r)   _yankz2load_emacs_shift_selection_bindings.<locals>._yank  sK    
 # 	!   F  '''''r+   r   r   r   r   homeendr2   r4   rB   rD   c                    | j                                          | j        d         }| j                            |d           dS )r   r   T)firstN)rV   r   r   rn   feed)r#   	key_presss     r)   r   z4load_emacs_shift_selection_bindings.<locals>._cancel  sH     	++---&q)	  $ 77777r+   rd   )	r   r   r   r   r   r   r   r   r   )
r   re   r   r  r  r  r  r  r   r  s
            @r)   r   r     s   
 ==LF#$ #$ #$ #$J VHm^,,,VI}n---VFM>***VHm^,,,VHm^,,,VG]N+++VJ~...VK///VJ~...VI}n---& & & & & .- /. 0/ /. ,+ -, -, +* .- -,&, VH1222VI2333VF/000VH1222VH1222VG0111VJ3444VK 4555VJ3444VI2333& & & & & 43 54 65 54 21 32 32 10 43 32& VDH1222/ / / 32/ VG0<?@@@F F F A@F VK 4555- - - 65- VE.///( ( ( 0/( VF/000VG0111VD-...VF/000VF/000VE.///VH1222VI2333VH1222VG01118 8 8 21 32 43 32 0/ 10 10 /. 21 108 ",
;;;r+   N)r    r   )(
__future__r   "prompt_toolkit.application.currentr   prompt_toolkit.bufferr   r   r   prompt_toolkit.completionr   prompt_toolkit.filtersr	   r
   r   r   r   r   r   r   r   r   'prompt_toolkit.key_binding.key_bindingsr   (prompt_toolkit.key_binding.key_processorr   prompt_toolkit.keysr   prompt_toolkit.selectionr   r   r   r   r   named_commandsr   __all__r$   r   r   r   r'   r+   r)   <module>r1     s   " " " " " " 6 6 6 6 6 6 : : : : : : : : : : 3 3 3 3 3 3                        < ; ; ; ; ; B B B B B B $ $ $ $ $ $ 2 2 2 2 2 2 O O O O O O O O O O ' ' ' ' ' '   k< k< k< k<\	?< ?< ?< ?<DY< Y< Y< Y< Y< Y<r+   