diff --git a/package.json b/package.json index 215874a..1d7581a 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,11 @@ "command": "codemp.sync", "when": "view == codemp-tree-view && viewItem == buffer_active", "group": "inline" + }, + { + "command": "codemp.jump", + "when": "view == codemp-tree-view && viewItem == user", + "group": "inline" } ] }, @@ -168,6 +173,12 @@ "title": "Refresh", "category": "codemp", "icon": "$(extensions-refresh)" + }, + { + "command": "codemp.jump", + "title": "Jump", + "category": "codemp", + "icon": "$(debug-step-into)" } ], "configuration": { diff --git a/src/commands.ts b/src/commands.ts index 0e2ee0b..dc17313 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -418,6 +418,31 @@ export async function refresh() { provider.refresh(); } +export async function jump(selected: vscode.TreeItem | undefined){ + if (client === null) throw "connect first"; + let user; + if (selected !== undefined && selected.label !== undefined) { + if (typeof(selected.label) === 'string') { + user = selected.label; + } else { + user = selected.label.label; + } + } + if(user) user = user.split(' (')[0];//Label on tree also contains Buffer name along with username + else user = await vscode.window.showInputBox({ prompt: "username"}); + if (!user) return; // user cancelled with ESC + + let user_hl = mapping.colors_cache.get(user); + if (user_hl === undefined) return vscode.window.showWarningMessage("unknown position of such user"); + let uri = mapping.bufferMapper.uri_by_buffer(user_hl.buffer); + if (uri === undefined) { + return vscode.window.showWarningMessage("user is on an untracked buffer: "+ user_hl.buffer);} + let editor = await vscode.window.showTextDocument(uri, { preserveFocus: false }); + let range_start: vscode.Position = new vscode.Position(user_hl.startRow, user_hl.startCol); + let range_end: vscode.Position = new vscode.Position(user_hl.endRow, user_hl.endCol); + let cursor_range = new vscode.Range(range_start, range_end); + editor.revealRange(cursor_range, vscode.TextEditorRevealType.InCenter); +} // This method is called when your extension is deactivated export function deactivate() { diff --git a/src/tree.ts b/src/tree.ts index 581b61f..f8c9d91 100644 --- a/src/tree.ts +++ b/src/tree.ts @@ -47,7 +47,7 @@ export class CodempTreeProvider implements vscode.TreeDataProvider