private boolean openEditor(String projectPathString, List<String> additionalFiles) throws IOException {
		if (!editor.isPresent() || editor.get().isEmpty()) {
			editor = askEditor();
			if (!editor.isPresent()) {
				return false;
			}
		} else {
			showStartingMsg(editor.get(), !editor.get().equals(spec.findOption("open").defaultValue()));
		}
		if ("gitpod".equals(editor.get()) && System.getenv("GITPOD_WORKSPACE_URL") != null) {
			info("Open this url to edit the project in your gitpod session:\n\n"
					+ System.getenv("GITPOD_WORKSPACE_URL") + "#" + projectPathString + "\n\n");
		} else {
			List<String> optionList = new ArrayList<>();
			optionList.add(editor.get());
			optionList.add(projectPathString);
			optionList.addAll(additionalFiles);

			String[] cmd;
			if (Util.getShell() == Shell.bash) {
				final String editorCommand = CommandBuffer.of(optionList).shell(Shell.bash).asCommandLine();
				cmd = new String[] { "sh", "-c", editorCommand };
			} else {
				final String editorCommand = CommandBuffer.of(optionList).shell(Shell.cmd).asCommandLine();
				cmd = new String[] { "cmd", "/c", editorCommand };
			}
			verboseMsg("Running `" + String.join(" ", cmd) + "`");
			new ProcessBuilder(cmd).start();
		}
		return true;
	}
Returns a parent path if one of the targetFileNames exist in such parent.

@param filePath
@param targetFileNames list of markers to search for
@return if found returns the marker path, if none found return null.
src/main/java/dev/jbang/cli/Edit.java