Fixed: [Issue 14] Option to disable blinking cursor
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java
index bf03fca..e0322a1 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/AbstractPreferencesChangeListener.java
@@ -27,6 +27,9 @@
if (CUSTOM_FONT_DATA.equals(property)) {
onFontChanged();
}
+ if (USE_BLINKING_CURSOR.equals(property)) {
+ onUseBlinkingCursorChanged();
+ }
}
protected abstract void onBufferLineCountChanged();
@@ -34,4 +37,6 @@
protected abstract void onColorChanged();
protected abstract void onFontChanged();
+
+ protected abstract void onUseBlinkingCursorChanged();
}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java
index 0942ce9..7dca06a 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/ColorsAndFontsPreferences.java
@@ -19,7 +19,6 @@
* @author alruiz@google.com (Alex Ruiz)
*/
public class ColorsAndFontsPreferences {
-
public static RGB background() {
return getColor(preferenceStore(), BACKGROUND_COLOR);
}
@@ -35,4 +34,8 @@
public static FontData customFontData() {
return getFontData(preferenceStore(), CUSTOM_FONT_DATA);
}
+
+ public static boolean useBlinkingCursor() {
+ return preferenceStore().getBoolean(USE_BLINKING_CURSOR);
+ }
}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
index 63d42a9..213eb09 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
@@ -26,6 +26,7 @@
public static String previewPrompt;
public static String textFontLink;
public static String unableToLoadPreviewContent;
+ public static String useBlinkingCursor;
public static String useCustomFont;
public static String useTextFont;
public static String warnOnClose;
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
index d62814b..55d4de9 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
@@ -10,6 +10,7 @@
previewPrompt=Preview:
textFontLink=Eclipse's "Text Font" can be configured on the <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> preference page.
unableToLoadPreviewContent=Unable to load preview content
+useBlinkingCursor=Use blinking cursor
useCustomFont=Use custom font
useTextFont=Use Eclipse's "Text Font"
warnOnClose=Warn on close
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
index 74dd573..8b045e5 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
@@ -27,6 +27,7 @@
setDefault(BACKGROUND_COLOR, new RGB(0, 0, 0));
setDefault(FOREGROUND_COLOR, new RGB(229, 229, 229));
preferenceStore().setDefault(USE_CUSTOM_FONT, false);
+ preferenceStore().setDefault(USE_BLINKING_CURSOR, true);
PreferenceConverter.setDefault(preferenceStore(), CUSTOM_FONT_DATA, JFaceResources.getTextFont().getFontData());
}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
index 7983517..541a43f 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
@@ -19,6 +19,7 @@
static final String FOREGROUND_COLOR = "foregroundColor";
static final String USE_CUSTOM_FONT = "useCustomFont";
static final String CUSTOM_FONT_DATA = "customFontData";
+ static final String USE_BLINKING_CURSOR = "useBlinkingCursor";
private PreferenceNames() {}
}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
index b386521..f72217e 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
@@ -24,6 +24,8 @@
* @author alruiz@google.com (Alex Ruiz)
*/
public class RootPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+ public RootPreferencePage() {
+ }
private static final int MINIMUM_BUFFER_LINE_COUNT = 100;
private static final int MAXIMUM_BUFFER_LINE_COUNT = 50000;
private static final String INVALID_BUFFER_LINE_COUNT_MESSAGE =
@@ -32,6 +34,7 @@
private Text txtBufferLineCount;
private Button btnCloseViewOnExit;
private Button btnWarnOnClose;
+ private Button btnUseBlinkingCursor;
private int newBufferLineCount;
@@ -80,6 +83,10 @@
btnWarnOnClose.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnWarnOnClose.setText(warnOnClose);
+ btnUseBlinkingCursor = new Button(contents, SWT.CHECK);
+ btnUseBlinkingCursor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
+ btnUseBlinkingCursor.setText(useBlinkingCursor);
+
updateContents();
return contents;
}
@@ -93,12 +100,14 @@
txtBufferLineCount.setText(getPreferenceStore().getString(BUFFER_LINE_COUNT));
btnCloseViewOnExit.setSelection(getPreferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT));
btnWarnOnClose.setSelection(getPreferenceStore().getBoolean(WARN_ON_CLOSE));
+ btnUseBlinkingCursor.setSelection(getPreferenceStore().getBoolean(USE_BLINKING_CURSOR));
}
@Override public boolean performOk() {
getPreferenceStore().setValue(BUFFER_LINE_COUNT, newBufferLineCount);
getPreferenceStore().setValue(CLOSE_VIEW_ON_EXIT, btnCloseViewOnExit.getSelection());
getPreferenceStore().setValue(WARN_ON_CLOSE, btnWarnOnClose.getSelection());
+ getPreferenceStore().setValue(USE_BLINKING_CURSOR, btnUseBlinkingCursor.getSelection());
return true;
}
@@ -106,5 +115,6 @@
txtBufferLineCount.setText(getPreferenceStore().getDefaultString(BUFFER_LINE_COUNT));
btnCloseViewOnExit.setSelection(getPreferenceStore().getDefaultBoolean(CLOSE_VIEW_ON_EXIT));
btnWarnOnClose.setSelection(getPreferenceStore().getDefaultBoolean(WARN_ON_CLOSE));
+ btnUseBlinkingCursor.setSelection(getPreferenceStore().getDefaultBoolean(USE_BLINKING_CURSOR));
}
}
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 2bfac69..bdc8f33 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
@@ -110,8 +110,7 @@
updatePartName(title);
}
- @Override public void setState(TerminalState state) {
- }
+ @Override public void setState(TerminalState state) {}
});
IViewSite viewSite = getViewSite();
preferencesChangeListener = new AbstractPreferencesChangeListener() {
@@ -126,6 +125,10 @@
@Override protected void onFontChanged() {
updateFont();
}
+
+ @Override protected void onUseBlinkingCursorChanged() {
+ updateUsageOfBlinkingCursor();
+ }
};
preferenceStore().addPropertyChangeListener(preferencesChangeListener);
updateBufferLineCount();
@@ -179,6 +182,10 @@
setFont(terminalFont());
}
+ private void updateUsageOfBlinkingCursor() {
+ terminalWidget.setBlinkingCursor(useBlinkingCursor());
+ }
+
private Font terminalFont() {
if (useCustomFont()) {
return new Font(Display.getDefault(), customFontData());
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
index 1bb106d..3be64a7 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
@@ -129,6 +129,10 @@
terminalControl.setScrollLockOn(enabled);
}
+ void setBlinkingCursor(boolean useBlinkingCursor) {
+ terminalControl.setBlinkingCursor(useBlinkingCursor);
+ }
+
private static class TerminalListener implements ITerminalListener {
ITerminalListener delegate;
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
index 8de88a1..c810f85 100644
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
+++ b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
@@ -849,4 +849,8 @@
public void setColors(RGB background, RGB foreground) {
textControl.setColors(background, foreground);
}
+
+ public void setBlinkingCursor(boolean useBlinkingCursor) {
+ textControl.setBlinkingCursor(useBlinkingCursor);
+ }
}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
index 5617d05..0afee93 100644
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
+++ b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
@@ -33,11 +33,12 @@
private int selectionEndColumn;
private ITerminalTextDataSnapshot selectionSnapshot;
private String currentSelection = "";
- /**
- * do not update while update is running
- */
+
+ // do not update while update is running
boolean inUpdate;
+
private int columns;
+ private boolean useBlinkingCursor;
public AbstractTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
this.snapshot = snapshot;
@@ -126,6 +127,11 @@
return showCursor && cursorIsEnabled;
}
+ @Override public void setBlinkingCursor(boolean useBlinkingCursor) {
+ this.useBlinkingCursor = useBlinkingCursor;
+ updateCursor();
+ }
+
// TODO: should be called regularly to draw an update of the blinking cursor?
private void updateCursor() {
if (!cursorIsEnabled) {
@@ -158,20 +164,22 @@
// Draw the new cursor
fireCellRangeChanged(this.cursorColumn, this.cursorLine, 1, 1);
} else {
- long time = System.currentTimeMillis();
- // TODO Make the cursor blink time customizable.
- if (time - cursorTime > 500) {
- showCursor = !showCursor;
- cursorTime = time;
- // On some windows machines, there is some leftover when updating the cursor.
- // https://bugs.eclipse.org/bugs/show_bug.cgi?id=206363
- int col = this.cursorColumn;
- int width = 2;
- if (col > 0) {
- col--;
- width++;
+ if (useBlinkingCursor) {
+ long time = System.currentTimeMillis();
+ // TODO Make the cursor blink time customizable.
+ if (time - cursorTime > 500) {
+ showCursor = !showCursor;
+ cursorTime = time;
+ // On some windows machines, there is some leftover when updating the cursor.
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=206363
+ int col = this.cursorColumn;
+ int width = 2;
+ if (col > 0) {
+ col--;
+ width++;
+ }
+ fireCellRangeChanged(col, this.cursorLine, width, 1);
}
- fireCellRangeChanged(col, this.cursorLine, width, 1);
}
}
}
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
index ffd6ace..1f62e76 100644
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
+++ b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
@@ -54,4 +54,6 @@
boolean hasLineSelection(int line);
String getSelectedText();
+
+ void setBlinkingCursor(boolean useBlinkingCursor);
}
\ No newline at end of file
diff --git a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
index a7f46b3..bfafd3c 100644
--- a/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
+++ b/com.google.eclipse.tm.terminal/src/com/google/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
@@ -18,7 +18,7 @@
* CellRenderer is responsible for painting the cell.
*/
public class TextCanvas extends GridCanvas {
- protected final ITextCanvasModel cellCanvasModel;
+ private final ITextCanvasModel cellCanvasModel;
private final ILinelRenderer cellRenderer;
private boolean scrollLockOn;
private Point draggingStart;
@@ -392,4 +392,8 @@
@Override public Point screenPointToCell(int x, int y) {
return super.screenPointToCell(x, y);
}
+
+ public void setBlinkingCursor(boolean useBlinkingCursor) {
+ cellCanvasModel.setBlinkingCursor(useBlinkingCursor);
+ }
}