提交 734f91b5 编写于 作者: D Daniel Imms

Add Terminal.sendText API

上级 cce4650a
......@@ -24,12 +24,15 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
}
public $show(terminalId: number, preserveFocus: boolean): void {
this._terminalService.show(!preserveFocus, terminalId);
this._terminalService.show(!preserveFocus).then((terminalPanel) => {
terminalPanel.setActiveTerminalById(terminalId);
});
}
public $sendText(terminalId: number, text: string, addNewLine: boolean): void {
this._terminalService.show(false, terminalId).then((terminalPanel) => {
// TODO: Implement
this._terminalService.show(false).then((terminalPanel) => {
terminalPanel.setActiveTerminalById(terminalId);
terminalPanel.sendTextToActiveTerminal(text, addNewLine);
});
}
}
......@@ -73,7 +73,7 @@ export interface ITerminalService {
runSelectedText(): TPromise<any>;
scrollDown(): TPromise<any>;
scrollUp(): TPromise<any>;
show(focus: boolean, terminalId?: number): TPromise<ITerminalPanel>;
show(focus: boolean): TPromise<ITerminalPanel>;
setActiveTerminal(index: number): TPromise<any>;
toggle(): TPromise<any>;
......@@ -84,5 +84,6 @@ export interface ITerminalService {
}
export interface ITerminalPanel {
sendTextToActiveTerminal(text: string, addNewLine: boolean): void;
setActiveTerminalById(terminalId: number): void;
}
......@@ -181,6 +181,16 @@ export class TerminalInstance {
});
}
public sendText(text: string, addNewLine: boolean): void {;
if (addNewLine && text.substr(text.length - os.EOL.length) !== os.EOL) {
text += os.EOL;
}
this.terminalProcess.process.send({
event: 'input',
data: text
});
}
public focus(force?: boolean): void {
if (!this.xterm) {
return;
......
......@@ -207,6 +207,11 @@ export class TerminalPanel extends Panel {
return super.setVisible(visible);
}
public sendTextToActiveTerminal(text: string, addNewLine: boolean): void {
let terminalInstance = this.terminalInstances[this.terminalService.getActiveTerminalIndex()];
terminalInstance.sendText(text, addNewLine);
}
private createTerminal(terminalProcess: ITerminalProcess, terminalFocusContextKey: IContextKey<boolean>): TPromise<TerminalInstance> {
return new TPromise<TerminalInstance>(resolve => {
var terminalInstance = new TerminalInstance(
......@@ -230,13 +235,13 @@ export class TerminalPanel extends Panel {
});
}
public setActiveTerminal(newActiveIndex: number) {
public setActiveTerminal(newActiveIndex: number): void {
this.terminalInstances.forEach((terminalInstance, i) => {
terminalInstance.toggleVisibility(i === newActiveIndex);
});
}
public setActiveTerminalById(terminalId: number) {
public setActiveTerminalById(terminalId: number): void {
let terminalIndex = -1;
this.terminalInstances.forEach((terminalInstance, i) => {
if (terminalInstance.id === terminalId) {
......
......@@ -108,13 +108,14 @@ export class TerminalService implements ITerminalService {
return this.focus().then((terminalPanel) => {
let editor = this.codeEditorService.getFocusedCodeEditor();
let selection = editor.getSelection();
let text = selection.isEmpty() ? editor.getValue() : editor.getModel().getValueInRange(selection, os.EOL === '\n' ? EndOfLinePreference.LF : EndOfLinePreference.CRLF);
// Add a new line if one doesn't already exist so the text is executed
text = text + (text.substr(text.length - os.EOL.length) === os.EOL ? '' : os.EOL);
this.terminalProcesses[this.activeTerminalIndex].process.send({
event: 'input',
data: text
});
let text: string;
if (selection.isEmpty()) {
text = editor.getValue();
} else {
let endOfLinePreference = os.EOL === '\n' ? EndOfLinePreference.LF : EndOfLinePreference.CRLF;
text = editor.getModel().getValueInRange(selection, endOfLinePreference);
}
terminalPanel.sendTextToActiveTerminal(text, true);
});
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册