diff --git a/package-lock.json b/package-lock.json index 7a93bb3a3..8414beed6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "r", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ef1107bc3..810aa6931 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,10 @@ "workspaceContains:*.r|.rd|.rmd", "onCommand:r.createRTerm", "onCommand:r.runSource", + "onCommand:r.knitRmd", + "onCommand:r.knitRmdToPdf", + "onCommand:r.knitRmdToHtml", + "onCommand:r.knitRmdToAll", "onCommand:r.runSourcewithEcho", "onCommand:r.runSelection", "onCommand:r.runSelectionInActiveTerm", @@ -125,6 +129,30 @@ "dark": "./images/DownloadFile_inverse.ico" } }, + { + "title": "Knit Rmd", + "category": "R", + "command": "r.knitRmd", + "icon": { + "light": "./images/DownloadFile.ico", + "dark": "./images/DownloadFile_inverse.ico" + } + }, + { + "title": "Knit Rmd To PDF", + "category": "R", + "command": "r.knitRmdToPdf" + }, + { + "title": "Knit Rmd To HTML", + "category": "R", + "command": "r.knitRmdToHtml" + }, + { + "title": "Knit Rmd To All Formats", + "category": "R", + "command": "r.knitRmdToAll" + }, { "title": "Run Source with Echo", "category": "R", @@ -255,6 +283,12 @@ "mac": "shift+cmd+s", "when": "editorTextFocus && editorLangId == 'r'" }, + { + "command": "r.knitRmd", + "key": "shift+Ctrl+k", + "mac": "shift+cmd+k", + "when": "editorTextFocus && editorLangId == 'rmd'" + }, { "command": "r.runSourcewithEcho", "key": "shift+Ctrl+enter", @@ -268,6 +302,11 @@ "when": "editorLangId == r", "command": "r.runSource", "group": "navigation" + }, + { + "when": "editorLangId == rmd", + "command": "r.knitRmd", + "group": "navigation" } ] }, diff --git a/src/extension.ts b/src/extension.ts index 7469dda87..dc43f69a5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -42,6 +42,29 @@ export function activate(context: ExtensionContext) { setFocus(rTerm); } + function knitRmd(echo: boolean, outputFormat: string) { + const wad = window.activeTextEditor.document; + wad.save(); + let rPath = ToRStringLiteral(wad.fileName, '"'); + let encodingParam = config.get("source.encoding") as string; + if (encodingParam) { + encodingParam = `encoding = "${encodingParam}"`; + rPath = [rPath, encodingParam].join(", "); + } + if (echo) { + rPath = [rPath, "echo = TRUE"].join(", "); + } + if (!rTerm) { + const success = createRTerm(true); + if (!success) { return; } + } + if (isNull(outputFormat)) { + rTerm.sendText(`rmarkdown::render(${rPath})`); + } else { + rTerm.sendText(`rmarkdown::render(${rPath}, "${outputFormat}")`); + } + } + async function runSelection(rFunctionName: string[]) { const callableTerminal = await chooseTerminal(); if (isNull(callableTerminal)) { @@ -137,6 +160,10 @@ export function activate(context: ExtensionContext) { commands.registerCommand("r.thead", () => runSelection(["t", "head"])), commands.registerCommand("r.names", () => runSelection(["names"])), commands.registerCommand("r.runSource", () => runSource(false)), + commands.registerCommand("r.knitRmd", () => knitRmd(false, null)), + commands.registerCommand("r.knitRmdToPdf", () => knitRmd(false, "pdf_document")), + commands.registerCommand("r.knitRmdToHtml", () => knitRmd(false, "html_document")), + commands.registerCommand("r.knitRmdToAll", () => knitRmd(false, "all")), commands.registerCommand("r.createRTerm", createRTerm), commands.registerCommand("r.runSourcewithEcho", () => runSource(true)), commands.registerCommand("r.runSelection", () => runSelection([])),