o w[e^@sdZddlZddlZddlZddlZddlZddlZgdZGdddeZ e Z iZ da dad=dddd Zd=d d Zd>d dZddZddZddddZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZGd!d"d"eZGd#d$d$eZeZGd%d&d&eZGd'd(d(eZ Gd)d*d*eZ!Gd+d,d,eZ"d-d.Z#d/d0Z$ej%dd1d2krGd3d4d4eZ&ej%d5krGd6d7d7eZ'Gd8d9d9eZ(d:d;Z)e*dz'GenericBrowser.open..winT) close_fdsF) sysauditrrEplatform subprocessPopenwaitOSErrorr<r(r)r*cmdlinepr r-r rs    zGenericBrowser.openNrCrr r rDr=rr r r r r!s r!c@eZdZdZdddZdS)r zHClass for all browsers which are to be started in the background.rTcsz|jgfdd|jD}tdztjdddkr$t|}ntj|ddd}|duWSty<YdSw) NcrJrKrLrNr-r r rQrRz*BackgroundBrowser.open..rIrSrTT)rUstart_new_sessionF) rrErVrWrXrYrZpollr\r]r r-r rs   zBackgroundBrowser.openNrCrr r rDrr r r r r sr c@sDeZdZdZdZdZdZddgZdZdZ dZ d ddZ d d d Z dS) UnixBrowserz=Parent class for all Unix browsers with remote functionality.NFT%actionrc Csg}|r|jrt|}|j|}|r|g}|jg||}|s"|jr&tj}nd}tj|d||jr2|p3d|dd} |rOz | d} | WStj yNYdSw|jr\| durZdSdS|  S)NTrUstdinstdoutstderrrbF) raise_optsintr backgroundrYDEVNULLrZredirect_stdoutr[TimeoutExpiredrc) r<rEremoter*r( raise_optoptr^inoutr_rcr r r _invokes2         zUnixBrowser._invokercstd|dkr|jn!|dkr|jn|dkr'|jdur#|jn |jntdd|fdd|jD}d d|D}||d |}|s\fd d|jD}||d d Sd S) NrIrrr/zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %scs g|] }|ddqS)rrfrLrNactionr(r r rQsz$UnixBrowser.open..cSsg|]}|r|qSr r rNr r r rQsTcrJrKrLrNr-r r rQsF) rVrW remote_actionremote_action_newwinremote_action_newtabr remote_argsrwrE)r<r(r)r*rEsuccessr rxr rs*   zUnixBrowser.openr:rC) rr r rDrlrnrpr}rzr{r|rwrr r r r res #rec@s(eZdZdZddgZdZdZdZdZdS) Mozillaz$Launcher class for Mozilla browsers.rfrr9z -new-windowz-new-tabTN rr r rDr}rzr{r|rnr r r r rrc@s0eZdZdZddgZddgZdZdZdZd Z d S) Netscapez$Launcher class for Netscape browser.-noraisez-raise-remoteopenURL(%s%action)r9 ,new-window,new-tabTN) rr r rDrlr}rzr{r|rnr r r r r&src@s,eZdZdZddgZddgZdZdZdZd S) Galeonz,Launcher class for Galeon/Epiphany browsers.rr9rfr-nz-wTN) rr r rDrlr}rzr{rnr r r r r1src@(eZdZdZddgZdZdZdZdZdS)Chromez)Launcher class for Google Chrome browser.rfrr9 --new-windowTNrr r r r r;rrc@r)Operaz!Launcher class for Opera browser.rfrr9rTNrr r r r rGrrc@s,eZdZdZddgZdZdZdZdZdZ dS) Elinksz#Launcher class for Elinks browsers.rrr9rrFN) rr r rDr}rzr{r|rnrpr r r r rQsrc@ra) KonquerorzController for the KDE File Manager (kfm, or Konqueror). See the output of ``kfmclient --commands`` for more information on the Konqueror remote-control interface. rTcCstd||dkr d}nd}tj}ztjd||gd|||d}Wn ty*Ynw|dSztjdd |gd|||dd }Wn tyJYn w|durSdSztjd d |gd|||dd }Wn tymYd Sw|duS)NrIr/newTabopenURL kfmclientT)rUrhrirj konquerorz--silentrgkfmz-dF)rVrWrYrorZr\r[rc)r<r(r)r*rydevnullr_r r r rfsH         zKonqueror.openNrCrdr r r r r_src@s&eZdZddZddZd ddZd S) Grailc Csddl}ddl}ddl}ddl}tj|d}|t d}tj| || |d}||}|s:dS||j |j } |D]&} z | | W| Styjzt| Wn tygYnwYqDwdS)Nrz .grail-unixz-*)globpwdsockettempfiler2r3join gettempdirgetpwuidgetuidescapeAF_UNIX SOCK_STREAMconnectr\unlink) r<rrrrtempdiruserfilenamemaybessfnr r r _find_grail_rcs4     zGrail._find_grail_rccCs&|}|sdS|||dS)Nrr)rsendclose)r<ryrr r r _remotes  z Grail._remoterTcCs4td||r|d|}|S|d|}|S)NrIzLOADNEW zLOAD )rVrWr)r<r(r)r*okr r r rs z Grail.openNrC)rr r rrrr r r r rsrcCstdr tddtddtjvrtdrtddtddtjvr1tdr1tddtddtjvrCtdrCtdttdtdrPtddtddD]}t|rat|dt|qRd D]}t|rst|dt|qdtd rtd ttd n td rtd ttd d D]}t|rt|dt |qtd rtd dtd dD]}t|rt|dt |qtdrtddt dtdrtddtdtdrtdt ddSdS)Nzxdg-openGNOME_DESKTOP_SESSION_IDz gvfs-openz gnome-openKDE_FULL_SESSIONrz x-www-browser)firefox iceweaseliceape seamonkey)zmozilla-firefoxzmozilla-firebirdfirebirdmozillanetscaperr)galeonepiphany skipstone)z google-chromechromechromiumzchromium-browseroperamosaicgrail) r0r1rr r2environrrrrrrr)r&r r r register_X_browserssN            rc Cs6gatjdkr'tddtdtddtdtddtdtddtdtjdkr4tddtdtjdd d krhtd ttj tj d d d}dddddd|fD]}t |rft|dt|qWn{tj dsttj drzd}tj|tjd}|}WnttjttfyYnw|attj drt drtddtdt drtddtdt drtddtdt drtddtdt drtddtddtj vrtj dtj}||D] }|dkrt|d d!}|d"durt|dt|d d!qdSdS)#NdarwinMacOSXdefaultrrsafari serenityosBrowserrSrTzwindows-default PROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXErrrrrDISPLAYWAYLAND_DISPLAYz$xdg-settings get default-web-browser)rjTERMz www-browserlinkselinkslynxw3mBROWSERr9Tr r)rrVrXrMacOSXOSAScriptr WindowsDefaultr2r3rrrr0r1rrY check_outputrodecodestripFileNotFoundErrorCalledProcessErrorPermissionErrorNotADirectoryErrorrrr!rpathsepreverser#)iexplorer&r6 raw_resultresult userchoicesr^r r r r sh             rrSrTc@seZdZdddZdS)rrTcCs2td|zt|WdStyYdSw)NrIFT)rVrWr2 startfiler\r?r r r r\s   zWindowsDefault.openNrC)rr r rr r r r r[srrc@rF) ra{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 ||_dSr:)rr;r r r r=w zMacOSX.__init__rTc Cstd|d|vs Jd|vrd|}tt|}|jdkr(d|dd}n|jd kr0d }nd |d }d |dd}d|j||f}tdd}|durRdS||| }| S)NrI':zfile:ropen location "%s""%22OmniWebr9z toWindow %drz OpenURL "%s"ztell application "%s" activate %s %s end tell osascriptwF) rVrWrmboolrrMr2popenwriter) r<r(r)r*scripttoWindowr6osapipervr r r rzs(         z MacOSX.openNrCr`r r r r rms rc@seZdZddZdddZdS) rcCrr:)_namer;r r r r=rzMacOSXOSAScript.__init__rTcCsb|jdkrd|dd}n d|j|ddf}tdd}|dur%dS|||}| S) Nrrrrz tell application "%s" activate open location "%s" end rrF)rrMr2rrr)r<r(r)r*rrrvr r r rs   zMacOSXOSAScript.openNrC)rr r r=rr r r r rsrc Csddl}dtjd}z|tjddd\}}Wn&|jy@}zt|tjdt|tjdtdWYd}~nd}~wwd}|D]\}}|dkrPd}qE|dkrVd}qEt|dkrit|tjdtd|d}t||td dS) NrzDUsage: %s [-n | -t] url -n: open new window -t: open new tabrntd)filerz-tr/) getoptrVargverrorprintrjexitlenr) rusageoptsrEmsgnew_winoar(r r r mains.      r__main__r:rC)+rDr2rr0rVrY threading__all__ ExceptionrRLockrrrrrrrrrr#objectr8r!r rerrrrChromiumrrrrrrrXrrrrrr r r r sV  ""O     56AO /