a
    ñ»jÇ¢  ã                	   @   sF  d dl Z d dlm  mZ d dlmZ ddlmZ G dd„ dejƒZ	dZ
dZd	Zd
ZdZdZdZdZdZdZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zdd„ Zd>dd„Zd?dd „Zd@d!d"„ZdAd#d$„ZG d%d&„ d&eƒZdBd'd(„Z dCd)d*„Z!dDd+d,„Z"dEd-d.„Z#dFd/d0„Z$dGd1d2„Z%d3d4d5d6d7d8d9d:d;œZ&dHd<d=„Z'dS )Ié    N)Úlogé   )Úbasemodec                       s
  e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ee
ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd=d#d$„Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"‡  Z#S )>ÚViModeÚvic                    s   t ƒ  |¡ d | _d S ©N)ÚsuperÚ__init__Ú_ViMode__vi_insert_mode)ÚselfZrlobj©Ú	__class__© ú:E:\soccer\ml_env\Lib\site-packages\pyreadline3/modes/vi.pyr	      s    zViMode.__init__c                 C   s   dS )Nz<ViMode>r   ©r   r   r   r   Ú__repr__   s    zViMode.__repr__c                 C   s‚   dd„ }|  ¡ }|| jv r.t | j¡dkr.t‚| j || j¡}t	d||f ƒ d }|rh||ƒ}| j 
¡  || _|r~|  ¡  dS dS )Nc                 S   s   d S r   r   )Úer   r   r   Únop!   s    z$ViMode.process_keyevent.<locals>.nopr   zreadline from keyboard:%s->%sTF)ÚtupleZexit_dispatchÚlineobjZ	EndOfLineÚl_bufferÚEOFErrorÚkey_dispatchÚgetÚvi_keyr   Z	push_undoZprevious_funcZ_update_line)r   Zkeyinfor   ZkeytupleZdispatch_funcÚrr   r   r   Úprocess_keyevent    s     

zViMode.process_keyeventc                 C   sz  d| _ i | _d| _d| _d| _d| _d| _d| _d| _d| _	g | _
d| _d| _d| _d| _|  ¡  |  d¡ ttdƒdƒD ]}|  d	t|ƒ | j¡ qz|  d
| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j ¡ |  d| j!¡ |  d| j"¡ |  d| j#¡ |  d| j$¡ dS )zInitialize vi editingmodeÚonNTÚ éÿÿÿÿr   ú é   z%sZ	BackSpaceÚEscapeÚReturnÚLeftÚRightZHomeZEndÚDeletez	Control-dz	Control-zz	Control-rZUpz	Control-pZDownz	Control-nZTab)%Zshow_all_if_ambiguousr   r
   Ú_vi_commandÚ_vi_command_editÚ_vi_key_find_charÚ_vi_key_find_directionÚ_vi_yank_bufferÚ_vi_multiplier1Ú_vi_multiplier2Ú_vi_undo_stackÚ_vi_undo_cursorÚ_vi_currentÚ_vi_search_textÚ_vi_search_positionÚvi_save_lineÚvi_set_insert_modeÚrangeÚordZ	_bind_keyÚchrr   Úvi_backspaceÚ	vi_escapeÚvi_accept_lineZbackward_charZforward_charÚbeginning_of_lineÚend_of_lineÚdelete_charÚvi_eofÚvi_redoÚvi_arrow_upÚvi_upÚvi_arrow_downÚvi_downÚvi_complete)r   r   Úcr   r   r   Úinit_editing_mode:   sF    
zViMode.init_editing_modec                 C   sF   | j st| ƒ| _ n"| j jr4| j jr*| j | _t| ƒ| _ | j  |j¡ d S r   )r'   Ú	ViCommandÚis_endÚis_editr(   Úadd_charÚchar©r   r   r   r   r   r   e   s    
zViMode.vi_keyc                 C   s   |   ¡  d S r   )Ú_bellr   r   r   r   Úvi_errorn   s    zViMode.vi_errorc                 C   s   | j S r   )r
   r   r   r   r   Úvi_get_is_insert_modeq   s    zViMode.vi_get_is_insert_modec                 C   sf   | j r<| jr| j |j¡ n
t| ƒ| _|  d¡ tj| j_	n&| jrZ| jj
rZ| j |j¡ n|  ¡  d S )NF)Úvi_is_insert_moder'   rJ   rK   rG   r4   r   ZPrevCharr   ÚpointÚis_replace_onerN   rL   r   r   r   r9   v   s    

zViMode.vi_escapec                 C   s&   | j r| j  |j¡ n|  | j ¡ d S r   )r'   rJ   rK   Ú_vi_do_backspacerL   r   r   r   r8   ƒ   s    zViMode.vi_backspacec                 C   s¢   | j s| jrž| jjrž| jjdkrž| j jd8  _| jjrˆz,| j| j d | jj }|| jj| jj< W qž t	y„   | jj| jj= Y qž0 n|  
¡  | jj| jj= d S ©Nr   r   )rP   r'   Ú	is_searchr   rQ   Ú	overwriter.   r/   Úline_bufferÚ
IndexErrorr3   )r   Úvi_cmdÚprevr   r   r   rS   ‰   s    ÿzViMode._vi_do_backspacec                 C   s`   | j r| j jr| j  ¡  dS d | _ |  d¡ g | _d| _d | _| jjrV|  	| j 
¡ ¡ |  |¡S )NFTr   )r'   rU   Ú	do_searchr4   r.   r/   r0   r   rW   Zadd_historyÚcopyZaccept_linerL   r   r   r   r:   ™   s    

zViMode.vi_accept_linec                 C   s   t ‚d S r   )r   rL   r   r   r   r>   ¦   s    zViMode.vi_eofc                 C   s2   | j |krd S || _ |r(|  ¡  d| _nd| _d S )Né   éd   )r
   r3   Zcursor_size)r   Úvaluer   r   r   r4   ©   s    
zViMode.vi_set_insert_modec                 C   s*   | j j| j jd d … f}|g| _d| _d S ©Nr   )r   rQ   rW   r.   r/   ©r   Ztpl_undor   r   r   Úvi_undo_restart³   s
    þzViMode.vi_undo_restartc                 C   sv   | j r"| jdkr"| j | jd d …= | jj| jjd d … f}| j rX| j | j d |d krr| j  |¡ |  jd7  _d S rT   )r.   r/   r   rQ   rW   Úappendra   r   r   r   r3   »   s    þÿþzViMode.vi_save_linec                 C   s    | j t| jƒd kr|  ¡  d S ©Nr   )r/   Úlenr.   r3   r   r   r   r   Úvi_undo_prepareÊ   s    zViMode.vi_undo_prepareTc                 C   s>   |   ¡  | jr| jdkr$|  ¡  d S |  jd8  _|  ¡  d S rT   )rf   r.   r/   rN   Úvi_undo_assign)r   Zdo_popr   r   r   Úvi_undoÎ   s    zViMode.vi_undoc                 C   s.   |   ¡  | jdkr"d| _|  ¡  n|  ¡  d S r`   )rf   r/   rg   rN   r   r   r   r   Úvi_undo_allÖ   s
    

zViMode.vi_undo_allc                 C   s0   | j | j }|d d d … | j_|d | j_d S ©Nr   r   )r.   r/   r   rW   rQ   ra   r   r   r   rg   Þ   s    zViMode.vi_undo_assignc                 C   s:   | j t| jƒd kr |  ¡  d S |  j d7  _ |  ¡  d S rd   )r/   re   r.   rN   rg   rL   r   r   r   r?   ã   s
    zViMode.vi_redoc                 C   sl   |D ]Z}| j j| }| ¡  | j¡}|dkr|| _|| j _t|jƒ| j	_|| j	_
|  ¡   dS q|  ¡  dS )Nr   TF)Ú_historyÚhistoryÚget_line_textÚfindr1   r2   Úhistory_cursorÚlistrW   r   rQ   rb   rM   )r   ÚrngÚiZline_historyÚposr   r   r   Ú	vi_searchê   s    zViMode.vi_searchc                 C   s‚   d  | jjdd … ¡}|r4|| _t| jjƒd | _n*| jrJ|  jd8  _n|  ¡  |  	¡  d S |  
tt| jddƒƒ¡s~|  	¡  d S )Nr   r   r   )Újoinr   rW   r1   re   rk   rl   r2   rN   rh   rt   rp   r5   ©r   Útextr   r   r   Úvi_search_firstø   s    zViMode.vi_search_firstc                 C   s    |   tt| jd ddƒƒ¡ d S ©Nr   r   )rt   rp   r5   r2   r   r   r   r   Úvi_search_again_backward  s    zViMode.vi_search_again_backwardc                 C   s&   |   tt| jd t| jjƒƒƒ¡ d S rd   )rt   rp   r5   r2   re   rk   rl   r   r   r   r   Úvi_search_again_forward
  s    ÿzViMode.vi_search_again_forwardc                 C   s\   | j jt| j jƒkr&| jjd d … | _| j  | j¡ | jrF|  	|¡ n
|  
|¡ |  ¡  d S r   )rk   ro   re   rl   r   rW   r0   Zprevious_historyrP   r<   r;   rb   rL   r   r   r   rA     s    
zViMode.vi_upc                 C   sÔ   | j jt| j jƒkr |  ¡  d S | j jt| j jƒd k rl| j  | j¡ | jrX|  |¡ n
|  	|¡ |  
¡  nd| jd urÄt| j jƒ| j _| j| j_|  |¡ | js¼| jjdkr¼| j jd8  _d | _n|  ¡  d S d S rj   )rk   ro   re   rl   rN   Znext_historyr   rP   r<   r;   rb   r0   rW   rQ   rL   r   r   r   rC     s$    




zViMode.vi_downc                 C   s    |   d¡ |  |¡ |  ¡  d S ©NT)r4   rA   r3   rL   r   r   r   r@   1  s    

zViMode.vi_arrow_upc                 C   s    |   d¡ |  |¡ |  ¡  d S r|   )r4   rC   r3   rL   r   r   r   rB   6  s    

zViMode.vi_arrow_downc                 C   s.   | j  ¡ }|r | ¡ s |  |¡S |  |¡S d S r   )r   rm   ÚisspaceZcompleter   )r   r   rw   r   r   r   rD   ;  s    

zViMode.vi_complete)T)$Ú__name__Ú
__module__Ú__qualname__Úmoder	   r   r   rF   r   rN   rO   ÚpropertyrP   r9   r8   rS   r:   r>   r4   rb   r3   rf   rh   ri   rg   r?   rt   rx   rz   r{   rA   rC   r@   rB   rD   Ú__classcell__r   r   r   r   r      s>   +	

r   Zvi_beginZ	vi_multi1Z	vi_actionZ	vi_multi2Z	vi_motionZvi_motion_argumentZvi_replace_oneZvi_textrt   Zvi_endc                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkdl„ Z8dmdn„ Z9dodp„ Z:e;e:ƒZ<dqdr„ Z=e;e=ƒZ>dsdt„ Z?e;e?ƒZ@dudv„ ZAdwdx„ ZBdydz„ ZCdºd}d~„ZDd»dd€„ZEd¼d�d‚„ZFd½dƒd„„ZGd¾d…d†„ZHd¿d‡dˆ„ZIdÀd‰dŠ„ZJdÁd‹dŒ„ZKdÂdŽd�„ZLdÃd�d‘„ZMdÄd’d“„ZNdÅd”d•„ZOdÆd–d—„ZPdÇd˜d™„ZQdÈdšd›„ZRdÉdœd�„ZSdždŸ„ ZTd d¡„ ZUd¢d£„ ZVd¤d¥„ ZWd¦d§„ ZXd¨d©„ ZYdªd«„ ZZd¬d­„ Z[d®d¯„ Z\d°d±„ Z]d²d³„ Z^d´dµ„ Z_d¶d·„ Z`d¸d¹„ Zad�S )ÊrG   c                 C   sð   || _ g | _t| _| j| _d | _d | _d | _d | _	d| _
d| _d| _d| _d| _d| _d| j _d| j _|  d¡ d| _d| _tdƒ| jtdƒ| jtdƒ| jtdƒ| jtd	ƒ| jtd
ƒ| jtdƒ| jtdƒ| jtdƒ| jtdƒ| jd| j i| _!d S )NFr   r   é   ú$ú^ú;ú,ú%Ú.ú/Ú*ú|ú~é   )"ÚreadlineÚlst_charÚ	_VI_BEGINÚstateÚmovementÚactionÚmotionÚmotion_argumentrw   Ú
pos_motionrI   Úis_overwriteÚis_errorÚis_starÚdelete_leftÚdelete_rightr,   r-   Úset_override_multiplierÚskip_multiplerÚtabstopr6   Ú
key_dollarÚkey_hatÚkey_semicolonÚ	key_commaÚkey_percentÚkey_dotÚ	key_slashÚkey_starÚkey_barÚ	key_tildeÚkey_backspaceÚdct_fcn)r   r�   r   r   r   r	   T  s>    










õzViCommand.__init__c                 C   sh  | j  |¡ | jtkr.| jjr.| j ¡  t| _| jtkrZ|dkrL|  	|¡ n
|  
|¡ d S | jtkrÊ|dkrx|  |¡ nN|dkr¨| j}d|| jjj|   }|  
|¡ n|dkr¼|  	|¡ n
|  
|¡ d S | jtkrâ|  |¡ d S | jtkrú|  |¡ d S z| jt|ƒ }W n$ t�y0   t| d| d ƒ}Y n0 |�rD||ƒ d S | ¡ �r\|  |¡ d S |  ¡  d S )Núúú	r    zkey_%s)r‘   rc   r“   r’   r�   rP   r3   Ú_VI_TEXTÚ
_VI_SEARCHr«   Úset_textÚescaper    r   rQ   Ú_VI_MOTION_ARGUMENTÚset_motion_argumentÚ_VI_REPLACE_ONEÚreplace_oner¬   r6   ÚBaseExceptionÚgetattrÚisdigitÚ	key_digitÚerror)r   rK   ÚtsÚwsZfcn_instancer   r   r   rJ   v  sJ    










zViCommand.add_charc                 C   s.   | j d u r|| _ n|  j |7  _ |  |¡ d S r   )rw   Ú
set_bufferrv   r   r   r   r²      s    
zViCommand.set_textc                 C   sŠ   |D ]€}|   |¡sq| jrZ| jjjt| jjjƒk rH|| jjj| jjj< qr| jjj |¡ n| jjj | jjj|¡ | jj jd7  _qd S rd   )	Úchar_isprintr™   r�   r   rQ   re   rW   rc   Úinsert)r   rw   rK   r   r   r   r¿   §  s    

ÿÿ

ÿzViCommand.set_bufferc                 C   sz   |dkr|   ¡  d S d| _| j ¡  |  ¡ }| jjj}|| | jjj||| …< |dkrn| jj j|d 7  _|   ¡  d S )Nr®   Tr   )ÚendrI   r�   r3   Úget_multiplierr   rQ   rW   )r   rK   ÚtimesÚcursorr   r   r   r·   À  s    

zViCommand.replace_onec                 C   s    t |ƒt dƒkot |ƒt dƒkS )Nr    rŽ   )r6   ©r   rK   r   r   r   rÀ   Í  s    zViCommand.char_isprintc                 C   s    | j | _d| _t| _|  ¡  d S rd   )Úmotion_end_in_liner–   r�   Ú
_VI_MOTIONr“   ÚapplyrÆ   r   r   r   r¡   Ð  s    zViCommand.key_dollarc                 C   s   | j | _t| _|  ¡  d S r   )Úmotion_beginning_of_liner–   rÈ   r“   rÉ   rÆ   r   r   r   r¢   Ö  s    zViCommand.key_hatc                 C   s(   | j ttfv r|  |¡ n
|  |¡ d S r   )r“   r’   Ú
_VI_ACTIONr¢   r»   rÆ   r   r   r   Úkey_0Û  s    zViCommand.key_0c                 C   sV   | j ttfv r.| j j|7  _d| j_t| _ n$| j ttfv rR| j j|7  _t| _ d S )Nr   )r“   r’   Ú
_VI_MULTI1r�   r,   r-   rË   Ú
_VI_MULTI2rÆ   r   r   r   r»   á  s    zViCommand.key_digitc                 C   s4   | j | jkr|  |¡ d S | j| _t| _|  ¡  d S r   )r•   ÚchangeÚkey_eÚmotion_word_shortr–   rÈ   r“   rÉ   rÆ   r   r   r   Úkey_wê  s    
zViCommand.key_wc                 C   s4   | j | jkr|  |¡ d S | j| _t| _|  ¡  d S r   )r•   rÏ   Úkey_EÚmotion_word_longr–   rÈ   r“   rÉ   rÆ   r   r   r   Úkey_Wò  s    
zViCommand.key_Wc                 C   s    | j | _t| _d| _|  ¡  d S rd   )Úmotion_end_shortr–   rÈ   r“   r�   rÉ   rÆ   r   r   r   rÐ   ú  s    zViCommand.key_ec                 C   s    | j | _t| _d| _|  ¡  d S rd   )Úmotion_end_longr–   rÈ   r“   r�   rÉ   rÆ   r   r   r   rÓ      s    zViCommand.key_Ec                 C   s   | j | _t| _|  ¡  d S r   )Úmotion_back_shortr–   rÈ   r“   rÉ   rÆ   r   r   r   Úkey_b  s    zViCommand.key_bc                 C   s   | j | _t| _|  ¡  d S r   )Úmotion_back_longr–   rÈ   r“   rÉ   rÆ   r   r   r   Úkey_B  s    zViCommand.key_Bc                 C   s    d| j _| j| _d| _t| _d S ©NTr   )r�   r*   Úmotion_find_char_forwardr–   r�   r´   r“   rÆ   r   r   r   Úkey_f  s    zViCommand.key_fc                 C   s    d| j _| j| _d| _t| _d S )NFr   )r�   r*   Úmotion_find_char_backwardr–   rœ   r´   r“   rÆ   r   r   r   Úkey_F  s    zViCommand.key_Fc                 C   s   | j | _d| _t| _d S rd   )Úmotion_to_char_forwardr–   r�   r´   r“   rÆ   r   r   r   Úkey_t  s    zViCommand.key_tc                 C   s   | j | _t| _d S r   )Úmotion_to_char_backwardr–   r´   r“   rÆ   r   r   r   Úkey_T!  s    zViCommand.key_Tc                 C   s   | j  t|ƒ¡ t| _d S r   )r�   rC   ÚViEventÚ_VI_ENDr“   rÆ   r   r   r   Úkey_j%  s    zViCommand.key_jc                 C   s   | j  t|ƒ¡ t| _d S r   )r�   rA   rå   ræ   r“   rÆ   r   r   r   Úkey_k)  s    zViCommand.key_kc                 C   sD   | j jd u r|  ¡  d S | j jr*| j| _n| j| _|  | j j¡ d S r   )r�   r)   r¼   r*   rÝ   r–   rß   rµ   rÆ   r   r   r   r£   -  s    
zViCommand.key_semicolonc                 C   sD   | j jd u r|  ¡  d S | j jr*| j| _n| j| _|  | j j¡ d S r   )r�   r)   r¼   r*   rß   r–   rÝ   rµ   rÆ   r   r   r   r¤   7  s    
zViCommand.key_commac                 C   s    | j | _d| _t| _|  ¡  dS )úfind matching <([{}])>r   N)Úmotion_matchingr–   r�   rÈ   r“   rÉ   rÆ   r   r   r   r¥   A  s    zViCommand.key_percentc                 C   sÈ   | j j}|sd S |jr$|  |¡ d S |  ¡ r6|  ¡ }nd}t| j ƒ}|dkrb| |¡ | |¡ n|jrt| |j¡ |j	D ]}| 
|¡ qz|jr°| j jjdkr°| j j jd8  _| j  d¡ |  ¡  d S )Nr   r   F)r�   r(   r›   r¨   Úhas_multiplierrÃ   rG   rž   Úoverride_multiplierr‘   rJ   r™   r   rQ   r4   rÂ   )r   rK   Zvi_cmd_editÚcountrY   r   r   r   r¦   H  s*    




zViCommand.key_dotc                 C   s*   | j  ¡  dg| j j_d| j j_t| _d S )Nr‹   r   )r�   r3   r   rW   rQ   r±   r“   rÆ   r   r   r   r§   c  s    

zViCommand.key_slashc                 C   sž   d| _ d| _| j ¡  | j ¡ }|rŒd |¡d }t|ƒ| jjj| jj	| jj
d …< | jj
| jj	 }| jj jt|ƒ| 7  _| j d¡ n|  ¡  t| _d S )NTr    r   )r›   rI   r�   r3   Z_get_completionsru   rp   r   rW   ZbegidxZendidxrQ   re   r4   r¼   r°   r“   )r   rK   Zcompletionsrw   Ú
prefix_lenr   r   r   r¨   i  s    

þÿzViCommand.key_starc                 C   s   | j | _t| _|  ¡  d S r   )Úmotion_columnr–   rÈ   r“   rÉ   rÆ   r   r   r   r©   z  s    zViCommand.key_barc              	   C   s´   d| _ | j ¡  t|  ¡ ƒD ]Š}zl| jjj| jjj }| ¡ rX| 	¡ | jjj| jjj< n | 
¡ rx| ¡ | jjj| jjj< | jj jd7  _W q ty¤   Y  q¨Y q0 q|  ¡  d S rÜ   )rI   r�   r3   r5   rÃ   r   rW   rQ   ÚisupperÚlowerÚislowerÚupperrX   rÂ   )r   rK   rr   rE   r   r   r   rª     s    
ÿÿzViCommand.key_tildec                 C   s   | j | _t| _|  ¡  d S r   )Úmotion_leftr–   rÈ   r“   rÉ   rÆ   r   r   r   Úkey_h’  s    zViCommand.key_hc                 C   s�   | j ttfv r\| jrft| jƒrf| jd d… | _z| j ¡  | j ¡  W qf tyX   Y qf0 n
|  |¡ | j	 
| ¡ | j tkrŒ| j	jjsŒt| _ d S )Nr   )r“   r°   r±   rw   re   r‘   ÚpoprX   rõ   r�   rS   r   rW   r’   rÆ   r   r   r   r«   —  s    

zViCommand.key_backspacec                 C   s   | j | _t| _|  ¡  d S r   )Úmotion_rightr–   rÈ   r“   rÉ   rÆ   r   r   r   Úkey_l§  s    zViCommand.key_lc                 C   s   d| _ t| _| j d¡ d S r|   )rI   r°   r“   r�   r4   rÆ   r   r   r   Úkey_i¬  s    zViCommand.key_ic                 C   s&   d| _ t| _| j d¡ d| jj_d S ©NTr   )rI   r°   r“   r�   r4   r   rQ   rÆ   r   r   r   Úkey_I±  s    zViCommand.key_Ic                 C   s<   d| _ t| _| j d¡ t| jjjƒr8| jj jd7  _d S rÜ   ©	rI   r°   r“   r�   r4   re   r   rW   rQ   rÆ   r   r   r   Úkey_a·  s
    zViCommand.key_ac                 C   s0   d| _ t| _| j d¡ t| jjjƒ| jj_d S r|   rü   rÆ   r   r   r   Úkey_A¾  s    zViCommand.key_Ac                 C   s   d| _ t| _| j| _d S r|   )rI   rË   r“   Údeleter•   rÆ   r   r   r   Úkey_dÄ  s    zViCommand.key_dc                 C   s    d| _ t| _| j| _|  ¡  d S r|   )rI   rË   r“   Údelete_end_of_liner•   rÉ   rÆ   r   r   r   Úkey_DÉ  s    zViCommand.key_Dc                 C   s    d| _ t| _| j| _|  ¡  d S r|   )rI   rË   r“   r=   r•   rÉ   rÆ   r   r   r   Úkey_xÏ  s    zViCommand.key_xc                 C   s    d| _ t| _| j| _|  ¡  d S r|   )rI   rË   r“   Údelete_prev_charr•   rÉ   rÆ   r   r   r   Úkey_XÕ  s    zViCommand.key_Xc                 C   sN   d| _ | jjj}| jjj|  ¡  }d| _| j d¡ | jjj||…= t| _	d S r|   )
rI   r�   r   rQ   rÃ   rŸ   r4   rW   r°   r“   )r   rK   Úi1Úi2r   r   r   Úkey_sÛ  s    
zViCommand.key_sc                 C   s0   d| _ | j d¡ g | jj_d| jj_t| _d S rú   ©rI   r�   r4   r   rW   rQ   r°   r“   rÆ   r   r   r   Úkey_Sä  s
    

zViCommand.key_Sc                 C   s   d| _ t| _| j| _d S r|   )rI   rË   r“   rÏ   r•   rÆ   r   r   r   Úkey_cë  s    zViCommand.key_cc                 C   s2   d| _ | j d¡ | jjj| jjjd …= t| _d S r|   r	  rÆ   r   r   r   Úkey_Cð  s    zViCommand.key_Cc                 C   s
   t | _d S r   )r¶   r“   rÆ   r   r   r   Úkey_rö  s    zViCommand.key_rc                 C   s,   d| _ d| _d| jj_| j d¡ t| _d S r|   )rI   r™   r�   r   rV   r4   r°   r“   rÆ   r   r   r   Úkey_Rù  s
    
zViCommand.key_Rc                 C   s   t | _| j| _d S r   )rË   Ú_stateÚyankr•   rÆ   r   r   r   Úkey_y   s    zViCommand.key_yc                 C   s   | j j ¡ | j _|  ¡  d S r   )r�   r   rm   r+   rÂ   rÆ   r   r   r   Úkey_Y  s    zViCommand.key_Yc                 C   sd   | j jsd S d| _| j  ¡  | j j jd7  _| j j | j j|  ¡  ¡ | j j jd8  _t| _	d S rÜ   )
r�   r+   rI   r3   r   rQ   Úinsert_textrÃ   ræ   r“   rÆ   r   r   r   Úkey_p  s    
ÿzViCommand.key_pc                 C   sR   | j jsd S d| _| j  ¡  | j j | j j|  ¡  ¡ | j j jd8  _t| _	d S rÜ   )
r�   r+   rI   r3   r   r  rÃ   rQ   ræ   r“   rÆ   r   r   r   Úkey_P  s    
ÿzViCommand.key_Pc                 C   s   | j  ¡  t| _d S r   )r�   rh   ræ   r“   rÆ   r   r   r   Úkey_u  s    
zViCommand.key_uc                 C   s   | j  ¡  t| _d S r   )r�   ri   ræ   r“   rÆ   r   r   r   Úkey_U#  s    
zViCommand.key_Uc                 C   s8   t | jjjƒ}t|jƒ| jj_d| jj_d| _t| _	d S )Nr   T)
ÚViExternalEditorr�   r   rW   rp   ÚresultrQ   rI   ræ   r“   )r   rK   Zeditorr   r   r   Úkey_v'  s
    
zViCommand.key_vc                 C   s   | j  ¡  d| _d S r|   )r�   rM   rš   r   r   r   r   r¼   .  s    
zViCommand.errorc                 C   s
   | j tkS r   )r“   ræ   r   r   r   r   Ústate_is_end2  s    zViCommand.state_is_endc                 C   s
   | j tkS r   )r“   r±   r   r   r   r   Ústate_is_search7  s    zViCommand.state_is_searchc                 C   s
   | j tkS r   )r“   r¶   r   r   r   r   Ústate_is_replace_one<  s    zViCommand.state_is_replace_onec                 C   s   | j  ¡  t| _d S r   )r�   rx   ræ   r“   r   r   r   r   r[   A  s    
zViCommand.do_searchc                 C   s   | j  ¡  t| _d S r   )r�   rz   ræ   r“   rÆ   r   r   r   Úkey_nE  s    
zViCommand.key_nc                 C   s   | j  ¡  t| _d S r   )r�   r{   ræ   r“   rÆ   r   r   r   Úkey_NI  s    
zViCommand.key_Nr   r   c                 K   s   dS r`   r   ©r   ÚlineÚindexrí   Úkwr   r   r   rÊ   M  s    z"ViCommand.motion_beginning_of_linec                 K   s   t dt| jjjƒd ƒS rT   )Úmaxre   r�   r   rW   r   r   r   r   rÇ   P  s    zViCommand.motion_end_in_linec                 K   s   t |||ƒS r   )Úvi_pos_word_shortr   r   r   r   rÑ   S  s    zViCommand.motion_word_shortc                 K   s   t |||ƒS r   )Úvi_pos_word_longr   r   r   r   rÔ   V  s    zViCommand.motion_word_longc                 K   s   t |||ƒS r   )Úvi_pos_end_shortr   r   r   r   rÖ   Y  s    zViCommand.motion_end_shortc                 K   s   t |||ƒS r   )Úvi_pos_end_longr   r   r   r   r×   \  s    zViCommand.motion_end_longc                 K   s   t |||ƒS r   )Úvi_pos_back_shortr   r   r   r   rØ   _  s    zViCommand.motion_back_shortc                 K   s   t |||ƒS r   )Úvi_pos_back_longr   r   r   r   rÚ   b  s    zViCommand.motion_back_longNc                 C   s   || j _t||||ƒS r   )r�   r)   Úvi_pos_find_char_forward©r   r!  r"  rí   rK   r   r   r   rÝ   e  s    z"ViCommand.motion_find_char_forwardc                 C   s   || j _t||||ƒS r   )r�   r)   Úvi_pos_find_char_backwardr,  r   r   r   rß   i  s    z#ViCommand.motion_find_char_backwardc                 C   s   t ||||ƒS r   )Úvi_pos_to_char_forwardr,  r   r   r   rá   m  s    z ViCommand.motion_to_char_forwardc                 C   s   t ||||ƒS r   )Úvi_pos_to_char_backwardr,  r   r   r   rã   p  s    z!ViCommand.motion_to_char_backwardc                 C   s   t d|| ƒS r`   ©r$  r,  r   r   r   rô   s  s    zViCommand.motion_leftc                 C   s   t t|ƒ|| ƒS r   )Úminre   r,  r   r   r   r÷   v  s    zViCommand.motion_rightc                 C   s
   t ||ƒS r   )Úvi_pos_matchingr,  r   r   r   rê   y  s    zViCommand.motion_matchingc                 C   s   t d|d ƒS rT   r0  r,  r   r   r   rï   |  s    zViCommand.motion_columnc                 C   s   | j p| jjp| jjS r   )rì   r�   r,   r-   r   r   r   r   rë     s
    ÿýzViCommand.has_multiplierc                 C   sT   | j rt| j ƒS | jjdkr"d}nt| jjƒ}| jjdkr@d}nt| jjƒ}|| S )Nr   r   )rì   Úintr�   r,   r-   )r   Úm1Úm2r   r   r   rÃ   †  s    
zViCommand.get_multiplierc                 C   s
   || _ d S r   )rì   )r   rí   r   r   r   rž   “  s    z!ViCommand.set_override_multiplierc                 C   s`   | j rB| j | jjj| jjj|  ¡ | jd�| _| jdk rB|  ¡  d S |  	¡  | j
tkr\|  ¡  d S )N©rK   r   )r–   r�   r   rW   rQ   rÃ   r—   r˜   r¼   r•   r“   r°   rÂ   r   r   r   r   rÉ   –  s    ü

zViCommand.applyc                 C   s>   | j t| jjjƒkr"| j | jj_nt| jjjƒd | jj_d S rd   )r˜   re   r�   r   rW   rQ   r   r   r   r   r”   ¥  s    zViCommand.movementc                 C   sn   | j | jjjkr2| jjj| jjj| j | j … }n0td| j | j ƒ}| jjj|| jjj| j … }|| j_d S r`   )	r˜   r�   r   rQ   rW   r�   r$  rœ   r+   )r   Úsr"  r   r   r   r  «  s    ÿÿzViCommand.yankc                 C   sª   | j  ¡  |  ¡  | j| j jjkrn| j jj| j jj| j| j …= | j jjt| j jjƒkr¦t| j jjƒ| j j_n8t	d| j| j
 ƒ}| j jj|| j jj| j …= || j j_d S r`   )r�   r3   r  r˜   r   rQ   rW   r�   re   r$  rœ   )r   r"  r   r   r   rÿ   ·  s    
ÿÿzViCommand.deletec                 C   sZ   | j  ¡  | j j ¡ }|d | j jj… }| j j |¡ | j jjdkrV| j j jd8  _d S rT   )r�   r3   r   rm   rQ   Zset_line)r   Z	line_textr   r   r   r  Ë  s    
zViCommand.delete_end_of_linec                 C   sN   | j jj|  ¡  | _|  ¡  tdt| j jƒd ƒ}| j jj|krJ|| j j_d S rT   )r�   r   rQ   rÃ   r˜   rÿ   r$  re   )r   rÂ   r   r   r   r=   Ô  s
    zViCommand.delete_charc                 C   s    | j jj|  ¡  | _|  ¡  d S r   )r�   r   rQ   rÃ   r˜   rÿ   r   r   r   r   r  Þ  s    zViCommand.delete_prev_charc                 C   s$   | j  d¡ |  ¡  d| _t| _d S r|   )r�   r4   rÿ   rŸ   r°   r“   r   r   r   r   rÏ   â  s    zViCommand.changec                 C   sH   | j tkr>| js>|  ¡ }|dkr>| jr>| j|d  }|  |¡ t| _ d S rd   )r“   r°   rŸ   rÃ   rw   r¿   ræ   )r   rK   rÄ   Úextrar   r   r   r³   è  s    

zViCommand.escapec                 C   s   || _ |  ¡  d S r   )r—   rÉ   rÆ   r   r   r   rµ   ñ  s    zViCommand.set_motion_argumentc                 C   s@   t | _| jjjt| jjjƒkr<tdt| jjjƒd ƒ| jj_d S rT   )ræ   r“   r�   r   rQ   re   rW   r$  r   r   r   r   rÂ   õ  s
    ÿzViCommand.end)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)br~   r   r€   r	   rJ   r²   r¿   r·   rÀ   r¡   r¢   rÌ   r»   rÒ   rÕ   rÐ   rÓ   rÙ   rÛ   rÞ   rà   râ   rä   rç   rè   r£   r¤   r¥   r¦   r§   r¨   r©   rª   rõ   r«   rø   rù   rû   rý   rþ   r   r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r¼   r  r‚   rH   r  rU   r  rR   r[   r  r  rÊ   rÇ   rÑ   rÔ   rÖ   r×   rØ   rÚ   rÝ   rß   rá   rã   rô   r÷   rê   rï   rë   rÃ   rž   rÉ   r”   r  rÿ   r  r=   r  rÏ   r³   rµ   rÂ   r   r   r   r   rG   S  s¼   "*	

	















	
	rG   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )r  c                 C   st   t |tg ƒƒrd |¡}|  ¡ }|  |d¡}| |¡ | ¡  |  |¡ |  |d¡}| ¡ | _	| ¡  |  
|¡ d S )Nr   Úwr   )Ú
isinstanceÚtyperu   Úget_tempfileÚ	file_openÚwriteÚcloseÚ
run_editorÚreadr  Úfile_remove)r   r!  Zfile_tmpZfp_tmpr   r   r   r	   þ  s    



zViExternalEditor.__init__c                 C   s   dd l }|jddd�S )Nr   z	readline-z.py)ÚprefixÚsuffix)ÚtempfileÚmktemp)r   rE  r   r   r   r<    s    zViExternalEditor.get_tempfilec                 C   s
   t ||ƒS r   )Úopen)r   Úfilenamer�   r   r   r   r=    s    zViExternalEditor.file_openc                 C   s   t  |¡ d S r   )ÚosÚremove)r   rH  r   r   r   rB    s    zViExternalEditor.file_removec                 C   s&   zt jd W S  ty    Y dS 0 d S )NZEDITORZnotepad)rI  ÚenvironÚKeyErrorr   r   r   r   Ú
get_editor  s    zViExternalEditor.get_editorc                 C   s   d|   ¡ |f }|  |¡ d S )Nz%s %s)rM  Úrun_command)r   rH  Úcmdr   r   r   r@    s
    þzViExternalEditor.run_editorc                 C   s   t  |¡ d S r   )rI  Úsystem)r   Úcommandr   r   r   rN  #  s    zViExternalEditor.run_commandN)
r~   r   r€   r	   r<  r=  rB  rM  r@  rN  r   r   r   r   r  ý  s   r  c                   @   s   e Zd Zdd„ ZdS )rå   c                 C   s
   || _ d S r   r6  rÆ   r   r   r   r	   (  s    zViEvent.__init__N)r~   r   r€   r	   r   r   r   r   rå   '  s   rå   c                 C   s,   t dt| ƒ| f ƒ |  ¡ p*|  ¡ p*| dkS )Nzxx vi_is_word: type(%s), %sÚ_)r   r;  Úisalpharº   r6  r   r   r   Ú
vi_is_word/  s    þÿÿrT  c                 C   s   |   ¡ S r   )r}   r6  r   r   r   Úvi_is_space:  s    rU  c                 C   s   t | ƒpt| ƒS r   )rT  rU  r6  r   r   r   Úvi_is_word_or_space>  s    rV  c                 C   sˆ   zht |ƒD ]X}t| | ƒ}|s6t| | ƒsL|d7 }qnt| | ƒrL|d7 }q6t| | ƒr
|d7 }qLq
|W S  ty‚   t| ƒ Y S 0 d S rd   )r5   rT  rU  rX   re   ©r!  r"  rí   rr   Zin_wordr   r   r   r%  B  s    
r%  c                 C   sp   zPt |ƒD ]@}t| | ƒ}|s4t| | ƒs4|d7 }qt| | ƒr
|d7 }q4q
|W S  tyj   t| ƒ Y S 0 d S rd   )r5   rU  rX   re   )r!  r"  rí   rr   Zin_spacer   r   r   r&  S  s    
r&  c                 C   sž   ztt |ƒD ]`}|d7 }t| | ƒr,|d7 }qt| | ƒ}|sTt| | ƒsj|d7 }q<q
t| | ƒr
|d7 }qTq
|d W S  ty˜   tdt| ƒd ƒ Y S 0 d S rj   )r5   rU  rT  rV  rX   r$  re   rW  r   r   r   r'  a  s    

r'  c                 C   sv   zLt |ƒD ]8}|d7 }t| | ƒr,|d7 }qt| | ƒs
|d7 }q,q
|d W S  typ   tdt| ƒd ƒ Y S 0 d S rj   )r5   rU  rX   r$  re   ©r!  r"  rí   rr   r   r   r   r(  s  s    

r(  c                   @   s   e Zd ZdZdd„ ZdS )Úvi_listz0This is a list that cannot have a negative indexc                 C   s4   zt |ƒdk rt‚W n ty&   Y n0 t | |¡S r`   )r3  rX   Ú
ValueErrorrp   Ú__getitem__)r   Úkeyr   r   r   r[  ƒ  s    zvi_list.__getitem__N)r~   r   r€   Ú__doc__r[  r   r   r   r   rY  €  s   rY  c                 C   s–   t | ƒ} ztt|ƒD ]`}|d8 }t| | ƒr4|d8 }qt| | ƒ}|r\t| | ƒrr|d8 }qDqt| | ƒs|d8 }q\q|d W S  ty�   Y dS 0 d S rj   )rY  r5   rU  rT  rV  rX   rW  r   r   r   r)  Œ  s    

r)  c                 C   sn   t | ƒ} zLt|ƒD ]8}|d8 }t| | ƒr4|d8 }qt| | ƒs|d8 }q4q|d W S  tyh   Y dS 0 d S rj   )rY  r5   rU  rX   rX  r   r   r   r*  Ÿ  s    

r*  c                 C   sL   z2t |ƒD ]"}|d7 }| | |kr
|d7 }qq
|W S  tyF   Y dS 0 d S ry   ©r5   rX   ©r!  rK   r"  rí   rr   r   r   r   r+  ­  s    r+  c                 C   s^   zDt |ƒD ]4}|d8 }|dk r& W dS | | |kr4q
|d8 }qq
|W S  tyX   Y dS 0 d S )Nr   r   r   r^  r_  r   r   r   r-  ¸  s    r-  c                 C   s"   t | |||ƒ}|dkr|d S |S rT   )r+  ©r!  rK   r"  rí   r   r   r   r.  Ç  s    r.  c                 C   s"   t | |||ƒ}|dkr|d S |S rT   )r-  r`  r   r   r   r/  Î  s    r/  )ú>r   )ú<r   )ú)r   )ú(r   )ú]r   )ú[r   )Ú}r   )Ú{r   )rb  ra  rd  rc  rf  re  rh  rg  c                 C   sÈ   d}d}d}d}zž|du r\z t | |  \}}| | }d}W q¢ tyX   |d7 }Y qY q¢0 nF|dk rjW dS | | |kr€|d7 }n"| | |kr¢|d8 }|dkr¢|W S ||7 }qW n tyÂ   Y dS 0 dS )ré   Nr   r   r   )Ú_vi_dct_matchingrL  rX   )r!  r"  ÚanchorÚtargetÚdeltarí   r   r   r   r2  á  s0    
r2  )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   )(rI  Zpyreadline3.lineeditor.lineobjZ
lineeditorr   Zpyreadline3.loggerr   r   r   ZBaseModer   r’   rÍ   rË   rÎ   rÈ   r´   r¶   r°   r±   ræ   rG   r  rå   rT  rU  rV  r%  r&  r'  r(  rp   rY  r)  r*  r+  r-  r.  r/  ri  r2  r   r   r   r   Ú<module>   s`     2     /*









ø