Add support for terminal and tab edit title key binding.

Currently the only way of changing either active terminal title or active tab
title is by mouse clicking on them.

The suggested fix adds support for keybinding for each action, thus providing
a potential productivity increase from user's perspective.

The suggested default key layouts are:
* edit terminal title '<Alt>F2'.
* edit tab title '<Alt><Shift>F2'

This fixes issue: https://bugs.launchpad.net/terminator/+bug/1417747
This commit is contained in:
Haim Daniel hdaniel@redhat.com 2015-10-26 15:46:39 +02:00
parent 454a82a8cb
commit 9aab1d8643
7 changed files with 59 additions and 19 deletions

View File

@ -224,6 +224,12 @@ Restore font size to original setting.
.B Alt+T .B Alt+T
Rename titlebar. Rename titlebar.
.TP .TP
.B Alt+F2
Rename terminal title.
.TP
.B Alt+Shift+F2
Rename tab title.
.TP
.B Super+1 .B Super+1
Insert terminal number, i.e. 1 to 12. Insert terminal number, i.e. 1 to 12.
.TP .TP

View File

@ -286,6 +286,14 @@ Note that <Alt><Shift>1 may need to be provided as <Alt>! or similar,
depending on your keyboard layout. depending on your keyboard layout.
Default value: \fBUnbound\fR Default value: \fBUnbound\fR
.TP .TP
.B edit_tab_title
Edit the currently active tab's title
Default value: \fB<Alt><Shift>F2\fR
.TP
.B edit_terminal_title
Edit the currently active terminal's title
Default value: \fB<Alt>F2\fR
.TP
.B full_screen .B full_screen
Toggle the window to a fullscreen window. Toggle the window to a fullscreen window.
Default value: \fBF11\fR Default value: \fBF11\fR

View File

@ -191,6 +191,8 @@ DEFAULTS = {
'insert_number' : '<Super>1', 'insert_number' : '<Super>1',
'insert_padded' : '<Super>0', 'insert_padded' : '<Super>0',
'edit_window_title': '<Alt>t', 'edit_window_title': '<Alt>t',
'edit_tab_title' : '<Alt><Shift>F2',
'edit_terminal_title': '<Alt>F2',
'layout_launcher' : '<Alt>l', 'layout_launcher' : '<Alt>l',
'next_profile' : '', 'next_profile' : '',
'previous_profile' : '', 'previous_profile' : '',

View File

@ -26,7 +26,8 @@ class EditableLabel(gtk.EventBox):
# pylint: disable-msg=R0904 # pylint: disable-msg=R0904
""" """
An eventbox that partialy emulate a gtk.Label An eventbox that partialy emulate a gtk.Label
On double-click, the label is editable, entering an empty will revert back to automatic text On double-click or key binding the label is editable, entering an empty
will revert back to automatic text
""" """
_label = None _label = None
_ebox = None _ebox = None
@ -69,30 +70,34 @@ class EditableLabel(gtk.EventBox):
"""get the text from the label""" """get the text from the label"""
return(self._label.get_text()) return(self._label.get_text())
def edit(self):
""" Start editing the widget text """
self.remove(self._label)
self._entry = gtk.Entry()
self._entry.set_text(self._label.get_text())
self._entry.show()
self.add(self._entry)
sig = self._entry.connect("focus-out-event", self._entry_to_label)
self._entry_handler_id.append(sig)
sig = self._entry.connect("activate", self._on_entry_activated)
self._entry_handler_id.append(sig)
sig = self._entry.connect("key-press-event",
self._on_entry_keypress)
self._entry_handler_id.append(sig)
sig = self._entry.connect("button-press-event",
self._on_entry_buttonpress)
self._entry_handler_id.append(sig)
self._entry.grab_focus()
def _on_click_text(self, widget, event): def _on_click_text(self, widget, event):
# pylint: disable-msg=W0613 # pylint: disable-msg=W0613
"""event handling text edition""" """event handling text edition"""
if event.button != 1: if event.button != 1:
return False return False
if event.type == gtk.gdk._2BUTTON_PRESS: if event.type == gtk.gdk._2BUTTON_PRESS:
self.remove (self._label) self.edit()
self._entry = gtk.Entry () return True
self._entry.set_text (self._label.get_text ()) return False
self._entry.show ()
self.add (self._entry)
sig = self._entry.connect ("focus-out-event", self._entry_to_label)
self._entry_handler_id.append(sig)
sig = self._entry.connect ("activate", self._on_entry_activated)
self._entry_handler_id.append(sig)
sig = self._entry.connect ("key-press-event",
self._on_entry_keypress)
self._entry_handler_id.append(sig)
sig = self._entry.connect("button-press-event",
self._on_entry_buttonpress)
self._entry_handler_id.append(sig)
self._entry.grab_focus ()
return(True)
return(False)
def _entry_to_label (self, widget, event): def _entry_to_label (self, widget, event):
# pylint: disable-msg=W0613 # pylint: disable-msg=W0613

View File

@ -536,6 +536,9 @@ class TabLabel(gtk.HBox):
else: else:
return(None) return(None)
def edit(self):
self.label.edit()
def update_button(self): def update_button(self):
"""Update the state of our close button""" """Update the state of our close button"""
if not self.config['close_button_on_tab']: if not self.config['close_button_on_tab']:

View File

@ -148,6 +148,8 @@ class PrefsEditor:
'insert_number' : _('Insert terminal number'), 'insert_number' : _('Insert terminal number'),
'insert_padded' : _('Insert padded terminal number'), 'insert_padded' : _('Insert padded terminal number'),
'edit_window_title': _('Edit window title'), 'edit_window_title': _('Edit window title'),
'edit_terminal_title': _('Edit terminal title'),
'edit_tab_title' : _('Edit tab title'),
'layout_launcher' : _('Open layout launcher window'), 'layout_launcher' : _('Open layout launcher window'),
'next_profile' : _('Switch to next profile'), 'next_profile' : _('Switch to next profile'),
'previous_profile' : _('Switch to previous profile'), 'previous_profile' : _('Switch to previous profile'),

View File

@ -1836,6 +1836,20 @@ class Terminal(gtk.VBox):
dialog.destroy() dialog.destroy()
return return
def key_edit_tab_title(self):
window = self.get_toplevel()
if not window.is_child_notebook():
return
notebook = window.get_children()[0]
n_page = notebook.get_current_page()
page = notebook.get_nth_page(n_page)
label = notebook.get_tab_label(page)
label.edit()
def key_edit_terminal_title(self):
self.titlebar.label.edit()
def key_layout_launcher(self): def key_layout_launcher(self):
LAYOUTLAUNCHER=LayoutLauncher() LAYOUTLAUNCHER=LayoutLauncher()