Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keyboard layout picker #75801

Merged
merged 11 commits into from
Jun 20, 2019
Prev Previous commit
Next Next commit
beautify macos keyboard layout label
  • Loading branch information
rebornix committed Jun 20, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 850cd65951b1d6e550b0ec374df0603c8dfa4b66
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@
import * as nls from 'vs/nls';
import { StatusbarAlignment, IStatusbarService, IStatusbarEntryAccessor } from 'vs/platform/statusbar/common/statusbar';
import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';
import { IKeymapService, areKeyboardLayoutsEqual } from 'vs/workbench/services/keybinding/common/keymapService';
import { IKeymapService, areKeyboardLayoutsEqual, parseKeyboardLayout } from 'vs/workbench/services/keybinding/common/keymapService';
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
import { Registry } from 'vs/platform/registry/common/platform';
import { Extensions as WorkbenchExtensions, IWorkbenchContribution, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions';
@@ -34,10 +34,10 @@ export class KeyboardLayoutPickerContribution extends Disposable implements IWor

let layout = this.keymapService.getCurrentKeyboardLayout();
if (layout) {
let layoutInfo = (<any>layout).text || (<any>layout).lang || (<any>layout).model;
let layoutInfo = parseKeyboardLayout(layout);
this.pickerElement.value = this.statusbarService.addEntry(
{
text: `Layout: ${layoutInfo}`,
text: `Layout: ${layoutInfo.label}`,
// tooltip: nls.localize('keyboard.layout.tooltip', "If you are not using a Screen Reader, please change the setting `editor.accessibilitySupport` to \"off\"."),
command: KEYBOARD_LAYOUT_OPEN_PICKER
},
@@ -49,11 +49,11 @@ export class KeyboardLayoutPickerContribution extends Disposable implements IWor

this._register(keymapService.onDidChangeKeyboardMapper(() => {
let layout = this.keymapService.getCurrentKeyboardLayout();
let layoutInfo = (<any>layout).text || (<any>layout).lang || (<any>layout).model;
let layoutInfo = parseKeyboardLayout(layout);

if (this.pickerElement.value) {
this.pickerElement.value.update({
text: `Layout: ${layoutInfo}`,
text: `Layout: ${layoutInfo.label}`,
command: KEYBOARD_LAYOUT_OPEN_PICKER
});
} else {
@@ -111,9 +111,11 @@ export class KeyboardLayoutPickerAction extends Action {

const picks: QuickPickInput[] = layouts.map(layout => {
const picked = !isAutoDetect && areKeyboardLayoutsEqual(currentLayout, layout);
const layoutInfo = parseKeyboardLayout(layout);
return {
label: (<any>layout).text || (<any>layout).lang || (<any>layout).layout,
description: ((<any>layout).id || '') + (picked ? ' (Current selection)' : ''),
label: layoutInfo.label,
id: (<any>layout).text || (<any>layout).lang || (<any>layout).layout,
description: layoutInfo.description + (picked ? ' (Current selection)' : ''),
picked: !isAutoDetect && areKeyboardLayoutsEqual(currentLayout, layout)
};
});
41 changes: 41 additions & 0 deletions src/vs/workbench/services/keybinding/common/keymapService.ts
Original file line number Diff line number Diff line change
@@ -122,3 +122,44 @@ export function areKeyboardLayoutsEqual(a: IKeyboardLayoutInfo | null, b: IKeybo

return false;
}

export function parseKeyboardLayout(layout: IKeyboardLayoutInfo | null): { label: string, description: string } {


if ((<IWindowsKeyboardLayoutInfo>layout).name) {
// windows
let windowsLayout = <IWindowsKeyboardLayoutInfo>layout;
return {
label: windowsLayout.text,
description: ''
};
}

if ((<IMacKeyboardLayoutInfo>layout).id) {
let macLayout = <IMacKeyboardLayoutInfo>layout;
if (/^com\.apple\.keylayout\./.test(macLayout.id)) {
return {
label: macLayout.id.replace(/^com\.apple\.keylayout\./, '').replace(/-/, ' '),
description: ''
};
}
if (/^.*inputmethod\./.test(macLayout.id)) {
return {
label: macLayout.id.replace(/^.*inputmethod\./, '').replace(/[-\.]/, ' '),
description: `Input Method (${macLayout.lang})`
};
}

return {
label: macLayout.lang,
description: ''
};
}

let linuxLayout = <ILinuxKeyboardLayoutInfo>layout;

return {
label: linuxLayout.layout,
description: ''
};
}