
    =VQ`                     \    d Z ddlmZmZmZ  G d de      Z G d dej                        Zy)zD A generic Emacs-style kill ring, as well as a Qt-specific version.
    )QtCore	QtWidgetsQtGuic                   .    e Zd ZdZd Zd Zd Zd Zd Zy)KillRingz& A generic Emacs-style kill ring.
    c                 $    | j                          y )N)clearselfs    5/usr/lib/python3/dist-packages/qtconsole/kill_ring.py__init__zKillRing.__init__   s    

    c                      d| _         g | _        y) Clears the kill ring.
        N_index_ringr
   s    r   r	   zKillRing.clear   s     
r   c                 :    | j                   j                  |       yz, Adds some killed text to the ring.
        N)r   appendr   texts     r   killzKillRing.kill   s     	

$r   c                 V    t        | j                        | _        | j                         S )zr Yank back the most recently killed text.

        Returns
        -------
        A text string or None.
        )lenr   r   rotater
   s    r   yankzKillRing.yank    s     $**o{{}r   c                 ~    | xj                   dz  c_         | j                   dk\  r| j                  | j                      S y)z{ Rotate the kill ring, then yank back the new top.

        Returns
        -------
        A text string or None.
           r   Nr   r
   s    r   r   zKillRing.rotate*   s4     	q;;!::dkk**r   N)	__name__
__module____qualname____doc__r   r	   r   r   r    r   r   r   r      s      

r   r   c                   F     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
 xZS )	
QtKillRingz/ A kill ring attached to Q[Plain]TextEdit.
    c                    t        |t        j                  t        j                  f      sJ t        |           t               | _        d| _        d| _	        || _
        |j                  j                  | j                         y)zD Create a kill ring attached to the specified Qt text edit.
        NF)
isinstancer   	QTextEditQPlainTextEditsuperr   r   r   
_prev_yank_skip_cursor
_text_editcursorPositionChangedconnect_cursor_position_changed)r   	text_edit	__class__s     r   r   zQtKillRing.__init__>   sj     )i&9&99;S;S%TUUUZ
!#''//0M0MNr   c                 F    | j                   j                          d| _        y)r   N)r   r	   r-   r
   s    r   r	   zQtKillRing.clearK   s     	

r   c                 :    | j                   j                  |       yr   )r   r   r   s     r   r   zQtKillRing.killQ   s     	

r   c                 l    |j                         }|r"|j                          | j                  |       yy)z5 Kills the text selected by the give cursor.
        N)selectedTextremoveSelectedTextr   )r   cursorr   s      r   kill_cursorzQtKillRing.kill_cursorV   s1     ""$%%'IIdO r   c                     | j                   j                         }|r:d| _        | j                  j	                         }|j                  |       || _        yy)z2 Yank back the most recently killed text.
        TN)r   r   r.   r/   
textCursor
insertTextr-   r   r   r:   s      r   r   zQtKillRing.yank^   sK     zz  $D__//1Fd#"DO	 r   c                 x   | j                   r| j                  j                         }|rd| _        | j                  j                         }|j                  t        j                  j                  t        j                  j                  t        | j                                |j                  |       || _         yyy)z; Rotate the kill ring, then yank back the new top.
        T)nN)r-   r   r   r.   r/   r=   movePositionr   QTextCursorLeft
KeepAnchorr   r>   r?   s      r   r   zQtKillRing.rotateh   s     ??::$$&D$(!335##E$5$5$:$:$)$5$5$@$@(+DOO(< $ > !!$'"&  r   c                 :    | j                   rd| _         y d | _        y )NF)r.   r-   r
   s    r   r2   z#QtKillRing._cursor_position_changed|   s     %D"DOr   )r!   r"   r#   r$   r   r	   r   r;   r   r   r2   __classcell__)r4   s   @r   r'   r'   6   s,    O
#'(#r   r'   N)	r$   qtpyr   r   r   objectr   QObjectr'   r%   r   r   <module>rK      s1    * )&v &PJ# J#r   