3 �L�j�V�@s�dZddlZddlZddlZddlZddlZddddddgZGd d�de�ZiZ gZ dOd d�Z dPd d�Z dQdd�Z dd�Zdd�ZdRdd�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd �d e�ZGd!d"�d"e�ZeZGd#d$�d$e�ZGd%d&�d&e�ZGd'd(�d(e�ZGd)d*�d*e�Zd+d,�Zej j d-��rle�ej j d.��rej!d/��r�e d/ded/��ej!d0��r�e d0ded0��ej!d1��r�e d1ded1��ej!d2��r�e d2ded2��ej!d3��re d3ded3��ej"dd4�d5k�r�Gd6d7�d7e�Z#gZ iZ e d8e#�ej$j%ej j d9d:�d;�Z&x8dd?d@dAe&fD]"Z'ej!e'��rhe e'dee'���qhWej"dBk�rGdCdD�dDe�Z(GdEdF�dFe�Z)e dGde)dG�dS�e d�sz'GenericBrowser.open..��winT)� close_fdsF) r5rr7�sys�platform� subprocess�Popen�wait�OSError)r.r!r"r#�cmdline�pr )r!r r�s    zGenericBrowser.openN)rT)rr r r6r/rr r r r r�s rc@seZdZdZddd�ZdS)rzHClass for all browsers which are to be started in the background.rTc sz|j��|jg�fdd�|jD�}y:tjdd�dkrFtj|�}ntj|ddd�}|j�dkStk rtdSXdS)Ncsg|]}|jd���qS)z%s)r;)r<r=)r!r r r>�sz*BackgroundBrowser.open..r?r@T)rA�start_new_sessionF) r5rr7rBrCrDrE�pollrG)r.r!r"r#rHrIr )r!r r�s    zBackgroundBrowser.openN)rT)rr r r6rr r r r r�src@sBeZdZdZdZdZdZddgZdZdZ dZ dd�Z d d d �Z dS) � UnixBrowserz=Parent class for all Unix browsers with remote functionality.NFTz%actionz%sc Cs�g}|r*|jr*t|�}|j|}|r*|g}|jg||}|sD|jrLtj}nd}tj|d||jrd|pfd|dd�}|r�y|jd�} | Stj k r�dSXn&|jr�|j �dkr�dSdSn |j� SdS)NT)rA�stdin�stdout�stderrrJ�F) � raise_opts�intr� backgroundrD�DEVNULLrE�redirect_stdoutrFZTimeoutExpiredrK) r.r7Zremoter#Z raise_opt�optrHZinoutrI�rcr r r �_invoke�s0        zUnixBrowser._invokercs�|dkr|j�nB|dkr |j�n2|dkrB|jdkr:|j�qR|j�ntdd|��|j�jd�����fdd�|jD�}d d�|D�}|j|d |�}|s��fd d�|jD�}|j|d d �Sd SdS) Nrr r$zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %sz%actioncs g|]}|jd��jd���qS)z%actionz%s)r;)r<r=)�actionr!r r r>�sz$UnixBrowser.open..cSsg|] }|r|�qSr r )r<r=r r r r>�sTcsg|]}|jd���qS)z%s)r;)r<r=)r!r r r>�sF) � remote_action�remote_action_newwin�remote_action_newtabrr5r;� remote_argsrXr7)r.r!r"r#r7Zsuccessr )rYr!r r�s&    zUnixBrowser.open)rT) rr r r6rQrSrUr]rZr[r\rXrr r r r rL�s#rLc@s(eZdZdZddgZdZdZdZdZdS) �Mozillaz$Launcher class for Mozilla browsers.z%actionz%sr-z -new-windowz-new-tabTN) rr r r6r]rZr[r\rSr r r r r^s r^c@s0eZdZdZddgZddgZdZdZdZd Z d S) �Netscapez$Launcher class for Netscape browser.z-noraisez-raisez-remotezopenURL(%s%action)r-z ,new-windowz,new-tabTN) rr r r6rQr]rZr[r\rSr r r r r_ sr_c@s,eZdZdZddgZddgZdZdZdZd S) �Galeonz,Launcher class for Galeon/Epiphany browsers.z-noraiser-z%actionz%sz-nz-wTN) rr r r6rQr]rZr[rSr r r r r`s r`c@s(eZdZdZddgZdZdZdZdZdS)�Chromez)Launcher class for Google Chrome browser.z%actionz%sr-z --new-windowTN) rr r r6r]rZr[r\rSr r r r ra s rac@s(eZdZdZddgZdZdZdZdZdS)�Operaz!Launcher class for Opera browser.z%actionz%sr-z --new-windowTN) rr r r6r]rZr[r\rSr r r r rb,s rbc@s,eZdZdZddgZdZdZdZdZdZ dS) �Elinksz#Launcher class for Elinks browsers.z-remotezopenURL(%s%action)r-z ,new-windowz,new-tabFN) rr r r6r]rZr[r\rSrUr r r r rc6srcc@seZdZdZddd�ZdS)� Konquerorz�Controller for the KDE File Manager (kfm, or Konqueror). See the output of ``kfmclient --commands`` for more information on the Konqueror remote-control interface. rTcCs�|j|�|dkrd}nd}tj}ytjd||gd|||d�}Wntk rTYnX|j�dSy tjdd|gd|||dd �}Wntk r�YnX|j�dkr�dSy tjd d |gd|||dd �}Wntk r�d SX|j�dkSdS) Nr$ZnewTabZopenURL� kfmclientT)rArMrNrO� konquerorz--silent)rArMrNrOrJ�kfmz-dF)r5rDrTrErGrFrK)r.r!r"r#rY�devnullrIr r r rKs<       zKonqueror.openN)rT)rr r r6rr r r r rdDsrdc@s&eZdZdd�Zdd�Zd dd�Zd S) �Grailc Cs�ddl}ddl}ddl}ddl}tjj|j�d�}|jtj ��d}tjj||d�}|j|�}|shdS|j|j |j �} xX|D]P} y| j | �Wn8t k r�ytj| �Wnt k r�YnXYq~X| Sq~WdS)Nrz .grail-unixz-*)�glob�pwd�socket�tempfiler'r(�joinZ gettempdir�getpwuid�getuidZAF_UNIXZ SOCK_STREAMZconnectrG�unlink) r.rjrkrlrmZtempdir�user�filenameZmaybes�s�fnr r r �_find_grail_rc}s*    zGrail._find_grail_rccCs&|j�}|sdS|j|�|j�dS)Nrr )rv�send�close)r.rYrtr r r �_remote�s  z Grail._remoterTcCs0|j|�|r|jd|�}n|jd|�}|S)NzLOADNEW zLOAD )r5ry)r.r!r"r#�okr r r r�s  z Grail.openN)rT)rr r rvryrr r r r riysricCs�tjd�rtddtd��dtjkr>tjd�r>tddtd��dtjkrbtjd�rbtddtd��dtjkr�tjd�r�tdttd��tjd�r�tddtd��x&dD]}tj|�r�t|dt|��q�Wx&dD]}tj|�r�t|dt|��q�Wtjd��rtdttd��ntjd��r*tdttd��x*dD]"}tj|��r0t|dt |���q0Wtjd��rrtddtd��x*d D]"}tj|��rxt|dt |���qxWtjd��r�tddt d��tjd��r�tddtd��tjd��r�tdt d�dS)!Nzxdg-openZGNOME_DESKTOP_SESSION_IDz gvfs-openz gnome-openZKDE_FULL_SESSIONrez x-www-browser�firefox� iceweasel�iceape� seamonkey�mozilla-firefox�mozilla-firebird�firebird�mozilla�netscapergrf�galeon�epiphanyZ skipstone� google-chrome�chrome�chromium�chromium-browser�operaZmosaicZgrail)r{r|r}r~)rr�r�r�r�)r�r�)r�r�r�r�) r%r&rrr'�environrdr^r_r`rarbri)rr r r �register_X_browsers�sH               r�ZDISPLAYZTERMz www-browserZlinksZelinksZlynxZw3mr?r@c@seZdZddd�ZdS)�WindowsDefaultrTc Cs6|j|�ytj|�Wntk r,dSXdSdS)NFT)r5r'Z startfilerG)r.r!r"r#r r r r s  zWindowsDefault.openN)rT)rr r rr r r r r� sr�zwindows-defaultZ PROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXEr{r�r~r�r�r��darwinc@s"eZdZdZdd�Zd dd�ZdS) �MacOSXa{Launcher class for Aqua browsers on Mac OS X Optionally specify a browser name on instantiation. Note that this will not work for Aqua browsers if the user has moved the application package after installation. If no browser is specified, the default browser, as specified in the Internet System Preferences panel, will be used. cCs ||_dS)N)r)r.rr r r r/3szMacOSX.__init__rTc Cs�|j|�d|kst�d|kr&d|}tt|��}|jdkrNd|jdd�}n<|jdkr^d }n d |d }d |jdd�}d |j||f}tjdd�}|dkr�dS|j|�|j �}| S)N�'�:zfile:�defaultzopen location "%s"�"z%22ZOmniWebr-z toWindow %dr z OpenURL "%s"z�tell application "%s" activate %s %s end tell� osascript�wF) r5�AssertionErrorrR�boolrr;r'�popen�writerx) r.r!r"r#�scriptZtoWindowr+�osapiperWr r r r6s$        z MacOSX.openN)rT)rr r r6r/rr r r r r�)s r�c@seZdZdd�Zddd�ZdS) �MacOSXOSAScriptcCs ||_dS)N)�_name)r.rr r r r/YszMacOSXOSAScript.__init__rTcCsl|j|�|jdkr&d|jdd�}nd|j|jdd�f}tjdd�}|dkrTdS|j|�|j�}| S) Nr�zopen location "%s"r�z%22z� tell application "%s" activate open location "%s" end r�r�F)r5r�r;r'r�r�rx)r.r!r"r#r�r�rWr r r r\s    zMacOSXOSAScript.openN)rT)rr r r/rr r r r r�Xsr�Zsafarir�r�ZBROWSERr-c Cs�ddl}dtjd}y|jtjdd�d�\}}WnJ|jk r~}z,t|tjd�t|tjd�tjd�WYdd}~XnXd}x*|D]"\}}|dkr�d}q�|dkr�d}q�Wt|�dkr�t|tjd�tjd�|d}t||�td �dS) NrzDUsage: %s [-n | -t] url -n: open new window -t: open new tabr Zntd)�filez-nz-tr$�) �getoptrB�argv�error�printrO�exit�lenr) r�ZusageZoptsr7�msgZnew_win�o�ar!r r r �main�s(   r��__main__)Nr )N)rT)r rrrrrr)2r6r'rr%rBrD�__all__� Exceptionrrrrrrrrr�objectr,rrrLr^r_r`raZChromiumrbrcrdrir�r�r&rCr�r(rnZiexplorerr�r�r�pathsepZ _userchoices�reverserHr+r�rr r r r �s�    "P     56B          /