diff --git a/css/ui.css b/css/ui.css index bc5f9d0c..71e26905 100644 --- a/css/ui.css +++ b/css/ui.css @@ -159,6 +159,9 @@ div.is-busy-unused { #error_alert_msg { margin-right: 2em; } +#error_alert_msg a { + cursor: pointer; +} div.menu_div { position: absolute; width: 200px; diff --git a/src/ide/ui.ts b/src/ide/ui.ts index 193da4ce..f4a5e7e4 100644 --- a/src/ide/ui.ts +++ b/src/ide/ui.ts @@ -870,7 +870,7 @@ function getErrorElement(err: WorkerError) { link.click((ev) => { var wnd = projectWindows.createOrShow(path); if (wnd instanceof SourceEditor) { - wnd.setCurrentLine(err, true); + wnd.navigateToLine(err.line); } }); } diff --git a/src/ide/views/editors.ts b/src/ide/views/editors.ts index 6e4e14fd..01fb8c1b 100644 --- a/src/ide/views/editors.ts +++ b/src/ide/views/editors.ts @@ -341,6 +341,19 @@ export class SourceEditor implements ProjectView { }); } + navigateToLine(line: number) { + if (line < 1 || line > this.editor.state.doc.lines) return; + const targetLine = this.editor.state.doc.line(line); + this.editor.dispatch({ + selection: { anchor: targetLine.from }, + effects: [ + highlightLines.effect.of({ start: line, end: line }), + EditorView.scrollIntoView(targetLine.from, { y: "center" }), + ], + }); + this.editor.focus(); + } + getValue(): string { return this.editor.state.doc.toString(); } diff --git a/src/ide/windows.ts b/src/ide/windows.ts index 096c5fb7..07a80037 100644 --- a/src/ide/windows.ts +++ b/src/ide/windows.ts @@ -71,7 +71,7 @@ export class ProjectWindows { this.refreshErrors(); wnd.setVisible && wnd.setVisible(true); this.id2showfn[id] && this.id2showfn[id](id, wnd); - } else { + } else if (moveCursor) { this.refresh(moveCursor); } this.activeid = id;