o
    &ŸJ^¥  ã                   @   s>  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y!   Y nw 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g d¢Zdd„ Zdd„ Zdd„ Zdd„ Zeƒ Ze j de ¡ZeeƒdksrerŠe 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q¢zNz
eded  ƒZ W n eyÉ   dZ Y nw e rÐe dkrÔdZW njze!e ƒZW n eyé   e!e"e ƒƒZY nw edkrôeek rôW nJed7 ZdZej# d ¡ W n8 e$y   ej d!¡ e %d ¡ Y n$ ey9   edks'edkr+dZY ned7 ZdZej# d ¡ Y nw edk sžn	eeƒdkrHdZedkr‡eed  dkrned
kree  &ddd"e	g¡ n"e  &dde	g¡ need  dkre  &e	e	g¡ neeed  ƒ ed
kr•e  &d
d
g¡ dS e  &d#d#d$g¡ dS )%é    N)ÚinputÚbyobuÚSHELLz	/bin/bashÚHOMEÚBYOBU_CONFIG_DIRz/.byobuÚBYOBU_BACKENDÚtmuxéÿÿÿÿz%s/.reuse-session)ÚDISPLAYÚDBUS_SESSION_BUS_ADDRESSÚSESSION_MANAGERÚGPG_AGENT_INFOÚXDG_SESSION_COOKIEÚXDG_SESSION_PATHÚGNOME_KEYRING_CONTROLÚGNOME_KEYRING_PIDr   ÚSSH_ASKPASSÚSSH_AUTH_SOCKÚSSH_AGENT_PIDÚWINDOWIDÚUPSTART_JOBÚUPSTART_EVENTSÚUPSTART_SESSIONÚUPSTART_INSTANCEc               
   C   sÚ  g } d}d}t dkr–ztjddgtjd ¡ d }W n tjy6 } z|jdkr)‚ |j}W Y d }~nd }~ww tj	j
d u rC| d¡}n| tj	j
¡}|r–| ¡ D ]E}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 }qPt dkrëtjddgtjd ¡ d }tj	j
d u r´| d¡}n| tj	j
¡}|rë| ¡ D ])}|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ÚcommunicateÚCalledProcessErrorÚ
returncodeÚoutputÚsysr   ÚencodingÚdecodeÚ
splitlinesÚreÚsubÚfindÚlenÚcountÚtextÚappendÚstripÚsplitÚ
startswith)ÚsessionsÚir*   ÚcpeÚsÚitems© r>   ú(/usr/lib/byobu/include/select-session.pyÚget_sessions0   sJ    
€ûB
€€r@   c              	   C   s¾   t dkr[tjddgtjd ¡ d }tjjd u r| d¡}n| tjj¡}|s)d S d|  }t	 
||t	j¡}|s9d S d| | d¡f }t	 ||t	j¡D ]}t dd	d
| d¡d g¡ qJd S 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Úfindallr7   )Úsession_namer*   ÚpatternÚmasterr<   r>   r>   r?   Úcull_zombiesZ   s    ìrI   c                 C   sn   |   dd¡\}}tD ]*}t |¡}|r4|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   ÚsetenvrA   r   z-Sz-XÚwr   )r7   ÚBYOBU_UPDATE_ENVVARSÚosÚgetenvr$   ÚcallÚopenÚdevnull)ÚsessionÚbackendrF   ÚvarÚvalueÚcmdr>   r>   r?   Úupdate_environmentu   s   
€ùrY   c                 C   s|   t | ƒ |  dd¡\}}t|ƒ |dkr3tr&t ddddd|ddd	g¡ d S t dddd
d|g¡ d S t ddd|g¡ d S )NrJ   rK   r   z-uúnew-sessionrA   ú;z
set-optionzdestroy-unattachedÚattachr   ú-AOxRR)rY   r7   rI   Úreuse_sessionsrO   Úexecvp)rT   rU   rF   r>   r>   r?   Úattach_session   s    r`   z%s/.always-selectr   Ú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
Ú
rZ   r   r]   )'rO   r/   r+   r$   Úbuiltinsr   Ú	ExceptionÚPKGrP   r   r   r   r   Úchoicer9   r4   ÚpathÚexistsr^   rN   r@   rI   rY   r`   Ú
show_shellr2   r5   r   ÚwriteÚtriesr:   r<   Ú
user_inputÚintÚevalÚstderrÚKeyboardInterruptÚexitr_   r>   r>   r>   r?   Ú<module>   s¦   þ
*



ÿÿúæ€!


