Add a command line option to spawn new tabs via DBus

This commit is contained in:
Chris Jones 2012-10-30 00:11:24 +00:00
parent 43f69112e4
commit 5d35c196c7
7 changed files with 33 additions and 3 deletions

View File

@ -18,6 +18,7 @@ terminator 1.0:
John Feuerstein
* Support reading configuration from alternate files, via a patch
from Pavel Khlebovich
* Allow creation of new tabs in existing Terminators, via DBus
* Bug fixes
terminator 0.96:

View File

@ -86,6 +86,10 @@ only be printed from the specified functions. If this is specified in
addition to \-\-debug-classes, only the intersection of the two lists
will be displayed
.TP
.B \-\-new-tab
If this is specified and Terminator is already running, DBus will be
used to spawn a new tab in the first Terminator window.
.TP
.SH "KEYBINDINGS"
The following keybindings can be used to control Terminator:
.TP

View File

@ -66,7 +66,7 @@ if __name__ == '__main__':
try:
dbus_service = ipc.DBusService()
except ipc.DBusException:
dbg('Unable to become master process, requesting a new window')
dbg('Unable to become master process, operating via DBus')
# get rid of the None and True types so dbus can handle them (empty
# and 'True' strings are used instead), also arrays are joined
# (the -x argument for example)
@ -78,7 +78,12 @@ if __name__ == '__main__':
val = 'True'
optionslist[opt] = val and '%s'%val or ''
optionslist = dbus.Dictionary(optionslist, signature='ss')
ipc.new_window(optionslist)
if OPTIONS.new_tab:
dbg('Requesting a new tab')
ipc.new_tab(optionslist)
else:
dbg('Requesting a new window')
ipc.new_window(optionslist)
sys.exit()
except ImportError:
dbg('dbus not imported')

View File

@ -69,6 +69,15 @@ class DBusService(Borg, dbus.service.Object):
self.terminator.create_layout(oldopts.layout)
self.terminator.layout_done()
@dbus.service.method(BUS_NAME, in_signature='a{ss}')
def new_tab(self, options=dbus.Dictionary()):
"""Create a new tab"""
dbg('dbus method called: new_tab with parameters %s'%(options))
oldopts = self.terminator.config.options_get()
oldopts.__dict__ = options
self.terminator.config.options_set(oldopts)
window = self.terminator.get_windows()[0]
window.tab_new()
@dbus.service.method(BUS_NAME)
def terminal_hsplit(self, uuid=None):
@ -132,6 +141,11 @@ def new_window(session, options):
"""Call the dbus method to open a new window"""
session.new_window(options)
@with_proxy
def new_tab(session, options):
"""Call the dbus method to open a new tab in the first window"""
session.new_tab(options)
@with_proxy
def terminal_hsplit(session, uuid):
"""Call the dbus method to horizontally split a terminal"""

View File

@ -87,6 +87,8 @@ icon for the window (by file or name)'))
help=_('Comma separated list of classes to limit debugging to'))
parser.add_option('--debug-methods', action='store', dest='debug_methods',
help=_('Comma separated list of methods to limit debugging to'))
parser.add_option('--new-tab', action='store_true', dest='new_tab',
help=_('If Terminator is already running, just open a new tab'))
for item in ['--sm-client-id', '--sm-config-prefix', '--screen', '-n',
'--no-gconf' ]:
parser.add_option(item, dest='dummy', action='store',

View File

@ -104,6 +104,10 @@ class Terminator(Borg):
dbg('session manager asked us to die')
# FIXME: Implement this
def get_windows(self):
"""Return a list of windows"""
return self.windows
def register_window(self, window):
"""Register a new window widget"""
if window not in self.windows:

View File

@ -262,7 +262,7 @@ class Window(Container, gtk.Window):
if not self.is_child_notebook():
dbg('Making a new Notebook')
notebook = maker.make('Notebook', window=self)
self.get_child().newtab(debugtab, cwd=cwd, profile=profile)
return self.get_child().newtab(debugtab, cwd=cwd, profile=profile)
def on_delete_event(self, window, event, data=None):
"""Handle a window close request"""