From f5d2091891f05ea0d463d298c4fcd1c80d6a895e Mon Sep 17 00:00:00 2001 From: frelodev Date: Tue, 24 Sep 2024 19:15:28 +0200 Subject: [PATCH] feat: display the users current cursor position in the tree view --- src/commands.ts | 9 +++++---- src/mapping.ts | 10 ++++++++-- src/tree.ts | 9 +++++++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 4637bdc..0e2ee0b 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -67,15 +67,15 @@ export async function join(selected: vscode.TreeItem | undefined) { LOGGER.warn(`Skipping cursor event without user: ${event}`) continue; } - let mapp = mapping.colors_cache.get(event.user) + let mapp = mapping.colors_cache.get(event.user); if (mapp === undefined) { // first time we see this user mapp = new mapping.UserDecoration(event); mapping.colors_cache.set(event.user, mapp); + provider.refresh(); } let editor = mapping.bufferMapper.by_buffer(event.buffer); - if (editor !== undefined) { - mapp.apply(editor, event); - } + mapp.update(event,editor); + /*if(event.buffer!=mapp.buffer) */provider.refresh(); } }); @@ -166,6 +166,7 @@ export async function share(selected: vscode.TreeItem | undefined) { if (locks.get(buffer_name)) { return } if (event.document.uri !== file_uri) return; // ? for (let change of event.contentChanges) { + console.log(event.contentChanges); LOGGER.debug(`onDidChangeTextDocument(event: [${change.rangeOffset}, ${change.text}, ${change.rangeOffset + change.rangeLength}])`); await buffer.send({ start: change.rangeOffset, diff --git a/src/mapping.ts b/src/mapping.ts index a14cf29..55dd766 100644 --- a/src/mapping.ts +++ b/src/mapping.ts @@ -24,34 +24,40 @@ class BufferMapper { public static instance = new BufferMapper(); } + + // TODO rename maybe? mapper.bufferMapper is a little bit overkill export let bufferMapper = BufferMapper.instance; export class UserDecoration { decoration: vscode.TextEditorDecorationType | null; color: string; + buffer: string; public constructor(event: codemp.Cursor) { let hash = codemp.hash(event.user || "anon"); this.color = colors[hash % colors.length]; this.decoration = null; + this.buffer = event.buffer; } // TODO can we avoid disposing and recreating the decoration type every time? - public apply(editor: vscode.TextEditor, event: codemp.Cursor) { + public update(event: codemp.Cursor, editor?: vscode.TextEditor) { + this.buffer=event.buffer; if (this.decoration == null) { this.decoration = vscode.window.createTextEditorDecorationType({ borderWidth: '1px', borderStyle: 'solid', borderColor: this.color, backgroundColor: this.color + '44', // add alpha + }); } const range_start: vscode.Position = new vscode.Position(event.startRow, event.startCol); // -1? const range_end: vscode.Position = new vscode.Position(event.endRow, event.endCol); // -1? idk if this works it's kinda funny, should test with someone with a working version of codemp const decorationRange = new vscode.Range(range_start, range_end); - editor.setDecorations(this.decoration, [decorationRange]); + if(editor !== undefined) editor.setDecorations(this.decoration, [decorationRange]); } public clear() { diff --git a/src/tree.ts b/src/tree.ts index 5711d9d..581b61f 100644 --- a/src/tree.ts +++ b/src/tree.ts @@ -41,8 +41,13 @@ export class CodempTreeProvider implements vscode.TreeDataProvider