summaryrefslogtreecommitdiffstats
path: root/Lib/webbrowser.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/webbrowser.py')
-rw-r--r--Lib/webbrowser.py315
1 files changed, 156 insertions, 159 deletions
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
index 055705d..bdd6c31 100644
--- a/Lib/webbrowser.py
+++ b/Lib/webbrowser.py
@@ -42,7 +42,7 @@ def get(using=None):
def open(url, new=0, autoraise=1):
get().open(url, new, autoraise)
-def open_new(url): # Marked deprecated. May be removed in 2.1.
+def open_new(url):
get().open(url, 1)
@@ -76,12 +76,152 @@ def _synthesize(browser):
return [None, controller]
ret
-#
-# Everything after this point initializes _browsers and _tryorder,
-# then disappears. Some class definitions and instances remain
-# live through these globals, but only the minimum set needed to
-# support the user's platform.
-#
+
+def _iscommand(cmd):
+ """Return true if cmd can be found on the executable search path."""
+ path = os.environ.get("PATH")
+ if not path:
+ return 0
+ for d in path.split(os.pathsep):
+ exe = os.path.join(d, cmd)
+ if os.path.isfile(exe):
+ return 1
+ return 0
+
+
+PROCESS_CREATION_DELAY = 4
+
+
+class GenericBrowser:
+ def __init__(self, cmd):
+ self.name, self.args = cmd.split(None, 1)
+ self.basename = os.path.basename(self.name)
+
+ def open(self, url, new=0, autoraise=1):
+ command = "%s %s" % (self.name, self.args)
+ os.system(command % url)
+
+ def open_new(self, url):
+ self.open(url)
+
+
+class Netscape:
+ "Launcher class for Netscape browsers."
+ def __init__(self, name):
+ self.name = name
+ self.basename = os.path.basename(name)
+
+ def _remote(self, action, autoraise):
+ raise_opt = ("-noraise", "-raise")[autoraise]
+ cmd = "%s %s -remote '%s' >/dev/null 2>&1" % (self.name,
+ raise_opt,
+ action)
+ rc = os.system(cmd)
+ if rc:
+ import time
+ os.system("%s &" % self.name)
+ time.sleep(PROCESS_CREATION_DELAY)
+ rc = os.system(cmd)
+ return not rc
+
+ def open(self, url, new=0, autoraise=1):
+ if new:
+ self._remote("openURL(%s, new-window)"%url, autoraise)
+ else:
+ self._remote("openURL(%s)" % url, autoraise)
+
+ def open_new(self, url):
+ self.open(url, 1)
+
+
+class Konqueror:
+ """Controller for the KDE File Manager (kfm, or Konqueror).
+
+ See http://developer.kde.org/documentation/other/kfmclient.html
+ for more information on the Konqueror remote-control interface.
+
+ """
+ def __init__(self):
+ if _iscommand("konqueror"):
+ self.name = self.basename = "konqueror"
+ else:
+ self.name = self.basename = "kfm"
+
+ def _remote(self, action):
+ cmd = "kfmclient %s >/dev/null 2>&1" % action
+ rc = os.system(cmd)
+ if rc:
+ import time
+ if self.basename == "konqueror":
+ os.system(self.name + " --silent &")
+ else:
+ os.system(self.name + " -d &")
+ time.sleep(PROCESS_CREATION_DELAY)
+ rc = os.system(cmd)
+ return not rc
+
+ def open(self, url, new=1, autoraise=1):
+ # XXX Currently I know no way to prevent KFM from
+ # opening a new win.
+ self._remote("openURL %s" % url)
+
+ open_new = open
+
+
+class Grail:
+ # There should be a way to maintain a connection to Grail, but the
+ # Grail remote control protocol doesn't really allow that at this
+ # point. It probably neverwill!
+ def _find_grail_rc(self):
+ import glob
+ import pwd
+ import socket
+ import tempfile
+ tempdir = os.path.join(tempfile.gettempdir(),
+ ".grail-unix")
+ user = pwd.getpwuid(_os.getuid())[0]
+ filename = os.path.join(tempdir, user + "-*")
+ maybes = glob.glob(filename)
+ if not maybes:
+ return None
+ s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ for fn in maybes:
+ # need to PING each one until we find one that's live
+ try:
+ s.connect(fn)
+ except socket.error:
+ # no good; attempt to clean it out, but don't fail:
+ try:
+ os.unlink(fn)
+ except IOError:
+ pass
+ else:
+ return s
+
+ def _remote(self, action):
+ s = self._find_grail_rc()
+ if not s:
+ return 0
+ s.send(action)
+ s.close()
+ return 1
+
+ def open(self, url, new=0, autoraise=1):
+ if new:
+ self._remote("LOADNEW " + url)
+ else:
+ self._remote("LOAD " + url)
+
+ def open_new(self, url):
+ self.open(url, 1)
+
+
+class WindowsDefault:
+ def open(self, url, new=0, autoraise=1):
+ os.startfile(url)
+
+ def open_new(self, url):
+ self.open(url)
#
# Platform support for Unix
@@ -92,32 +232,8 @@ def _synthesize(browser):
# the TERM and DISPLAY cases, because we might be running Python from inside
# an xterm.
if os.environ.get("TERM") or os.environ.get("DISPLAY"):
- PROCESS_CREATION_DELAY = 4
_tryorder = ("mozilla","netscape","kfm","grail","links","lynx","w3m")
- def _iscommand(cmd):
- """Return true if cmd can be found on the executable search path."""
- path = os.environ.get("PATH")
- if not path:
- return 0
- for d in path.split(os.pathsep):
- exe = os.path.join(d, cmd)
- if os.path.isfile(exe):
- return 1
- return 0
-
- class GenericBrowser:
- def __init__(self, cmd):
- self.name, self.args = cmd.split(None, 1)
- self.basename = os.path.basename(self.name)
-
- def open(self, url, new=0, autoraise=1):
- command = "%s %s" % (self.name, self.args)
- os.system(command % url)
-
- def open_new(self, url): # Deprecated. May be removed in 2.1.
- self.open(url)
-
# Easy cases first -- register console browsers if we have them.
if os.environ.get("TERM"):
# The Links browser <http://artax.karlin.mff.cuni.cz/~mikulas/links/>
@@ -134,35 +250,6 @@ if os.environ.get("TERM") or os.environ.get("DISPLAY"):
if os.environ.get("DISPLAY"):
# First, the Netscape series
if _iscommand("netscape") or _iscommand("mozilla"):
- class Netscape:
- "Launcher class for Netscape browsers."
- def __init__(self, name):
- self.name = name
- self.basename = os.path.basename(name)
-
- def _remote(self, action, autoraise):
- raise_opt = ("-noraise", "-raise")[autoraise]
- cmd = "%s %s -remote '%s' >/dev/null 2>&1" % (self.name,
- raise_opt,
- action)
- rc = os.system(cmd)
- if rc:
- import time
- os.system("%s &" % self.name)
- time.sleep(PROCESS_CREATION_DELAY)
- rc = os.system(cmd)
- return not rc
-
- def open(self, url, new=0, autoraise=1):
- if new:
- self._remote("openURL(%s, new-window)"%url, autoraise)
- else:
- self._remote("openURL(%s)" % url, autoraise)
-
- # Deprecated. May be removed in 2.1.
- def open_new(self, url):
- self.open(url, 1)
-
if _iscommand("mozilla"):
register("mozilla", None, Netscape("mozilla"))
if _iscommand("netscape"):
@@ -174,108 +261,27 @@ if os.environ.get("TERM") or os.environ.get("DISPLAY"):
# Konqueror/kfm, the KDE browser.
if _iscommand("kfm") or _iscommand("konqueror"):
- class Konqueror:
- """Controller for the KDE File Manager (kfm, or Konqueror).
-
- See http://developer.kde.org/documentation/other/kfmclient.html
- for more information on the Konqueror remote-control interface.
-
- """
- def __init__(self):
- if _iscommand("konqueror"):
- self.name = self.basename = "konqueror"
- else:
- self.name = self.basename = "kfm"
-
- def _remote(self, action):
- cmd = "kfmclient %s >/dev/null 2>&1" % action
- rc = os.system(cmd)
- if rc:
- import time
- if self.basename == "konqueror":
- os.system(self.name + " --silent &")
- else:
- os.system(self.name + " -d &")
- time.sleep(PROCESS_CREATION_DELAY)
- rc = os.system(cmd)
- return not rc
-
- def open(self, url, new=1, autoraise=1):
- # XXX Currently I know no way to prevent KFM from
- # opening a new win.
- self._remote("openURL %s" % url)
-
- # Deprecated. May be removed in 2.1.
- open_new = open
-
register("kfm", Konqueror, Konqueror())
# Grail, the Python browser.
if _iscommand("grail"):
- class Grail:
- # There should be a way to maintain a connection to
- # Grail, but the Grail remote control protocol doesn't
- # really allow that at this point. It probably neverwill!
- def _find_grail_rc(self):
- import glob
- import pwd
- import socket
- import tempfile
- tempdir = os.path.join(tempfile.gettempdir(),
- ".grail-unix")
- user = pwd.getpwuid(_os.getuid())[0]
- filename = os.path.join(tempdir, user + "-*")
- maybes = glob.glob(filename)
- if not maybes:
- return None
- s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- for fn in maybes:
- # need to PING each one until we find one that's live
- try:
- s.connect(fn)
- except socket.error:
- # no good; attempt to clean it out, but don't fail:
- try:
- os.unlink(fn)
- except IOError:
- pass
- else:
- return s
-
- def _remote(self, action):
- s = self._find_grail_rc()
- if not s:
- return 0
- s.send(action)
- s.close()
- return 1
-
- def open(self, url, new=0, autoraise=1):
- if new:
- self._remote("LOADNEW " + url)
- else:
- self._remote("LOAD " + url)
-
- # Deprecated. May be removed in 2.1.
- def open_new(self, url):
- self.open(url, 1)
-
register("grail", Grail, None)
+
+class InternetConfig:
+ def open(self, url, new=0, autoraise=1):
+ ic.launchurl(url)
+
+ def open_new(self, url):
+ self.open(url)
+
+
#
# Platform support for Windows
#
if sys.platform[:3] == "win":
_tryorder = ("netscape", "windows-default")
-
- class WindowsDefault:
- def open(self, url, new=0, autoraise=1):
- os.startfile(url)
-
- def open_new(self, url): # Deprecated. May be removed in 2.1.
- self.open(url)
-
register("windows-default", WindowsDefault)
#
@@ -287,13 +293,6 @@ try:
except ImportError:
pass
else:
- class InternetConfig:
- def open(self, url, new=0, autoraise=1):
- ic.launchurl(url)
-
- def open_new(self, url): # Deprecated. May be removed in 2.1.
- self.open(url)
-
# internet-config is the only supported controller on MacOS,
# so don't mess with the default!
_tryorder = ("internet-config")
@@ -315,5 +314,3 @@ for cmd in _tryorder:
_tryorder = filter(lambda x: _browsers.has_key(x.lower())
or x.find("%s") > -1, _tryorder)
# what to do if _tryorder is now empty?
-
-# end