/*
* XTermNative.java
*
* Copyright (C) 2009-16 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.views.terminal.xterm;
import org.rstudio.core.client.CommandWithArg;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
/**
* <code>JavaScriptObject</code> wrapper for xterm.js
*/
public class XTermNative extends JavaScriptObject
{
// Required by JavaScriptObject subclasses
protected XTermNative()
{
}
/**
* Remove event handlers and detach from parent node.
*/
public final native void destroy() /*-{
this.destroy();
}-*/;
/**
* Fit the terminal to available space.
*/
public final native void fit() /*-{
this.fit();
}-*/;
/**
* Write a line of output to the terminal, appending CR/LF.
* @param data String to write
*/
public final native void writeln(String data) /*-{
this.writeln(data);
}-*/;
/**
* Write text to the terminal.
* @param data String to write
*/
public final native void write(String data) /*-{
this.write(data);
}-*/;
/**
* Compute and return available dimensions for terminal.
* @return Visible number of columns and rows
*/
public final native XTermDimensions proposeGeometry() /*-{
return this.proposeGeometry();
}-*/;
public final native void focus() /*-{
this.focus();
}-*/;
public final native void blur() /*-{
this.blur();
}-*/;
public final native void scrollDisp(int lineCount) /*-{
this.scrollDisp(lineCount, false);
}-*/;
public final native void scrollPages(int pageCount) /*-{
this.scrollPages(pageCount);
}-*/;
public final native void scrollToTop() /*-{
this.scrollToTop();
}-*/;
public final native void scrollToBottom() /*-{
this.scrollToBottom();
}-*/;
public final native void reset() /*-{
this.reset();
}-*/;
public final native void clear() /*-{
this.clear();
}-*/;
public final native void addClass(String classStr) /*-{
this.element.classList.add(classStr);
}-*/;
public final native int cursorX() /*-{
return this.x;
}-*/;
public final native int cursorY() /*-{
return this.y;
}-*/;
public final native boolean altBufferActive() /*-{
return this.normal != null;
}-*/;
public final native String currentLine() /*-{
lineBuf = this.lines.get(this.y + this.ybase);
if (!lineBuf) // resize may be in progress
return null;
current = "";
for (i = 0; i < this.cols; i++) {
if (!lineBuf[i])
return null;
current += lineBuf[i][1];
}
return current;
}-*/;
/**
* Install a handler for user input (typing). Only one handler at a
* time may be installed. Previous handler will be overwritten.
* @param command handler for data typed by the user
*/
public final native void onTerminalData(CommandWithArg<String> command) /*-{
this.handler =
$entry(function(data) {
command.@org.rstudio.core.client.CommandWithArg::execute(Ljava/lang/Object;)(data);
});
}-*/;
/**
* Install a handler for title events (via escape sequence).
* @param command handler for title text
*/
public final native void onTitleData(CommandWithArg<String> command) /*-{
this.handleTitle =
$entry(function(title) {
command.@org.rstudio.core.client.CommandWithArg::execute(Ljava/lang/Object;)(title);
});
}-*/;
/**
* Factory to create a native Javascript terminal object.
*
* @param container HTML element to attach to
* @param blink <code>true</code> for a blinking cursor, otherwise solid cursor
* @param focus <code>true</code> to give terminal focus by default
*
* @return Native Javascript Terminal object wrapped in a <code>JavaScriptObject</code>.
*/
public static native XTermNative createTerminal(Element container, boolean blink, boolean focus) /*-{
var nativeTerm_ = new $wnd.Terminal({cursorBlink: blink});
nativeTerm_.open(container, focus);
return nativeTerm_;
}-*/;
}