Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Weninger2013-08-01 14:44:04 +0000
committerUwe Stieber2013-08-01 14:44:47 +0000
commit092531d62dc4a53acef4e383fd1c71ec49eae67f (patch)
tree0f3525aeaef59931aaffb9268f91d35d912c6b6c
parent947e2e2b102e1146f6857de051892667e90a54be (diff)
downloadorg.eclipse.tm-092531d62dc4a53acef4e383fd1c71ec49eae67f.tar.gz
org.eclipse.tm-092531d62dc4a53acef4e383fd1c71ec49eae67f.tar.xz
org.eclipse.tm-092531d62dc4a53acef4e383fd1c71ec49eae67f.zip
Terminal: Added support for Copy/Paste shortcutsS3_5_1RC2S3_5_1RC1
Signed-off-by: Max Weninger <max.weninger@windriver.com>
-rw-r--r--terminal/plugins/org.eclipse.tm.terminal/plugin.properties1
-rw-r--r--terminal/plugins/org.eclipse.tm.terminal/plugin.xml35
-rw-r--r--terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java2
-rw-r--r--terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java2
-rw-r--r--terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java72
-rw-r--r--terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java29
6 files changed, 132 insertions, 9 deletions
diff --git a/terminal/plugins/org.eclipse.tm.terminal/plugin.properties b/terminal/plugins/org.eclipse.tm.terminal/plugin.properties
index 2120813cb..d7efc1837 100644
--- a/terminal/plugins/org.eclipse.tm.terminal/plugin.properties
+++ b/terminal/plugins/org.eclipse.tm.terminal/plugin.properties
@@ -27,6 +27,7 @@ terminal.context.description=Override ALT+x menu access keys
terminal.insertion.description=Terminal view insertion
terminal.insertion.name=Terminal view insert
terminal.insertion.category.name=Terminal view commands
+terminal.view.insertion.description = Terminal view commands
terminal.preferences.name = Terminal
terminal.font.description = The font for the terminal console.
diff --git a/terminal/plugins/org.eclipse.tm.terminal/plugin.xml b/terminal/plugins/org.eclipse.tm.terminal/plugin.xml
index 1115912c7..658468033 100644
--- a/terminal/plugins/org.eclipse.tm.terminal/plugin.xml
+++ b/terminal/plugins/org.eclipse.tm.terminal/plugin.xml
@@ -21,10 +21,16 @@
description="%terminal.context.description"
id="org.eclipse.tm.terminal.TerminalContext"
/>
+ <context
+ name="%terminal.context.name"
+ description="%terminal.context.description"
+ parentId="org.eclipse.ui.contexts.window"
+ id="org.eclipse.tm.terminal.EditContext" />
+ </extension>
+
+ <extension point="org.eclipse.help.contexts">
+ <contexts file="HelpContexts.xml"/>
</extension>
- <extension point="org.eclipse.help.contexts">
- <contexts file="HelpContexts.xml"/>
- </extension>
<extension
point="org.eclipse.ui.commands">
<!-- Dummy commands for bindings, see below -->
@@ -32,11 +38,24 @@
categoryId="org.eclipse.tm.terminal.category1"
id="org.eclipse.tm.terminal.command1"
name="%terminal.insertion.name"/>
+ <command
+ categoryId="org.eclipse.tm.terminal.category1"
+ id="org.eclipse.tm.terminal.copy"
+ name="Copy"/>
+ <command
+ categoryId="org.eclipse.tm.terminal.category1"
+ id="org.eclipse.tm.terminal.paste"
+ name="Paste"/>
<category
description="%terminal.view.insertion.description"
id="org.eclipse.tm.terminal.category1"
name="%terminal.insertion.category.name"/>
</extension>
+
+ <extension point="org.eclipse.help.contexts">
+ <contexts file="HelpContexts.xml"/>
+ </extension>
+
<extension
point="org.eclipse.ui.bindings">
<!--
@@ -106,6 +125,16 @@
contextId="org.eclipse.tm.terminal.TerminalContext"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="Alt+W"/> <!-- Window -->
+ <key
+ commandId="org.eclipse.tm.terminal.copy"
+ contextId="org.eclipse.tm.terminal.EditContext"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="CTRL+SHIFT+C"/>
+ <key
+ commandId="org.eclipse.tm.terminal.paste"
+ contextId="org.eclipse.tm.terminal.EditContext"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="CTRL+SHIFT+V"/>
</extension>
<extension
diff --git a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java
index dabf91dfc..a21f46b1e 100644
--- a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java
+++ b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java
@@ -25,6 +25,7 @@ import org.eclipse.ui.PlatformUI;
public class TerminalActionCopy extends AbstractTerminalAction {
public TerminalActionCopy() {
super(TerminalActionCopy.class.getName());
+ setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.COPY, ActionMessages.COPY, si
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
@@ -34,6 +35,7 @@ public class TerminalActionCopy extends AbstractTerminalAction {
public TerminalActionCopy(ITerminalViewControl target) {
super(target, TerminalActionCopy.class.getName());
+ setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.COPY, ActionMessages.COPY, si
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
diff --git a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java
index 3c33be2be..441e8033e 100644
--- a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java
+++ b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java
@@ -29,6 +29,7 @@ import org.eclipse.ui.PlatformUI;
public class TerminalActionPaste extends AbstractTerminalAction {
public TerminalActionPaste() {
super(TerminalActionPaste.class.getName());
+ setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.PASTE, ActionMessages.PASTE, si
.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), si
@@ -38,6 +39,7 @@ public class TerminalActionPaste extends AbstractTerminalAction {
public TerminalActionPaste(ITerminalViewControl target) {
super(target, TerminalActionPaste.class.getName());
+ setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.PASTE, ActionMessages.PASTE, si
.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), si
diff --git a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
new file mode 100644
index 000000000..2fd6b68d4
--- /dev/null
+++ b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tm.internal.terminal.emulator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.bindings.TriggerSequence;
+import org.eclipse.jface.bindings.keys.KeySequence;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.bindings.keys.SWTKeySupport;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.keys.IBindingService;
+
+class EditActionAccelerators {
+ private static final String COPY_COMMAND_ID = "org.eclipse.tm.terminal.copy";
+ private static final String PASTE_COMMAND_ID = "org.eclipse.tm.terminal.paste";
+
+ private final Map commandIdsByAccelerator = new HashMap();
+
+ private void load() {
+ addAccelerator(COPY_COMMAND_ID);
+ addAccelerator(PASTE_COMMAND_ID);
+ }
+
+ private void addAccelerator(String commandId) {
+ KeySequence keySequence = bindingFor(commandId);
+ if (keySequence == null) {
+ return;
+ }
+ KeyStroke[] keyStrokes = keySequence.getKeyStrokes();
+ if (keyStrokes.length != 0) {
+ int accelerator = SWTKeySupport.convertKeyStrokeToAccelerator(keyStrokes[0]);
+ commandIdsByAccelerator.put(new Integer(accelerator), commandId);
+ }
+ }
+
+ private static KeySequence bindingFor(String commandId) {
+ IBindingService bindingService = bindingService();
+ TriggerSequence binding = bindingService.getBestActiveBindingFor(commandId);
+ if (binding instanceof KeySequence) {
+ KeySequence keySequence = (KeySequence) binding;
+ return keySequence;
+ }
+ return null;
+ }
+
+ private static IBindingService bindingService() {
+ return (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+ }
+
+ boolean isCopyAction(int accelerator) {
+ return isMatchingAction(accelerator, COPY_COMMAND_ID);
+ }
+
+ boolean isPasteAction(int accelerator) {
+ return isMatchingAction(accelerator, PASTE_COMMAND_ID);
+ }
+
+ private boolean isMatchingAction(int accelerator, String commandId) {
+ if (commandIdsByAccelerator.isEmpty()) {
+ load();
+ }
+ return commandId.equals(commandIdsByAccelerator.get(new Integer(accelerator)));
+ }
+}
diff --git a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
index ae4dc697d..f521c300f 100644
--- a/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
+++ b/terminal/plugins/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
@@ -47,6 +47,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.bindings.keys.SWTKeySupport;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
@@ -65,7 +66,6 @@ import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
@@ -127,7 +127,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
private ITerminalConnector fConnector;
private final ITerminalConnector[] fConnectors;
private final boolean fUseCommonPrefs;
-
+
PipedInputStream fInputStream;
private static final String defaultEncoding = new java.io.InputStreamReader(new java.io.ByteArrayInputStream(new byte[0])).getEncoding();
private String fEncoding = defaultEncoding;
@@ -139,6 +139,8 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
private final ITerminalTextData fTerminalModel;
+ private final EditActionAccelerators editActionAccelerators = new EditActionAccelerators();
+
/**
* Listens to changes in the preferences
*/
@@ -157,7 +159,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
}
}
};
-
+
/**
* Is protected by synchronize on this
*/
@@ -166,13 +168,13 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
this(target, wndParent, connectors, false);
}
-
+
/**
* Instantiate a Terminal widget.
* @param target Callback for notifying the owner of Terminal state changes.
* @param wndParent The Window parent to embed the Terminal in.
* @param connectors Provided connectors.
- * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings
+ * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings
* from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page.
* Otherwise, clients need to maintain settings themselves.
* @since 3.2
@@ -620,7 +622,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
}
private void onTerminalFontChanged() {
- // set the font for all
+ // set the font for all
setFont(ITerminalConstants.FONT_DEFINITION);
}
@@ -790,6 +792,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
}
protected class TerminalFocusListener implements FocusListener {
private IContextActivation contextActivation = null;
+ private IContextActivation contextActivation1 = null;
protected TerminalFocusListener() {
super();
@@ -815,6 +818,9 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
.getWorkbench().getAdapter(IContextService.class);
contextActivation = contextService
.activateContext("org.eclipse.tm.terminal.TerminalContext"); //$NON-NLS-1$
+ contextActivation1 = contextService
+ .activateContext("org.eclipse.tm.terminal.EditContext"); //$NON-NLS-1$
+
}
public void focusLost(FocusEvent event) {
@@ -829,6 +835,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
IContextService contextService = (IContextService) PlatformUI
.getWorkbench().getAdapter(IContextService.class);
contextService.deactivateContext(contextActivation);
+ contextService.deactivateContext(contextActivation1);
}
}
@@ -837,6 +844,16 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
if (getState()==TerminalState.CONNECTING)
return;
+ int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
+ if (editActionAccelerators.isCopyAction(accelerator)) {
+ copy();
+ return;
+ }
+ if (editActionAccelerators.isPasteAction(accelerator)) {
+ paste();
+ return;
+ }
+
// We set the event.doit to false to prevent any further processing of this
// key event. The only reason this is here is because I was seeing the F10
// key both send an escape sequence (due to this method) and switch focus

Back to the top