src/vs/base/browser/ui/list/listWidget.ts/TypeNavigationController/enable
class TypeNavigationController:	private enable(): void {
		if (this.enabled) {
			return;
		}

		let typing = false;

		const onChar = this.enabledDisposables.add(Event.chain(this.enabledDisposables.add(new DomEmitter(this.view.domNode, 'keydown')).event))
			.filter(e => !isInputElement(e.target as HTMLElement))
			.filter(() => this.mode === TypeNavigationMode.Automatic || this.triggered)
			.map(event => new StandardKeyboardEvent(event))
			.filter(e => typing || this.keyboardNavigationEventFilter(e))
			.filter(e => this.delegate.mightProducePrintableCharacter(e))
			.forEach(e => EventHelper.stop(e, true))
			.map(event => event.browserEvent.key)
			.event;

		const onClear = Event.debounce<string, null>(onChar, () => null, 800, undefined, undefined, this.enabledDisposables);
		const onInput = Event.reduce<string | null, string | null>(Event.any(onChar, onClear), (r, i) => i === null ? null : ((r || '') + i), undefined, this.enabledDisposables);

		onInput(this.onInput, this, this.enabledDisposables);
		onClear(this.onClear, this, this.enabledDisposables);

		onChar(() => typing = true, undefined, this.enabledDisposables);
		onClear(() => typing = false, undefined, this.enabledDisposables);

		this.enabled = true;
		this.triggered = false;
	}