A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.1 KiB
54 lines
1.1 KiB
import Key from './Key'; |
|
|
|
export default class KeySequence { |
|
constructor( |
|
public readonly keys: Key[], |
|
) { |
|
} |
|
|
|
push(key: Key): number { |
|
return this.keys.push(key); |
|
} |
|
|
|
length(): number { |
|
return this.keys.length; |
|
} |
|
|
|
startsWith(o: KeySequence): boolean { |
|
if (this.keys.length < o.keys.length) { |
|
return false; |
|
} |
|
for (let i = 0; i < o.keys.length; ++i) { |
|
if (!this.keys[i].equals(o.keys[i])) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
|
|
static fromMapKeys(keys: string): KeySequence { |
|
const fromMapKeysRecursive = ( |
|
remaining: string, mappedKeys: Key[], |
|
): Key[] => { |
|
if (remaining.length === 0) { |
|
return mappedKeys; |
|
} |
|
|
|
let nextPos = 1; |
|
if (remaining.startsWith('<')) { |
|
let ltPos = remaining.indexOf('>'); |
|
if (ltPos > 0) { |
|
nextPos = ltPos + 1; |
|
} |
|
} |
|
|
|
return fromMapKeysRecursive( |
|
remaining.slice(nextPos), |
|
mappedKeys.concat([Key.fromMapKey(remaining.slice(0, nextPos))]) |
|
); |
|
}; |
|
|
|
let data = fromMapKeysRecursive(keys, []); |
|
return new KeySequence(data); |
|
} |
|
}
|
|
|