U
    &ŸJ^¥  ã                   @   sz  d dl Z d dlZd dlZd dlZzd dlmZ W n ek
rD   Y nX dZe  dd¡Z	e  d¡Z
e  de
d ¡Ze  d	d
¡ZdZg Zg Ze j de ¡ZdddddddddddddddddgZdd„ Zdd „ Zd!d"„ Zd#d$„ Zeƒ Ze j d%e ¡Zeeƒd&kser8e d'¡ e d(e ¡ e d¡ e d)e	 ¡ eeƒd&kr¼ej d*¡ d Zed+k rÎd&ZeD ]"Zej d,eef ¡ ed&7 Zqhz²zed-ed&  ƒZ W n ek
r¼   d.Z Y nX e rÎe d.krØd&ZW qÎze!e ƒZW n" ek
r   e!e"e ƒƒZY nX ed&kr$eek r$W qÎned&7 ZdZej# d/¡ W nv e$k
rj   ej d0¡ e %d ¡ Y nL ek
r´   ed.ksŽedkr˜d&ZY qÎed&7 ZdZej# d/¡ Y nX qVneeƒd&krÎd&Zed&krLeed&  d'kred
kre  &ddd1e	g¡ ne  &dde	g¡ n2eed&  dkr<e  &e	e	g¡ neeed&  ƒ ed
krfe  &d
d
g¡ ne  &d2d2d3g¡ dS )4é    N)ÚinputZbyobuÚSHELLz	/bin/bashÚHOMEÚBYOBU_CONFIG_DIRz/.byobuÚBYOBU_BACKENDÚtmuxéÿÿÿÿz%s/.reuse-sessionZDISPLAYZDBUS_SESSION_BUS_ADDRESSZSESSION_MANAGERZGPG_AGENT_INFOZXDG_SESSION_COOKIEZXDG_SESSION_PATHZGNOME_KEYRING_CONTROLZGNOME_KEYRING_PIDZSSH_ASKPASSZSSH_AUTH_SOCKZSSH_AGENT_PIDZWINDOWIDZUPSTART_JOBZUPSTART_EVENTSZUPSTART_SESSIONZUPSTART_INSTANCEc               
   C   sì  g } d}d}t dkr0z tjddgtjd ¡ d }W n8 tjk
rn } z|jdkrX‚ n|j}W 5 d }~X Y nX tj	j
d krˆ| d¡}n| tj	j
¡}|r0| ¡ D ]Š}t dd	|¡}|r¤|d	kr¤| d	¡dkr¤t|ƒdkr¤| d
¡dkr¤| d¡dkr¤t d| ¡  ¡ | d	¡}|  d|d  ¡ |d7 }q¤t dkrètjddgtjd ¡ d }tj	j
d krp| d¡}n| tj	j
¡}|rè| ¡ D ]Z}|rŒ| d¡sŒ| d¡dkrŒt d| ¡  ¡ |  d| d¡d  ¡ |d7 }qŒ| S )Nr   FÚscreenz-ls©Ústdouté   úUTF-8z\s+ú z..z._z
screen: %szscreen____%sr   úlist-sessionsÚ_ú-r   ztmux: %sz
tmux____%sú:)r   Ú
subprocessÚPopenÚPIPEÚcommunicateZCalledProcessErrorÚ
returncodeÚoutputÚsysr   ÚencodingÚdecodeÚ
splitlinesÚreÚsubÚfindÚlenÚcountÚtextÚappendÚstripÚsplitÚ
startswith)ÚsessionsÚir   ZcpeÚsÚitems© r+   ú(/usr/lib/byobu/include/select-session.pyÚget_sessions0   sB    
 
B


"r-   c              	   C   sº   t dkr¶tjddgtjd ¡ d }tjjd kr<| d¡}n| tjj¡}|sRd S d|  }t	 
||t	j¡}|srd S d| | d¡f }t	 ||t	j¡D ] }t dd	d
| d¡d g¡ q”d S )Nr   r   r
   r   r   z^%s:.+\((group [^\)]+)\).*$z^_%s-\d+:.+\(%s\)$r   zkill-sessionú-tr   )r   r   r   r   r   r   r   r   r   r   ÚsearchÚ	MULTILINEÚgroupÚfindallr%   )Úsession_namer   ÚpatternZmasterr)   r+   r+   r,   Úcull_zombiesZ   s    r5   c                 C   sn   |   dd¡\}}tD ]T}t |¡}|r|dkr@ddd|||g}ndd|dd||g}tj|ttjd	ƒd
 qd S )NÚ____é   r   Zsetenvr.   r	   z-Sz-XÚwr
   )r%   ÚBYOBU_UPDATE_ENVVARSÚosÚgetenvr   ÚcallÚopenÚdevnull)ÚsessionÚbackendr3   ÚvarÚvalueÚcmdr+   r+   r,   Úupdate_environmentu   s    
rD   c                 C   sx   t | ƒ |  dd¡\}}t|ƒ |dkrbtrJt ddddd|ddd	g¡ qtt dddd
d|g¡ nt ddd|g¡ d S )Nr6   r7   r   z-uúnew-sessionr.   ú;z
set-optionzdestroy-unattachedZattachr	   ú-AOxRR)rD   r%   r5   Úreuse_sessionsr:   Úexecvp)r?   r@   r3   r+   r+   r,   Úattach_session   s    rJ   z%s/.always-selectr   ZNEWzCreate a new Byobu session (%s)zRun a shell without Byobu (%s)z
Byobu sessions...

é   z	  %d. %s
z
Choose 1-%d [1]: Ú z
ERROR: Invalid input
Ú
rE   r	   rG   )'r:   r   r   r   Úbuiltinsr   Ú	ExceptionZPKGr;   r   r   r   r   Zchoicer'   r"   ÚpathÚexistsrH   r9   r-   r5   rD   rJ   Z
show_shellr    r#   r   ÚwriteZtriesr(   r)   Z
user_inputÚintÚevalÚstderrÚKeyboardInterruptÚexitrI   r+   r+   r+   r,   Ú<module>   s˜   
&*






