Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 5ee21d4

Browse files
authored
Merge pull request #5160 from czeidler/ctrl-enter-send
Add option to send/edit a message with Ctrl + Enter / Command + Enter
2 parents c94137b + 063b268 commit 5ee21d4

File tree

5 files changed

+22
-4
lines changed

5 files changed

+22
-4
lines changed

src/components/views/rooms/EditMessageComposer.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ import EditorStateTransfer from '../../../utils/EditorStateTransfer';
2929
import classNames from 'classnames';
3030
import {EventStatus} from 'matrix-js-sdk';
3131
import BasicMessageComposer from "./BasicMessageComposer";
32-
import {Key} from "../../../Keyboard";
32+
import {Key, isOnlyCtrlOrCmdKeyEvent} from "../../../Keyboard";
3333
import MatrixClientContext from "../../../contexts/MatrixClientContext";
3434
import {Action} from "../../../dispatcher/actions";
35+
import SettingsStore from "../../../settings/SettingsStore";
3536
import CountlyAnalytics from "../../../CountlyAnalytics";
3637

3738
function _isReply(mxEvent) {
@@ -136,7 +137,10 @@ export default class EditMessageComposer extends React.Component {
136137
if (event.metaKey || event.altKey || event.shiftKey) {
137138
return;
138139
}
139-
if (event.key === Key.ENTER) {
140+
const ctrlEnterToSend = !!SettingsStore.getValue('MessageComposerInput.ctrlEnterToSend');
141+
const send = ctrlEnterToSend ? event.key === Key.ENTER && isOnlyCtrlOrCmdKeyEvent(event)
142+
: event.key === Key.ENTER;
143+
if (send) {
140144
this._sendEdit();
141145
event.preventDefault();
142146
} else if (event.key === Key.ESCAPE) {

src/components/views/rooms/SendMessageComposer.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ import * as sdk from '../../../index';
3838
import Modal from '../../../Modal';
3939
import {_t, _td} from '../../../languageHandler';
4040
import ContentMessages from '../../../ContentMessages';
41-
import {Key} from "../../../Keyboard";
41+
import {Key, isOnlyCtrlOrCmdKeyEvent} from "../../../Keyboard";
4242
import MatrixClientContext from "../../../contexts/MatrixClientContext";
4343
import RateLimitedFunc from '../../../ratelimitedfunc';
4444
import {Action} from "../../../dispatcher/actions";
45+
import SettingsStore from "../../../settings/SettingsStore";
4546
import CountlyAnalytics from "../../../CountlyAnalytics";
4647

4748
function addReplyToMessageContent(content, repliedToEvent, permalinkCreator) {
@@ -122,7 +123,11 @@ export default class SendMessageComposer extends React.Component {
122123
return;
123124
}
124125
const hasModifier = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
125-
if (event.key === Key.ENTER && !hasModifier) {
126+
const ctrlEnterToSend = !!SettingsStore.getValue('MessageComposerInput.ctrlEnterToSend');
127+
const send = ctrlEnterToSend
128+
? event.key === Key.ENTER && isOnlyCtrlOrCmdKeyEvent(event)
129+
: event.key === Key.ENTER && !hasModifier;
130+
if (send) {
126131
this._sendMessage();
127132
event.preventDefault();
128133
} else if (event.key === Key.ARROW_UP) {

src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export default class PreferencesUserSettingsTab extends React.Component {
3333
'MessageComposerInput.autoReplaceEmoji',
3434
'MessageComposerInput.suggestEmoji',
3535
'sendTypingNotifications',
36+
'MessageComposerInput.ctrlEnterToSend',
3637
];
3738

3839
static TIMELINE_SETTINGS = [

src/i18n/strings/en_EN.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,8 @@
730730
"Enable big emoji in chat": "Enable big emoji in chat",
731731
"Send typing notifications": "Send typing notifications",
732732
"Show typing notifications": "Show typing notifications",
733+
"Use Command + Enter to send a message": "Use Command + Enter to send a message",
734+
"Use Ctrl + Enter to send a message": "Use Ctrl + Enter to send a message",
733735
"Automatically replace plain text Emoji": "Automatically replace plain text Emoji",
734736
"Mirror local video feed": "Mirror local video feed",
735737
"Enable Community Filter Panel": "Enable Community Filter Panel",

src/settings/Settings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import UseSystemFontController from './controllers/UseSystemFontController';
3232
import { SettingLevel } from "./SettingLevel";
3333
import SettingController from "./controllers/SettingController";
3434
import { RightPanelPhases } from "../stores/RightPanelStorePhases";
35+
import { isMac } from '../Keyboard';
3536
import UIFeatureController from "./controllers/UIFeatureController";
3637
import { UIFeature } from "./UIFeature";
3738
import { OrderedMultiController } from "./controllers/OrderedMultiController";
@@ -324,6 +325,11 @@ export const SETTINGS: {[setting: string]: ISetting} = {
324325
displayName: _td("Show typing notifications"),
325326
default: true,
326327
},
328+
"MessageComposerInput.ctrlEnterToSend": {
329+
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
330+
displayName: isMac ? _td("Use Command + Enter to send a message") : _td("Use Ctrl + Enter to send a message"),
331+
default: false,
332+
},
327333
"MessageComposerInput.autoReplaceEmoji": {
328334
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
329335
displayName: _td('Automatically replace plain text Emoji'),

0 commit comments

Comments
 (0)