element-web/src/KeyBindingsDefaults.ts

160 lines
4.4 KiB
TypeScript
Raw Normal View History

2021-03-07 06:05:36 +00:00
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Copyright 2021 Clemens Zeidler
2021-03-07 06:05:36 +00:00
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
2021-03-07 06:05:36 +00:00
*/
import { IS_MAC, Key } from "./Keyboard";
import SettingsStore from "./settings/SettingsStore";
import SdkConfig from "./SdkConfig";
import { IKeyBindingsProvider, KeyBinding } from "./KeyBindingsManager";
2022-12-12 11:24:14 +00:00
import { CATEGORIES, CategoryName, KeyBindingAction } from "./accessibility/KeyboardShortcuts";
2022-03-14 13:25:51 +00: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);
2022-12-12 11:24:14 +00:00
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 12:11:58 +00: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 12:11:58 +00:00
};
const roomListBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.ROOM_LIST);
2021-06-29 12:11:58 +00:00
};
const roomBindings = (): KeyBinding[] => {
const bindings = getBindingsByCategory(CategoryName.ROOM);
2022-12-12 11:24:14 +00:00
if (SettingsStore.getValue("ctrlFForSearch")) {
bindings.push({
action: KeyBindingAction.SearchInRoom,
keyCombo: {
key: Key.F,
ctrlOrCmdKey: true,
},
});
}
return bindings;
2021-06-29 12:11:58 +00:00
};
const navigationBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.NAVIGATION);
};
const accessibilityBindings = (): KeyBinding[] => {
return getBindingsByCategory(CategoryName.ACCESSIBILITY);
2021-06-29 12:11:58 +00:00
};
2022-02-23 09:12:04 +00: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 09:02:18 +00:00
export const defaultBindingsProvider: IKeyBindingsProvider = {
getMessageComposerBindings: messageComposerBindings,
getAutocompleteBindings: autocompleteBindings,
getRoomListBindings: roomListBindings,
getRoomBindings: roomBindings,
getNavigationBindings: navigationBindings,
getAccessibilityBindings: accessibilityBindings,
2022-02-23 09:12:04 +00:00
getCallBindings: callBindings,
getLabsBindings: labsBindings,
2021-06-29 12:11:58 +00:00
};