mirror of
https://github.com/coder/code-server.git
synced 2026-05-07 21:07:26 +02:00
115 lines
3.2 KiB
TypeScript
115 lines
3.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { KeyCode, KeyCodeUtils, Keybinding, SimpleKeybinding } from 'vs/base/common/keyCodes';
|
|
import { OperatingSystem } from 'vs/base/common/platform';
|
|
import { BaseResolvedKeybinding } from 'vs/platform/keybinding/common/baseResolvedKeybinding';
|
|
|
|
/**
|
|
* Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout.
|
|
*/
|
|
export class USLayoutResolvedKeybinding extends BaseResolvedKeybinding<SimpleKeybinding> {
|
|
|
|
constructor(actual: Keybinding, os: OperatingSystem) {
|
|
super(os, actual.parts);
|
|
}
|
|
|
|
private _keyCodeToUILabel(keyCode: KeyCode): string {
|
|
if (this._os === OperatingSystem.Macintosh) {
|
|
switch (keyCode) {
|
|
case KeyCode.LeftArrow:
|
|
return '←';
|
|
case KeyCode.UpArrow:
|
|
return '↑';
|
|
case KeyCode.RightArrow:
|
|
return '→';
|
|
case KeyCode.DownArrow:
|
|
return '↓';
|
|
}
|
|
}
|
|
return KeyCodeUtils.toString(keyCode);
|
|
}
|
|
|
|
protected _getLabel(keybinding: SimpleKeybinding): string | null {
|
|
if (keybinding.isDuplicateModifierCase()) {
|
|
return '';
|
|
}
|
|
return this._keyCodeToUILabel(keybinding.keyCode);
|
|
}
|
|
|
|
protected _getAriaLabel(keybinding: SimpleKeybinding): string | null {
|
|
if (keybinding.isDuplicateModifierCase()) {
|
|
return '';
|
|
}
|
|
return KeyCodeUtils.toString(keybinding.keyCode);
|
|
}
|
|
|
|
private _keyCodeToElectronAccelerator(keyCode: KeyCode): string | null {
|
|
if (keyCode >= KeyCode.NUMPAD_0 && keyCode <= KeyCode.NUMPAD_DIVIDE) {
|
|
// Electron cannot handle numpad keys
|
|
return null;
|
|
}
|
|
|
|
switch (keyCode) {
|
|
case KeyCode.UpArrow:
|
|
return 'Up';
|
|
case KeyCode.DownArrow:
|
|
return 'Down';
|
|
case KeyCode.LeftArrow:
|
|
return 'Left';
|
|
case KeyCode.RightArrow:
|
|
return 'Right';
|
|
}
|
|
|
|
return KeyCodeUtils.toString(keyCode);
|
|
}
|
|
|
|
protected _getElectronAccelerator(keybinding: SimpleKeybinding): string | null {
|
|
if (keybinding.isDuplicateModifierCase()) {
|
|
return null;
|
|
}
|
|
return this._keyCodeToElectronAccelerator(keybinding.keyCode);
|
|
}
|
|
|
|
protected _getUserSettingsLabel(keybinding: SimpleKeybinding): string | null {
|
|
if (keybinding.isDuplicateModifierCase()) {
|
|
return '';
|
|
}
|
|
const result = KeyCodeUtils.toUserSettingsUS(keybinding.keyCode);
|
|
return (result ? result.toLowerCase() : result);
|
|
}
|
|
|
|
protected _isWYSIWYG(): boolean {
|
|
return true;
|
|
}
|
|
|
|
protected _getDispatchPart(keybinding: SimpleKeybinding): string | null {
|
|
return USLayoutResolvedKeybinding.getDispatchStr(keybinding);
|
|
}
|
|
|
|
public static getDispatchStr(keybinding: SimpleKeybinding): string | null {
|
|
if (keybinding.isModifierKey()) {
|
|
return null;
|
|
}
|
|
let result = '';
|
|
|
|
if (keybinding.ctrlKey) {
|
|
result += 'ctrl+';
|
|
}
|
|
if (keybinding.shiftKey) {
|
|
result += 'shift+';
|
|
}
|
|
if (keybinding.altKey) {
|
|
result += 'alt+';
|
|
}
|
|
if (keybinding.metaKey) {
|
|
result += 'meta+';
|
|
}
|
|
result += KeyCodeUtils.toString(keybinding.keyCode);
|
|
|
|
return result;
|
|
}
|
|
}
|