| | import * as vscode from 'vscode';
|
| |
|
| | |
| | |
| |
|
| | class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
|
| |
|
| | static readonly kind = vscode.DocumentDropOrPasteEditKind.Empty.append('text', 'custom', 'count');
|
| |
|
| | static readonly countMimeType = 'application/vnd.code.copydemo-copy-count';
|
| |
|
| | private count = 0;
|
| |
|
| | |
| | |
| |
|
| | prepareDocumentPaste(
|
| | _document: vscode.TextDocument,
|
| | _ranges: readonly vscode.Range[],
|
| | dataTransfer: vscode.DataTransfer,
|
| | _token: vscode.CancellationToken
|
| | ) {
|
| |
|
| | dataTransfer.set(CopyCountPasteEditProvider.countMimeType, new vscode.DataTransferItem(this.count++));
|
| | }
|
| |
|
| | |
| | |
| |
|
| | async provideDocumentPasteEdits(
|
| | _document: vscode.TextDocument,
|
| | _ranges: readonly vscode.Range[],
|
| | dataTransfer: vscode.DataTransfer,
|
| | _context: vscode.DocumentPasteEditContext,
|
| | token: vscode.CancellationToken
|
| | ): Promise<vscode.DocumentPasteEdit[] | undefined> {
|
| |
|
| | const countDataTransferItem = dataTransfer.get(CopyCountPasteEditProvider.countMimeType);
|
| | if (!countDataTransferItem) {
|
| | return;
|
| | }
|
| |
|
| | const count = await countDataTransferItem.asString();
|
| | if (token.isCancellationRequested) {
|
| | return;
|
| | }
|
| |
|
| |
|
| | const textDataTransferItem = dataTransfer.get('text/plain');
|
| | if (!textDataTransferItem) {
|
| | return;
|
| | }
|
| |
|
| | const text = await textDataTransferItem.asString();
|
| | if (token.isCancellationRequested) {
|
| | return;
|
| | }
|
| |
|
| |
|
| | const snippet = new vscode.SnippetString();
|
| | snippet.appendText(`(copy #${count}) ${text}`);
|
| |
|
| | return [
|
| | new vscode.DocumentPasteEdit(snippet, "Insert with copy count sample", CopyCountPasteEditProvider.kind),
|
| | ];
|
| | }
|
| | }
|
| |
|
| | export function activate(context: vscode.ExtensionContext) {
|
| |
|
| | const selector: vscode.DocumentSelector = { language: 'plaintext' };
|
| |
|
| |
|
| | context.subscriptions.push(vscode.languages.registerDocumentPasteEditProvider(selector, new CopyCountPasteEditProvider(), {
|
| |
|
| | providedPasteEditKinds: [CopyCountPasteEditProvider.kind],
|
| |
|
| |
|
| | copyMimeTypes: [CopyCountPasteEditProvider.countMimeType],
|
| |
|
| |
|
| | pasteMimeTypes: ['text/plain', CopyCountPasteEditProvider.countMimeType],
|
| | }));
|
| | }
|
| |
|