o 0¦iÂ^ã@sàdZddlZddlZddlZddlZddlZddlZgd¢ZGdd„deƒZ e  ¡Z iZ da dad=ddœdd „Zd=d d „Zd>d d„Zdd„Zdd„Zddœdd„ZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd „d eƒZGd!d"„d"eƒZGd#d$„d$eƒZeZGd%d&„d&eƒZGd'd(„d(eƒZ Gd)d*„d*eƒZ!Gd+d,„d,eƒZ"d-d.„Z#d/d0„Z$ej%dd1…d2krÌGd3d4„d4eƒZ&ej%d5kráGd6d7„d7eƒZ'Gd8d9„d9eƒZ(d:d;„Z)e*dr r r ršr?zBaseBrowser.open_new_tabN)r6©rT) rr r Ú__doc__Úargsr:rrrr r r r r5‹s   r5c@ó"eZdZdZdd„Zd dd„ZdS) r!zVClass for all browsers started with a command and without remote functionality.cCsFt|tƒr ||_dg|_n |d|_|dd…|_tj |j¡|_dS)Nrrr)Ú isinstanceÚstrrrBr0r1r2r8r r r r:¢s   zGenericBrowser.__init__rTcsvt dˆ¡|jg‡fdd„|jDƒ}ztjdd…dkr$t |¡}ntj|dd�}| ¡ WSty:YdSw) Núwebbrowser.opencóg|]}| dˆ¡‘qS©r©Úreplace©Ú.0Úargr+r r Ú ®óÿz'GenericBrowser.open..éÚwinT)Ú close_fdsF) ÚsysÚauditrrBÚplatformÚ subprocessÚPopenÚwaitÚOSError©r9r&r'r(ÚcmdlineÚpr r+r r¬s ÿ   ÿzGenericBrowser.openNr@©rr r rAr:rr r r r r!žs r!c@óeZdZdZddd„ZdS)r zHClass for all browsers which are to be started in the background.rTcsz|jg‡fdd„|jDƒ}t dˆ¡ztjdd…dkr$t |¡}ntj|ddd�}| ¡duWSty<YdSw) NcrGrHrIrKr+r r rN¿rOz*BackgroundBrowser.open..rFrPrQT)rRÚstart_new_sessionF) rrBrSrTrUrVrWÚpollrYrZr r+r r¾sÿ  ÿ ÿzBackgroundBrowser.openNr@©rr r rArr r r r r ºsr c@sDeZdZdZdZdZdZddgZdZdZ dZ d dd„Z d d d „Z dS)Ú UnixBrowserz=Parent class for all Unix browsers with remote functionality.NFTú%actionrc CsÂg}|r|jrt|ƒ}|j|}|r|g}|jg||}|s"|jr&tj}nd}tj|d||jr2|p3d|dd�} |rOz |  d¡} | WStj yNYdSw|jr\|   ¡durZdSdS|  ¡ S)NT©rRÚstdinÚstdoutÚstderrr_éF) Ú raise_optsÚintrÚ backgroundrVÚDEVNULLrWÚredirect_stdoutrXZTimeoutExpiredr`) r9rBZremoter(r&Z raise_optÚoptr[Zinoutr\Úrcr r r Ú_invokeÞs2      þ ÿ  zUnixBrowser._invokercs¼t dˆ¡|dkr|j‰n!|dkr|j‰n|dkr'|jdur#|j‰n |j‰ntdd|ƒ‚‡‡fdd„|jDƒ}d d„|Dƒ}| |d |ˆ¡}|s\‡fd d„|jDƒ}| |d d ¡Sd S) NrFrrr-zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %scs g|] }| dˆ¡ dˆ¡‘qS)rrcrIrK©Úactionr&r r rNsÿz$UnixBrowser.open..cSsg|]}|r|‘qSr r rKr r r rNsTcrGrHrIrKr+r r rNsF) rSrTÚ remote_actionÚremote_action_newwinÚremote_action_newtabrÚ remote_argsrprB)r9r&r'r(rBZsuccessr rqr rs*  ÿ ÿzUnixBrowser.openr7r@) rr r rArirkrmrvrsrtrurprr r r r rbÍs #rbc@s(eZdZdZddgZdZdZdZdZdS) ÚMozillaz$Launcher class for Mozilla browsers.rcrr6z -new-windowz-new-tabTN© rr r rArvrsrtrurkr r r r rwórwc@s0eZdZdZddgZddgZdZdZdZd Z d S) ÚNetscapez$Launcher class for Netscape browser.ú-noraisez-raiseú-remoteúopenURL(%s%action)r6ú ,new-windowú,new-tabTN) rr r rArirvrsrtrurkr r r r rz&srzc@s,eZdZdZddgZddgZdZdZdZd S) ÚGaleonz,Launcher class for Galeon/Epiphany browsers.r{r6rcrú-nz-wTN) rr r rArirvrsrtrkr r r r r€1sr€c@ó(eZdZdZddgZdZdZdZdZdS)ÚChromez)Launcher class for Google Chrome browser.rcrr6ú --new-windowTNrxr r r r rƒ;ryrƒc@r‚)ÚOperaz!Launcher class for Opera browser.rcrr6r„TNrxr r r r r…Gryr…c@s,eZdZdZddgZdZdZdZdZdZ dS) ÚElinksz#Launcher class for Elinks browsers.r|r}r6r~rFN) rr r rArvrsrtrurkrmr r r r r†Qsr†c@r^)Ú 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èt d|¡|dkr d}nd}tj}ztjd||gd|||d�}Wn ty*Ynw| ¡dSztjdd |gd|||dd �}Wn tyJYn w| ¡durSdSztjd d |gd|||dd �}Wn tymYd Sw| ¡duS)NrFr-ZnewTabZopenURLÚ kfmclientT)rRrerfrgÚ konquerorz--silentrdÚkfmz-dF)rSrTrVrlrWrYrXr`)r9r&r'r(rrÚdevnullr\r r r rfsH   þ þ  ý þ   ý ÿ zKonqueror.openNr@rar r r r r‡_sr‡c@s&eZdZdd„Zdd„Zd dd„Zd S) ÚGrailc CsÚddl}ddl}ddl}ddl}tj | ¡d¡}| t  ¡¡d}tj |  |¡|  |¡d¡}| |¡}|s:dS| |j |j ¡} |D]&} z |   | ¡W| Styjzt | ¡Wn tygYnwYqDwdS)Nrz .grail-unixz-*)ÚglobÚpwdÚsocketÚtempfiler0r1ÚjoinZ gettempdirÚgetpwuidÚgetuidÚescapeZAF_UNIXZ SOCK_STREAMZconnectrYÚunlink) r9r�rŽr�r�ZtempdirÚuserÚfilenameZmaybesÚsÚfnr r r Ú_find_grail_rc˜s4 ÿ   ù ÿ€üüzGrail._find_grail_rccCs&| ¡}|sdS| |¡| ¡dS)Nrr)ršÚsendÚclose)r9rrr˜r r r Ú_remote²s  z Grail._remoterTcCs4t d|¡|r| d|¡}|S| d|¡}|S)NrFzLOADNEW zLOAD )rSrTr�)r9r&r'r(Úokr r r rºs ÿz Grail.openNr@)rr r ršr�rr r r r rŒ”srŒcCsÒt d¡r tddtdƒƒdtjvrt d¡rtddtdƒƒdtjvr1t d¡r1tddtdƒƒdtjvrCt d¡rCtdttdƒƒt d¡rPtddtdƒƒdD]}t |¡rat|dt|ƒƒqRd D]}t |¡rst|dt|ƒƒqdt d ¡r‚td ttd ƒƒn t d ¡r�td ttd ƒƒd D]}t |¡r t|dt |ƒƒq‘t d ¡r®td dtd ƒƒdD]}t |¡r¿t|dt |ƒƒq°t d¡rÍtddt dƒƒt d¡rÚtddtdƒƒt d¡rçtdt dƒdSdS)Nzxdg-openZGNOME_DESKTOP_SESSION_IDz gvfs-openz gnome-openZKDE_FULL_SESSIONrˆz x-www-browser)ÚfirefoxZ iceweaselZiceapeÚ seamonkey)zmozilla-firefoxzmozilla-firebirdÚfirebirdÚmozillaÚnetscaperŠr‰)ZgaleonZepiphanyZ skipstone)z google-chromeÚchromeZchromiumzchromium-browserÚoperaZmosaicZgrail) r.r/rr r0Úenvironr‡rwrzr€rƒr…rŒ)r$r r r Úregister_X_browsersÊsN   € €   €  €   ÿr§c Cs6gatjdkr'tddtdƒƒtddtdƒƒtddtdƒƒtddtdƒƒtjdkr4tddtdƒƒtjdd …d krhtd tƒtj  tj   d d ¡d¡}dddddd|fD]}t   |¡rft|dt|ƒƒqWn{tj   d¡sttj   d¡rœzd ¡}tj|tjd�}| ¡ ¡}Wnttjttfy–Ynw|atƒtj   d¡rãt   d¡r¯tddtdƒƒt   d¡r¼tddtdƒƒt   d¡rÉtddtdƒƒt   d¡rÖtddtdƒƒt   d¡rãtddtdƒƒdtj v�rtj d tj¡}| ¡|D] }|dk�rt|d d!�}|d"du�rt|dt|ƒd d!�qødSdS)#NÚdarwinÚMacOSXÚdefaultr¤rŸZsafariZ serenityosZBrowserrPrQzwindows-defaultZ PROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXEr¡r r¢r£r¥ZDISPLAYZWAYLAND_DISPLAYz$xdg-settings get default-web-browser)rgZTERMz www-browserZlinksZelinksZlynxZw3mZBROWSERr6Tr r)rrSrUrÚMacOSXOSAScriptr ÚWindowsDefaultr0r1r‘r¦rr.r/rrVZ check_outputrlÚdecodeÚstripÚFileNotFoundErrorZCalledProcessErrorÚPermissionErrorÚNotADirectoryErrorrr§r!r†ÚpathsepÚreverser#)Ziexplorer$r4Z raw_resultÚresultZ userchoicesr[r r r r sh   ÿÿ €ýÿ         €örrPrQc@seZdZddd„ZdS)r¬rTcCs2t d|¡zt |¡WdStyYdSw)NrFFT)rSrTr0Z startfilerYr<r r r r\s   ûýzWindowsDefault.openNr@)rr r rr r r r r¬[sr¬r¨c@rC) r©a{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. cCó ||_dSr7)rr8r r r r:wó zMacOSX.__init__rTc Cs°t d|¡d|vrd|}tt|ƒƒ}|jdkr"d| dd¡}n|jdkr*d }nd |d }d | dd¡}d |j||f}t dd¡}|durLdS| |¡|  ¡}| S)NrFú:zfile:rªúopen location "%s"ú"ú%22ZOmniWebr6z toWindow %drz OpenURL "%s"z‰tell application "%s" activate %s %s end tellÚ osascriptÚwF) rSrTrjÚboolrrJr0ÚpopenÚwriterœ) r9r&r'r(ÚscriptZtoWindowr4Úosapiperor r r rzs&      ý  z MacOSX.openNr@r]r r r r r©ms r©c@seZdZdd„Zddd„ZdS) r«cCrµr7)Ú_namer8r r r r:�r¶zMacOSXOSAScript.__init__rTcCsb|jdkrd| dd¡}n d|j| dd¡f}t dd¡}|dur%dS| |¡| ¡}| S) Nrªr¸r¹rºzž tell application "%s" activate open location "%s" end r»r¼F)rÂrJr0r¾r¿rœ)r9r&r'r(rÀrÁror r r r s û  zMacOSXOSAScript.openNr@)rr r r:rr r r r r«œsr«c Csðddl}dtjd}z| tjdd…d¡\}}Wn&|jy@}zt|tjd�t|tjd�t d¡WYd}~nd}~wwd}|D]\}}|dkrPd}qE|dkrVd}qEt|ƒdkrit|tjd�t d¡|d}t||ƒtd ƒdS) NrzDUsage: %s [-n | -t] url -n: open new window -t: open new tabrZntd)Úfiler�z-tr-ú) ÚgetoptrSÚargvÚerrorÚprintrgÚexitÚlenr) rÅZusageZoptsrBÚmsgZnew_winÚoÚar&r r r Úmain´s.þ€ý  €    rÎÚ__main__r7r@)+rAr0rr.rSrVZ threadingÚ__all__Ú ExceptionrÚRLockrrrrrrrrrr#Úobjectr5r!r rbrwrzr€rƒZChromiumr…r†r‡rŒr§rrUr¬r©r«rÎrr r r r ÚsV  ""O     56AO / ÿ