mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-21 23:23:51 +01:00
EDITOR: changed editor tabs to have their own editor mode (#1372)
This commit is contained in:
parent
805ca06922
commit
bec6e82d7f
@ -42,6 +42,18 @@ export const MiscPage = (): React.ReactElement => {
|
||||
</>
|
||||
}
|
||||
/>
|
||||
<OptionSwitch
|
||||
checked={Settings.MonacoDefaultToVim}
|
||||
onChange={(newValue) => (Settings.MonacoDefaultToVim = newValue)}
|
||||
text="Enable Vim as default editor"
|
||||
tooltip={
|
||||
<>
|
||||
This setting is only used when opening a file through ways that do not determine the editor mode. Using
|
||||
'nano' or 'vim' will set the editor mode for the specified files, while 'ls' will open the file using the
|
||||
the value from this setting.
|
||||
</>
|
||||
}
|
||||
/>
|
||||
</GameOptionsPage>
|
||||
);
|
||||
};
|
||||
|
@ -12,16 +12,25 @@ export class OpenScript {
|
||||
hostname: string;
|
||||
lastPosition: Position;
|
||||
model: ITextModel;
|
||||
vimMode: boolean;
|
||||
isTxt: boolean;
|
||||
// TODO: Adding actual external update notifications for the OpenScript class
|
||||
// hasExternalUpdate = false;
|
||||
|
||||
constructor(path: ContentFilePath, code: string, hostname: string, lastPosition: Position, model: ITextModel) {
|
||||
constructor(
|
||||
path: ContentFilePath,
|
||||
code: string,
|
||||
hostname: string,
|
||||
lastPosition: Position,
|
||||
model: ITextModel,
|
||||
vimMode: boolean,
|
||||
) {
|
||||
this.path = path;
|
||||
this.code = code;
|
||||
this.hostname = hostname;
|
||||
this.lastPosition = lastPosition;
|
||||
this.model = model;
|
||||
this.vimMode = vimMode;
|
||||
this.isTxt = hasTextExtension(path);
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ export interface Options {
|
||||
fontSize: number;
|
||||
fontLigatures: boolean;
|
||||
wordWrap: WordWrapOptions;
|
||||
vim: boolean;
|
||||
cursorStyle: CursorStyle;
|
||||
cursorBlinking: CursorBlinking;
|
||||
}
|
||||
|
@ -93,11 +93,6 @@ export function OptionsModal(props: OptionsModalProps): ReactElement {
|
||||
</Select>
|
||||
</div>
|
||||
|
||||
<div style={{ display: "flex", alignItems: "center" }}>
|
||||
<Typography marginRight={"auto"}>Enable vim mode: </Typography>
|
||||
<Switch onChange={(e) => props.onOptionChange("vim", e.target.checked)} checked={props.options.vim} />
|
||||
</div>
|
||||
|
||||
<div style={{ display: "flex", alignItems: "center" }}>
|
||||
<Typography marginRight={"auto"}>Font family: </Typography>
|
||||
<TextField
|
||||
|
@ -26,7 +26,7 @@ export interface ScriptEditorContextShape {
|
||||
|
||||
const ScriptEditorContext = React.createContext({} as ScriptEditorContextShape);
|
||||
|
||||
export function ScriptEditorContextProvider({ children, vim }: { children: React.ReactNode; vim: boolean }) {
|
||||
export function ScriptEditorContextProvider({ children }: { children: React.ReactNode }) {
|
||||
const [ram, setRAM] = useState("RAM: ???");
|
||||
const [ramEntries, setRamEntries] = useState<string[][]>([["???", ""]]);
|
||||
|
||||
@ -76,7 +76,6 @@ export function ScriptEditorContextProvider({ children, vim }: { children: React
|
||||
fontSize: Settings.MonacoFontSize,
|
||||
fontLigatures: Settings.MonacoFontLigatures,
|
||||
wordWrap: Settings.MonacoWordWrap,
|
||||
vim: vim || Settings.MonacoVim,
|
||||
cursorStyle: Settings.MonacoCursorStyle,
|
||||
cursorBlinking: Settings.MonacoCursorBlinking,
|
||||
});
|
||||
@ -93,7 +92,6 @@ export function ScriptEditorContextProvider({ children, vim }: { children: React
|
||||
Settings.MonacoCursorStyle = options.cursorStyle;
|
||||
Settings.MonacoCursorBlinking = options.cursorBlinking;
|
||||
Settings.MonacoWordWrap = options.wordWrap;
|
||||
Settings.MonacoVim = options.vim;
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -44,7 +44,7 @@ function Root(props: IProps): React.ReactElement {
|
||||
const rerender = useRerender();
|
||||
const editorRef = useRef<IStandaloneCodeEditor | null>(null);
|
||||
|
||||
const { options, updateRAM, startUpdatingRAM, finishUpdatingRAM } = useScriptEditorContext();
|
||||
const { updateRAM, startUpdatingRAM, finishUpdatingRAM } = useScriptEditorContext();
|
||||
|
||||
let decorations: monaco.editor.IEditorDecorationsCollection | undefined;
|
||||
|
||||
@ -194,6 +194,7 @@ function Root(props: IProps): React.ReactElement {
|
||||
props.hostname,
|
||||
new monaco.Position(0, 0),
|
||||
makeModel(props.hostname, filename, code),
|
||||
props.vim,
|
||||
);
|
||||
openScripts.push(newScript);
|
||||
currentScript = newScript;
|
||||
@ -375,7 +376,7 @@ function Root(props: IProps): React.ReactElement {
|
||||
|
||||
const { statusBarRef } = useVimEditor({
|
||||
editor: editorRef.current,
|
||||
vim: options.vim,
|
||||
vim: currentScript !== null ? currentScript.vimMode : props.vim,
|
||||
onSave: save,
|
||||
onOpenNextTab,
|
||||
onOpenPreviousTab,
|
||||
@ -423,7 +424,7 @@ function Root(props: IProps): React.ReactElement {
|
||||
// Called every time script editor is opened
|
||||
export function ScriptEditorRoot(props: IProps) {
|
||||
return (
|
||||
<ScriptEditorContextProvider vim={props.vim}>
|
||||
<ScriptEditorContextProvider>
|
||||
<Root {...props} />
|
||||
</ScriptEditorContextProvider>
|
||||
);
|
||||
|
@ -101,7 +101,7 @@ export const Settings = {
|
||||
/** Whether to use font ligatures */
|
||||
MonacoFontLigatures: false,
|
||||
/** Whether to use Vim mod by default in the script editor */
|
||||
MonacoVim: false,
|
||||
MonacoDefaultToVim: false,
|
||||
/** Word wrap setting for Script Editor. */
|
||||
MonacoWordWrap: "off" as WordWrapOptions,
|
||||
/** Control the cursor style*/
|
||||
|
@ -24,6 +24,7 @@ import {
|
||||
root,
|
||||
} from "../../Paths/Directory";
|
||||
import { isMember } from "../../utils/EnumHelper";
|
||||
import { Settings } from "../../Settings/Settings";
|
||||
|
||||
export function ls(args: (string | number | boolean)[], server: BaseServer): void {
|
||||
interface LSFlags {
|
||||
@ -138,7 +139,7 @@ export function ls(args: (string | number | boolean)[], server: BaseServer): voi
|
||||
content = server.scripts.get(fullPath)?.content ?? "";
|
||||
}
|
||||
const files = new Map<ContentFilePath, string>();
|
||||
const options = { hostname: server.hostname };
|
||||
const options = { hostname: server.hostname, vim: Settings.MonacoDefaultToVim };
|
||||
files.set(fullPath, content);
|
||||
Router.toPage(Page.ScriptEditor, { files, options });
|
||||
}
|
||||
|
@ -3,5 +3,5 @@ import { BaseServer } from "../../Server/BaseServer";
|
||||
import { commonEditor } from "./common/editor";
|
||||
|
||||
export function nano(args: (string | number | boolean)[], server: BaseServer): void {
|
||||
return commonEditor("nano", { args, server });
|
||||
return commonEditor("nano", { args, server }, { vim: false });
|
||||
}
|
||||
|
@ -72,6 +72,7 @@ import { MathJaxContext } from "better-react-mathjax";
|
||||
import { useRerender } from "./React/hooks";
|
||||
import { HistoryProvider } from "./React/Documentation";
|
||||
import { GoRoot } from "../Go/ui/GoRoot";
|
||||
import { Settings } from "../Settings/Settings";
|
||||
import { isBitNodeFinished } from "../BitNode/BitNodeUtils";
|
||||
|
||||
const htmlLocation = location;
|
||||
@ -252,7 +253,7 @@ export function GameRoot(): React.ReactElement {
|
||||
<ScriptEditorRoot
|
||||
files={pageWithContext.files ?? new Map()}
|
||||
hostname={pageWithContext.options?.hostname ?? Player.getCurrentServer().hostname}
|
||||
vim={!!pageWithContext.options?.vim}
|
||||
vim={pageWithContext.options === undefined ? Settings.MonacoDefaultToVim : pageWithContext.options.vim}
|
||||
/>
|
||||
);
|
||||
break;
|
||||
|
@ -89,7 +89,7 @@ export type PageWithContext =
|
||||
| { page: SimplePage };
|
||||
|
||||
export interface ScriptEditorRouteOptions {
|
||||
vim?: boolean;
|
||||
vim: boolean;
|
||||
hostname?: string;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user