
    fL                       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$edd       Z%edd       Z&ddZ'ddZ(ddZ)y)    )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_bindingsc                 >    t               j                  j                  S N)r   current_bufferis_returnable     d/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/key_binding/bindings/emacs.pyr#   r#   $   s    9##111r%   c                 D    t               j                  j                  dk(  S )N-)r   key_processorargr$   r%   r&   is_argr+   )   s    9""&&#--r%   c                 4   t               } | j                  t        } d      dmd       }  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        d,               dd-d. |+      t        d,               dd/t               t        d0               dd1t               t        d2               dd3|      t        d4               dd5|      t        d4               dd|      t        d6               dd7|      t        d8               d9      t        d:               d;t               t        d<               dd=      t        d>               dd?      t        d@               ddA      t        dB              dC      dmdD       } dE      dmdF       }dnfdG}dHD ]
  } ||         ddIt
               dmdJ       } dIt              dmdK       }  ddL|t        z        t        dM               dL|t        z  t         z        t        dM             dodN dOt        j                        dmfdP       }	 ddOt        j                        dmfdQ       }
 ddR      dmdS       } ddA      dmdT       } ddU|      dmdV       } ddW|      dmdX       } dd      dmdY       } dZ      dmd[       } d\t               dmd]       } d\t              dmd^       } d_t               ddd`t              dmda              } ddbt              dmdc       } ddd      dmde       } ddf      dmdg       } ddh|      dmdi       } djd1t              dmdk       } djd/t              dmdl       }t        | t              S )pz!
    Some e-macs extensions.
    escapec                     y)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.)
        Nr$   events    r&   _escz!load_emacs_bindings.<locals>._esc9   s     	r%   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                     yNFr$   es    r&   <lambda>z%load_emacs_bindings.<locals>.<lambda>[       r%   )save_beforer5   undozc-uc                     yrM   r$   rN   s    r&   rP   z%load_emacs_bindings.<locals>.<lambda>_   rQ   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-macrorO   zcall-last-kbd-macrozc-nc                8    | j                   j                          y)z
Next line.N)r"   	auto_downr/   s    r&   _nextz"load_emacs_bindings.<locals>._nextu   s     	&&(r%   zc-pc                P    | j                   j                  | j                         y)zPrevious line.countN)r"   auto_upr*   r/   s    r&   _prevz"load_emacs_bindings.<locals>._prevz   s     	$$599$5r%   c                N       t                d       d fd              }y)ze
        Handle input of arguments.
        The first number needs to be preceded by escape.
        r4   r-   c                (    | j                         y r!   )append_to_arg_count)r0   rA   s    r&   rX   z4load_emacs_bindings.<locals>.handle_digit.<locals>._   s     %%a(r%   Nr0   EreturnNone)r   )rA   rX   handles   ` r&   handle_digitz)load_emacs_bindings.<locals>.handle_digit   s-     
'	"	!		) 
 
#	)r%   
0123456789r(   c                @    | j                   | j                  d       yy) Nr(   )_argrf   r/   s    r&   
_meta_dashz'load_emacs_bindings.<locals>._meta_dash   s!     ::%%c* r%   c                :    d| j                   j                  _        y)zp
        When '-' is typed again, after exactly '-' has been given as an
        argument, ignore this.
        r(   N)appr)   r*   r/   s    r&   _dashz"load_emacs_bindings.<locals>._dash   s     '*		#r%   enterzaccept-linec                    |dk  r | j                   j                  |d|       }n| j                   j                  |d|      }|| xj                  |z  c_        y y )Nr   T)in_current_linera   )documentfind_backwardsfindcursor_position)buffcharra   matchs       r&   character_searchz-load_emacs_bindings.<locals>.character_search   sd    19MM00d5& 1 E MM&&tT&OE  E)  r%   zc-]c                V     | j                   | j                  | j                         y)z:When Ctl-] + a character is pressed. go to that character.Nr"   datar*   r0   r   s    r&   
_goto_charz'load_emacs_bindings.<locals>._goto_char   s     	--uzz599Er%   c                X     | j                   | j                  | j                          y)zLike Ctl-], but backwards.Nr   r   s    r&   _goto_char_backwardsz1load_emacs_bindings.<locals>._goto_char_backwards   s!     	--uzzEII:Fr%   ac                     y)zPrevious sentence.Nr$   r/   s    r&   _prev_sentencez+load_emacs_bindings.<locals>._prev_sentence   rQ   r%   c                     y)zMove to end of sentence.Nr$   r/   s    r&   _end_of_sentencez-load_emacs_bindings.<locals>._end_of_sentence   rQ   r%   tc                     y)z<
        Swap the last two words before the cursor.
        Nr$   r/   s    r&   _swap_charactersz-load_emacs_bindings.<locals>._swap_characters   rQ   r%   *c                    | j                   }t        dd      }t        |j                  j	                  |j
                  |            }dj                  d |D              }|j                  |       y)zR
        `meta-*`: Insert all possible completions of the preceding text.
        FT)text_insertedcompletion_requested c              3  4   K   | ]  }|j                     y wr!   )text).0rA   s     r&   	<genexpr>zGload_emacs_bindings.<locals>._insert_all_completions.<locals>.<genexpr>   s     !>Q!&&!>s   N)r"   r   list	completerget_completionsrx   joininsert_text)r0   r|   complete_eventcompletionstext_to_inserts        r&   _insert_all_completionsz4load_emacs_bindings.<locals>._insert_all_completions   sd    
 ## 'UQUVNN**4==.I

 !>+!>>(r%   c                   | j                   }|j                  j                  r0|xj                  |j                  j	                  d      z  c_        y|xj                  |j                  j                         z  c_        y)zc
        Move cursor back and forth between the start and end of the current
        line.
        Fafter_whitespaceN)r"   rx   is_cursor_at_the_end_of_liner{   get_start_of_line_positionget_end_of_line_positionr0   buffers     r&   _toggle_start_endz.load_emacs_bindings.<locals>._toggle_start_end   sg     %%??77""foo&P&P!& 'Q ' " ""foo&N&N&PP"r%   zc-@c                v    | j                   }|j                  r!|j                  t        j                         yy)zN
        Start of the selection (if the current buffer is not empty).
        selection_typeN)r"   r   start_selectionr   
CHARACTERSr0   r|   s     r&   _start_selectionz-load_emacs_bindings.<locals>._start_selection   s2     ##99  0H0H I r%   c-gc                H    d| j                   _        d| j                   _        y)zK
        Control + G: Cancel completion menu and validation state.
        N)r"   complete_statevalidation_errorr/   s    r&   _cancelz$load_emacs_bindings.<locals>._cancel   s     
 /3+04-r%   c                8    | j                   j                          y)#
        Cancel selection.
        N)r"   exit_selectionr/   s    r&   _cancel_selectionz.load_emacs_bindings.<locals>._cancel_selection   s    
 	++-r%   zc-wkc                    | j                   j                         }| j                  j                  j	                  |       y)z$
        Cut selected text.
        N)r"   cut_selectionrs   	clipboardset_datar0   r   s     r&   _cutz!load_emacs_bindings.<locals>._cut  s0     ##113		$$T*r%   wc                    | j                   j                         }| j                  j                  j	                  |       y)z%
        Copy selected text.
        N)r"   copy_selectionrs   r   r   r   s     r&   _copyz"load_emacs_bindings.<locals>._copy  s0    
 ##224		$$T*r%   leftc                    | j                   }|xj                  |j                  j                  | j                        xs dz  c_        y)z3
        Cursor to start of previous word.
        r`   r   N)r"   r{   rx   find_previous_word_beginningr*   r   s     r&   _start_of_wordz+load_emacs_bindings.<locals>._start_of_word  s>    
 %%OO88uyy8INQ	
r%   rightc                    | j                   }|xj                  |j                  j                  | j                        xs |j                  j                         z  c_        y)z/
        Cursor to start of next word.
        r`   N)r"   r{   rx   find_next_word_beginningr*   get_end_of_document_positionr   s     r&   _start_next_wordz-load_emacs_bindings.<locals>._start_next_word!  sN    
 %%OO445994E >;;=	
r%   /c                z    | j                   }|j                  r|j                          y|j                  d       y)z 
        M-/: Complete.
        T)select_firstN)r"   r   complete_nextstart_completion)r0   r@   s     r&   	_completez&load_emacs_bindings.<locals>._complete,  s3    
   OOD1r%   c-cc                d   | j                   }|xj                  |j                  j                  d      z  c_        |j                  j	                         \  }}|j                  j                  |      \  }}|j                  j                  |      \  }}t        |||dz   | j                         y)z'
        Indent selected text.
        Tr   r   r`   N)r"   r{   rx   r   selection_rangetranslate_index_to_positionr   r*   r0   r   from_torX   s        r&   _indentz$load_emacs_bindings.<locals>._indent7  s    
 %%&//"L"L! #M #
 	
 OO335	r??>>uEq;;B?Avub1fEII6r%   c                   | j                   }|j                  j                         \  }}|j                  j                  |      \  }}|j                  j                  |      \  }}t	        |||dz   | j
                         y)z)
        Unindent selected text.
        r   r`   N)r"   rx   r   r   r   r*   r   s        r&   	_unindentz&load_emacs_bindings.<locals>._unindentH  sk    
 %%OO335	r??>>uEq;;B?AQeii8r%   rg   )rA   strri   rj   )r|   r   r}   r   ra   intri   rj   )r   addr
   r   r   r   r+   r#   r   r   Anyr   r   )key_bindingsinsert_moder1   r^   rc   rl   rA   rq   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rk   s                             @@r&   r   r   .   s    =LF#KH	 	 F5M+123F5M+o./*F:k*;{+CDF5M+m,-F5M+n-.F8[12F9k.12/F5#s;/F0CD%F5%k&&9:F8S+o67-F8S-k:K.LM-F8S-k+.FGF8S+n56-F8S-k/.JK-F8S-k:J.KL-F8S-k*.EF5F8[5kBV6WX.F8T+.{;T/UVF8[!678F7OK01DF5DF LF5%o{KF 1F8S-0=S1TU0F8S-0=M1NO-F8S-k/.JK-F8S-k/.JK/F8U;/N0KL-F8S-k:J.KLF5M+456
 )F5-(_)EFF5#{#456F5#{?34F5#{#89:E]) ) E]6 6	)  Q Hc7(++ ,+
 C*  * BF8W[=%@AM"
 HF7;6,FGM"	* E488F F
 HeTXX&G 'G
 Hc  Hc# # Hc+. / Hc+.) /)  E5Q Q E]J J E=.)5 *5 E-(. ). E-(E3M2+ 3 )+ Hc-0+ 1+ Hf
 
 Hg
 
 Hc+.2 /2 E3}-7 .7  E3}-
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?r4   r   nc                |    | j                   j                  | j                  j                  d| j                         y)zJump to next match.Finclude_current_positionra   Nr"   apply_searchrs   current_search_stater*   r/   s    r&   
_jump_nextz.load_emacs_search_bindings.<locals>._jump_next  s4     	))II**%*)) 	* 	
r%   Nc                ~    | j                   j                  | j                  j                   d| j                         y)zJump to previous match.Fr   Nr   r/   s    r&   
_jump_prevz.load_emacs_search_bindings.<locals>._jump_prev  s7     	))YY+++%*)) 	* 	
r%   rg   )r   r   ro   r    start_reverse_incremental_search start_forward_incremental_searchabort_searchreverse_incremental_searchforward_incremental_searchaccept_searchr   r   r   r   )r   rk   r   r   r   s        r&   r   r   X  s   =LF F5M&99:F5M&99:F5M&%%&F5M&%%&F5M&334F5M&334F4L223F6N6445F7OF(() !F84 !5!56 EF3|'C&CCD// EF3|'C&CCD// DF3|&BBC// DF3|&BBC// C%
 &
 C%
 &
 ",
;;r%   c                 Z  	 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
    c                   | j                   d   j                  }|t        j                  k(  r'| j                  j                  | j                         y|t        j                  k(  r'| j                  j                  | j                         y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|j)                  |        yy# t*        $ r Y y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   r`   Nr3   r7   r2   r6   r9   r;   rI   rK   )key_sequencekeyr   ShiftUpr"   rb   r*   	ShiftDownr]   	ShiftLeft
ShiftRight	ShiftHomeShiftEndControlShiftLeftControlShiftRightControlShiftHomeControlShiftEndr   
isinstancer   callKeyError)r0   r   key_to_commandbindings       r&   unshift_movez9load_emacs_shift_selection_bindings.<locals>.unshift_move  s      #''$,,  ((uyy(9$..   ***; NNOOO^NN/MM=!!?""N!!#8  /	1
	$!."56G '7+U# ,  		s   E 	EEzs-leftr4   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                  r{|j                  t        j                         |j
                  |j
                  j                          |j                  } |        |j                  |k(  r|j                          yyy)z8
        Start selection with shift + movement.
        r   N)	r"   r   r   r   r   selection_stateenter_shift_moder{   r   )r0   r|   original_positionr  s      r&   r   z=load_emacs_shift_selection_bindings.<locals>._start_selection  s     ##99  0H0H I##/ $$557 !% 4 4##'88 ##% 9 r%   c                     |        | j                   }|j                  5|j                  |j                  j                  k(  r|j	                          yyy)z&
        Extend the selection
        N)r"   r  r{   original_cursor_positionr   )r0   r|   r  s     r&   _extend_selectionz>load_emacs_shift_selection_bindings.<locals>._extend_selection  sU     	U##+##t';';'T'TT##% U ,r%   c                l    | j                   j                          t        d      j                  |        y)z4
        Replace selection by what is typed
        zself-insertN)r"   r   r   r
  r/   s    r&   _replace_selectionz?load_emacs_shift_selection_bindings.<locals>._replace_selection  s)    
 	**,M"''.r%   ru   c                    | j                   j                          | j                   j                  t                       y)z2
        A newline replaces the selection
        )copy_marginN)r"   r   newliner   r/   s    r&   _newlinez5load_emacs_shift_selection_bindings.<locals>._newline  s2    
 	**,$$]_1D$Er%   rF   c                8    | j                   j                          y)z#
        Delete selection.
        N)r"   r   r/   s    r&   _deletez4load_emacs_shift_selection_bindings.<locals>._delete  s    
 	**,r%   r?   c                    | j                   }|j                  r|j                          t        d      j	                  |        y)zS
        In shift selection mode, yanking (pasting) replace the selection.
        r>   N)r"   r  r   r   r
  r   s     r&   _yankz2load_emacs_shift_selection_bindings.<locals>._yank  s7    
 ## F  'r%   r   r   r   r   homeendr8   r:   rH   rJ   c                    | j                   j                          | j                  d   }| j                  j	                  |d       y)r   r   T)firstN)r"   r   r   r)   feed)r0   	key_presss     r&   r   z4load_emacs_shift_selection_bindings.<locals>._cancel   s?     	++-&&q)	  $ 7r%   rg   )	r   r   r   r   r   r   r   r   r   )
r   rk   r   r  r  r  r  r  r   r  s
            @r&   r   r     s   
 =LF#$J Hm^,I}n-FM>*Hm^,Hm^,G]N+J~.K/J~.I}n-& . / 0 / , - - + . -&, H12I23F/0H12H12G01J34K 45J34I23& 4 5 6 5 2 3 3 1 4 3& DHH12/ 3/ G0<?@F AF K 45- 6- E./( 0( F/0G01D-.F/0F/0E./H12I23H12G018 2 3 4 3 0 1 1 / 2 18 ",
;;r%   N)ri   bool)ri   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__rh   r#   r+   r   r   r   r$   r%   r&   <module>r2     s    " 6 : : 3   < B $ 2 O O '  2 2 . .g<T	?<DY<r%   