Some ports of some gtk2 commits that were still outstanding
* Fix the tab switching if a terminal on another tab exits * Fix for those not running IBus, where the IBus workaround caused broken keys in other keymaps set with non-IBus tools * PuTTY paste mode * Updated and grouped default shortcuts in man page * Fix PuTTY paste mode so Ctrl-Right-Drag, and application mouse handling in terminal still works * Added smart copy mode switch to prefs * Merge feature branch for tab/terminal title editing from Haim Daniel
This commit is contained in:
commit
7518c16588
13
ChangeLog
13
ChangeLog
@ -14,6 +14,12 @@ terminator GTK3:
|
||||
LP#1518557)
|
||||
* Change the scroll_on_output default to false (Egmont Koblinger,
|
||||
LP#1392822)
|
||||
* PuTTY paste mode (Nemilya, LP#1416682) with some alterations
|
||||
(Steve Boddy)
|
||||
* Updated and grouped default shortcuts in man page (Steve Boddy)
|
||||
* Added smart copy mode switch to prefs (Steve Boddy, LP#1223129)
|
||||
* Merge feature branch for tab/terminal title editing (Haim
|
||||
Daniel LP#1417747)
|
||||
|
||||
Bug fixes
|
||||
* Fix a GI version warning for Notify library (Mattias Eriksson)
|
||||
@ -49,6 +55,13 @@ terminator GTK3:
|
||||
* Remove unsupported utmp for now, till alternative solution
|
||||
* Fix the "Run command as login shell" (Egmont Koblinger,
|
||||
LP#1520991)
|
||||
* Fix the tab switching if a terminal on another tab exits (Steve
|
||||
Boddy, LP#943311)
|
||||
* Fix for those not running IBus, where the IBus workaround
|
||||
caused broken keys in other keymaps set with non-IBus tools
|
||||
(Steve Boddy, LP#1494606)
|
||||
* Fix PuTTY paste mode so Ctrl-Right-Drag, and application mouse
|
||||
handling in terminal still works (Steve Boddy)
|
||||
|
||||
terminator 0.97:
|
||||
* Allow font dimming in inactive terminals
|
||||
|
271
doc/terminator.1
271
doc/terminator.1
@ -3,36 +3,36 @@
|
||||
Terminator \- Multiple GNOME terminals in one window
|
||||
.SH "SYNOPSIS"
|
||||
.B terminator
|
||||
.RI [ options ]
|
||||
.br
|
||||
.RI [ options ]
|
||||
.br
|
||||
.SH "DESCRIPTION"
|
||||
This manual page documents \fBTerminator\fP, a terminal emulator application.
|
||||
.PP
|
||||
.PP
|
||||
\fBTerminator\fP is a program that allows users to set up flexible
|
||||
arrangements of GNOME terminals. It is aimed at those who normally
|
||||
arrange lots of terminals near each other, but don't want to use a
|
||||
arrangements of GNOME terminals. It is aimed at those who normally
|
||||
arrange lots of terminals near each other, but don't want to use a
|
||||
frame based window manager.
|
||||
.SH "OPTIONS"
|
||||
This program follow the usual GNU command line syntax, with long
|
||||
options starting with two dashes (`\-').
|
||||
A summary of options is included below.
|
||||
.TP
|
||||
.TP
|
||||
.B \-h, \-\-help
|
||||
Show summary of options
|
||||
.TP
|
||||
.TP
|
||||
.B \-v, \-\-version
|
||||
Show the version of the Terminator installation
|
||||
.TP
|
||||
.B \-m, \-\-maximise
|
||||
Start with a maximised window
|
||||
.TP
|
||||
.TP
|
||||
.B \-f, \-\-fullscreen
|
||||
Start with a fullscreen window
|
||||
.TP
|
||||
.TP
|
||||
.B \-b, \-\-borderless
|
||||
Instruct the window manager not to render borders/decoration on the
|
||||
Instruct the window manager not to render borders/decoration on the
|
||||
Terminator window (this works well with \-m)
|
||||
.TP
|
||||
.TP
|
||||
.B \-H, \-\-hidden
|
||||
Hide the Terminator window by default. Its visibility can be toggled
|
||||
with the \fBhide_window\fR keyboard shortcut (Ctrl-Shift-Alt-a by default)
|
||||
@ -48,7 +48,7 @@ Specifies the preferred size and position of Terminator's window; see X(7).
|
||||
Runs the specified command instead of your default shell or profile specified command. Note: if
|
||||
Terminator is launched as x-terminal-emulator \-e behaves like \-x, and the longform becomes
|
||||
\-\-execute2=COMMAND
|
||||
.TP
|
||||
.TP
|
||||
.B \-x, \-\-execute COMMAND [ARGS]
|
||||
Runs \fBthe rest of the command line\fR instead of your default shell or profile specified command.
|
||||
.TP
|
||||
@ -78,11 +78,11 @@ Set a custom icon for the window (by file or name)
|
||||
Disable DBus
|
||||
.TP
|
||||
.B \-d, \-\-debug
|
||||
Enable debugging output (please use this when reporting bugs). This
|
||||
Enable debugging output (please use this when reporting bugs). This
|
||||
can be specified twice to enable a built-in python debugging server.
|
||||
.TP
|
||||
.TP
|
||||
.B \-\-debug\-classes=DEBUG_CLASSES
|
||||
If this is specified as a comma separated list, debugging output will
|
||||
If this is specified as a comma separated list, debugging output will
|
||||
only be printed from the specified classes.
|
||||
.TP
|
||||
.B \-\-debug\-methods=DEBUG_METHODS
|
||||
@ -94,48 +94,43 @@ will be displayed
|
||||
.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
|
||||
.B Super+R
|
||||
\fBR\fRotate terminals clockwise.
|
||||
.TP
|
||||
.B Super+Shift+R
|
||||
\fBR\fRotate terminals counter-clockwise.
|
||||
.TP
|
||||
The following default keybindings can be used to control Terminator:
|
||||
.TP
|
||||
.B F1
|
||||
Launches the full HTML manual.
|
||||
.SS Creation & Destruction
|
||||
.PP
|
||||
The following items relate to creating and destroying terminals.
|
||||
.TP
|
||||
.B Ctrl+Shift+O
|
||||
Split terminals H\fBo\fRrizontally.
|
||||
.TP
|
||||
.TP
|
||||
.B Ctrl+Shift+E
|
||||
Split terminals V\fBe\fRrtically.
|
||||
.TP
|
||||
.B Ctrl+Shift+Right
|
||||
Move parent dragbar \fBRight\fR.
|
||||
.TP
|
||||
.B Ctrl+Shift+Left
|
||||
Move parent dragbar \fBLeft\fR.
|
||||
.TP
|
||||
.B Ctrl+Shift+Up
|
||||
Move parent dragbar \fBUp\fR.
|
||||
.TP
|
||||
.B Ctrl+Shift+Down
|
||||
Move parent dragbar \fBDown\fR.
|
||||
.TP
|
||||
.B Ctrl+Shift+S
|
||||
Hide/Show \fBS\fRcrollbar.
|
||||
.TP
|
||||
.B Ctrl+Shift+F
|
||||
Search within terminal scrollback
|
||||
.TP
|
||||
.B Ctrl+Shift+N or Ctrl+Tab
|
||||
Move to \fBn\fRext terminal within the same tab, use Ctrl+PageDown to move to the next tab.
|
||||
If \fBcycle_term_tab\fR is \fBFalse\fR, cycle within the same tab will be disabled
|
||||
.TP
|
||||
.B Ctrl+Shift+P or Ctrl+Shift+Tab
|
||||
Move to \fBp\fRrevious terminal within the same tab, use Ctrl+PageUp to move to the previous tab.
|
||||
If \fBcycle_term_tab\fR is \fBFalse\fR, cycle within the same tab will be disabled
|
||||
.TP
|
||||
.B Ctrl+Shift+T
|
||||
Open new \fBt\fRab.
|
||||
.TP
|
||||
.B Ctrl+Shift+I
|
||||
Open a new window. (Note: Unlike in previous releases, this window is
|
||||
part of the same Terminator process.)
|
||||
.TP
|
||||
.B Super+I
|
||||
Spawn a new Terminator process.
|
||||
.TP
|
||||
.B Alt+L
|
||||
Open \fBl\fRayout launcher.
|
||||
.TP
|
||||
.B Ctrl+Shift+W
|
||||
Close the current terminal.
|
||||
.TP
|
||||
.B Ctrl+Shift+Q
|
||||
Close the current window.
|
||||
.SS Navigation
|
||||
.PP
|
||||
The following items relate to moving between and around terminals.
|
||||
.TP
|
||||
.B Alt+Up
|
||||
Move to the terminal \fBabove\fR the current one.
|
||||
.TP
|
||||
@ -148,75 +143,40 @@ Move to the terminal \fBleft of\fR the current one.
|
||||
.B Alt+Right
|
||||
Move to the terminal \fBright of\fR the current one.
|
||||
.TP
|
||||
.B Ctrl+Shift+C
|
||||
Copy selected text to clipboard
|
||||
.TP
|
||||
.B Ctrl+Shift+V
|
||||
Paste clipboard text
|
||||
.TP
|
||||
.B Ctrl+Shift+W
|
||||
Close the current terminal.
|
||||
.TP
|
||||
.B Ctrl+Shift+Q
|
||||
Quits Terminator
|
||||
.TP
|
||||
.B Ctrl+Shift+X
|
||||
Toggle between showing all terminals and only showing the current one (maximise).
|
||||
.TP
|
||||
.B Ctrl+Shift+Z
|
||||
Toggle between showing all terminals and only showing a scaled version of the current one (zoom).
|
||||
.TP
|
||||
.B Ctrl+Shift+T
|
||||
Open new \fBt\fRab
|
||||
.TP
|
||||
.B Ctrl+PageDown
|
||||
Move to next Tab
|
||||
Move to next Tab.
|
||||
.TP
|
||||
.B Ctrl+PageUp
|
||||
Move to previous Tab
|
||||
Move to previous Tab.
|
||||
.TP
|
||||
.B Ctrl+Shift+PageDown
|
||||
Swap tab position with next Tab
|
||||
.B Ctrl+Shift+N or Ctrl+Tab
|
||||
Move to \fBn\fRext terminal within the same tab, use Ctrl+PageDown to move to the next tab.
|
||||
If \fBcycle_term_tab\fR is \fBFalse\fR, cycle within the same tab will be disabled.
|
||||
.TP
|
||||
.B Ctrl+Shift+PageUp
|
||||
Swap tab position with previous Tab
|
||||
.B Ctrl+Shift+P or Ctrl+Shift+Tab
|
||||
Move to \fBp\fRrevious terminal within the same tab, use Ctrl+PageUp to move to the previous tab.
|
||||
If \fBcycle_term_tab\fR is \fBFalse\fR, cycle within the same tab will be disabled.
|
||||
.SS Organisation
|
||||
.PP
|
||||
The following items relate to arranging and resizing terminals.
|
||||
.TP
|
||||
.B Ctrl+Plus (+)
|
||||
Increase font size. \fBNote:\fP this may require you to press shift, depending on your keyboard
|
||||
.B Ctrl+Shift+Right
|
||||
Move parent dragbar \fBRight\fR.
|
||||
.TP
|
||||
.B Ctrl+Minus (-)
|
||||
Decrease font size. \fBNote:\fP this may require you to press shift, depending on your keyboard
|
||||
.B Ctrl+Shift+Left
|
||||
Move parent dragbar \fBLeft\fR.
|
||||
.TP
|
||||
.B Ctrl+Zero (0)
|
||||
Restore font size to original setting.
|
||||
.B Ctrl+Shift+Up
|
||||
Move parent dragbar \fBUp\fR.
|
||||
.TP
|
||||
.B F11
|
||||
Toggle fullscreen
|
||||
.B Ctrl+Shift+Down
|
||||
Move parent dragbar \fBDown\fR.
|
||||
.TP
|
||||
.B Ctrl+Shift+R
|
||||
Reset terminal state
|
||||
.B Super+R
|
||||
\fBR\fRotate terminals clockwise.
|
||||
.TP
|
||||
.B Ctrl+Shift+G
|
||||
Reset terminal state and clear window
|
||||
.TP
|
||||
.B Super+g
|
||||
Group all terminals so that any input sent to one of them, goes to all of them.
|
||||
.TP
|
||||
.B Super+Shift+G
|
||||
Remove grouping from all terminals.
|
||||
.TP
|
||||
.B Super+t
|
||||
Group all terminals in the current tab so input sent to one of them, goes to all terminals in the current tab.
|
||||
.TP
|
||||
.B Super+Shift+T
|
||||
Remove grouping from all terminals in the current tab.
|
||||
.TP
|
||||
.B Ctrl+Shift+I
|
||||
Open a new window (note: unlike in previous releases, this window is
|
||||
part of the same Terminator process)
|
||||
.TP
|
||||
.B Super+i
|
||||
Spawn a new Terminator process
|
||||
.B Super+Shift+R
|
||||
\fBR\fRotate terminals counter-clockwise.
|
||||
.TP
|
||||
.SH "Drag and Drop"
|
||||
The layout can be modified by moving terminals with Drag and Drop.
|
||||
@ -224,10 +184,101 @@ To start dragging a terminal, click and hold on its titlebar.
|
||||
Alternatively, hold down \fBCtrl\fP, click and hold the \fBright\fP mouse button.
|
||||
Then, \fB**Release Ctrl**\fP. You can now drag the terminal to the point in the layout you would like it to be.
|
||||
The zone where the terminal would be inserted will be highlighted.
|
||||
.TP
|
||||
.B Ctrl+Shift+PageDown
|
||||
Swap tab position with next Tab.
|
||||
.TP
|
||||
.B Ctrl+Shift+PageUp
|
||||
Swap tab position with previous Tab.
|
||||
.SS Miscellaneous
|
||||
.PP
|
||||
The following items relate to miscellaneous terminal related functions.
|
||||
.TP
|
||||
.B Ctrl+Shift+C
|
||||
Copy selected text to clipboard.
|
||||
.TP
|
||||
.B Ctrl+Shift+V
|
||||
Paste clipboard text.
|
||||
.TP
|
||||
.B Ctrl+Shift+S
|
||||
Hide/Show \fBS\fRcrollbar.
|
||||
.TP
|
||||
.B Ctrl+Shift+F
|
||||
Search within terminal scrollback.
|
||||
.TP
|
||||
.B Ctrl+Shift+R
|
||||
Reset terminal state.
|
||||
.TP
|
||||
.B Ctrl+Shift+G
|
||||
Reset terminal state and clear window.
|
||||
.TP
|
||||
.B Ctrl+Plus (+)
|
||||
Increase font size. \fBNote:\fP This may require you to press shift, depending on your keyboard.
|
||||
.TP
|
||||
.B Ctrl+Minus (-)
|
||||
Decrease font size. \fBNote:\fP This may require you to press shift, depending on your keyboard.
|
||||
.TP
|
||||
.B Ctrl+Zero (0)
|
||||
Restore font size to original setting.
|
||||
.TP
|
||||
.B Ctrl+W
|
||||
Rename window title.
|
||||
.TP
|
||||
.B Ctrl+A
|
||||
Rename tab title.
|
||||
.TP
|
||||
.B Ctrl+X
|
||||
Rename terminal title.
|
||||
.TP
|
||||
.B Super+1
|
||||
Insert terminal number, i.e. 1 to 12.
|
||||
.TP
|
||||
.B Super+0
|
||||
Insert padded terminal number, i.e. 01 to 12.
|
||||
.SS Grouping & Broadcasting
|
||||
.PP
|
||||
The following items relate to helping to focus on a specific terminal.
|
||||
.TP
|
||||
.B F11
|
||||
Toggle window to fullscreen.
|
||||
.TP
|
||||
.B Ctrl+Shift+X
|
||||
Toggle between showing all terminals and only showing the current one (maximise).
|
||||
.TP
|
||||
.B Ctrl+Shift+Z
|
||||
Toggle between showing all terminals and only showing a scaled version of the current one (zoom).
|
||||
.TP
|
||||
.B Ctrl+Shift+Alt+A
|
||||
Hide the initial window. Note that this is a global binding, and can only be bound once.
|
||||
.PP
|
||||
The following items relate to grouping and broadcasting.
|
||||
.TP
|
||||
.B Super+T
|
||||
Group all terminals in the current tab so input sent to one of them, goes to all terminals in the current tab.
|
||||
.TP
|
||||
.B Super+Shift+T
|
||||
Remove grouping from all terminals in the current tab.
|
||||
.TP
|
||||
.B Super+G
|
||||
Group all terminals so that any input sent to one of them, goes to all of them.
|
||||
.TP
|
||||
.B Super+Shift+G
|
||||
Remove grouping from all terminals.
|
||||
.TP
|
||||
.B Alt+A
|
||||
Broadcast to All terminals.
|
||||
.TP
|
||||
.B Alt+G
|
||||
Broadcast to Grouped terminals.
|
||||
.TP
|
||||
.B Alt+O
|
||||
Broadcast Off.
|
||||
.PP
|
||||
Most of these keybindings are changeable in the Preferences.
|
||||
.SH "SEE ALSO"
|
||||
.BR terminator_config(5)
|
||||
.SH "AUTHOR"
|
||||
Terminator was written by Chris Jones <cmsj@tenshu.net> and others.
|
||||
.PP
|
||||
.PP
|
||||
This manual page was written by Chris Jones <cmsj@tenshu.net>
|
||||
and others.
|
||||
|
@ -34,7 +34,7 @@ These are the options Terminator currently supports in the global_config section
|
||||
.TP
|
||||
.B dbus
|
||||
Control whether or not Terminator will load its DBus server. When this server is loaded, running Terminator multiple times will cause the first Terminator process to open additional windows. If this configuration item is set to False, or the python dbus module is unavailable, running Terminator multiple times will run a separate Terminator process for each invocation.
|
||||
Default value: \fBFalse\fR
|
||||
Default value: \fBTrue\fR
|
||||
.TP
|
||||
.B focus
|
||||
Control how focus is given to terminals. 'click' means the focus only moves to a terminal after you click in it. 'sloppy' means the focus will follow the mouse pointer. 'system' means the focus will match that used by a GNOME window manager.
|
||||
@ -46,7 +46,7 @@ Default value: \fB-1\fR
|
||||
.TP
|
||||
.B geometry_hinting
|
||||
If True the window will resize in step with font sizes, if False it will follow pixels
|
||||
Default value: \fBTrue\fR
|
||||
Default value: \fBFalse\fR
|
||||
.TP
|
||||
.B window_state
|
||||
When set to 'normal' the Terminator window opens normally. 'maximise' opens the window in a maximised state, 'fullscreen' in a fullscreen state and 'hidden' will make it not shown by default.
|
||||
@ -136,6 +136,14 @@ Controls whether splits/tabs will continue to use the profile of their peer term
|
||||
the default profile.
|
||||
Default value: \fBFalse\fR
|
||||
.TP
|
||||
.B putty_paste_style \fR(boolean)
|
||||
If set to True, right-click will paste the Primary selection, middle-click will popup the context menu.
|
||||
Default value: \fBFalse\fR
|
||||
.TP
|
||||
.B smart_copy \fR(boolean)
|
||||
If set to True, and there is no selection, the shortcut is allowed to pass through. This is useful for overloading Ctrl-C to copy a selection, or send the SIGINT to the current process if there is no selection. If False the shortcut does not pass through at all, and the SIGINT does not get sent.
|
||||
Default value: \fBTrue\fR
|
||||
.TP
|
||||
.B enabled_plugins
|
||||
A list of plugins which should be loaded by default. All other plugin classes will be ignored. The default value includes two
|
||||
plugins related to Launchpad, which are enabled by default to provide continuity with earlier releases where these were the
|
||||
@ -278,6 +286,18 @@ Note that <Alt><Shift>1 may need to be provided as <Alt>! or similar,
|
||||
depending on your keyboard layout.
|
||||
Default value: \fBUnbound\fR
|
||||
.TP
|
||||
.B edit_window_title
|
||||
Edit the current active window's title
|
||||
Default value: \fB<Ctrl>W\fR
|
||||
.TP
|
||||
.B edit_tab_title
|
||||
Edit the currently active tab's title
|
||||
Default value: \fB<Ctrl>A\fR
|
||||
.TP
|
||||
.B edit_terminal_title
|
||||
Edit the currently active terminal's title
|
||||
Default value: \fB<Ctrl>X\fR
|
||||
.TP
|
||||
.B full_screen
|
||||
Toggle the window to a fullscreen window.
|
||||
Default value: \fBF11\fR
|
||||
|
@ -20,6 +20,8 @@
|
||||
|
||||
import sys
|
||||
import os
|
||||
import psutil
|
||||
import pwd
|
||||
try:
|
||||
ORIGCWD = os.getcwd()
|
||||
except OSError:
|
||||
@ -53,7 +55,11 @@ if __name__ == '__main__':
|
||||
# Workaround for IBus intefering with broadcast when using dead keys
|
||||
# Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear
|
||||
# in the receivers.
|
||||
os.environ['IBUS_DISABLE_SNOOPER']='1'
|
||||
username = pwd.getpwuid(os.getuid()).pw_name
|
||||
ibus_running = [p for p in psutil.process_iter() if p.name == 'ibus-daemon' and p.username == username]
|
||||
ibus_running = len(ibus_running) > 0
|
||||
if ibus_running:
|
||||
os.environ['IBUS_DISABLE_SNOOPER']='1'
|
||||
|
||||
dbus_service = None
|
||||
|
||||
@ -107,6 +113,7 @@ if __name__ == '__main__':
|
||||
TERMINATOR.set_origcwd(ORIGCWD)
|
||||
TERMINATOR.set_dbus_data(dbus_service)
|
||||
TERMINATOR.reconfigure()
|
||||
TERMINATOR.ibus_running = ibus_running
|
||||
|
||||
try:
|
||||
dbg('Creating a terminal with layout: %s' % OPTIONS.layout)
|
||||
|
@ -123,6 +123,8 @@ DEFAULTS = {
|
||||
'always_split_with_profile': False,
|
||||
'title_use_system_font' : True,
|
||||
'title_font' : 'Sans 9',
|
||||
'putty_paste_style' : False,
|
||||
'smart_copy' : True,
|
||||
},
|
||||
'keybindings': {
|
||||
'zoom_in' : '<Control>plus',
|
||||
@ -190,7 +192,9 @@ DEFAULTS = {
|
||||
'broadcast_all' : '<Alt>a',
|
||||
'insert_number' : '<Super>1',
|
||||
'insert_padded' : '<Super>0',
|
||||
'edit_window_title': '<Alt>t',
|
||||
'edit_window_title': '<Control>w',
|
||||
'edit_tab_title' : '<Control>a',
|
||||
'edit_terminal_title': '<Control>x',
|
||||
'layout_launcher' : '<Alt>l',
|
||||
'next_profile' : '',
|
||||
'previous_profile' : '',
|
||||
|
@ -25,7 +25,8 @@ class EditableLabel(Gtk.EventBox):
|
||||
# pylint: disable-msg=R0904
|
||||
"""
|
||||
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
|
||||
_ebox = None
|
||||
@ -67,30 +68,34 @@ class EditableLabel(Gtk.EventBox):
|
||||
"""get the text from the label"""
|
||||
return(self._label.get_text())
|
||||
|
||||
def edit(self):
|
||||
""" Start editing the widget text """
|
||||
if self._entry:
|
||||
return False
|
||||
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):
|
||||
# pylint: disable-msg=W0613
|
||||
"""event handling text edition"""
|
||||
if event.button != 1:
|
||||
return False
|
||||
if event.type == Gdk.EventType._2BUTTON_PRESS:
|
||||
if self._entry:
|
||||
return False
|
||||
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 ()
|
||||
self.edit()
|
||||
return(True)
|
||||
return(False)
|
||||
|
||||
|
@ -40,9 +40,10 @@ class Notebook(Container, Gtk.Notebook):
|
||||
child = window.get_child()
|
||||
window.remove(child)
|
||||
window.add(self)
|
||||
window_last_active_term = window.last_active_term
|
||||
self.newtab(widget=child)
|
||||
if window.last_active_term:
|
||||
self.set_last_active_term(window.last_active_term)
|
||||
if window_last_active_term:
|
||||
self.set_last_active_term(window_last_active_term)
|
||||
window.last_active_term = None
|
||||
|
||||
self.show_all()
|
||||
@ -535,6 +536,9 @@ class TabLabel(Gtk.HBox):
|
||||
else:
|
||||
return(None)
|
||||
|
||||
def edit(self):
|
||||
self.label.edit()
|
||||
|
||||
def update_button(self):
|
||||
"""Update the state of our close button"""
|
||||
if not self.config['close_button_on_tab']:
|
||||
|
@ -7,7 +7,7 @@ variants"""
|
||||
import time
|
||||
from gi.repository import GObject, Gtk, Gdk
|
||||
|
||||
from util import dbg, err
|
||||
from util import dbg, err, enumerate_descendants
|
||||
from terminator import Terminator
|
||||
from factory import Factory
|
||||
from container import Container
|
||||
@ -259,6 +259,26 @@ class Paned(Container):
|
||||
if self.closeterm(widget):
|
||||
# At this point we only have one child, which is the surviving term
|
||||
sibling = self.children[0]
|
||||
first_term_sibling = sibling
|
||||
cur_tabnum = None
|
||||
|
||||
focus_sibling = True
|
||||
if self.get_toplevel().is_child_notebook():
|
||||
notebook = self.get_toplevel().get_children()[0]
|
||||
cur_tabnum = notebook.get_current_page()
|
||||
tabnum = notebook.page_num_descendant(self)
|
||||
nth_page = notebook.get_nth_page(tabnum)
|
||||
exiting_term_was_last_active = (notebook.last_active_term[nth_page] == widget.uuid)
|
||||
if exiting_term_was_last_active:
|
||||
first_term_sibling = enumerate_descendants(self)[1][0]
|
||||
notebook.set_last_active_term(first_term_sibling.uuid)
|
||||
notebook.clean_last_active_term()
|
||||
self.get_toplevel().last_active_term = None
|
||||
if cur_tabnum != tabnum:
|
||||
focus_sibling = False
|
||||
elif self.get_toplevel().last_active_term != widget.uuid:
|
||||
focus_sibling = False
|
||||
|
||||
self.remove(sibling)
|
||||
|
||||
metadata = None
|
||||
@ -268,7 +288,12 @@ class Paned(Container):
|
||||
parent.remove(self)
|
||||
self.cnxids.remove_all()
|
||||
parent.add(sibling, metadata)
|
||||
sibling.grab_focus()
|
||||
if cur_tabnum:
|
||||
notebook.set_current_page(cur_tabnum)
|
||||
if focus_sibling:
|
||||
first_term_sibling.grab_focus()
|
||||
elif not sibling.get_toplevel().is_child_notebook():
|
||||
Terminator().find_terminal_by_uuid(sibling.get_toplevel().last_active_term.urn).grab_focus()
|
||||
else:
|
||||
dbg("Paned::wrapcloseterm: self.closeterm failed")
|
||||
|
||||
|
@ -434,7 +434,7 @@
|
||||
<object class="GtkTable" id="table8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">6</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">12</property>
|
||||
<property name="row_spacing">6</property>
|
||||
@ -565,6 +565,25 @@
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="dbuscheck">
|
||||
<property name="label" translatable="yes">DBus server</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_dbuscheck_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@ -576,7 +595,7 @@
|
||||
<object class="GtkTable" id="table9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">6</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">12</property>
|
||||
<property name="row_spacing">6</property>
|
||||
@ -649,6 +668,38 @@
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="putty_paste_style">
|
||||
<property name="label" translatable="yes">Putty style paste</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_putty_paste_style_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="smart_copy">
|
||||
<property name="label" translatable="yes">Smart copy</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_smart_copy_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="always_split_with_profile">
|
||||
<property name="label" translatable="yes">Re-use profiles for new terminals</property>
|
||||
@ -662,8 +713,8 @@
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
@ -680,8 +731,8 @@
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
@ -732,27 +783,8 @@
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="dbuscheck">
|
||||
<property name="label" translatable="yes">DBus server</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="on_dbuscheck_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
|
@ -147,6 +147,8 @@ class PrefsEditor:
|
||||
'insert_number' : _('Insert terminal number'),
|
||||
'insert_padded' : _('Insert padded terminal number'),
|
||||
'edit_window_title': _('Edit window title'),
|
||||
'edit_terminal_title': _('Edit terminal title'),
|
||||
'edit_tab_title' : _('Edit tab title'),
|
||||
'layout_launcher' : _('Open layout launcher window'),
|
||||
'next_profile' : _('Switch to next profile'),
|
||||
'previous_profile' : _('Switch to previous profile'),
|
||||
@ -289,6 +291,12 @@ class PrefsEditor:
|
||||
#Always split with profile
|
||||
widget = guiget('always_split_with_profile')
|
||||
widget.set_active(self.config['always_split_with_profile'])
|
||||
# Putty paste style
|
||||
widget = guiget('putty_paste_style')
|
||||
widget.set_active(self.config['putty_paste_style'])
|
||||
# Smart copy
|
||||
widget = guiget('smart_copy')
|
||||
widget.set_active(self.config['smart_copy'])
|
||||
#Titlebar font selector
|
||||
# Use system font
|
||||
widget = guiget('title_system_font_checkbutton')
|
||||
@ -707,6 +715,16 @@ class PrefsEditor:
|
||||
self.config['rewrap_on_resize'] = widget.get_active()
|
||||
self.config.save()
|
||||
|
||||
def on_putty_paste_style_toggled(self, widget):
|
||||
"""Putty paste style setting changed"""
|
||||
self.config['putty_paste_style'] = widget.get_active()
|
||||
self.config.save()
|
||||
|
||||
def on_smart_copy_toggled(self, widget):
|
||||
"""Putty paste style setting changed"""
|
||||
self.config['smart_copy'] = widget.get_active()
|
||||
self.config.save()
|
||||
|
||||
def on_cursor_blink_toggled(self, widget):
|
||||
"""Cursor blink setting changed"""
|
||||
self.config['cursor_blink'] = widget.get_active()
|
||||
|
@ -69,6 +69,10 @@ class Terminal(Gtk.VBox):
|
||||
|
||||
TARGET_TYPE_VTE = 8
|
||||
|
||||
MOUSEBUTTON_LEFT = 1
|
||||
MOUSEBUTTON_MIDDLE = 2
|
||||
MOUSEBUTTON_RIGHT = 3
|
||||
|
||||
terminator = None
|
||||
vte = None
|
||||
terminalbox = None
|
||||
@ -867,12 +871,13 @@ class Terminal(Gtk.VBox):
|
||||
dbg('Terminal::on_keypress: Called on %s with no event' % widget)
|
||||
return(False)
|
||||
|
||||
# Workaround for IBus intefering with broadcast when using dead keys
|
||||
# Workaround for IBus interfering with broadcast when using dead keys
|
||||
# Environment also needs IBUS_DISABLE_SNOOPER=1, or double chars appear
|
||||
# in the receivers.
|
||||
if (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0:
|
||||
dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
|
||||
return(False)
|
||||
if self.terminator.ibus_running:
|
||||
if (event.state | Gdk.ModifierType.MODIFIER_MASK ) ^ Gdk.ModifierType.MODIFIER_MASK != 0:
|
||||
dbg('Terminal::on_keypress: Ingore processed event with event.state %d' % event.state)
|
||||
return(False)
|
||||
|
||||
# FIXME: Does keybindings really want to live in Terminator()?
|
||||
mapping = self.terminator.keybindings.lookup(event)
|
||||
@ -890,6 +895,8 @@ class Terminal(Gtk.VBox):
|
||||
if self.vte.get_has_selection ():
|
||||
getattr(self, "key_" + mapping)()
|
||||
return(True)
|
||||
elif not self.config['smart_copy']:
|
||||
return(True)
|
||||
else:
|
||||
getattr(self, "key_" + mapping)()
|
||||
return(True)
|
||||
@ -917,25 +924,32 @@ class Terminal(Gtk.VBox):
|
||||
# Suppress double-click behavior
|
||||
return True
|
||||
|
||||
if event.button == 1:
|
||||
if self.config['putty_paste_style']:
|
||||
middle_click = [self.popup_menu, (widget, event)]
|
||||
right_click = [self.paste_clipboard, (True, )]
|
||||
else:
|
||||
middle_click = [self.paste_clipboard, (True, )]
|
||||
right_click = [self.popup_menu, (widget, event)]
|
||||
|
||||
if event.button == self.MOUSEBUTTON_LEFT:
|
||||
# Ctrl+leftclick on a URL should open it
|
||||
if event.get_state() & Gdk.ModifierType.CONTROL_MASK == Gdk.ModifierType.CONTROL_MASK:
|
||||
url = self.vte.match_check_event(event)
|
||||
if url[0]:
|
||||
self.open_url(url, prepare=True)
|
||||
elif event.button == 2:
|
||||
elif event.button == self.MOUSEBUTTON_MIDDLE:
|
||||
# middleclick should paste the clipboard
|
||||
self.paste_clipboard(True)
|
||||
middle_click[0](*middle_click[1])
|
||||
return(True)
|
||||
elif event.button == 3:
|
||||
elif event.button == self.MOUSEBUTTON_RIGHT:
|
||||
# rightclick should display a context menu if Ctrl is not pressed,
|
||||
# plus either the app is not interested in mouse events or Shift is pressed
|
||||
if event.get_state() & Gdk.ModifierType.CONTROL_MASK == 0:
|
||||
if event.get_state() & Gdk.ModifierType.SHIFT_MASK == 0:
|
||||
if not Vte.Terminal.do_button_press_event(self.vte, event):
|
||||
self.popup_menu(widget, event)
|
||||
right_click[0](*right_click[1])
|
||||
else:
|
||||
self.popup_menu(widget, event)
|
||||
right_click[0](*right_click[1])
|
||||
return(True)
|
||||
|
||||
return(False)
|
||||
@ -1869,6 +1883,20 @@ class Terminal(Gtk.VBox):
|
||||
dialog.destroy()
|
||||
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):
|
||||
LAYOUTLAUNCHER=LayoutLauncher()
|
||||
|
||||
|
@ -48,6 +48,7 @@ class Terminator(Borg):
|
||||
pid_cwd = None
|
||||
gnome_client = None
|
||||
debug_address = None
|
||||
ibus_running = None
|
||||
|
||||
doing_layout = None
|
||||
layoutname = None
|
||||
|
Loading…
Reference in New Issue
Block a user