
    ^hL                       S SK Jr  S SKJr  S SKJrJrJr  S SKJ	r	  S SK
JrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S S	KJr  S
SKJrJrJ r   SSK!J"r"  / SQr#\r$\SS j5       r%\SS j5       r&SS jr'SS jr(SS jr)g)    )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                 >    [        5       R                  R                  $ N)r   current_bufferis_returnable     c/home/james-whalen/.local/lib/python3.13/site-packages/prompt_toolkit/key_binding/bindings/emacs.pyr#   r#   $   s    9##111r%   c                 D    [        5       R                  R                  S:H  $ )N-)r   key_processorargr$   r%   r&   is_argr+   )   s    9""&&#--r%   c                 
  ^^ [        5       n U R                  m[        nT" S5      SmS j5       nT" S5      " [        S5      5        T" S5      " [        S5      5        T" SUS9" [        S	5      5        T" S
5      " [        S5      5        T" S5      " [        S5      5        T" S5      " [        S5      5        T" S5      " [        S5      5        T" SSSUS9" [        S5      5        T" SUS9" [        S5      5        T" SS5      " [        S5      5        T" SSUS9" [        S5      5        T" SSUS9" [        S	5      5        T" SS5      " [        S5      5        T" SSUS9" [        S5      5        T" SSUS9" [        S5      5        T" SSUS9" [        S 5      5        T" SS!US9" [        S"5      5        T" SS#US9" [        S$5      5        T" S%5      " [        S&5      5        T" S'5      " [        S(5      5        T" S)S* US+9" [        S,5      5        T" SS-S. US+9" [        S,5      5        T" SS/[        ) S9" [        S05      5        T" SS1[        ) S9" [        S25      5        T" SS3US9" [        S45      5        T" SS5US9" [        S45      5        T" SSUS9" [        S65      5        T" SS7US9" [        S85      5        T" S95      " [        S:5      5        T" S;[        ) S9" [        S<5      5        T" SS=5      " [        S>5      5        T" SS?5      " [        S@5      5        T" SSA5      " [        SB5      5        T" SC5      SmSD j5       nT" SE5      SmSF j5       nSnU4SG jjnSH H  nU" U5        M     T" SSI[
        ) S9SmSJ j5       nT" SI[        S9SmSK j5       nT" SSLU[        -  S9" [        SM5      5        T" SLU[        -  [        ) -  S9" [        SM5      5        SoSN jmT" SO[        R                  5      SmU4SP jj5       n	T" SSO[        R                  5      SmU4SQ jj5       n
T" SSR5      SmSS j5       nT" SSA5      SmST j5       nT" SSUUS9SmSV j5       nT" SSWUS9SmSX j5       nT" SS5      SmSY j5       nT" SZ5      SmS[ j5       nT" S\[        ) S9SmS] j5       nT" S\[        S9SmS^ j5       nT" S_[        S9T" SSS`[        S9SmSa j5       5       nT" SSb[        S9SmSc j5       nT" SSd5      SmSe j5       nT" SSf5      SmSg j5       nT" SShUS9SmSi j5       nT" SjS1[        S9SmSk j5       nT" SjS/[        S9SmSl j5       n[        U [        5      $ )pz
Some e-macs extensions.
escapec                    g)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&   _esc!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                    gNFr$   es    r&   <lambda>%load_emacs_bindings.<locals>.<lambda>[   s    r%   )save_beforer6   undozc-uc                    grN   r$   rO   s    r&   rQ   rR   _   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-macrorP   zcall-last-kbd-macrozc-nc                8    U R                   R                  5         g)z
Next line.N)r"   	auto_downr/   s    r&   _next"load_emacs_bindings.<locals>._nextu   s     	&&(r%   zc-pc                J    U R                   R                  U R                  S9  g)zPrevious line.countN)r"   auto_upr*   r/   s    r&   _prev"load_emacs_bindings.<locals>._prevz   s     	$$599$5r%   c                L   >^  T" T [         S9T" ST 5      SU 4S jj5       5       ng)zM
Handle input of arguments.
The first number needs to be preceded by escape.
r5   r-   c                (   > U R                  T5        g r!   )append_to_arg_count)r0   rB   s    r&   rY   4load_emacs_bindings.<locals>.handle_digit.<locals>._   s     %%a(r%   Nr0   EreturnNone)r   )rB   rY   handles   ` r&   handle_digit)load_emacs_bindings.<locals>.handle_digit   s-     
'	"	!		) 
 
#	)r%   
0123456789r(   c                B    U R                   c  U R                  S5        gg) Nr(   )_argri   r/   s    r&   
_meta_dash'load_emacs_bindings.<locals>._meta_dash   s!     ::%%c* r%   c                :    SU R                   R                  l        g)zX
When '-' is typed again, after exactly '-' has been given as an
argument, ignore this.
r(   N)appr)   r*   r/   s    r&   _dash"load_emacs_bindings.<locals>._dash   s     '*		#r%   enterzaccept-linec                    US:  a  U R                   R                  USU* S9nOU R                   R                  USUS9nUb  U =R                  U-  sl        g g )Nr   T)in_current_linerc   )documentfind_backwardsfindcursor_position)buffcharrc   matchs       r&   character_search-load_emacs_bindings.<locals>.character_search   sd    19MM00d5& 1 E MM&&tT&OE  E)  r%   zc-]c                V   > T" U R                   U R                  U R                  5        g)z:When Ctl-] + a character is pressed. go to that character.Nr"   datar*   r0   r   s    r&   
_goto_char'load_emacs_bindings.<locals>._goto_char   s     	--uzz599Er%   c                X   > T" U R                   U R                  U R                  * 5        g)zLike Ctl-], but backwards.Nr   r   s    r&   _goto_char_backwards1load_emacs_bindings.<locals>._goto_char_backwards   s!     	--uzzEII:Fr%   ac                    g)zPrevious sentence.Nr$   r/   s    r&   _prev_sentence+load_emacs_bindings.<locals>._prev_sentence       r%   c                    g)zMove to end of sentence.Nr$   r/   s    r&   _end_of_sentence-load_emacs_bindings.<locals>._end_of_sentence   r   r%   tc                    g)z,
Swap the last two words before the cursor.
Nr$   r/   s    r&   _swap_characters-load_emacs_bindings.<locals>._swap_characters   r   r%   *c                    U R                   n[        SSS9n[        UR                  R	                  UR
                  U5      5      nSR                  S U 5       5      nUR                  U5        g)zB
`meta-*`: Insert all possible completions of the preceding text.
FT)text_insertedcompletion_requested c              3  8   #    U  H  oR                   v   M     g 7fr!   )text).0rB   s     r&   	<genexpr>Gload_emacs_bindings.<locals>._insert_all_completions.<locals>.<genexpr>   s     !>+Q&&+s   N)r"   r   list	completerget_completionsr   joininsert_text)r0   r   complete_eventcompletionstext_to_inserts        r&   _insert_all_completions4load_emacs_bindings.<locals>._insert_all_completions   sd    
 ## 'UQUVNN**4==.I

 !>+!>>(r%   c                   U R                   nUR                  R                  (       a-  U=R                  UR                  R	                  SS9-  sl        gU=R                  UR                  R                  5       -  sl        g)zK
Move cursor back and forth between the start and end of the current
line.
Fafter_whitespaceN)r"   r   is_cursor_at_the_end_of_liner   get_start_of_line_positionget_end_of_line_positionr0   buffers     r&   _toggle_start_end.load_emacs_bindings.<locals>._toggle_start_end   sg     %%??77""foo&P&P!& 'Q ' " ""foo&N&N&PP"r%   zc-@c                z    U R                   nUR                  (       a  UR                  [        R                  S9  gg)z>
Start of the selection (if the current buffer is not empty).
selection_typeN)r"   r   start_selectionr   
CHARACTERSr0   r   s     r&   _start_selection-load_emacs_bindings.<locals>._start_selection   s2     ##99  0H0H I r%   c-gc                H    SU R                   l        SU R                   l        g)z;
Control + G: Cancel completion menu and validation state.
N)r"   complete_statevalidation_errorr/   s    r&   _cancel$load_emacs_bindings.<locals>._cancel   s     
 /3+04-r%   c                8    U R                   R                  5         g)
Cancel selection.
N)r"   exit_selectionr/   s    r&   _cancel_selection.load_emacs_bindings.<locals>._cancel_selection   s    
 	++-r%   zc-wkc                    U R                   R                  5       nU R                  R                  R	                  U5        g)z
Cut selected text.
N)r"   cut_selectionry   	clipboardset_datar0   r   s     r&   _cut!load_emacs_bindings.<locals>._cut  s0     ##113		$$T*r%   wc                    U R                   R                  5       nU R                  R                  R	                  U5        g)z
Copy selected text.
N)r"   copy_selectionry   r   r   r   s     r&   _copy"load_emacs_bindings.<locals>._copy  s0    
 ##224		$$T*r%   leftc                    U R                   nU=R                  UR                  R                  U R                  S9=(       d    S-  sl        g)z#
Cursor to start of previous word.
rb   r   N)r"   r   r   find_previous_word_beginningr*   r   s     r&   _start_of_word+load_emacs_bindings.<locals>._start_of_word  s>    
 %%OO88uyy8INQ	
r%   rightc                    U R                   nU=R                  UR                  R                  U R                  S9=(       d    UR                  R                  5       -  sl        g)z
Cursor to start of next word.
rb   N)r"   r   r   find_next_word_beginningr*   get_end_of_document_positionr   s     r&   _start_next_word-load_emacs_bindings.<locals>._start_next_word!  sN    
 %%OO445994E >;;=	
r%   /c                ~    U R                   nUR                  (       a  UR                  5         gUR                  SS9  g)z
M-/: Complete.
T)select_firstN)r"   r   complete_nextstart_completion)r0   rA   s     r&   	_complete&load_emacs_bindings.<locals>._complete,  s3    
   OOD1r%   c-cc                P   U R                   nU=R                  UR                  R                  SS9-  sl        UR                  R	                  5       u  p#UR                  R                  U5      u  p$UR                  R                  U5      u  p4[        XUS-   U R                  S9  g)z
Indent selected text.
Tr   r   rb   N)r"   r   r   r   selection_rangetranslate_index_to_positionr   r*   r0   r   from_torY   s        r&   _indent$load_emacs_bindings.<locals>._indent7  s    
 %%&//"L"L! #M #
 	
 OO335	??>>uE;;B?vb1fEII6r%   c                    U R                   nUR                  R                  5       u  p#UR                  R                  U5      u  p$UR                  R                  U5      u  p4[	        XUS-   U R
                  S9  g)z
Unindent selected text.
r   rb   N)r"   r   r   r   r   r*   r   s        r&   	_unindent&load_emacs_bindings.<locals>._unindentH  sc    
 %%OO335	??>>uE;;B?Qeii8r%   rk   )rB   strrm   rn   )r   r   r   r   rc   intrm   rn   )r   addr
   r   r   r   r+   r#   r   r   Anyr   r   )key_bindingsinsert_moder1   r_   re   rp   rB   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   s                             @@r&   r   r   .   s    =LF#KH	 	 5M+123
5M+o./
:k*;{+CD
5M+m,-
5M+n-.
8[12
9k.12
5#s;/F0CD
5%k&&9:
8S+o67
8S-k:K.LM
8S-k+.FG
8S+n56
8S-k/.JK
8S-k:J.KL
8S-k*.EF
8[5kBV6WX
8T+.{;T/UV
8[!678
7OK01
5DF 5%o{KF 8S-0=S1TU
8S-0=M1NO
8S-k/.JK
8S-k/.JK
8U;/N0KL
8S-k:J.KL
5M+456
 5-(_)EF
5#{#456
5#{?34
5#{#89:E]) ) E]6 6	) Q  Hc7(++ ,+
 C*  * 8W[=%@AM"
 7;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                    [        5       n U R                  nSSKJn  U" S5      " UR                  5        U" S5      " UR
                  5        U" S5      " UR                  5        U" S5      " UR                  5        U" S5      " UR                  5        U" S5      " UR                  5        U" S5      " UR                  5        U" S5      " UR                  5        U" S	5      " UR                  5        U" S
SS9" UR                  5        U" S[        [        ) -  S9" UR                  5        U" S[        [        ) -  S9" UR
                  5        U" S[        [        -  S9" UR
                  5        U" S[        [        -  S9" UR                  5        U" S[        S9SS j5       nU" S[        S9SS j5       n[        U [        5      $ )Nr   )searchzc-rzc-sr   r   updownr|   r-   T)eager?r5   r   nc                v    U R                   R                  U R                  R                  SU R                  S9  g)zJump to next match.Finclude_current_positionrc   Nr"   apply_searchry   current_search_stater*   r/   s    r&   
_jump_next.load_emacs_search_bindings.<locals>._jump_next  s4     	))II**%*)) 	* 	
r%   Nc                x    U R                   R                  U R                  R                  ) SU R                  S9  g)zJump to previous match.Fr  Nr	  r/   s    r&   
_jump_prev.load_emacs_search_bindings.<locals>._jump_prev  s7     	))YY+++%*)) 	* 	
r%   rk   )r   r   rt   r    start_reverse_incremental_search start_forward_incremental_searchabort_searchreverse_incremental_searchforward_incremental_searchaccept_searchr   r   r   r   )r   ro   r   r  r  s        r&   r   r   X  s   =LF 5M&99:
5M&99:
5M&%%&
5M&%%&
5M&334
5M&334
4L223
6N6445
7OF(() 84 !5!56 3|'C&CCD// 3|'C&CCD// 3|&BBC// 3|&BBC// C%
 &
 C%
 &
 ",
;;r%   c                   ^	 [        5       n U R                  nS!S jm	U" S[        ) S9U" S[        ) S9U" S[        ) S9U" S[        ) S9U" S[        ) S9U" S[        ) S9U" S	[        ) S9U" S
[        ) S9U" S[        ) S9U" S[        ) S9S!U	4S jj5       5       5       5       5       5       5       5       5       5       nU" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S	[        S9U" S
[        S9U" S[        S9U" S[        S9S!U	4S jj5       5       5       5       5       5       5       5       5       5       nU" [        R
                  [        S9S!S j5       nU" S[        [        -  S9S!S j5       nU" S[        S9S!S j5       nU" S[        S9S!S j5       nU" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9U" S[        S9S!S  j5       5       5       5       5       5       5       5       5       5       n[        U [        5      $ )"z7
Bindings to select text with shift + cursor movements
c                   U R                   S   R                  nU[        R                  :X  a$  U R                  R                  U R                  S9  gU[        R                  :X  a$  U R                  R                  U R                  S9  g[        R                  S[        R                  S[        R                  S[        R                  S[        R                  S[        R                  S	[        R                  S
[        R                   S0n [#        X!   5      n[%        U[&        5      (       a  UR)                  U 5        gg! [*         a     gf = f)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   rb   Nr4   r8   r3   r7   r:   r<   rJ   rL   )key_sequencekeyr   ShiftUpr"   rd   r*   	ShiftDownr^   	ShiftLeft
ShiftRight	ShiftHomeShiftEndControlShiftLeftControlShiftRightControlShiftHomeControlShiftEndr   
isinstancer   callKeyError)r0   r  key_to_commandbindings       r&   unshift_move9load_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-leftr5   zs-rightzs-upzs-downzs-homezs-endzc-s-leftz	c-s-rightzc-s-homezc-s-endc                4  > U R                   nUR                  (       az  UR                  [        R                  S9  UR
                  b  UR
                  R                  5         UR                  nT" U 5        UR                  U:X  a  UR                  5         ggg)z(
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   =load_emacs_shift_selection_bindings.<locals>._start_selection  s     ##99  0H0H I##/ $$557 !% 4 4##'88 ##% 9 r%   c                   > T" U 5        U R                   nUR                  b6  UR                  UR                  R                  :X  a  UR	                  5         ggg)z
Extend the selection
N)r"   r.  r   original_cursor_positionr   )r0   r   r+  s     r&   _extend_selection>load_emacs_shift_selection_bindings.<locals>._extend_selection  sU     	U##+##t';';'T'TT##% U ,r%   c                l    U R                   R                  5         [        S5      R                  U 5        g)z$
Replace selection by what is typed
zself-insertN)r"   r   r   r'  r/   s    r&   _replace_selection?load_emacs_shift_selection_bindings.<locals>._replace_selection  s)    
 	**,M"''.r%   r|   c                    U R                   R                  5         U R                   R                  [        5       (       + S9  g)z"
A newline replaces the selection
)copy_marginN)r"   r   newliner   r/   s    r&   _newline5load_emacs_shift_selection_bindings.<locals>._newline  s2    
 	**,$$]_1D$Er%   rG   c                8    U R                   R                  5         g)z
Delete selection.
N)r"   r   r/   s    r&   _delete4load_emacs_shift_selection_bindings.<locals>._delete  s    
 	**,r%   r@   c                    U R                   nUR                  (       a  UR                  5         [        S5      R	                  U 5        g)zC
In shift selection mode, yanking (pasting) replace the selection.
r?   N)r"   r.  r   r   r'  r   s     r&   _yank2load_emacs_shift_selection_bindings.<locals>._yank  s7    
 ## F  'r%   r   r   r  r  homeendr9   r;   rI   rK   c                    U R                   R                  5         U R                  S   nU R                  R	                  USS9  g)r   r   T)firstN)r"   r   r  r)   feed)r0   	key_presss     r&   r   4load_emacs_shift_selection_bindings.<locals>._cancel   s?     	++-&&q)	  $ 7r%   rk   )	r   r   r   r   r   r   r   r   r   )
r   ro   r   r4  r7  r<  r?  rB  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)rm   bool)rm   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__rl   r#   r+   r   r   r   r$   r%   r&   <module>rW     s    " 6 : : 3   < B $ 2 O O '  2 2 . .g<T	?<DY<r%   