%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /snap/core/17212/usr/lib/python3/dist-packages/urwid/__pycache__/
Upload File :
Create Path :
Current File : //snap/core/17212/usr/lib/python3/dist-packages/urwid/__pycache__/vterm.cpython-35.pyc



7$�V��F@skddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
y(ddlZddlZddl
Z
Wnek
r�YnXddlmZddlmZmZddlmZddlmZmZddlmZmZmZddlmZmZm Z m!Z!m"Z"e#d�Z$d	e#d
�de#d�d
e#d�de$de$dde$dde$dde$dde$dde$dde$dde$dd e$d!d"e$d#d$e$d%d&e$d'd(e$d)d*e$d+d,e$d-d.e$d/d0e$d1d2e$d3d4e$d5d6e$d7d8e$d9d:e$d;iZ%de$d<de$d=de$d>de$d?d$e$d@d&e$dAd(e$dBd*e$dCd,e$dDi	Z&e dE�dFdFdGdH�fe dI�dFdFdJdH�fe dK�dFdFdLdH�fe dM�dFdFdNdH�fe dO�dFdFdPdH�fe dQ�dFdFdRdH�fe dS�dFdFdTdH�fe dU�dFdFdVdH�fe dW�dXdFdYdH�fe dZ�dFdd[dH�fe d\�dFdd]dH�fe d^�dFdFd_dH�fe d`�dFdFdadH�fe db�dFdFdcdH�fe dd�dFdFdedH�fe df�dge dM�fe dh�dddidH�fe dj�dFdFdkdH�fe dl�dge dK�fe dm�dge dW�fe dn�dFddodH�fe dp�dFddqdH�fe dr�dFddsdH�fe dt�dFddudH�fe dv�dFddwdH�fe dx�dFddydH�fe dz�dXdd{dH�fe d|�ddd}dH�fe d~�ddddH�fe d��dge dU�fiZ'dFZ(dXZ)Gd�d��d�e*�Z+Gd�d��d�e*�Z,Gd�d��d�e-�Z.Gd�d��d�e�Z/Gd�d��d�e�Z0dS)��N)�util)�DEC_SPECIAL_CHARS�ALT_DEC_SPECIAL_CHARS)�Canvas)�Widget�BOX)�AttrSpec�RealTerminal�
_BASIC_COLORS)�ord2�chr2�B�bytes�PYTHON3��enter�
Z	backspace��tab�	�esc�upz[AZdownz[B�rightz[C�leftz[D�homez[1~�insertz[2~Zdeletez[3~�endz[4~zpage upz[5~z	page downz[6~�f1z[[A�f2z[[BZf3z[[CZf4z[[DZf5z[[EZf6z[17~Zf7z[18~Zf8z[19~Zf9z[20~Zf10z[21~Zf11z[23~Zf12z[24~ZOAZOBZOCZOD�OPZOQ�ORZOSz[15~�@�cCs|jd|d�S)N�charsr)�insert_chars)�s�number�q�r(�-/usr/lib/python3/dist-packages/urwid/vterm.py�<lambda>fsr*�AcCs|jd|ddd�S)Nr�relativeT)�move_cursor)r%�rowsr'r(r(r)r*gsr
cCs|jd|ddd�S)Nrr,T)r-)r%r.r'r(r(r)r*hs�CcCs|j|dddd�S)Nrr,T)r-)r%�colsr'r(r(r)r*is�DcCs|j|dddd�S)Nrr,T)r-)r%r0r'r(r(r)r*js�EcCs|jd|ddd�S)Nr�
relative_yT)r-)r%r.r'r(r(r)r*ks�FcCs|jd|ddd�S)Nrr3T)r-)r%r.r'r(r(r)r*ls�GcCs|j|ddddd�S)Nrr"r3T)r-)r%�colr'r(r(r)r*ms�H�cCs |j|dd|dd�S)Nr"r)r-)r%Zx_yr'r(r(r)r*ns�JcCs|j|d�S)Nr)�csi_erase_display)r%�moder'r(r(r)r*os�KcCs|j|d�S)Nr)�csi_erase_line)r%r;r'r(r(r)r*ps�LcCs|jd|d�S)N�linesr)�insert_lines)r%r&r'r(r(r)r*qs�McCs|jd|d�S)Nr?r)�remove_lines)r%r&r'r(r(r)r*rs�PcCs|jd|d�S)Nr#r)�remove_chars)r%r&r'r(r(r)r*ss�XcCs3|j|j|jd|dd|jdf�S)Nrr")�erase�term_cursor)r%r&r'r(r(r)r*ts�a�alias�ccCs
|j|�S)N)�csi_get_device_attributes)r%�noner'r(r(r)r*xs�dcCs|jd|dddd�S)Nrr"�
relative_xT)r-)r%�rowr'r(r(r)r*ys�e�f�gcCs|j|d�S)Nr)�csi_clear_tabstop)r%r;r'r(r(r)r*|s�hcCs|j||�S)N)�
csi_set_modes)r%�modesr'r(r(r)r*}s�lcCs|j||dd�S)N�resetT)rU)r%rVr'r(r(r)r*~s�mcCs
|j|�S)N)�csi_set_attr)r%�attrsr'r(r(r)r*s�ncCs|j|d�S)Nr)�csi_status_report)r%r;r'r(r(r)r*�sr'cCs|j|d�S)Nr)�csi_set_keyboard_leds)r%r;r'r(r(r)r*�s�rcCs|j|d|d�S)Nrr")�csi_set_scroll)r%Zt_br'r(r(r)r*�sr%cCs
|j�S)N)�save_cursor)r%rLr'r(r(r)r*�s�ucCs
|j�S)N)�restore_cursor)r%rLr'r(r(r)r*�s�`c@s(eZdZdd�Zdd�ZdS)�	TermModescCs|j�dS)N)rX)�selfr(r(r)�__init__�szTermModes.__init__cCsUd|_d|_d|_d|_d|_d|_d|_d|_t|_	dS)NFT)
�display_ctrlr�lfnl�keys_decckm�
reverse_video�constrain_scrolling�autowrap�visible_cursor�CHARSET_DEFAULT�main_charset)rfr(r(r)rX�s								zTermModes.resetN)�__name__�
__module__�__qualname__rgrXr(r(r(r)re�srec@sveZdZddddddddiZdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Z	dS)�TermCharset�defaultN�vt100�0�ibmpc�U�usercCs)ddg|_d|_|jd�dS)NrurvFr)�_g�_sgr_mapping�activate)rfr(r(r)rg�s	zTermCharset.__init__cCs$||j|<|jd|j�dS)z1
        Redefine G'g' with new mapping.
        rRN)r{r}�active)rfrR�charsetr(r(r)�define�s
zTermCharset.definecCs,||_|jj|j|d�|_dS)z2
        Activate the given charset slot.
        N)r~�MAPPING�getr{�current)rfrRr(r(r)r}�s	zTermCharset.activatecCs
d|_dS)zA
        Set graphics rendition mapping to IBM PC CP437.
        TN)r|)rfr(r(r)�
set_sgr_ibmpc�szTermCharset.set_sgr_ibmpccCs d|_|jd|j�dS)zC
        Reset graphics rendition mapping to IBM PC CP437.
        FrRN)r|r}r~)rfr(r(r)�reset_sgr_ibmpc�s	zTermCharset.reset_sgr_ibmpccCsr|js|j|jdkrjtj|jd��}|dkrZd|_tt|�Sd|_|Sn|SdS)Nrx�cp437rrwry)	r|r{r~r�find�decoder��strr)rf�charZdec_posr(r(r)�
apply_mapping�s		zTermCharset.apply_mapping)
rqrrrsr�rgr�r}r�r�r�r(r(r(r)rt�s
rtcs^eZdZdZdZdd�Z�fdd�Z�fdd�Z�fd	d
�Z�S)�TermScrollerzd
    List subclass that handles the terminal scrollback buffer,
    truncating it as necessary.
    i'cCs&t|�|jkr"|jd�dS)Nr)�len�SCROLLBACK_LINES�pop)rfr(r(r)�trunc�szTermScroller.trunccs$|j�tt|�j|�dS)N)r��superr��append)rf�obj)�	__class__r(r)r��s
zTermScroller.appendcs'|j�tt|�j||�dS)N)r�r�r�r)rf�idxr�)r�r(r)r�s
zTermScroller.insertcs$|j�tt|�j|�dS)N)r�r�r��extend)rf�seq)r�r(r)r��s
zTermScroller.extend)	rqrrrs�__doc__r�r�r�rr�r(r()r�r)r��sr�c@sgeZdZdZdd�Zdddd�Zdd�Zd	ddd
d�Zdd
�Zddd�Z	ddddd�Z
ddd�Zed�dd�Z
ed�dd�Zdd�Zdd�Zdd�Zdd �Zdd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zddd/d0�Zdd1d2�Zdd3d4�Zd5d6�Zd7d8�Zdddd9d:�Zd;d<�Z dd=d>�Z!dd?d@�Z"ddAdB�Z#dCdDdE�Z$ddFdG�Z%dHdI�Z&dJdK�Z'ddLddMdN�Z(ddLdOdP�Z)ddLdQdR�Z*ddLdSdT�Z+dUdV�Z,dWdX�Z-dYdZ�Z.dd[d\�Z/dd]d^�Z0d_d`�Z1ddadb�Z2dcdcddde�Z3dcdfdg�Z4dhdi�Z5djdk�Z6dldm�Z7dndo�Z8dcdpdq�Z9ddrds�Z:dtdu�Z;dvdw�Z<dcdcddddxdy�Z=dzd{�Z>dS)|�
TermCanvasFcCsztj|�|||_|_||_|j|_t�|_d|_	d|_
t�|_d|j
d<|j�dS)Nr�cursor)rrN)rrg�width�height�widget�
term_modesrVr��scrollback_buffer�scrolling_up�utf8_eat_bytesr�utf8_bufferZcoordsrX)rfr�r�r�r(r(r)rg�s
			
zTermCanvas.__init__NcCs�|dkr|jd}|dkr2|jd}|j||�|_|jjr�|j|j|kr�|||jf|_n	d|_dS)z�
        Set terminal cursor to x/y and update canvas cursor. If one or both axes
        are omitted, use the values of the current position.
        Nrr")rG�constrain_coordsrVrnr�r�r�)rf�x�yr(r(r)�set_term_cursors

"zTermCanvas.set_term_cursorcCsd|_|jd|_dS)z?
        Reset scrolling region to full terminal size.
        rr"N)�scrollregion_startr��scrollregion_end)rfr(r(r)�reset_scrolls	zTermCanvas.reset_scrollTcCs�|rd|_|j�dS|dkr6|jd}|sC|}t|j�}|j|7_|j|kr|||_n|jdkr�d|_|j�dS)z�
        Scroll the scrolling buffer up (up=True) or down (up=False) the given
        amount of lines or half the screen height.

        If just 'reset' is True, set the scrollbuffer view to the current
        terminal content.
        rNr8)r�r�r�r�r�)rfrrXr?Z	maxscrollr(r(r)�
scroll_buffers	

	zTermCanvas.scroll_buffercCs}t�|_d|_d|_d|_t�|_d|_d|_d|_	|j
�|j�|jj
�|j�dS)z%
        Reset the terminal.
        FrN)r�escbuf�
within_escape�
parsestate�attrspecrtr�saved_cursor�saved_attrs�is_rotten_cursorr��
init_tabstopsrVrX�clear)rfr(r(r)rX8s						


zTermCanvas.resetcCswt|jd�\}}|dkr.|d7}|rcx<t|j�|kr_|jjd�q7Wndg||_dS)N�rr"r"r")�divmodr�r��tabstopsr�)rfr�Ztablen�modr(r(r)r�Rs
zTermCanvas.init_tabstopscCs�|r7x*tt|j��D]}d|j|<qWdS|dkrP|jd}t|d�\}}|r�|j|d|>M<n|j|d|>O<dS)Nrr�r")�ranger�r�rGr�)rfr��remover�r�divr�r(r(r)�set_tabstop]s
zTermCanvas.set_tabstopcCsG|dkr|jd}t|d�\}}|j|d|>@dkS)Nrr�r")rGr�r�)rfr�r�r�r(r(r)�
is_tabstopls
zTermCanvas.is_tabstop� cCs|j|�g|jS)N)�
empty_charr�)rfr�r(r(r)�
empty_linesszTermCanvas.empty_linecCs|j|jj|fS)N)r�rr�)rfr�r(r(r)r�vszTermCanvas.empty_charcCsJ|jdks|jdkr"dSx!|D]}|jt|��q)WdS)Nr)r�r��addbyter)rf�data�byter(r(r)�addstrys
zTermCanvas.addstrcCs2|j\}}||jkr`x�t|j�D]+}|j||j�g||j7<q.WnG||jkr�x5t|j�D]$}|j|d|�|j|<qW||_||jkr�x!t|j|�D]�}y|jj�}Wn:tk
r'|jj	|j
��|jd7_w�YnXt|�|jkrd||j�g|jt|�7}n|d|j�}|d7}|jj
d|�q�WnH||jkr�x6t||j�D]"}|jj	|jjd��q�W||_|j�|j||�\}}|j||�|jdd�dS)zD
        Resize the terminal to the given width and height.
        Nr"rr�T)rGr�r�r��termr�r�r��
IndexErrorr�r�r�r�rr�r�r�r�)rfr�r�r�r�Z	last_liner(r(r)�resize�s<,"	

 	
zTermCanvas.resizecCs�|jjtkrdS|td�kr1d}nd}|td�krRd}n<|td�krmd}n!|td	�kr�d
}nd}|jj||�dS)zF
        Set G0 or G1 according to 'char' and modifier 'mod'.
        N�(rr"rwrvryrxr<rzru)rVrpror
rr�)rfr�r�rRZcsetr(r(r)�set_g01�s				zTermCanvas.set_g01cCs{|jjtd��}g}xn|j|r3dp6dd�jtd��D]>}yt|�}Wntk
r}d}YnX|j|�qMWt|dk	rwt|ddkr�tt|d}n
t|}|\}}}	x#t|�|kr|j|�q�WxDt	t|��D]0}
||
dks@||
dkr|||
<qWy|	|||�Wntk
rvYnXdS)zL
        Parse ECMA-48 CSI (Control Sequence Introducer) sequences.
        �?r"rN�;rI)
r��
startswithr
�split�int�
ValueErrorr��CSI_COMMANDSr�r�)rfr��qmarkr��argZnumZcsi_cmdZnumber_of_argsZ
default_value�cmd�ir(r(r)�	parse_csi�s,5

 
zTermCanvas.parse_csicCs�|td�kr1|td�kr1|j�n�|td�kr�|td�krdt|j_q�|td�kr�t|j_nH|td�ks�|td�kr�|j||�n|td�kr�|jd	d
�n�|td�kr|j�n�|td�kr|j�n�|td
�kr>|j	�n�|td�kr]|j
�np|td�kr�|jjt
d�nG|td�kr�|jdd
�n"|td�kr�|jdd
�dS)z;
        Parse escape sequences which are not CSI.
        �#�8�%r!ZG8r��)rA�reverseTr1rJr2r7�Zz[?6c�7�
with_attrsN)r
�decalnrorVrp�CHARSET_UTF8r��linefeedrX�newliner�r��respond�ESCrarc)rfr�r�r(r(r)�parse_noncsi�s2$
$



zTermCanvas.parse_noncsicCse|jtd��r2|jj|dd��n/|jtd��ra|jj|dd��dS)z1
        Parse operating system command.
        r�r"Nz3;r8)r�r
r��	set_title)rf�bufr(r(r)�	parse_oscszTermCanvas.parse_osccCs'|jdkr�|ttj��kr@|j|�d|_q|td�ksn|jr|td�kr|j|7_dSn�|jdkr�|td�kr�t�|_d|_dS|jdkr|td�kr|j|jj	td���n|jdkrc|jdd�|tt
d	�krc|j|jdd�j	td���n�|jdkr�|jjtd
��r�t|j�dkr�nw|jdkr�|jr�|td�kr�nI|jdkr�|j|7_dS|jdkr,|td
�kr,t�|_d|_dS|jdkr�|td�td�td�td�fkr�||_d|_dS|jdkr�|j
||j�ns|td�td�td�td�td�td�td�td�td�td�f
kr|j
|�|j�dS)Nr"rz0123456789;r��]r8�rw�\rCr��R�[r�r�r�r��rJr1r2r7rAr�r�r��>�=���r�)r��listr��keysr�r
r�rr��lstripr�r�r�r��leave_escape)rfr�r(r(r)�parse_escapesH
.!	!"6,'+!	?		f
zTermCanvas.parse_escapecCs"d|_d|_t�|_dS)NFr)r�r�rr�)rfr(r(r)r�Gs		zTermCanvas.leave_escapecCs/d}x"|d@r*|dK}|d7}q	W|S)z�
        Process startbyte and return the number of bytes following it to get a
        valid UTF-8 multibyte sequence.

        bytenum -- an integer ordinal
        r�@r"r()rfZbytenumZlengthr(r(r)�get_utf8_lenLs


zTermCanvas.get_utf8_lencCs?|jjtks!tjdkr"|dkrR|j|�|_t|�|_dSd|koidknr
|jdk	r
|jdkr�|jd8_|jt|�7_dSd|_|jt|�j	dd�}t
|�dkr�dS|jtjd	�}q.d|_t|�}nt|�}|j|�dS)
z�
        Parse main charset and add the processed byte(s) to the terminal state
        machine.

        byte -- an integer ordinal
        �utf8�N�r"zutf-8�ignorer�replace)
rVrpr�rZ_target_encodingr�r�rr�r�r��encode�process_char)rfr�Zsequencer�r(r(r)r�[s(+		zTermCanvas.addbytecCs]|j\}}t|t�r*t|�}|jj}|td�krc|jdkrcd|_n�|r�|td�kr�|j	�n�|r�|td�kr�|j
jd�n�|r�|td�kr�|j
jd�nx|r|td	�kr|j�|jj
rY|j	�n<|rC|td
�krC|j�n|r|td�kr|dkrY|j|d|�n�|r�|td�kr�|jdkr�|jj�n�|r�|td
�kr�|j�n||r�|td�kr�n`|jr|j|�nG|rL|td�krLd|_t�|_d|_n
|j|�dS)ze
        Process a single character (single- and multi-byte).

        char -- a byte string
        �r8T�
�r�r"z
�	�r�z��›N)rG�
isinstancer��chrrVrhr
r�r��carriage_returnrr}r�rirr�r��beepr�r�rr��push_cursor)rfr�r�r�Zdcr(r(r)r�sD!



(
		zTermCanvas.process_charcCsq|dkr|jd}|dkr2|jd}|j||�\}}|j|jj|f|j||<dS)z~
        Set character of either the current cursor position
        or a position given by 'x' and/or 'y' to 'char'.
        Nrr")rGr�r�rr�r�)rfr�r�r�r(r(r)�set_char�s

zTermCanvas.set_charcCs�||jkr|jd}n|dkr1d}|jjrz|rz||jkr_|j}q�||jkr�|j}n1||jkr�|jd}n|dkr�d}||fS)z�
        Checks if x/y are within the terminal and returns the corrected version.
        If 'ignore_scrolling' is set, constrain within the full size of the
        screen and not within scrolling region.
        r"r)r�rVrlr�r�r�)rfr�r��ignore_scrollingr(r(r)r��szTermCanvas.constrain_coordscCs�|j\}}|rf|dko/|jknr7q�||jkrY|jdd�q�|d8}nO||jdko�|jknr�n&||jkr�|j�n
|d7}|j||�dS)zw
        Move the cursor down (or up if reverse is True) one line but don't reset
        horizontal position.
        rr�Tr"N)rGr��scrollr�r�r�)rfr�r�r�r(r(r)r��s
&

zTermCanvas.linefeedcCs|jd|jd�dS)Nrr")r�rG)rfr(r(r)r�szTermCanvas.carriage_returncCs|j�|j�dS)z?
        Do a carriage return followed by a line feed.
        N)rr�)rfr(r(r)r��s
zTermCanvas.newlinecCsn|rd}}|r'|jd|}|rA|jd|}n|jjrZ||j7}|j||�dS)z�
        Move cursor to position x/y while constraining terminal sizes.
        If 'relative' is True, x/y is relative to the current cursor
        position. 'relative_x' and 'relative_y' is the same but just with
        the corresponding axis.
        Trr"N)rGrVrlr�r�)rfr�r�rNr3r,r(r(r)r-�s

zTermCanvas.move_cursorcCs^|dk	rJ|jj|�}|jjr=|jd|�n
|j|�|j||�dS)zS
        Push one character to current position and advance cursor to x/y.
        Nr�)rr�rVrr$rr�)rfr�r�r�r(r(r)�	push_char
s
zTermCanvas.push_charcCs|j\}}|jjr�|d|jkrW|jrWd|_|j|||�q
|d7}||jkr�|jr�||jkr�|j�n
|d7}d}|jd|�|j|||�d|_n9|d|jkr�|d7}d|_|j|||�dS)z�
        Move cursor one character forward wrapping lines as needed.
        If 'char' is given, put the character into the former position.
        r"TrFN)	rGrVrmr�r�rr�r
r�)rfr�r�r�r(r(r)r
s$	



	zTermCanvas.push_cursorcCsCt|j�|_|r?tj|j�tj|j�f|_dS)N)�tuplerGr��copyr�rr�)rfr�r(r(r)ra<szTermCanvas.save_cursorcCs~|jdkrdS|j\}}|j||�|rz|jdk	rztj|jd�tj|jd�|_|_dS)Nrr")r�r�r�rr�r)rfr�r�r�r(r(r)rcBszTermCanvas.restore_cursorr�cCss|j\}}xD||jdkrU|jtd��|d7}|j|�rPqWd|_|j||�dS)zg
        Moves cursor to the next 'tabstop' filling everything in between
        with spaces.
        r"r�FN)rGr�rr
r�r�r�)rfZtabstopr�r�r(r(r)rMs
	zTermCanvas.tabcCs}|r8|jj|j�|jj|j|j��nA|jj|j�}|jj|�|jj|j|j��dS)z�
        Append a new line at the bottom and put the topmost line into the
        scrollback buffer.

        If reverse is True, do exactly the opposite, but don't save into
        scrollback buffer.
        N)r�r�r�rr�r�r�r�)rfr�Zkilledr(r(r)r
^szTermCanvas.scrollcCs4x-t|j�D]}|jd�|j|<qWdS)zB
        DEC screen alignment test: Fill screen with E's.
        r2N)r�r�r�r�)rfrOr(r(r)r�nszTermCanvas.decalncCs|j�|j|<dS)zZ
        Blank a single line at the specified row, without modifying other lines.
        N)r�r�)rfrOr(r(r)�
blank_lineuszTermCanvas.blank_liner"cCs�|dkr|j}|dkr'd}|dkrB|j�}n|j|jj|f}|\}}xB|dkr�|j|j||�|j|j�|d8}qiWdS)z�
        Insert 'chars' number of either empty characters - or those specified by
        'char' - before 'position' (or the current position if not specified)
        pushing subsequent characters of the line to the right without wrapping.
        Nrr")rGr�r�rr�r�rr�)rf�positionr#r�r�r�r(r(r)r${s	zTermCanvas.insert_charscCs�|dkr|j}|dkr'd}|\}}xH|dkr}|j|j|�|j|j|j��|d8}q6WdS)z�
        Remove 'chars' number of empty characters from 'position' (or the current
        position if not specified) pulling subsequent characters of the line to
        the left without joining any subsequent lines.
        Nrr")rGr�r�r�r�)rfrr#r�r�r(r(r)rD�s	zTermCanvas.remove_charscCs�|dkr|jd}n	|j}|dkr7d}xF|dkr|jj||j��|jj|j�|d8}q:WdS)z�
        Insert 'lines' of empty lines after the specified row, pushing all
        subsequent lines to the bottom. If no 'row' is specified, the current
        row is used.
        Nr"r)rGr�r�rr�r�r�)rfrOr?r(r(r)r@�s	zTermCanvas.insert_linescCs�|dkr|jd}n	|j}|dkr7d}xF|dkr|jj|�|jj|j|j��|d8}q:WdS)z�
        Remove 'lines' number of lines at the specified row, pulling all
        subsequent lines to the top. If no 'row' is specified, the current row
        is used.
        Nr"r)rGr�r�r�rr�r�)rfrOr?r(r(r)rB�s	zTermCanvas.remove_linesc	Cs'|j|�\}}|j|�\}}||krox2t||d�D]}|j�|j||<qJWdS|}x�||kr"||kr�x�t||j�D]}|j�|j||<q�WnN||krx?t|d�D]}|j�|j||<q�Wn
|j|�|d7}qxWdS)aB
        Erase a region of the terminal. The 'start' tuple (x, y) defines the
        starting position of the erase, while end (x, y) the last position.

        For example if the terminal size is 4x3, start=(1, 1) and end=(1, 2)
        would erase the following region:

        ....
        .XXX
        XX..
        r"N)r�r�r�r�r�r)	rf�startrZsxZsy�exZeyr�r�r(r(r)rF�s 
zTermCanvas.erasecCs�x�|D]�}d|ko$dknr6|d}qd|koMdknr_|d}q|dkr�|jd�d}q|dkr�|jd�d}q|d	kr�d}q|d
kr�|jj�d|j_q|dkr|jj�d|j_q|dkr$|jd�q|dkr@|jd�q|dkr\|jd�q|dkrx|jd�q|dkr�|jd�q|dkr�|jd�q|dkr�|jd�q|dkrd}}|j�qWd|kr|dk	r|d7}dd�}||�}||�}t|�dkrddj	|gt
|��}|dkr�|dkr�dSt||�SdS) z�
        Parse SGI sequence and return an AttrSpec representing the sequence
        including all earlier sequences specified as 'fg', 'bg' and
        'attributes'.
        ��%�(�/�&�	underlineN�'�1�
F��Tr"�bold���blink��standout��rrr�cSs|dkrdSt|SdS)Nru)r
)Zcolorr(r(r)�
_defaulter%sz.TermCanvas.sgi_to_attrspec.<locals>._defaulter�,ru)rr)�add�discardrr�rVrhr�r�r��joinr�r)rfr[�fg�bg�
attributes�attrr(r(r(r)�sgi_to_attrspec�s\



	
		



zTermCanvas.sgi_to_attrspeccCs1|d
dkrd|_t�}|jdkr>d}}n�d|jjkrYd}n"|jj}|dkr{|d8}d|jjkr�d}n"|jj}|dkr�|d8}x0dD](}t|j|�s�q�|j|�q�W|j||||�}|j	j
r$|j|�|_n	||_dS)z)
        Set graphics rendition.
        r"rNrur�r rr#r%r�)zboldz	underlinezblinkzstandout)r��set�
foregroundZforeground_numberZ
backgroundZbackground_number�getattrr*r1rVrk�reverse_attrspec)rfr[r/r-r.r0r�r(r(r)rZ6s.		
	
	

zTermCanvas.csi_set_attrcCs�|dkrtdd�}dd�|jjd�D�}d|krn|rn|jd�dj|�|_n2d|kr�|r�|jd�dj|�|_|S)zd
        Put standout mode to the 'attrspec' given and remove it if 'undo' is
        True.
        NrucSsg|]}|j��qSr()�strip)�.0r-r(r(r)�
<listcomp>bs	z/TermCanvas.reverse_attrspec.<locals>.<listcomp>r)r%)rr3r�r�r,r�)rfr��undor[r(r(r)r5[s

zTermCanvas.reverse_attrspeccCs�x}t|j�D]l}xct|j�D]R}|j||}|j|dd|�}|f|dd�|j||<q&WqWdS)zP
        Reverse video/scanmode (DECSCNM) by swapping fg and bg colors.
        rr9r"N)r�r�r�r�r5)rfr9r�r�r�r[r(r(r)rkks
zTermCanvas.reverse_videocCs5|r�|dkr!||j_q1|dkr:|j�q1|dkrx|jj|kri|jd|�||j_q1|dkr�||j_|jdd�q1|dkr�||j_q1|dkr1||j_|j�nN|dkr�||j_n3|d	kr||j_	n|d
kr1||j_
dS)zC
        Helper method for csi_set_modes: set single mode.
        r"r�r"r9�rr$r'r!�N)rVrjr�rkrlr�rmrnrhrri)rfr;�flagr�rXr(r(r)�set_modeus.

zTermCanvas.set_modecCs2|}x$|D]}|j||||�qWdS)zX
        Set (DECSET/ECMA-48) or reset modes (DECRST/ECMA-48) if reset is True.
        N)r=)rfrVr�rXr<r;r(r(r)rU�s
zTermCanvas.csi_set_modesrcCs�|dkrd}|dkr'|j}||koA|jknr�|jd|ddd�d|_|jd|ddd�d|_|jdd�dS)z�
        Set scrolling region, 'top' is the line number of first line in the
        scrolling region. 'bottom' is the line number of bottom line. If both
        are set to 0, the whole screen will be used (default).
        rr"rTN)r�r�r�r�r�)rf�topZbottomr(r(r)r`�s	

zTermCanvas.csi_set_scrollcCs?|dkr|jdd�n|dkr;|jdd�dS)zc
        Clear tabstop at current position or if 'mode' is 3, delete all
        tabstops.
        rr�Tr�r�N)r�)rfr;r(r(r)rS�szTermCanvas.csi_clear_tabstopcCs|s|jjtd�dS)zz
        Report device attributes (what are you?). In our case, we'll report
        ourself as a VT102 terminal.
        z[?6cN)r�r�r�)rfr�r(r(r)rK�sz$TermCanvas.csi_get_device_attributescCsh|dkr#|jjtd�nA|dkrd|j\}}|jjtd|d|df�dS)z�
        Report various information about the terminal status.
        Information is queried by 'mode', where possible values are:
            5 -> device status report
            6 -> cursor position report
        r"z[0nr:z[%d;%dRr"N)r�r�r�rG)rfr;r�r�r(r(r)r]�s
zTermCanvas.csi_status_reportcCs�|j\}}|dkr>|j|j|jd|f�nD|dkri|jd|f||f�n|dkr�|j|�dS)z�
        Erase current line, modes are:
            0 -> erase from cursor to end of line.
            1 -> erase from start of line to cursor.
            2 -> erase whole line.
        rr"r8N)rGrFr�r)rfr;r�r�r(r(r)r=�s#zTermCanvas.csi_erase_linecCs�|dkr3|j|j|jd|jdf�|dkrj|jd|jdd|jdf�n|dkr�|jd|j�dS)z�
        Erase display, modes are:
            0 -> erase from cursor to end of display.
            1 -> erase from start to cursor.
            2 -> erase the whole display.
        rr"r8r�N)rr)rFrGr�r�r�)rfr;r(r(r)r:�s'+zTermCanvas.csi_erase_displaycCsBddddddddi}||kr>|jj||�d	S)
a0
        Set keyboard LEDs, modes are:
            0 -> clear all LEDs
            1 -> set scroll lock LED
            2 -> set num lock LED
            3 -> set caps lock LED

        This currently just emits a signal, so it can be processed by another
        widget or the main application.
        rr�r"Zscroll_lockr8Znum_lockr�Z	caps_lockN)r��leds)rfr;Zstatesr(r(r)r^�sz TermCanvas.csi_set_keyboard_ledscsU�fdd�t�j�D��_|dkrD�jdd�n
�j|�dS)z�
        Clears the whole terminal screen and resets the cursor position
        to (0, 0) or to the coordinates given by 'cursor'.
        csg|]}�j��qSr()r�)r7r�)rfr(r)r8s	z$TermCanvas.clear.<locals>.<listcomp>Nr)r�r�r�r�)rfr�r()rfr)r�s%zTermCanvas.clearcCs|jS)N)r�)rfr(r(r)r0szTermCanvas.colscCs|jS)N)r�)rfr(r(r)r.szTermCanvas.rowsccsn|jdkr+xX|jD]}|VqWn?|j|j}x,||j|j|j�D]}|Vq[WdS)Nr)r�r�r�r�)rfZ	trim_leftZ
trim_rightr0r.Zattr_map�liner�r(r(r)�contents&zTermCanvas.contentcCs-||kr#|j�g|j�S|j�S)N)r0r.rA)rf�otherr(r(r)�
content_delta#szTermCanvas.content_delta)?rqrrrsZ	cacheablergr�r�r�rXr�r�r�r
r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�rr�r-rr
rarcrr
r�rr$rDr@rBrFr1rZr5rkr=rUr`rSrKr]r=r:r^r�r0r.rArCr(r(r(r)r��sz5#	/$/

%#G%
!	
	r�c@seZdZdZeeg�ZddddgZddddd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zddd�Zd d!�Zd"d#�Zd$d%�Zd&d'd(�Zd)d*�Zd+d,�ZdS)-�TerminalT�closedr	r?�titleNcCs|jj�|dkr%d|_n	||_|dkrOttj�|_nt|�|_|dkr�|jjdd�g|_n	||_d|_	d|_
g|_t�|_
||_d|_d|_d|_d|_d|_d|_d|_dS)a@
        A terminal emulator within a widget.

        'command' is the command to execute inside the terminal, provided as a
        list of the command followed by its arguments.  If 'command' is None,
        the command is the current user's shell. You can also provide a callable
        instead of a command, which will be executed in the subprocess.

        'env' can be used to pass custom environment variables. If omitted,
        os.environ is used.

        'main_loop' should be provided, because the canvas state machine needs
        to act on input from the PTY master device. This object must have
        watch_file and remove_watch_file methods.

        'escape_sequence' is the urwid key symbol which should be used to break
        out of the terminal widget. If it's not specified, "ctrl a" is used.
        Nzctrl a�SHELLz/bin/shF)Z_Terminal__superrg�escape_sequence�dict�os�environ�envr��command�keygrab�last_key�response_bufferrer��	main_loop�master�pidr�r�r��	has_focus�
terminated)rfrMrLrQrHr(r(r)rg.s,
												zTerminal.__init__cCs�|j}d|d<tj�\|_|_|jdkr�t|jtj�r�z@y|j�Wn+t	j
jtj
��t	j
j�YnXWdtjd�Xntj|jd|j|�|jdkr�tj|jtjtj�tj|j�dS)N�linuxZTERMr)rL�pty�forkrSrRrrM�collections�Callable�sys�stderr�write�	traceback�
format_exc�flushrJ�_exit�execvperQ�fcntlZF_SETFL�
O_NONBLOCK�atexit�register�	terminate)rfrLr(r(r)�spawnds 	
zTerminal.spawncCs |jr
dSd|_|j�|jd�|jdkr|jdd�x�tjtjtjtj	tj
fD]k}y5tj|j|�tj
|jtj�\}}Wntk
r�PYnX|dkr�Ptjd�qqWytj
|jd�Wntk
rYnXtj|j�dS)NTFrg�������?)rU�remove_watch�change_focusrS�set_termsize�signal�SIGHUP�SIGCONT�SIGINT�SIGTERM�SIGKILLrJ�kill�waitpid�WNOHANG�OSError�timeZsleep�closerR)rfZsigrSZstatusr(r(r)rg|s,		

"

zTerminal.terminatecCs|jd�dS)Nr	)�_emit)rfr(r(r)r	�sz
Terminal.beepcCs|jd|�dS)Nr?)rx)rfZwhichr(r(r)r?�sz
Terminal.ledscCs|jj|�dS)zF
        Respond to the underlying application with 'string'.
        N)rPr�)rf�stringr(r(r)r��szTerminal.respondcCs=x-|jD]"}tj|j|jd��q
Wg|_dS)N�ascii)rPrJr]rRr�)rfryr(r(r)�flush_responses�s zTerminal.flush_responsescCs8tjd||dd�}tj|jtj|�dS)NZHHHHr)�structZpackrcZioctlrR�termiosZ
TIOCSWINSZ)rfr�r�Zwinsizer(r(r)rk�szTerminal.set_termsizecCs�d}|jdkr%|j�d}|j|krG|j|krGdS|j||�|jsxt|||�|_n|jj||�||_||_|r�|j�dS)NFT)	rSrhr�r�rkr�r�r��	add_watch)rfr�r�Zprocess_openedr(r(r)�
touch_term�s
			zTerminal.touch_termcCs|jd|�dS)NrF)rx)rfrFr(r(r)r��szTerminal.set_titlecCsn|js|j|krdS||_|rWt�j�|_t�jdgd�nt�j|j�dS)z9
        Ignore SIGINT if this widget has focus.
        NZ	undefinedr")rUrTr	Ztty_signal_keysZold_tios)rfrTr(r(r)rj�s	zTerminal.change_focusFcCsR|jsK|j|�|\}}|j||�|jdkrK|j�|jS)N)rUrjrrQ�feedr�)rf�sizeZfocusr�r�r(r(r)�render�s	

zTerminal.rendercCs0|jdkrdS|jj|j|j�dS)N)rQZ
watch_filerRr�)rfr(r(r)r~�szTerminal.add_watchcCs*|jdkrdS|jj|j�dS)N)rQZremove_watch_filerR)rfr(r(r)ri�szTerminal.remove_watchcCsdS)NTr()rfr(r(r)�
selectable�szTerminal.selectableg�?cCswxfy!tj|jggg|�PWqtjk
rd}z|jddkrR�WYdd}~XqXqW|j�dS)Nrr!)�selectrR�error�argsr�)rfZtimeoutrPr(r(r)�
wait_and_feed�szTerminal.wait_and_feedcCs�d}ytj|jd�}WnVtk
rw}z6|jdkrLd}n|jtjkrbdS�WYdd}~XnX|dkr�|j�|jd�dS|jj	|�|j
�dS)N�ir"rE)rJ�readrRru�errnoZEWOULDBLOCKrgrxr�r�r{)rfr�rPr(r(r)r��s	

z
Terminal.feedcCs�|jr
|S|dkr9|\}}|j||�dS|j|jkro||jkro||_d|_n"|jr�|j|kr�d|_||_dSn�|dkr�|jj�||_|j�dS|dkr|jjdd�||_|j�dS|j|jkr4||jkr4||_|S|j|krYd|_||_dS|j|dksx|dkr�d|_n
||_|S||_|jjdd�|j	d	�r|dj
�r�tt|d�td�d
�}qVtt|d�td�d
�}n<|j
jrD|tkrDtj|�}ntj||�}|j
jrx|d
krx|d7}tr�|jd�}tj|j|�dS)Nz
window resizeTFzpage upz	page downrrrXzctrl r"rHr+r��
rzr�r�r�)rUrrOrHrNr�r�Z_invalidateZ_command_mapr��islowerr�ordr�rj�KEY_TRANSLATIONS_DECCKMr��KEY_TRANSLATIONSrirr�rJr]rR)rfr��keyr�r�r(r(r)�keypresssf					
	
	
					''
zTerminal.keypress)rqrrrsZ_selectable�	frozensetrZ_sizingZsignalsrgrhrgr	r?r�r{rkrr�rjr�r~rir�r�r�r�r(r(r(r)rD(s*6
rD)1rJr[rvrr�r�r|rlrer^rYrWrcr}�ImportErrorZurwidrZurwid.escaperrZurwid.canvasrZurwid.widgetrrZurwid.display_commonrr	r
Zurwid.compatrrr
rrrr�r�r�r�ror��objectrertr�r�r�rDr(r(r(r)�<module>s�
(




























9����=

Zerion Mini Shell 1.0