diff --git a/package.json b/package.json index 9248414..01ebc48 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,11 @@ "command": "codemp.jump", "when": "view == codemp-tree-view && viewItem == user", "group": "inline" + }, + { + "command": "codemp.follow", + "when": "view == codemp-tree-view && viewItem == user", + "group": "inline" } ] }, @@ -187,6 +192,13 @@ "category": "codemp", "icon": "$(debug-console-evaluation-input)" } + , + { + "command": "codemp.follow", + "title": "Follow User", + "category": "codemp", + "icon": "$(debug-console-evaluation-input)" + } ], "configuration": { "title": "codemp", diff --git a/src/commands/workspaces.ts b/src/commands/workspaces.ts index a7978a9..a179d78 100644 --- a/src/commands/workspaces.ts +++ b/src/commands/workspaces.ts @@ -6,6 +6,7 @@ import { LOGGER, provider } from '../extension'; export let workspace: codemp.Workspace | null = null; +export let doFollow: boolean = false; export function setWorkspace(ws: codemp.Workspace | null) { @@ -25,7 +26,10 @@ export async function jump(selected: vscode.TreeItem | undefined) { } if (!user) user = await vscode.window.showInputBox({ prompt: "username" }); if (!user) return; // user cancelled with ESC + executeJump(user); +} +export async function executeJump(user: string) { 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); @@ -39,6 +43,23 @@ export async function jump(selected: vscode.TreeItem | undefined) { editor.revealRange(cursor_range, vscode.TextEditorRevealType.InCenter); } +export async function follow(selected: vscode.TreeItem | undefined) { + doFollow=!doFollow + if (client === null) return vscode.window.showWarningMessage("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 = await vscode.window.showInputBox({ prompt: "username" }); + if (!user) return; // user cancelled with ESC + while(doFollow){ + executeJump(user); + } +} export async function createBuffer() { let bufferName: any = (await vscode.window.showInputBox({ prompt: "path of the buffer to create" })); @@ -62,5 +83,5 @@ export async function deleteBuffer() { await workspace.delete(bufferName); vscode.window.showInformationMessage(`Deleted buffer :${bufferName}`); listBuffers(); - + } diff --git a/src/extension.ts b/src/extension.ts index c34c608..b823dca 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,7 +3,7 @@ import * as codemp from 'codemp'; import { client, connect, join, refresh, createWorkspace, inviteToWorkspace, listWorkspaces, leave } from './commands/client'; import { CodempTreeProvider } from './tree'; import * as mapping from './mapping'; -import { workspace, jump, listBuffers, createBuffer, deleteBuffer } from './commands/workspaces' +import { workspace, jump, listBuffers, createBuffer, deleteBuffer, follow } from './commands/workspaces' import { attach, share, sync, apply_changes_to_buffer, detach } from './commands/buffers' export let provider = new CodempTreeProvider(); @@ -46,6 +46,7 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand('codemp.sync', sync), vscode.commands.registerCommand('codemp.refresh', refresh), vscode.commands.registerCommand('codemp.jump', jump), + vscode.commands.registerCommand('codemp.follow', follow), ]) { context.subscriptions.push(cmd); }