diff --git a/virtual-document-sample/README.md b/virtual-document-sample/README.md index d9df9e88..c609c37a 100644 --- a/virtual-document-sample/README.md +++ b/virtual-document-sample/README.md @@ -2,7 +2,7 @@ This is a sample extension that shows how to add virtual documents to the editor. -![cowsay](https://github.com/Microsoft/vscode-extension-samples/blob/master/virtual-document-sample/preview.png) +![cowsay](https://github.com/Microsoft/vscode-extension-samples/blob/master/virtual-document-sample/cowsay.gif) ## VS Code API diff --git a/virtual-document-sample/cowsay-bwd.png b/virtual-document-sample/cowsay-bwd.png new file mode 100644 index 00000000..34606137 Binary files /dev/null and b/virtual-document-sample/cowsay-bwd.png differ diff --git a/virtual-document-sample/cowsay.gif b/virtual-document-sample/cowsay.gif new file mode 100644 index 00000000..a8472499 Binary files /dev/null and b/virtual-document-sample/cowsay.gif differ diff --git a/virtual-document-sample/package.json b/virtual-document-sample/package.json index 8f20652a..9ec631fd 100644 --- a/virtual-document-sample/package.json +++ b/virtual-document-sample/package.json @@ -22,9 +22,30 @@ ], "main": "./out/extension", "contributes": { - "commands": { - "command": "cowsay.say", - "title": "cowsay" + "commands": [ + { + "command": "cowsay.say", + "title": "cowsay" + }, + { + "command": "cowsay.backwards", + "title": "cowsay (↹)" + } + ], + "menus": { + "editor/title": [ + { + "command": "cowsay.backwards", + "group": "navigation", + "when": "resourceScheme == cowsay" + } + ], + "commandPalette": [ + { + "command": "cowsay.backwards", + "when": "resourceScheme == cowsay" + } + ] } }, "scripts": { diff --git a/virtual-document-sample/preview.png b/virtual-document-sample/preview.png deleted file mode 100644 index 6908bcce..00000000 Binary files a/virtual-document-sample/preview.png and /dev/null differ diff --git a/virtual-document-sample/src/extension.ts b/virtual-document-sample/src/extension.ts index d9e0b85a..24f97ea7 100644 --- a/virtual-document-sample/src/extension.ts +++ b/virtual-document-sample/src/extension.ts @@ -12,6 +12,11 @@ export function activate({ subscriptions }: vscode.ExtensionContext) { // register a content provider for the cowsay-scheme const myScheme = 'cowsay'; const myProvider = new class implements vscode.TextDocumentContentProvider { + + // emitter and its event + onDidChangeEmitter = new vscode.EventEmitter(); + onDidChange = this.onDidChangeEmitter.event; + provideTextDocumentContent(uri: vscode.Uri): string { // simply invoke cowsay, use uri-path as text return cowsay.say({ text: uri.path }); @@ -24,8 +29,24 @@ export function activate({ subscriptions }: vscode.ExtensionContext) { let what = await vscode.window.showInputBox({ placeHolder: 'cowsay...' }); if (what) { let uri = vscode.Uri.parse('cowsay:' + what); - let doc = await vscode.workspace.openTextDocument(uri); + let doc = await vscode.workspace.openTextDocument(uri); // calls back into the provider await vscode.window.showTextDocument(doc, { preview: false }); } })); + + // register a command that updates the current cowsay + subscriptions.push(vscode.commands.registerCommand('cowsay.backwards', async () => { + if (!vscode.window.activeTextEditor) { + return; // no editor + } + let { document } = vscode.window.activeTextEditor; + if (document.uri.scheme !== myScheme) { + return; // not my scheme + } + // get path-components, reverse it, and create a new uri + let say = document.uri.path; + let newSay = say.split('').reverse().join(''); + let newUri = document.uri.with({ path: newSay }); + await vscode.window.showTextDocument(newUri, { preview: false }); + })) }