(trunk-1663) PuTTY paste mode

This commit is contained in:
Stephen Boddy 2015-11-30 22:23:23 +01:00
parent 9f09d9c334
commit a04ffed850
5 changed files with 52 additions and 12 deletions

View File

@ -136,6 +136,10 @@ 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 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

View File

@ -123,6 +123,7 @@ DEFAULTS = {
'always_split_with_profile': False,
'title_use_system_font' : True,
'title_font' : 'Sans 9',
'putty_paste_style' : False,
},
'keybindings': {
'zoom_in' : '<Control>plus',

View File

@ -576,7 +576,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 +649,22 @@
<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="always_split_with_profile">
<property name="label" translatable="yes">Re-use profiles for new terminals</property>
@ -662,8 +678,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">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
@ -680,8 +696,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">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
@ -732,8 +748,8 @@
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</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>
@ -751,8 +767,8 @@
</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>

View File

@ -421,6 +421,9 @@ class PrefsEditor:
# Copy on selection
widget = guiget('copy_on_selection')
widget.set_active(self.config['copy_on_selection'])
# Putty paste style
widget = guiget('putty_paste_style')
widget.set_active(self.config['putty_paste_style'])
# Rewrap on resize
widget = guiget('rewrap_on_resize_checkbutton')
widget.set_active(self.config['rewrap_on_resize'])
@ -710,6 +713,11 @@ 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_cursor_blink_toggled(self, widget):
"""Cursor blink setting changed"""
self.config['cursor_blink'] = widget.get_active()

View File

@ -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
@ -918,17 +922,24 @@ class Terminal(Gtk.VBox):
# Suppress double-click behavior
return True
if event.button == 1:
if self.config['putty_paste_style']:
btn_to_paste = self.MOUSEBUTTON_RIGHT
btn_to_context_menu = self.MOUSEBUTTON_MIDDLE
else:
btn_to_paste = self.MOUSEBUTTON_MIDDLE
btn_to_context_menu = self.MOUSEBUTTON_RIGHT
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 == btn_to_paste:
# middleclick should paste the clipboard
self.paste_clipboard(True)
return(True)
elif event.button == 3:
elif event.button == btn_to_context_menu:
# 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: