
    3                         d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZ d	d
lmZ ddlmZ dZd Zd Zd Zd Zd Zd Zy)    )unicode_literals)DEFAULT_BUFFER)HasSelection	ConditionEmacsInsertModeViInsertMode)Keys)Point)MouseEventType
MouseEvent)HeightIsUnknownError)suspend_to_background_supported
is_windows   )get_by_name   )Registry)load_basic_bindingsload_abort_and_exit_bindingsload_basic_system_bindingsload_auto_suggestion_bindingsc                     | j                    S )zZ Callable that returns True when the previous event was delivered to
    another handler. )	is_repeatevents    <lib/third_party/prompt_toolkit/key_binding/bindings/basic.pyif_no_repeatr      s         c            M         t               } t               t               z  }| j                  }t	               } |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                          |t
        j"                         |t
        j$                         |t
        j&                         |t
        j(                         |t
        j*                         |t
        j,                         |t
        j.                         |t
        j0                         |t
        j2                         |t
        j4                         |t
        j6                         |t
        j8                         |t
        j:                         |t
        j<                         |t
        j>                         |t
        j@                         |t
        jB                         |t
        jD                         |t
        jF                         |t
        jH                         |t
        jJ                         |t
        jL                         |t
        jN                         |t
        jP                         |t
        jR                         |t
        jT                         |t
        jV                         |t
        jX                         |t
        jZ                         |t
        j\                         |t
        j^                         |t
        j`                         |t
        jb                         |t
        jd                         |t
        jf                         |t
        jh                         |t
        jj                         |t
        jl                         |t
        jn                         |t
        jp                         |t
        jr                         |t
        jt                         |t
        jv                         |t
        jx                         |t
        jz                         |t
        j|                         |t
        j~                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                         |t
        j                        d                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }  |t
        j                        t        d               |t
        j                        t        d               |t
        jz                        t        d               |t
        jx                        t        d               |t
        j                        t        d               |t
        j                        t        d               |t
        j"                        t        d               |t
        j                   |	      t        d
               |t
        j4                  |	      t        d               |t
        j                  |t              t        d               |t
        jr                  |t              t        d               |t
        j                  |t              t        d               |t
        j                  |t              t        d               |t
        j                  |t              t        d               |t
        j2                  |	      t        d               |t
        j8                  |	      t        d               |t
        j                  |	      t        d               |t
        j                  |	      t        d               |t
        j                  | 	      t        d               |t
        j                  | 	      t        d             t        d       }  |t
        j                  ||z  	      t        d             t        d       }t        d       } |t
        j                  ||z  	      d        } |t
        j                  | |z  	      d        } |t
        jt                        d        } |t
        jv                        d        } |t
        j                  |	      d        } |t
        j>                        d        } |t
        j                        d        } |t
        j                        d        } |t
        j                  t        d       d !      d"        }| S )#Nc                      y)aM  
        First, for any of these keys, Don't do anything by default. Also don't
        catch them in the 'Any' handler which will insert them as data.

        If people want to insert these characters as a literal, they can always
        do by doing a quoted insert. (ControlQ in emacs mode, ControlV in Vi
        mode.)
        N r   s    r   _zload_basic_bindings.<locals>._#   s    h 	r   zbeginning-of-linezend-of-linezbackward-charzforward-charzprevious-historyznext-historyzclear-screenfilterz	kill-linezunix-line-discard)r$   save_beforezbackward-delete-charzdelete-charzself-insertztranspose-charszunix-word-ruboutzmenu-completezmenu-complete-backwardc                 .    | j                   j                  S N)current_buffertextclis    r   <lambda>z%load_basic_bindings.<locals>.<lambda>   s    s/A/A/F/Fr   c                 6    | j                   j                         S r'   )r(   is_multiliner*   s    r   r,   z%load_basic_bindings.<locals>.<lambda>   s    ););)H)H)Jr   c                 B    | j                   j                  j                  S r'   )r(   accept_actionis_returnabler*   s    r   r,   z%load_basic_bindings.<locals>.<lambda>   s    #*<*<*J*J*X*Xr   c                 f    | j                   j                  | j                  j                          y)z& Newline (in case of multiline input. )copy_marginN)r(   newliner+   in_paste_moder   s    r   r"   zload_basic_bindings.<locals>._   s(     	$$UYY5L5L1L$Mr   c                 h    | j                   }|j                  j                  | j                  |       y)z Enter, accept input. N)r(   r0   validate_and_handler+   )r   buffs     r   r"   zload_basic_bindings.<locals>._   s)     ##..uyy$?r   c                 P    | j                   j                  | j                         y N)count)r(   auto_upargr   s    r   r"   zload_basic_bindings.<locals>._   s    $$599$5r   c                 P    | j                   j                  | j                         y r:   )r(   	auto_downr=   r   s    r   r"   zload_basic_bindings.<locals>._   s    &&UYY&7r   c                     | j                   j                         }| j                  j                  j	                  |       y r'   )r(   cut_selectionr+   	clipboardset_datar   datas     r   r"   zload_basic_bindings.<locals>._   s.    ##113		$$T*r   c                 N    | j                   j                  | j                         y)aj  
        By default, control-Z should literally insert Ctrl-Z.
        (Ansi Ctrl-Z, code 26 in MSDOS means End-Of-File.
        In a Python REPL for instance, it's possible to type
        Control-Z followed by enter to quit.)

        When the system bindings are loaded and suspend-to-background is
        supported, that will override this binding.
        N)r(   insert_textrE   r   s    r   r"   zload_basic_bindings.<locals>._   s     	((4r   c                     t        t        | j                  dd j                  d            \  }}| j                  j
                  j                  |       y)zC
        Handle incoming Cursor-Position-Request response.
        r   ;N)mapintrE   splitr+   rendererreport_absolute_cursor_row)r   rowcols      r   r"   zload_basic_bindings.<locals>._   sD     sEJJq,22378S 			55c:r   c                     | j                   }|j                  dd      }|j                  dd      }| j                  j                  |       y)z Pasting from clipboard. z

N)rE   replacer(   rG   rD   s     r   r"   zload_basic_bindings.<locals>._   sC     zz
 ||FD)||D$'((.r   c                     | j                   S r'   )quoted_insertr*   s    r   r,   z%load_basic_bindings.<locals>.<lambda>   s
    33D3Dr   T)r$   eagerc                 t    | j                   j                  | j                  d       d| j                  _        y)z'
        Handle quoted insert.
        F)	overwriteN)r(   rG   rE   r+   rW   r   s    r   r"   zload_basic_bindings.<locals>._   s-    
 	((u(E"'		r   )Wr   r   r   add_bindingr   r	   ControlAControlBControlCControlDControlEControlFControlGControlHControlIControlJControlKControlLControlMControlNControlOControlPControlQControlRControlSControlTControlUControlVControlWControlXControlYControlZF1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16F17F18F19F20ControlSpaceControlBackslashControlSquareCloseControlCircumflexControlUnderscore	BackspaceUpDownRightLeftShiftUp	ShiftDown
ShiftRight	ShiftLeftHomeEndDeleteShiftDeleteControlDeletePageUpPageDownBackTabTabControlLeftControlRight	ControlUpControlDownInsertIgnorer   r   Anyr   CPRResponseBracketedPaste)registryinsert_modehandlehas_selectionr"   text_before_cursorr.   r1   s           r   r   r      s   zH.?#44K!!F NMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDMMDGG_DGG_DGG_DGG_DGG_DGG_DGG_DGG_DGG_DHHDHHDHHDHHDHHDHHDHHDHHDHHDHHDHHDD!!"D##$D""#D""#DNNDGG_DIIDJJDIIDLLDNNDOODNNDIIDHHDKKDDDKKDMMDLLDHHDDDNNDDKKDKK	                          $ $ % #                                               V	 F499k"567F488[/0F499k/23F4::{>23F4>>;'9:;F4[89F4==+n56-F4==-k+.FG-F4==-k:M.NOGF4==,G*+-HF4>>+<H*+-EF4;;{EM"$JF4K\JM"$BF488K\BM"$-F4==-k:K.LM-F4==-k:L.MN-F4==-k/.JK,F4<<,[9Q-RS/F4;;/<N0OP1F4===.1+n2MN ##FGBF4==!3k!AB;}C]^JKLXYMDMM,"<=N >N DMM<--"?@@ A@ DGG_6 6 DII8 8 DKK.+ /+ DMM
5 
5 D	; 	; D 
/ !
/ DHHY'DETR( S( Or   c                      t               } | j                  t        j                        d        }| j                  t        j                        d        }| S )zl
    Key bindings, required for mouse support.
    (Mouse events enter through the key binding system.)
    c           	         | j                   d   dk(  rt        t        | j                   dd       \  }}}t        j                  t        j
                  t        j                  t        j                  dj                  |      }|dk\  r|dz  }|dk\  r|dz  }|dz  }|dz  }n| j                   dd }|dd d	k(  rd
}|dd }nd}t        t        |dd j                  d            \  }}}|d   }|rQt        j                  t        j
                  t        j                  t        j                  dj                  ||f      }nNt        j                  t        j
                  t        j                  t        j                  dj                  |      }|dz  }|dz  }| j                  j                  j                  r|}	 || j                  j                  j                  z  }| j                  j                  j                   j                   ||f   } || j                  t#        t%        ||      |             yyy# t        $ r Y yw xY w)z3
        Handling of incoming mouse event.
        r   M   N)    #   `   a   i   r   r   <TFrI   rJ   ))r   r   )r   m)@   r   )A   r   xyposition
event_type)rE   rK   ordr   
MOUSE_DOWNMOUSE_UP	SCROLL_UPSCROLL_DOWNgetrL   rM   r+   rN   height_is_knownrows_above_layoutr   mouse_handlersr   r
   )r   mouse_eventr   r   rE   sgrr   handlers           r   r"   zload_mouse_bindings.<locals>._   s/    ::a=C #CAB 8KA"--"++",,"..	
 c+  F{AJAF{AJAGAGA
 ::ab>DBQx3ABx !$Ccr)= >KARA ,77,55-77-99	
 #{A&'  '11&//&00&22	
 c+&  	
Q	Q 99--+2IUYY''999
 ii((77FFqsKGEIIz51?5@ B C 3J-
 ( s   ;#H9 9	IIc           	         t               sJ | j                  j                  d      \  }}}t        |      }t        |      }| j                  j
                  j                  j                         }|j                  j                  | j                  j
                  j                  j                  z
  }||z  }| j                  j
                  j                  j                  ||f   } || j                  t        t        ||      |             y)z7
        Handling of mouse events for Windows.
        rJ   r   r   N)r   rE   rM   rL   r+   rN   outputget_win32_screen_buffer_infodwCursorPositionY_cursor_posr   r   r   r
   )r   r   r   r   screen_buffer_inforows_above_cursorr   s          r   r"   zload_mouse_bindings.<locals>._<  s    
 || !::++C0
AqFF #YY//66SSU.??AAEIIDVDVDbDbDdDdd	 ))$$33BB1Q3G		:uqA1;= 	>r   )r   r[   r	   Vt100MouseEventWindowsMouseEvent)r   r"   s     r   load_mouse_bindingsr      s_    
 zH$../GC 0GCR $001> 2>* Or   c                      t               } | j                  } |t        j                        d        }t        d        }  |t        j
                  |      t        d             | S )z>
    Basic bindings for abort (Ctrl-C) and exit (Ctrl-D).
    c                 8    | j                   j                          y)z( Abort when Control-C has been pressed. N)r+   abortr   s    r   r"   z'load_abort_and_exit_bindings.<locals>._\  s     			r   c                 Z    | j                   t        k(  xr | j                  j                   S )zV Ctrl-D binding is only active when the default buffer is selected
        and empty. )current_buffer_namer   r(   r)   r*   s    r   ctrl_d_conditionz6load_abort_and_exit_bindings.<locals>.ctrl_d_conditiona  s.     ''>9 ,&&+++	-r   r#   zend-of-file)r   r[   r	   r^   r   r_   r   )r   r   r"   r   s       r   r   r   U  sg     zH!!FDMM  - - 3F4==!12;}3MNOr   c                      t               } t        d       }| j                  t        j                  |      d        }| S )z=
    Basic system bindings (For both Emacs and Vi mode.)
    c                     t               S r'   )r   r*   s    r   r,   z,load_basic_system_bindings.<locals>.<lambda>t  s    35r   r#   c                 8    | j                   j                          y)z0
        Suspend process to background.
        N)r+   suspend_to_backgroundr   s    r   r"   z%load_basic_system_bindings.<locals>._v  s    
 			'')r   )r   r   r[   r	   ru   )r   suspend_supportedr"   s      r   r   r   m  sJ     zH!57 $--0AB* C* Or   c                      t               } | j                  }t        d       } |t        j                  |       |t        j
                  |       |t        j                  |      d                      }| S )z:
    Key bindings for accepting auto suggestion text.
    c                 v    | j                   j                  d uxr  | j                   j                  j                  S r'   )r(   
suggestiondocumentis_cursor_at_the_endr*   s    r   r,   z/load_auto_suggestion_bindings.<locals>.<lambda>  s5    ))5 =''<<=r   r#   c                 p    | j                   }|j                  }|r|j                  |j                         yy)z Accept suggestion. N)r(   r   rG   r)   )r   br   s      r   r"   z(load_auto_suggestion_bindings.<locals>._  s0    
   \\
MM*//* r   )r   r[   r   r	   ra   r`   r   )r   r   suggestion_availabler"   s       r   r   r     su     zH!!F$	=>
 DMM"67DMM"67DJJ34+ 5 8 8+ Or   N) 
__future__r   prompt_toolkit.enumsr   prompt_toolkit.filtersr   r   r   r   prompt_toolkit.keysr	   prompt_toolkit.layout.screenr
   prompt_toolkit.mouse_eventsr   r   prompt_toolkit.rendererr   prompt_toolkit.utilsr   r   named_commandsr   r   r   __all__r   r   r   r   r   r   r!   r   r   <module>r      sO    ' / Y Y $ . B 8 L ' K\gT0&r   