Bug 72773: store and navigate multiple edit history locations
update key mapping
Change-Id: Icbe3e8a2c37b71028afc401b297b9c6d244e5129
diff --git a/org.eclipse.ui.workbench.texteditor/plugin.xml b/org.eclipse.ui.workbench.texteditor/plugin.xml
index 093dffa..6f1263c 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 a96686c..422a2a6 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 @@
* 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 b999bef..b2ff94f 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 @@
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 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 @@
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 9835d97..840af78 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 @@
* @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 effdbea..7fe3cc2 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 @@
@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 @@
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 587a064..23ff43f 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 @@
@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 @@
provider.setSelection(new TextSelection(pos.offset, pos.length));
}
} finally {
- TextEditorPlugin.getDefault().setMovedSinceLastEditRecall(false);
+ TextEditorPlugin.getDefault()
+ .setEditHistoryTraversalDirection(TextEditorPlugin.TraversalDirection.FORWARD);
}
}