From c5b271a096d5cf581100bcc26e9cea6b8308cd82 Mon Sep 17 00:00:00 2001 From: johnfn Date: Sun, 29 May 2016 00:49:03 -0400 Subject: [PATCH] Add rudimentary register implementation. --- package.json | 3 +-- src/operator/put.ts | 17 +++++------------ src/register/register.ts | 31 +++++++++++++++++++++++++++++++ src/textEditor.ts | 11 ++++------- test/mode/modeNormal.test.ts | 5 +---- test/operator/put.test.ts | 10 +++------- test/textEditor.test.ts | 4 ++-- typings.json | 4 ---- 8 files changed, 47 insertions(+), 38 deletions(-) create mode 100644 src/register/register.ts diff --git a/package.json b/package.json index c33f99f99f4..f83def7f6ea 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,7 @@ "postinstall": "node ./node_modules/vscode/bin/install && gulp init" }, "dependencies": { - "lodash": "^4.12.0", - "copy-paste": "^1.2.0" + "lodash": "^4.12.0" }, "devDependencies": { "gulp": "^3.9.1", diff --git a/src/operator/put.ts b/src/operator/put.ts index 718bbf45fba..40adfce5b88 100644 --- a/src/operator/put.ts +++ b/src/operator/put.ts @@ -1,10 +1,10 @@ "use strict"; -import { paste } from 'copy-paste'; import { Position } from './../motion/position'; import { Operator } from './operator'; import { ModeHandler } from './../mode/modeHandler.ts'; import { TextEditor } from './../textEditor'; +import { Register } from './../register/register'; export class PutOperator extends Operator { @@ -18,16 +18,9 @@ export class PutOperator extends Operator { * Run this operator on a range. */ public async run(start: Position, end: Position): Promise { - return new Promise(async (resolve, reject) => { - paste(async (err, data) => { - if (err) { - reject(); - } else { - await TextEditor.insertAt(data, start.getRight()); - this.modeHandler.currentMode.motion.moveTo(start.line, start.getRight().character); - resolve(); - } - }); - }); + const data = Register.get(); + + await TextEditor.insertAt(data, start.getRight()); + this.modeHandler.currentMode.motion.moveTo(start.line, start.getRight().character); } } \ No newline at end of file diff --git a/src/register/register.ts b/src/register/register.ts new file mode 100644 index 00000000000..051dc479fb7 --- /dev/null +++ b/src/register/register.ts @@ -0,0 +1,31 @@ +export class Register { + private static validRegisters = [ + '"' + ]; + + private static registers: {[key: string]: string } = {}; + + /** + * Puts content in a register. If none is specified, uses the default + * register ". + */ + public static put(content: string, register: string = '"'): void { + if (Register.validRegisters.indexOf(register) === -1) { + throw new Error(`Invalid register ${register}`); + } + + Register.registers[register] = content; + } + + /** + * Gets content from a register. If none is specified, uses the default + * register ". + */ + public static get(register: string = '"'): string { + if (Register.validRegisters.indexOf(register) === -1) { + throw new Error(`Invalid register ${register}`); + } + + return Register.registers[register]; + } +} \ No newline at end of file diff --git a/src/textEditor.ts b/src/textEditor.ts index 6529ca619b3..f499dc877e6 100644 --- a/src/textEditor.ts +++ b/src/textEditor.ts @@ -1,7 +1,7 @@ "use strict"; import * as vscode from "vscode"; -import {copy} from "copy-paste"; +import { Register } from './register/register'; export class TextEditor { static async insert(text: string): Promise { @@ -17,12 +17,9 @@ export class TextEditor { } static async copy(range: vscode.Range): Promise { - return new Promise((resolve, reject) => { - const text = vscode.window.activeTextEditor.document.getText(range); - copy(text, (err) => { - (err) ? reject() : resolve(); - }); - }); + const text = vscode.window.activeTextEditor.document.getText(range); + + Register.put(text); } static async delete(range: vscode.Range): Promise { diff --git a/test/mode/modeNormal.test.ts b/test/mode/modeNormal.test.ts index 75abe89edaa..a920997a9f5 100644 --- a/test/mode/modeNormal.test.ts +++ b/test/mode/modeNormal.test.ts @@ -1,11 +1,8 @@ "use strict"; import * as assert from 'assert'; -import {CommandKeyMap} from '../../src/configuration/commandKeyMap'; import {setupWorkspace, cleanUpWorkspace, assertEqualLines, assertEqual} from './../testUtils'; -import {NormalMode} from '../../src/mode/modeNormal'; import {ModeName} from '../../src/mode/mode'; -import {Motion, MotionMode} from '../../src/motion/motion'; import {TextEditor} from '../../src/textEditor'; import {ModeHandler} from '../../src/mode/modeHandler'; @@ -114,7 +111,7 @@ suite("Mode Normal", () => { ]); await assertEqualLines(["te"]); - await modeHandler.handleKeyEvent('D') + await modeHandler.handleKeyEvent('D'); await assertEqualLines(["t"]); }); diff --git a/test/operator/put.test.ts b/test/operator/put.test.ts index 430c4cfd7ee..f22a596a022 100644 --- a/test/operator/put.test.ts +++ b/test/operator/put.test.ts @@ -2,12 +2,12 @@ import * as assert from 'assert'; import * as vscode from 'vscode'; -import { copy } from "copy-paste"; import { ModeHandler } from "../../src/mode/modeHandler"; import { PutOperator } from "../../src/operator/put"; import { TextEditor } from '../../src/textEditor'; import { Position, PositionOptions } from "../../src/motion/position"; import { setupWorkspace, cleanUpWorkspace } from '../testUtils'; +import { Register } from '../../src/register/register'; suite("put operator", () => { suiteSetup(setupWorkspace); @@ -20,9 +20,7 @@ suite("put operator", () => { const mode = new ModeHandler(); const put = new PutOperator(mode); - await new Promise(resolve => { - copy(expectedText, () => resolve()); - }); + Register.put(expectedText); await put.run(position, position); @@ -43,9 +41,7 @@ suite("put operator", () => { const mode = new ModeHandler(); const put = new PutOperator(mode); - await new Promise(resolve => { - copy(phrase, () => resolve()); - }); + Register.put(phrase); // using ^ to show the cusor position // before : the dog diff --git a/test/textEditor.test.ts b/test/textEditor.test.ts index 714b1bae45c..e0f26006280 100644 --- a/test/textEditor.test.ts +++ b/test/textEditor.test.ts @@ -2,9 +2,9 @@ import * as assert from 'assert'; import * as vscode from 'vscode'; -import {paste} from "copy-paste"; import {TextEditor} from './../src/textEditor'; import {setupWorkspace, cleanUpWorkspace} from './testUtils'; +import { Register } from './../src/register/register'; suite("text editor", () => { suiteSetup(setupWorkspace); @@ -68,7 +68,7 @@ suite("text editor", () => { const range = vscode.window.activeTextEditor.document.lineAt(0).range; await TextEditor.delete(range); - const actualText = paste(); + const actualText = Register.get(); assert.equal(actualText, expectedText); }); }); diff --git a/typings.json b/typings.json index d6f1732cbd2..9d08079d8fd 100644 --- a/typings.json +++ b/typings.json @@ -1,10 +1,6 @@ { "name": "vim", - "ambientDependencies": { - "copy-paste": "registry:dt/copy-paste#1.1.3+20160117130525" - }, "globalDependencies": { - "copy-paste": "registry:dt/copy-paste#1.1.3+20160117130525", "lodash": "registry:dt/lodash#3.10.0+20160330154726" } }