From ca3de096d419e15d0a9edc0828ceee1453a9fb21 Mon Sep 17 00:00:00 2001 From: Saurabh Daware Date: Tue, 10 Sep 2019 14:40:52 +0530 Subject: [PATCH 1/4] seteditor --for-project basic functionality done --- bin/index.js | 1 + lib/action.js | 38 +++++++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/bin/index.js b/bin/index.js index e0ddae5..6c4dc36 100755 --- a/bin/index.js +++ b/bin/index.js @@ -25,6 +25,7 @@ program program .command('seteditor [commandToOpen]') .description("Set text editor to use") + .option('-f|--for-project [projectName]', 'set different editor for specific project') .action(action.setEditor); program diff --git a/lib/action.js b/lib/action.js index 5629afb..9846cea 100644 --- a/lib/action.js +++ b/lib/action.js @@ -130,10 +130,23 @@ async function openProject(projectName){ } // pm seteditor [command] -async function setEditor(command){ +async function setEditor(command,cmdObj=undefined){ let commandToOpen; + let selectedProject; + let selectedIndex; // this will have the index of selectedProject + let projectName; + + if(cmdObj.forProject){ + projectName = (cmdObj.forProject === true)?undefined:cmdObj.forProject; + selectedProject = await selectProject(projectName,'set editor for'); // sending undefined calls list of projects to select from + + // find the index of selectedProject and add editor to that project + selectedIndex = settings.projects.findIndex(project => project.name.toLowerCase() == selectedProject.name.toLowerCase()) + } + + if(!command){ - const editors = [ + const questions = [ { type: 'list', message: 'Select text editor', @@ -158,17 +171,21 @@ async function setEditor(command){ ] } ]; - - console.log(); // Just wanted to line break; Sorry god of good practices ;_; - console.warn(`If the TextEditor/IDE you are looking for is not listed here, Run ${chalk.yellow('pm seteditor [commandToOpenEditor]')} \n'commandToOpenEditor' is the command you can type in terminal to open project E.g for Webstorm it is 'wstorm' for VSCode it is 'code'\n`); - ({selectedEditor:commandToOpen} = await inquirer.prompt(editors)); + // console.log(); // Just wanted to line break; Sorry god of good practices ;_; + // console.warn(`If the TextEditor/IDE you are looking for is not listed here, Run ${chalk.yellow('pm seteditor [commandToOpenEditor]')} \n'commandToOpenEditor' is the command you can type in terminal to open project E.g for Webstorm it is 'wstorm' for VSCode it is 'code'\n`); + ({selectedEditor:commandToOpen} = await inquirer.prompt(questions)); }else{ commandToOpen = command; } - - settings.commandToOpen = commandToOpen; - writeSettings(settings,'seteditor',"Text Editor Selected"); + if(!selectedIndex){ + settings.commandToOpen = commandToOpen; + }else{ + settings.projects[selectedIndex].editor = commandToOpen; + } + + console.log(settings); + // writeSettings(settings,'seteditor',"Text Editor Selected"); } // projectman add [projectDirectory] @@ -214,7 +231,6 @@ async function editConfigurations(){ } try{ - const {stderr} = await exec(`${openSettingsCommand} "${settingsPath}"`) if(stderr){ console.error("Error occured while opening the file: "+settingsPath); @@ -248,4 +264,4 @@ async function getProjectPath(projectName){ console.log(selectedProject.path); } -module.exports = {openProject, addProject, removeProject, editConfigurations, setEditor, getProjectPath}; +module.exports = {openProject, addProject, removeProject, editConfigurations, setEditor, getProjectPath}; \ No newline at end of file From f117626ddf396cdf74586140c864d563005e8063 Mon Sep 17 00:00:00 2001 From: Saurabh Daware Date: Wed, 11 Sep 2019 14:54:57 +0530 Subject: [PATCH 2/4] ZEROth index giving false fix --- lib/action.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/action.js b/lib/action.js index 9846cea..0a95438 100644 --- a/lib/action.js +++ b/lib/action.js @@ -87,7 +87,7 @@ async function selectProject(projectName, action){ // If project name is mentioned then open directly selectedProject = settings.projects.find(project => project.name.toLowerCase() == projectName.toLowerCase()); } - console.log(selectedProject); + // console.log(selectedProject); return selectedProject; } @@ -133,12 +133,12 @@ async function openProject(projectName){ async function setEditor(command,cmdObj=undefined){ let commandToOpen; let selectedProject; - let selectedIndex; // this will have the index of selectedProject + let selectedIndex = -1; // this will have the index of selectedProject let projectName; - if(cmdObj.forProject){ - projectName = (cmdObj.forProject === true)?undefined:cmdObj.forProject; - selectedProject = await selectProject(projectName,'set editor for'); // sending undefined calls list of projects to select from + if(cmdObj.forProject){ // --for-project exists + projectName = (cmdObj.forProject === true)?undefined:cmdObj.forProject; // if only[--for-project], set undefined else if [--for-project [projectName]] set projectName + selectedProject = await selectProject(projectName,'set editor for'); // sending undefined, calls list of projects to select from // find the index of selectedProject and add editor to that project selectedIndex = settings.projects.findIndex(project => project.name.toLowerCase() == selectedProject.name.toLowerCase()) @@ -178,7 +178,7 @@ async function setEditor(command,cmdObj=undefined){ commandToOpen = command; } - if(!selectedIndex){ + if(selectedIndex >= 0){ settings.commandToOpen = commandToOpen; }else{ settings.projects[selectedIndex].editor = commandToOpen; From 3563a40c02925b4174b45fd18b55b4c1cb87b89b Mon Sep 17 00:00:00 2001 From: Saurabh Daware Date: Wed, 11 Sep 2019 14:57:04 +0530 Subject: [PATCH 3/4] wrong check in selectedIndex fix --- lib/action.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/action.js b/lib/action.js index 0a95438..bf4a094 100644 --- a/lib/action.js +++ b/lib/action.js @@ -178,7 +178,7 @@ async function setEditor(command,cmdObj=undefined){ commandToOpen = command; } - if(selectedIndex >= 0){ + if(selectedIndex < 0){ settings.commandToOpen = commandToOpen; }else{ settings.projects[selectedIndex].editor = commandToOpen; From e85f72271ec0b901f71110de8601279488a79136 Mon Sep 17 00:00:00 2001 From: Saurabh Daware Date: Wed, 11 Sep 2019 17:16:42 +0530 Subject: [PATCH 4/4] settings mutability fix --- lib/action.js | 78 +++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/lib/action.js b/lib/action.js index bf4a094..7634f4a 100644 --- a/lib/action.js +++ b/lib/action.js @@ -67,19 +67,19 @@ function writeSettings(data, command='', successMessage = "Settings upd async function selectProject(projectName, action){ let selectedProject; if(!projectName){ + const projects = [...settings.projects]; // Ask which project he wants to open const questions = [ { type: 'list', - message: `Select project to ${action}`, + message: `Select project to ${action} :`, name: 'selectedProject', - choices: settings.projects.map(project => { + choices: projects.map(({...project}) => { // Spreading project to make it immutable project.value = {name:project.name,path:project.path}; return project; }) } ]; - // Redirecting to stderr in order for it to be used with command substitution var promptModule = inquirer.createPromptModule({ output: process.stderr }); ({selectedProject} = await promptModule(questions)); @@ -87,7 +87,6 @@ async function selectProject(projectName, action){ // If project name is mentioned then open directly selectedProject = settings.projects.find(project => project.name.toLowerCase() == projectName.toLowerCase()); } - // console.log(selectedProject); return selectedProject; } @@ -104,7 +103,7 @@ async function openProject(projectName){ const selectedProject = await selectProject(projectName, 'open'); if(!selectedProject){ - console.error("Project does not exist. Add it using `pm add [projectPath]` or cd till the project folder and type `pm add`"); + console.error(`Project does not exist. Add it using ${chalk.yellow('pm add [projectPath]')} or cd till the project folder and type ${chalk.yellow('pm add')}`); return; } @@ -129,17 +128,47 @@ async function openProject(projectName){ } +// projectman add [projectDirectory] +async function addProject(projectDirectory = '.'){ + let newProject = {}; + newProject.path = path.resolve(projectDirectory); + const name = newProject.path.split(path.sep).pop(); + ({finalName:newProject.name} = await inquirer.prompt([{type:'input',message:'Project Name :',name:'finalName',default:name}])) + + if(settings.projects.some(project => project.name.toLowerCase() == newProject.name.toLowerCase())){ + console.error("Project with this name already exists"); + return; + } + + settings.projects.push(newProject); + + writeSettings(settings, 'add', "Project Added"); +} + +// pm remove [projectName] +async function removeProject(projectName){ + const {name:selectedProjectName} = await selectProject(projectName,'remove'); + + if(!selectedProjectName){ + console.error(`Project with name ${selectedProjectName} does not exist. Try ${chalk.yellow('pm remove')} and select the project you want to remove`); + return; + } + // removing project + settings.projects = settings.projects.filter(project => project.name.toLowerCase() !== selectedProjectName.toLowerCase()); + + writeSettings(settings, 'remove', "Project Removed"); +} + + // pm seteditor [command] async function setEditor(command,cmdObj=undefined){ let commandToOpen; let selectedProject; let selectedIndex = -1; // this will have the index of selectedProject let projectName; - if(cmdObj.forProject){ // --for-project exists projectName = (cmdObj.forProject === true)?undefined:cmdObj.forProject; // if only[--for-project], set undefined else if [--for-project [projectName]] set projectName selectedProject = await selectProject(projectName,'set editor for'); // sending undefined, calls list of projects to select from - // find the index of selectedProject and add editor to that project selectedIndex = settings.projects.findIndex(project => project.name.toLowerCase() == selectedProject.name.toLowerCase()) } @@ -184,40 +213,9 @@ async function setEditor(command,cmdObj=undefined){ settings.projects[selectedIndex].editor = commandToOpen; } - console.log(settings); - // writeSettings(settings,'seteditor',"Text Editor Selected"); + writeSettings(settings,'seteditor',"Text Editor Selected"); } -// projectman add [projectDirectory] -async function addProject(projectDirectory = '.'){ - let newProject = {}; - newProject.path = path.resolve(projectDirectory); - const name = newProject.path.split(path.sep).pop(); - ({finalName:newProject.name} = await inquirer.prompt([{type:'input',message:'Project Name',name:'finalName',default:name}])) - - if(settings.projects.some(project => project.name.toLowerCase() == newProject.name.toLowerCase())){ - console.error("Project with this name already exists"); - return; - } - - settings.projects.push(newProject); - - writeSettings(settings, 'add', "Project Added"); -} - -// pm remove [projectName] -async function removeProject(projectName){ - const {name:selectedProjectName} = await selectProject(projectName,'remove'); - - if(!selectedProjectName){ - console.error(`Project with name ${selectedProjectName} does not exist. Try ${chalk.yellow('pm remove')} and select the project you want to remove`); - return; - } - // removing project - settings.projects = settings.projects.filter(project => project.name.toLowerCase() !== selectedProjectName.toLowerCase()); - - writeSettings(settings, 'remove', "Project Removed"); -} // projectman edit async function editConfigurations(){ @@ -257,7 +255,7 @@ async function getProjectPath(projectName){ const selectedProject = await selectProject(projectName, "get directory"); if(!selectedProject){ - console.error("Project does not exist. Add it using `pm add [projectPath]` or cd till the project folder and type `pm add`"); + console.error(`Project does not exist. Add it using ${chalk.yellow('pm add [projectPath]')} or cd till the project folder and type ${chalk.yellow('pm add')}`); return; }