mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-23 09:42:53 +02:00
feat: Support opening multiple files from command line
This commit is contained in:
@@ -29,7 +29,7 @@ export const TerminalHelpText: string[] = [
|
||||
"lscpu Displays the number of CPU cores on the machine",
|
||||
"mem [script] [-t] [n] Displays the amount of RAM required to run the script",
|
||||
"mv [src] [dest] Move/rename a text or script file",
|
||||
"nano [file] Text editor - Open up and edit a script or text file",
|
||||
"nano [file ...] Text editor - Open up and edit one or more scripts or text files",
|
||||
"ps Display all scripts that are currently running",
|
||||
"rm [file] Delete a file from the server",
|
||||
"run [name] [-t n] [--tail] [args...] Execute a program or script",
|
||||
@@ -40,7 +40,7 @@ export const TerminalHelpText: string[] = [
|
||||
"tail [script] [args...] Displays dynamic logs for the specified script",
|
||||
"top Displays all running scripts and their RAM usage",
|
||||
"unalias [alias name] Deletes the specified alias",
|
||||
"vim [file] Text editor - Open up and edit a script or text file in vim mode",
|
||||
"vim [file ...] Text editor - Open up and edit one or more scripts or text files in vim mode",
|
||||
"weaken [server] Reduce the security of a server",
|
||||
"wget [url] [target file] Retrieves code/text from a web server",
|
||||
];
|
||||
@@ -305,9 +305,9 @@ export const HelpTexts: IMap<string[]> = {
|
||||
"mv myScript.js myOldScript.js",
|
||||
],
|
||||
nano: [
|
||||
"nano [file name]",
|
||||
"nano [file ...]",
|
||||
" ",
|
||||
"Opens up the specified file in the Text Editor. Only scripts (.script) or text files (.txt) can be ",
|
||||
"Opens up the specified file(s) in the Text Editor. Only scripts (.script) or text files (.txt) can be ",
|
||||
"edited using the Text Editor. If the file does not already exist, then a new, empty one ",
|
||||
"will be created",
|
||||
],
|
||||
@@ -404,9 +404,9 @@ export const HelpTexts: IMap<string[]> = {
|
||||
"It is not necessary to differentiate between global and non-global aliases when using 'unalias'",
|
||||
],
|
||||
vim: [
|
||||
"vim [file name]",
|
||||
"vim [file ...]",
|
||||
" ",
|
||||
"Opens up the specified file in the Text Editor in vim mode. Only scripts (.script) or text files (.txt) can be ",
|
||||
"Opens up the specified file(s) in the Text Editor in vim mode. Only scripts (.script) or text files (.txt) can be ",
|
||||
"edited using the Text Editor. If the file does not already exist, then a new, empty one ",
|
||||
"will be created",
|
||||
],
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ITerminal } from "../../ITerminal";
|
||||
import { IRouter, ScriptEditorRouteOptions} from "../../../ui/Router";
|
||||
import { IRouter, ScriptEditorRouteOptions } from "../../../ui/Router";
|
||||
import { IPlayer } from "../../../PersonObjects/IPlayer";
|
||||
import { BaseServer } from "../../../Server/BaseServer";
|
||||
import { isScriptFilename } from "../../../Script/isScriptFilename";
|
||||
@@ -13,53 +13,56 @@ interface EditorParameters {
|
||||
args: (string | number | boolean)[];
|
||||
}
|
||||
|
||||
function isNs2(filename: string): boolean {
|
||||
return filename.endsWith(".ns") || filename.endsWith(".js");
|
||||
}
|
||||
|
||||
export function commonEditor(command: string, {
|
||||
terminal,
|
||||
router,
|
||||
player,
|
||||
server,
|
||||
args,
|
||||
}: EditorParameters, scriptEditorRouteOptions?: ScriptEditorRouteOptions): void {
|
||||
if (args.length !== 1) {
|
||||
const newNs2Template = `/** @param {NS} ns **/
|
||||
export async function main(ns) {
|
||||
|
||||
}`;
|
||||
|
||||
export function commonEditor(
|
||||
command: string,
|
||||
{ terminal, router, player, server, args }: EditorParameters,
|
||||
scriptEditorRouteOptions?: ScriptEditorRouteOptions,
|
||||
): void {
|
||||
if (args.length < 1) {
|
||||
terminal.error(`Incorrect usage of ${command} command. Usage: ${command} [scriptname]`);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const filename = args[0] + "";
|
||||
if (isScriptFilename(filename)) {
|
||||
const filepath = terminal.getFilepath(filename);
|
||||
const script = terminal.getScript(player, filename);
|
||||
if (script == null) {
|
||||
let code = "";
|
||||
if (filename.endsWith(".ns") || filename.endsWith(".js")) {
|
||||
code = `/** @param {NS} ns **/
|
||||
export async function main(ns) {
|
||||
|
||||
}`;
|
||||
const files = args.map((arg) => {
|
||||
const filename = `${arg}`;
|
||||
|
||||
if (isScriptFilename(filename)) {
|
||||
const filepath = terminal.getFilepath(filename);
|
||||
const script = terminal.getScript(player, filename);
|
||||
const fileIsNs2 = isNs2(filename);
|
||||
const code = script !== null ? script.code : fileIsNs2 ? newNs2Template : "";
|
||||
|
||||
if (code === newNs2Template) {
|
||||
CursorPositions.saveCursor(filename, {
|
||||
row: 3,
|
||||
column: 5,
|
||||
});
|
||||
}
|
||||
CursorPositions.saveCursor(filename, {
|
||||
row: 3,
|
||||
column: 5,
|
||||
});
|
||||
router.toScriptEditor(filepath, code, scriptEditorRouteOptions);
|
||||
} else {
|
||||
router.toScriptEditor(filepath, script.code, scriptEditorRouteOptions);
|
||||
|
||||
return [filepath, code];
|
||||
}
|
||||
} else if (filename.endsWith(".txt")) {
|
||||
const filepath = terminal.getFilepath(filename);
|
||||
const txt = terminal.getTextFile(player, filename);
|
||||
if (txt == null) {
|
||||
router.toScriptEditor(filepath, "", scriptEditorRouteOptions);
|
||||
} else {
|
||||
router.toScriptEditor(filepath, txt.text, scriptEditorRouteOptions);
|
||||
|
||||
if (filename.endsWith(".txt")) {
|
||||
const filepath = terminal.getFilepath(filename);
|
||||
const txt = terminal.getTextFile(player, filename);
|
||||
return [filepath, txt == null ? "" : txt.text];
|
||||
}
|
||||
} else {
|
||||
terminal.error("Invalid file. Only scripts (.script, .ns, .js), or text files (.txt) can be edited with vim");
|
||||
return;
|
||||
}
|
||||
|
||||
throw new Error(`Invalid file. Only scripts (.script, .ns, .js), or text files (.txt) can be edited with ${command}`);
|
||||
});
|
||||
|
||||
router.toScriptEditor(Object.fromEntries(files), scriptEditorRouteOptions);
|
||||
} catch (e) {
|
||||
terminal.error(e + "");
|
||||
terminal.error(`${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user