2019-01-30 23:46:17 +00:00
|
|
|
import * as nls from "vs/nls";
|
|
|
|
import { Action } from "vs/base/common/actions";
|
|
|
|
import { TERMINAL_COMMAND_ID } from "vs/workbench/parts/terminal/common/terminalCommands";
|
|
|
|
import { ITerminalService } from "vs/workbench/parts/terminal/common/terminal";
|
|
|
|
import * as actions from "vs/workbench/parts/terminal/electron-browser/terminalActions";
|
|
|
|
import * as instance from "vs/workbench/parts/terminal/electron-browser/terminalInstance";
|
2019-02-26 18:01:14 +00:00
|
|
|
import { client } from "../client";
|
2019-01-30 23:46:17 +00:00
|
|
|
|
|
|
|
const getLabel = (key: string, enabled: boolean): string => {
|
|
|
|
return enabled
|
|
|
|
? nls.localize(key, "Paste")
|
|
|
|
: nls.localize(`${key}WithKeybind`, "Paste (must use keybind)");
|
|
|
|
};
|
|
|
|
|
|
|
|
export class PasteAction extends Action {
|
|
|
|
private static readonly KEY = "paste";
|
|
|
|
|
|
|
|
public constructor() {
|
|
|
|
super(
|
|
|
|
"editor.action.clipboardPasteAction",
|
2019-02-26 18:01:14 +00:00
|
|
|
getLabel(PasteAction.KEY, client.clipboard.isEnabled),
|
2019-01-30 23:46:17 +00:00
|
|
|
undefined,
|
2019-02-26 18:01:14 +00:00
|
|
|
client.clipboard.isEnabled,
|
|
|
|
async (): Promise<boolean> => client.clipboard.paste(),
|
2019-01-30 23:46:17 +00:00
|
|
|
);
|
|
|
|
|
2019-02-26 18:01:14 +00:00
|
|
|
client.clipboard.onPermissionChange((enabled) => {
|
2019-01-30 23:46:17 +00:00
|
|
|
this.label = getLabel(PasteAction.KEY, enabled);
|
|
|
|
this.enabled = enabled;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class TerminalPasteAction extends Action {
|
|
|
|
private static readonly KEY = "workbench.action.terminal.paste";
|
|
|
|
|
|
|
|
public static readonly ID = TERMINAL_COMMAND_ID.PASTE;
|
|
|
|
public static readonly LABEL = nls.localize("workbench.action.terminal.paste", "Paste into Active Terminal");
|
2019-02-26 18:01:14 +00:00
|
|
|
public static readonly SHORT_LABEL = getLabel(TerminalPasteAction.KEY, client.clipboard.isEnabled);
|
2019-01-30 23:46:17 +00:00
|
|
|
|
|
|
|
public constructor(
|
|
|
|
id: string, label: string,
|
|
|
|
@ITerminalService private terminalService: ITerminalService,
|
|
|
|
) {
|
|
|
|
super(id, label);
|
2019-02-26 18:01:14 +00:00
|
|
|
client.clipboard.onPermissionChange((enabled) => {
|
2019-01-30 23:46:17 +00:00
|
|
|
this._setLabel(getLabel(TerminalPasteAction.KEY, enabled));
|
|
|
|
});
|
2019-02-26 18:01:14 +00:00
|
|
|
this._setLabel(getLabel(TerminalPasteAction.KEY, client.clipboard.isEnabled));
|
2019-01-30 23:46:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public run(): Promise<void> {
|
|
|
|
const instance = this.terminalService.getActiveOrCreateInstance();
|
|
|
|
if (instance) {
|
|
|
|
// tslint:disable-next-line no-any it will return a promise (see below)
|
|
|
|
return (instance as any).paste();
|
|
|
|
}
|
|
|
|
|
|
|
|
return Promise.resolve();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class TerminalInstance extends instance.TerminalInstance {
|
|
|
|
public async paste(): Promise<void> {
|
|
|
|
this.focus();
|
2019-02-26 18:01:14 +00:00
|
|
|
if (client.clipboard.isEnabled) {
|
|
|
|
const text = await client.clipboard.readText();
|
2019-01-30 23:46:17 +00:00
|
|
|
this.sendText(text, false);
|
|
|
|
} else {
|
|
|
|
document.execCommand("paste");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const actionsTarget = actions as typeof actions;
|
|
|
|
// @ts-ignore TODO: don't ignore it.
|
|
|
|
actionsTarget.TerminalPasteAction = TerminalPasteAction;
|
|
|
|
|
|
|
|
const instanceTarget = instance as typeof instance;
|
|
|
|
instanceTarget.TerminalInstance = TerminalInstance;
|