From b96141c2fdd4e02819e9beef28d5e29b8fc224dd Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 5 Sep 2017 11:55:59 -0700 Subject: [PATCH] Make reference links in md docs scroll to reference block instead --- extensions/markdown/src/documentLinkProvider.ts | 6 +++--- extensions/markdown/src/extension.ts | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/extensions/markdown/src/documentLinkProvider.ts b/extensions/markdown/src/documentLinkProvider.ts index c87486f0204..5f6da674c78 100644 --- a/extensions/markdown/src/documentLinkProvider.ts +++ b/extensions/markdown/src/documentLinkProvider.ts @@ -52,11 +52,11 @@ export default class LinkProvider implements vscode.DocumentLinkProvider { const base = path.dirname(document.uri.fsPath); const text = document.getText(); - return this.privateInlineLinks(text, document, base) + return this.providerInlineLinks(text, document, base) .concat(this.provideReferenceLinks(text, document, base)); } - private privateInlineLinks( + private providerInlineLinks( text: string, document: vscode.TextDocument, base: string @@ -108,7 +108,7 @@ export default class LinkProvider implements vscode.DocumentLinkProvider { if (link) { results.push(new vscode.DocumentLink( new vscode.Range(linkStart, linkEnd), - normalizeLink(document, link.link, base))); + vscode.Uri.parse(`command:_markdown.moveCursorToPosition?${encodeURIComponent(JSON.stringify([link.linkRange.start.line, link.linkRange.start.character]))}`))); } } catch (e) { // noop diff --git a/extensions/markdown/src/extension.ts b/extensions/markdown/src/extension.ts index d6dc45c7227..2dd53b296d7 100644 --- a/extensions/markdown/src/extension.ts +++ b/extensions/markdown/src/extension.ts @@ -102,6 +102,16 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerCommand('markdown.showPreviewToSide', uri => showPreview(cspArbiter, uri, true))); context.subscriptions.push(vscode.commands.registerCommand('markdown.showSource', showSource)); + context.subscriptions.push(vscode.commands.registerCommand('_markdown.moveCursorToPosition', (line: number, character: number) => { + if (!vscode.window.activeTextEditor) { + return; + } + const position = new vscode.Position(line, character); + const selection = new vscode.Selection(position, position); + vscode.window.activeTextEditor.revealRange(selection); + vscode.window.activeTextEditor.selection = selection; + })); + context.subscriptions.push(vscode.commands.registerCommand('_markdown.revealLine', (uri, line) => { const sourceUri = vscode.Uri.parse(decodeURIComponent(uri)); logger.log('revealLine', { uri, sourceUri: sourceUri.toString(), line });