Files
element-web/src/KeyBindingsDefaults.ts
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

160 lines
4.5 KiB
TypeScript
Raw Normal View History

2021-03-07 19:05:36 +13:00
/*
2024-09-09 14:57:16 +01:00
Copyright 2024 New Vector Ltd.
Copyright 2022 Šimon Brandner <simon.bra.ag@gmail.com>
2024-09-09 14:57:16 +01:00
Copyright 2021 Clemens Zeidler
2021-03-07 19:05:36 +13:00
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
2024-09-09 14:57:16 +01:00
Please see LICENSE files in the repository root for full details.
2021-03-07 19:05:36 +13:00
*/
import { IS_MAC, Key } from "./Keyboard";
import SettingsStore from "./settings/SettingsStore";
import SdkConfig from "./SdkConfig";
2025-02-05 13:25:06 +00:00
import { type IKeyBindingsProvider, type KeyBinding } from "./KeyBindingsManager";
import { CATEGORIES, CategoryName, KeyBindingAction } from "./accessibility/KeyboardShortcuts";
2022-03-14 14:25:51 +01:00
import { getKeyboardShortcuts } from "./accessibility/KeyboardShortcutUtils";
export const getBindingsByCategory = (category: CategoryName): KeyBinding[] => {
return CATEGORIES[category].settingNames.reduce<KeyBinding[]>((bindings, action) => {
const keyCombo = getKeyboardShortcuts()[action]?.default;
if (keyCombo) {
bindings.push({ action, keyCombo });
}
return bindings;
}, []);
};
const messageComposerBindings = (): KeyBinding[] => {
const bindings = getBindingsByCategory(CategoryName.COMPOSER);
if (SettingsStore.getValue("MessageComposerInput.ctrlEnterToSend")) {
bindings.push({
action: KeyBindingAction.SendMessage,
keyCombo: {
key: Key.ENTER,
ctrlOrCmdKey: true,
},
});
bindings.push({
action: KeyBindingAction.NewLine,
keyCombo: {
key: Key.ENTER,
},
});
bindings.push({
action: KeyBindingAction.NewLine,
keyCombo: {
key: Key.ENTER,
shiftKey: true,
},
});
} else {
bindings.push({
action: KeyBindingAction.SendMessage,
keyCombo: {
key: Key.ENTER,
},
});
bindings.push({
action: KeyBindingAction.NewLine,
keyCombo: {
key: Key.ENTER,
shiftKey: true,
},
});
if (IS_MAC) {
bindings.push({
action: KeyBindingAction.NewLine,
keyCombo: {
key: Key.ENTER,
altKey: true,
},
});
}
}
return bindings;
2021-06-29 13:11:58 +01:00
};
const autocompleteBindings = (): KeyBinding[] => {
const bindings = getBindingsByCategory(CategoryName.AUTOCOMPLETE);
bindings.push({
action: KeyBindingAction.ForceCompleteAutocomplete,
keyCombo: {
key: Key.TAB,
},
});
bindings.push({
action: KeyBindingAction.ForceCompleteAutocomplete,
keyCombo: {
key: Key.TAB,
ctrlKey: true,
},
});
bindings.push({
action: KeyBindingAction.CompleteAutocomplete,
keyCombo: {
key: Key.ENTER,
},
});
bindings.push({
action: KeyBindingAction.CompleteAutocomplete,
keyCombo: {
key: Key.ENTER,
ctrlKey: true,
},
});
return bindings;
2021-06-29 13:11:58 +01:00
};
const roomListBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.ROOM_LIST);
2021-06-29 13:11:58 +01:00
};
const roomBindings = (): KeyBinding[] => {
const bindings = getBindingsByCategory(CategoryName.ROOM);
if (SettingsStore.getValue("ctrlFForSearch")) {
bindings.push({
action: KeyBindingAction.SearchInRoom,
keyCombo: {
key: Key.F,
ctrlOrCmdKey: true,
},
});
}
return bindings;
2021-06-29 13:11:58 +01:00
};
const navigationBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.NAVIGATION);
};
const accessibilityBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.ACCESSIBILITY);
2021-06-29 13:11:58 +01:00
};
2022-02-23 10:12:04 +01:00
const callBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.CALLS);
};
const labsBindings = (): KeyBinding[] => {
if (!SdkConfig.get("show_labs_settings")) return [];
return getBindingsByCategory(CategoryName.LABS);
};
2021-03-05 22:02:18 +13:00
export const defaultBindingsProvider: IKeyBindingsProvider = {
getMessageComposerBindings: messageComposerBindings,
getAutocompleteBindings: autocompleteBindings,
getRoomListBindings: roomListBindings,
getRoomBindings: roomBindings,
getNavigationBindings: navigationBindings,
getAccessibilityBindings: accessibilityBindings,
2022-02-23 10:12:04 +01:00
getCallBindings: callBindings,
getLabsBindings: labsBindings,
2021-06-29 13:11:58 +01:00
};