diff --git a/services/web/frontend/js/features/ide-react/context/editor-manager-context.tsx b/services/web/frontend/js/features/ide-react/context/editor-manager-context.tsx index 8781af8e3e..3ab33ff7fc 100644 --- a/services/web/frontend/js/features/ide-react/context/editor-manager-context.tsx +++ b/services/web/frontend/js/features/ide-react/context/editor-manager-context.tsx @@ -246,7 +246,8 @@ export const EditorManagerProvider: FC = ({ children }) => { goToLineEmitter( options.gotoLine, options.gotoColumn ?? 0, - options.syncToPdf ?? false + options.syncToPdf ?? false, + options.selectionLength ) }, [goToLineEmitter] diff --git a/services/web/frontend/js/features/ide-react/types/goto-line-options.ts b/services/web/frontend/js/features/ide-react/types/goto-line-options.ts index 2fcd1d8417..bf4048ffab 100644 --- a/services/web/frontend/js/features/ide-react/types/goto-line-options.ts +++ b/services/web/frontend/js/features/ide-react/types/goto-line-options.ts @@ -1,5 +1,6 @@ export interface GotoLineOptions { gotoLine: number gotoColumn?: number + selectionLength?: number syncToPdf?: boolean } diff --git a/services/web/frontend/js/features/source-editor/extensions/cursor-position.ts b/services/web/frontend/js/features/source-editor/extensions/cursor-position.ts index 52579b1940..3a9ccf214c 100644 --- a/services/web/frontend/js/features/source-editor/extensions/cursor-position.ts +++ b/services/web/frontend/js/features/source-editor/extensions/cursor-position.ts @@ -134,14 +134,17 @@ const dispatchSelectionAndScroll = ( export const setCursorLineAndScroll = ( view: EditorView, lineNumber: number, - columnNumber = 0 + columnNumber = 0, + selectionLength?: number ) => { // TODO: map the position through any changes since the previous compile? let selectionRange try { const pos = findValidPosition(view.state.doc, lineNumber, columnNumber) - selectionRange = EditorSelection.cursor(pos) + selectionRange = selectionLength + ? EditorSelection.range(pos, pos + selectionLength) + : EditorSelection.cursor(pos) } catch (error) { // ignore invalid cursor position debugConsole.debug('invalid cursor position', error) diff --git a/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts b/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts index 4c9d510aff..86d5ebd104 100644 --- a/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts +++ b/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts @@ -468,8 +468,8 @@ function useCodeMirrorScope(view: EditorView) { const emitSyncToPdf = useScopeEventEmitter('cursor:editor:syncToPdf') const handleGoToLine = useCallback( - (event, lineNumber, columnNumber, syncToPdf) => { - setCursorLineAndScroll(view, lineNumber, columnNumber) + (event, lineNumber, columnNumber, syncToPdf, selectionLength) => { + setCursorLineAndScroll(view, lineNumber, columnNumber, selectionLength) if (syncToPdf) { emitSyncToPdf() }