Skip to content

Commit

Permalink
Sort registers properly in :reg[isters] command
Browse files Browse the repository at this point in the history
  • Loading branch information
J-Fields committed Aug 17, 2020
1 parent 605064d commit c7e5ca2
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions src/cmd_line/commands/register.ts
Expand Up @@ -46,15 +46,32 @@ export class RegisterCommand extends node.CommandBase {
}
}

private regSortOrder(register: string): number {
const specials = ['-', '*', '+', '.', ':', '%', '#', '/', '='];
if (register === '"') {
return 0;
} else if (register >= '0' && register <= '9') {
return 10 + parseInt(register, 10);
} else if (register >= 'a' && register <= 'z') {
return 100 + (register.charCodeAt(0) - 'a'.charCodeAt(0));
} else if (specials.includes(register)) {
return 1000 + specials.indexOf(register);
} else {
throw new Error(`Unexpected register ${register}`);
}
}

async execute(vimState: VimState): Promise<void> {
if (this.arguments.registers.length === 1) {
await this.displayRegisterValue(vimState, this.arguments.registers[0]);
} else {
const currentRegisterKeys = Register.getKeys().filter(
(reg) =>
reg !== '_' &&
(this.arguments.registers.length === 0 || this.arguments.registers.includes(reg))
);
const currentRegisterKeys = Register.getKeys()
.filter(
(reg) =>
reg !== '_' &&
(this.arguments.registers.length === 0 || this.arguments.registers.includes(reg))
)
.sort((reg1: string, reg2: string) => this.regSortOrder(reg1) - this.regSortOrder(reg2));
const registerKeyAndContent = new Array<vscode.QuickPickItem>();

for (let registerKey of currentRegisterKeys) {
Expand Down

0 comments on commit c7e5ca2

Please sign in to comment.