Fixed tracking of last command when wrapped lines are present.
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/LastCommandTracker.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/LastCommandTracker.java
index f640fe0..c784365 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/LastCommandTracker.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/LastCommandTracker.java
@@ -20,7 +20,8 @@
* @author alruiz@google.com (Alex Ruiz)
*/
class LastCommandTracker extends KeyAdapter implements IStreamListener {
- private static final String CRLF = "\r\n";
+ private static final String CR_LF_CR = "\r\n\r";
+ private static final String CR_LF = "\r\n";
private static final Pattern WHITE_SPACE_PATTERN = Pattern.compile("[\\s]+");
private final List<String> words = new ArrayList<String>();
@@ -42,10 +43,15 @@
return;
}
String word = text;
- int index = text.lastIndexOf(CRLF);
+ if (word.endsWith(CR_LF_CR)) {
+ // this happens before a line gets wrapped
+ word = word.substring(0, charCount - CR_LF_CR.length());
+ }
+ // this happens after a line gets wrapped
+ int index = word.lastIndexOf(CR_LF);
if (index != -1) {
words.clear();
- word = text.substring(index + CRLF.length(), charCount);
+ word = word.substring(index + CR_LF.length(), charCount);
}
if (!word.isEmpty()) {
words.add(word);
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
index 62ecdb6..14df3e5 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
@@ -40,7 +40,7 @@
/**
* @author alruiz@google.com (Alex Ruiz)
*/
-public class TerminalView extends ViewPart implements LifeCycleListener {
+public class TerminalView extends ViewPart {
private static final String SCROLL_LOCK_ENABLED = "scrollLock";
private static final String TITLE_STATE_TYPE = "title";
private static final String WORKING_DIRECTORY_STATE_TYPE = "workingDirectory";
@@ -75,18 +75,6 @@
}
}
- @Override public void executionFinished() {
- if (closeViewOnExit() && terminalWidget != null && !terminalWidget.isDisposed()) {
- // must run in UI thread.
- terminalWidget.getDisplay().asyncExec(new Runnable() {
- @Override public void run() {
- IWorkbenchPartSite site = getSite();
- site.getPage().hideView((IViewPart) site.getPart());
- }
- });
- }
- }
-
@Override public void init(IViewSite site, IMemento memento) throws PartInitException {
super.init(site, memento);
savedState = memento;
@@ -105,13 +93,17 @@
@Override public void createPartControl(Composite parent) {
terminalWidget = new TerminalWidget(parent, SWT.NONE);
- terminalWidget.setLifeCycleListener(this);
terminalWidget.setCommandListener(new CommandListener() {
- @Override public void commandIssued(final String command) {
+ @Override public void commandIssued(String command) {
String title = String.format(VIEW_TITLE_FORMAT, workingDirectory.lastSegment(), command);
updatePartName(title);
}
});
+ terminalWidget.setLifeCycleListener(new LifeCycleListener() {
+ @Override public void executionFinished() {
+ closeViewOnExitIfPossible();
+ }
+ });
terminalWidget.setTerminalListener(new ITerminalListener() {
@Override public void setTerminalTitle(final String title) {
updatePartName(title);
@@ -162,6 +154,18 @@
enableScrollLock(scrollLockAction.isChecked());
}
+ private void closeViewOnExitIfPossible() {
+ if (closeViewOnExit() && terminalWidget != null && !terminalWidget.isDisposed()) {
+ // must run in UI thread.
+ terminalWidget.getDisplay().asyncExec(new Runnable() {
+ @Override public void run() {
+ IWorkbenchPartSite site = getSite();
+ site.getPage().hideView((IViewPart) site.getPart());
+ }
+ });
+ }
+ }
+
private void updateColors() {
terminalWidget.setColors(background(), foreground());
}