terminator/terminator

166 lines
5.7 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env python
2007-07-28 01:33:48 +00:00
# Terminator - multiple gnome terminals in one window
2008-02-08 10:20:48 +00:00
# Copyright (C) 2006-2008 cmsj@tenshu.net
2007-07-28 01:33:48 +00:00
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2 only.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"""Terminator by Chris Jones <cmsj@tenshu.net>"""
# import standard python libs
import os, sys
from optparse import OptionParser, SUPPRESS_HELP
from terminatorlib.version import APP_NAME, APP_VERSION
try:
import gettext
gettext.install (APP_NAME)
except ImportError:
import __builtin__
2008-07-16 23:54:21 +00:00
def dummytrans (text):
"""A _ function for systems without gettext. Effectively a NOOP"""
return text
2008-07-16 23:54:21 +00:00
__builtin__.__dict__['_'] = dummytrans
from terminatorlib.config import dbg, err, debug
import terminatorlib.config
try:
import pygtk
pygtk.require ("2.0")
import gobject, gtk, pango
2008-07-16 23:54:21 +00:00
except ImportError:
err (_("You need to install the python bindings for " \
"gobject, gtk and pango to run Terminator."))
sys.exit(1)
from terminatorlib.terminator import Terminator
if __name__ == '__main__':
def execute_cb (option, opt, value, parser):
2008-07-16 23:54:21 +00:00
"""Callback for use in parsing Terminator command line options"""
assert value is None
value = []
while parser.rargs:
arg = parser.rargs[0]
value.append (arg)
del (parser.rargs[0])
setattr(parser.values, option.dest, value)
def profile_cb (option, opt, value, parser):
2008-07-16 23:54:21 +00:00
"""Callback for handling the profile name"""
assert value is None
value = ''
while parser.rargs:
arg = parser.rargs[0]
if arg[0] != '-':
if len (value) > 0:
value = '%s %s' % (value, arg)
else:
value = '%s' % arg
del (parser.rargs[0])
else:
break
setattr (parser.values, option.dest, value)
usage = "usage: %prog [options]"
parser = OptionParser (usage)
parser.add_option ("-v", "--version", action="store_true", dest="version",
help="Display program version")
parser.add_option ("-d", "--debug", action="count", dest="debug",
help="Enable debugging information (twice for debug server)")
parser.add_option ("-m", "--maximise", action="store_true", dest="maximise",
help="Open the %s window maximised" % APP_NAME.capitalize())
parser.add_option ("-f", "--fullscreen", action="store_true", dest="fullscreen",
help="Set the window into fullscreen mode")
parser.add_option ("-b", "--borderless", action="store_true", dest="borderless",
help="Turn off the window's borders")
parser.add_option ("-n", "--no-gconf", dest="no_gconf", action="store_true",
help="ignore gnome-terminal gconf settings")
parser.add_option ("-p", "--profile", dest="profile", action="callback",
callback=profile_cb, help="Specify a GNOME Terminal profile to emulate")
parser.add_option ("--geometry", dest="geometry", type="string",
help="Set the preferred size and position of the window (see X man page)")
parser.add_option ("-e", "--command", dest="command",
help="Execute the argument to this option inside the terminal")
parser.add_option ("-x", "--execute", dest="execute", action="callback",
callback=execute_cb, help="Execute the remainder of the command line inside the terminal")
for opt in ['--sm-client-id', '--sm-config-prefix', '--screen']:
parser.add_option (opt, dest="dummy", action="store", help=SUPPRESS_HELP)
(options, args) = parser.parse_args ()
if len (args) != 0:
parser.error("Expecting zero additional arguments, found: %d" % len (args))
if options.no_gconf and options.profile:
parser.error("using --no-gconf and defining a profile at the same time does not make sense")
2008-03-29 01:40:49 +00:00
if options.version:
print "%s %s" % (APP_NAME, APP_VERSION)
2008-03-29 01:40:49 +00:00
sys.exit (0)
if options.debug:
terminatorlib.config.debug = True
2008-03-29 01:40:49 +00:00
command = None
if (options.command):
command = options.command
if (options.execute):
command = options.execute
2008-05-29 12:25:46 +00:00
if gtk.gdk.display_get_default() == None:
2008-06-16 23:10:54 +00:00
err (_("You need to run terminator in an X environment. " \
"Make sure DISPLAY is properly set"))
2008-05-29 12:25:46 +00:00
sys.exit(1)
try:
open (os.path.expanduser ('~/.config/terminator/config'))
except IOError:
try:
open (os.path.expanduser ('~/.terminatorrc'))
error = gtk.MessageDialog (None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
('''You have a configuration file:
~/.terminatorrc.
Please be aware that this file needs to be moved to:
~/.config/terminator/config.
See the following bug report for more details:
https://bugs.launchpad.net/bugs/238070'''))
error.run ()
error.destroy ()
except IOError:
pass
dbg ('profile_cb: settled on profile: "%s"' % options.profile)
term = Terminator (options.profile, command, options.fullscreen, options.maximise,
options.borderless, options.no_gconf, options.geometry)
if options.debug > 1:
import terminatorlib.debugserver as debugserver
import threading
gtk.gdk.threads_init()
(debugthread, debugsvr) = debugserver.spawn(locals())
term.debugaddress = debugsvr.server_address
# from terminatorlib.prefs_profile import ProfileEditor
# prefs = ProfileEditor ()
gtk.main()