*/
private long lastUpdateTime = 0;
+ /**
+ * If true, hide the mouse after typing a keystroke.
+ */
+ private boolean hideMouseWhenTyping = true;
+
+ /**
+ * If true, the mouse should not be displayed because a keystroke was
+ * typed.
+ */
+ private boolean typingHidMouse = false;
+
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
// ------------------------------------------------------------------------
this.closeOnExit = closeOnExit;
+ if (System.getProperty("jexer.TTerminal.shell") != null) {
+ String shell = System.getProperty("jexer.TTerminal.shell");
+ if (shell.trim().startsWith("ptypipe")) {
+ ptypipe = true;
+ }
+ spawnShell(shell.split("\\s+"));
+ return;
+ }
+
String cmdShellWindows = "cmd.exe";
// You cannot run a login shell in a bare Process interactively, due
*/
@Override
public void draw() {
-
int width = getDisplayWidth();
boolean syncEmulator = false;
- if ((System.currentTimeMillis() - lastUpdateTime > 125)
+ if ((System.currentTimeMillis() - lastUpdateTime >= 25)
&& (dirty == true)
) {
// Too much time has passed, draw it all.
continue;
}
- Cell newCell = new Cell();
- newCell.setTo(ch);
+ Cell newCell = new Cell(ch);
boolean reverse = line.isReverseColor() ^ ch.isReverse();
newCell.setReverse(false);
if (reverse) {
*/
@Override
public void onKeypress(final TKeypressEvent keypress) {
+ if (hideMouseWhenTyping) {
+ typingHidMouse = true;
+ }
// Scrollback up/down
if (keypress.equals(kbShiftPgUp)
// UGLY HACK TIME! cmd.exe needs CRLF, not just CR, so if
// this is kBEnter then also send kbCtrlJ.
- if (System.getProperty("os.name").startsWith("Windows")) {
- if (keypress.equals(kbEnter)) {
+ if (keypress.equals(kbEnter)) {
+ if (System.getProperty("os.name").startsWith("Windows")
+ && (System.getProperty("jexer.TTerminal.cmdHack",
+ "true").equals("true"))
+ ) {
emulator.addUserEvent(new TKeypressEvent(kbCtrlJ));
}
}
return;
}
+ if (hideMouseWhenTyping) {
+ typingHidMouse = false;
+ }
+
// If the emulator is tracking mouse buttons, it needs to see wheel
// events.
if (emulator.getMouseProtocol() == ECMA48.MouseProtocol.OFF) {
return;
}
+ if (hideMouseWhenTyping) {
+ typingHidMouse = false;
+ }
+
if (mouseOnEmulator(mouse)) {
mouse.setX(mouse.getX() - 1);
mouse.setY(mouse.getY() - 1);
return;
}
+ if (hideMouseWhenTyping) {
+ typingHidMouse = false;
+ }
+
if (mouseOnEmulator(mouse)) {
mouse.setX(mouse.getX() - 1);
mouse.setY(mouse.getY() - 1);
// TTerminalWindow --------------------------------------------------------
// ------------------------------------------------------------------------
+ /**
+ * Returns true if this window does not want the application-wide mouse
+ * cursor drawn over it.
+ *
+ * @return true if this window does not want the application-wide mouse
+ * cursor drawn over it
+ */
+ @Override
+ public boolean hasHiddenMouse() {
+ return (super.hasHiddenMouse() || typingHidMouse);
+ }
+
/**
* Claim the keystrokes the emulator will need.
*/
// Pass the correct text cell width/height to the emulator
emulator.setTextWidth(getScreen().getTextWidth());
emulator.setTextHeight(getScreen().getTextHeight());
+
+ // Hide mouse when typing option
+ if (System.getProperty("jexer.TTerminal.hideMouseWhenTyping",
+ "true").equals("false")) {
+
+ hideMouseWhenTyping = false;
+ }
}
/**
BufferedImage image;
if (line.getDoubleHeight() == 1) {
// Double-height top half: don't draw the underline.
- Cell newCell = new Cell();
- newCell.setTo(cell);
+ Cell newCell = new Cell(cell);
newCell.setUnderline(false);
image = doubleFont.getImage(newCell, textWidth * 2, textHeight * 2,
cursorBlinkVisible);
// Now that we have the double-wide glyph drawn, copy the right
// pieces of it to the cells.
- Cell left = new Cell();
- Cell right = new Cell();
- left.setTo(cell);
- right.setTo(cell);
+ Cell left = new Cell(cell);
+ Cell right = new Cell(cell);
right.setChar(' ');
BufferedImage leftImage = null;
BufferedImage rightImage = null;