diff options
author | Ari Kast | 2020-08-12 03:01:13 +0000 |
---|---|---|
committer | Ari Kast | 2020-08-12 03:44:53 +0000 |
commit | fd04502442ae5db261da01b582741dc8006bb8d7 (patch) | |
tree | b532ba13293426eb8d75d2a38fde4411059dd579 | |
parent | 0b6cda811af728ef204048b302c135c89f061adf (diff) | |
download | eclipse.platform.text-fd04502442ae5db261da01b582741dc8006bb8d7.tar.gz eclipse.platform.text-fd04502442ae5db261da01b582741dc8006bb8d7.tar.xz eclipse.platform.text-fd04502442ae5db261da01b582741dc8006bb8d7.zip |
Bug 72773: store and navigate multiple edit history locationsY20200812-1200I20200812-1800I20200812-0710
update key mapping
Change-Id: Icbe3e8a2c37b71028afc401b297b9c6d244e5129
6 files changed, 34 insertions, 20 deletions
diff --git a/org.eclipse.ui.workbench.texteditor/plugin.xml b/org.eclipse.ui.workbench.texteditor/plugin.xml index 093dffa0316..6f1263c103b 100644 --- a/org.eclipse.ui.workbench.texteditor/plugin.xml +++ b/org.eclipse.ui.workbench.texteditor/plugin.xml @@ -597,12 +597,17 @@ commandId="org.eclipse.ui.edit.text.gotoLastEditPosition" contextId="org.eclipse.ui.contexts.window" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" - sequence="CTRL+Q"/> <!-- Command+Q is quit on carbon, so don't overwrite it --> + sequence="CTRL+Q"/> + <key + commandId="org.eclipse.ui.edit.text.gotoLastEditPosition" + contextId="org.eclipse.ui.contexts.window" + schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" + sequence="M3+CTRL+ARROW_LEFT"/> <key commandId="org.eclipse.ui.edit.text.gotoNextEditPosition" contextId="org.eclipse.ui.contexts.window" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" - sequence="M3+CTRL+Q"/> + sequence="M3+CTRL+ARROW_RIGHT"/> <key commandId="org.eclipse.ui.edit.text.smartEnter" contextId="org.eclipse.ui.textEditorScope" diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java index a96686c6371..422a2a69a63 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java @@ -25,8 +25,8 @@ import java.lang.reflect.Array; * location in linear mode, if history size is N, then calling * goBackward N times brings you to the beginning, after which * additional calls to goBackward will have no effect until either - * goForward is called or a new entry is added Both linear and ring mode - * overwrite history as needed when buffer is full + * goForward is called or a new entry is added. Both linear and ring + * mode overwrite history as needed when buffer is full * @param <T> the type of the object instances being tracked in history * * @since 3.15 diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/TextEditorPlugin.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/TextEditorPlugin.java index b999befd10d..b2ff94f4a69 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/TextEditorPlugin.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/TextEditorPlugin.java @@ -54,14 +54,15 @@ public final class TextEditorPlugin extends AbstractUIPlugin implements IRegistr private static TextEditorPlugin fgPlugin; /** - * tracks whether cursor has moved since fEditPositionHistory was used to - * return to prior location. If cursor has moved, then goto last edit - * location simply returns to last edit location. But if cursor has not - * moved, that means the command was invoked twice in a row without - * intervening other actions; in that case we start traversing backward thru - * history to prior edit locations + * tracks whether cursor has moved since fEditPositionHistory was used to return + * to prior or next location. If cursor has moved, then goto last edit location + * simply returns to last edit location. But if cursor has not moved, that means + * the command was invoked twice in a row without intervening other actions; in + * that case we are in a traversal state of BACKWARD (or FORWARD), so we start + * traversing backward (or forward) through history to prior (or next) edit + * locations. */ - boolean movedSinceLastEditRecall = true; + TraversalDirection fEditHistoryTraversalDirection = TraversalDirection.NONE; // an ordered history of prior edit positions private HistoryTracker<EditPosition> fEditPositionHistory = new HistoryTracker<>( @@ -123,12 +124,12 @@ public final class TextEditorPlugin extends AbstractUIPlugin implements IRegistr */ public static final String REFERENCE_PROVIDER_EXTENSION_POINT= "quickDiffReferenceProvider"; //$NON-NLS-1$ - public boolean isMovedSinceLastEditRecall() { - return movedSinceLastEditRecall; + public TraversalDirection getEditHistoryTraversalDirection() { + return fEditHistoryTraversalDirection; } - public void setMovedSinceLastEditRecall(boolean movedSinceLastEditRecall) { - this.movedSinceLastEditRecall = movedSinceLastEditRecall; + public void setEditHistoryTraversalDirection(TraversalDirection direction) { + this.fEditHistoryTraversalDirection = direction; } public HistoryTracker<EditPosition> getEditPositionHistory() { @@ -280,4 +281,7 @@ public final class TextEditorPlugin extends AbstractUIPlugin implements IRegistr return fCodeMiningProviderRegistry; } + public static enum TraversalDirection { + NONE, BACKWARD, FORWARD; + } } diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java index 9835d97a60c..840af786ac9 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java @@ -6619,7 +6619,8 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit * @since 3.15 */ private void handleCursorPositionChangedWrapper() { - TextEditorPlugin.getDefault().setMovedSinceLastEditRecall(true); + TextEditorPlugin.getDefault() + .setEditHistoryTraversalDirection(TextEditorPlugin.TraversalDirection.NONE); handleCursorPositionChanged(); } diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoLastEditPositionAction.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoLastEditPositionAction.java index effdbea938b..7fe3cc232ab 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoLastEditPositionAction.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoLastEditPositionAction.java @@ -69,7 +69,8 @@ public class GotoLastEditPositionAction extends Action implements IWorkbenchWind @Override public void run() { - if (!TextEditorPlugin.getDefault().isMovedSinceLastEditRecall()) { + if (TextEditorPlugin.TraversalDirection.BACKWARD == TextEditorPlugin.getDefault() + .getEditHistoryTraversalDirection()) { TextEditorPlugin.getDefault().backtrackEditPosition(); } EditPosition editPosition = TextEditorPlugin.getDefault().getLastEditPosition(); @@ -126,7 +127,8 @@ public class GotoLastEditPositionAction extends Action implements IWorkbenchWind provider.setSelection(new TextSelection(pos.offset, pos.length)); } } finally { - TextEditorPlugin.getDefault().setMovedSinceLastEditRecall(false); + TextEditorPlugin.getDefault() + .setEditHistoryTraversalDirection(TextEditorPlugin.TraversalDirection.BACKWARD); } } diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoNextEditPositionAction.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoNextEditPositionAction.java index 587a0644a3b..23ff43f663c 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoNextEditPositionAction.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/GotoNextEditPositionAction.java @@ -72,7 +72,8 @@ public class GotoNextEditPositionAction extends Action implements IWorkbenchWind @Override public void run() { - if (!TextEditorPlugin.getDefault().isMovedSinceLastEditRecall()) { + if (TextEditorPlugin.TraversalDirection.FORWARD == TextEditorPlugin.getDefault() + .getEditHistoryTraversalDirection()) { TextEditorPlugin.getDefault().advanceEditPosition(); } EditPosition editPosition = TextEditorPlugin.getDefault().getNextEditPosition(); @@ -124,7 +125,8 @@ public class GotoNextEditPositionAction extends Action implements IWorkbenchWind provider.setSelection(new TextSelection(pos.offset, pos.length)); } } finally { - TextEditorPlugin.getDefault().setMovedSinceLastEditRecall(false); + TextEditorPlugin.getDefault() + .setEditHistoryTraversalDirection(TextEditorPlugin.TraversalDirection.FORWARD); } } |