Mattermost, Inc.

Using CTRL/CMD+UP to reply to a message

Hello,

We’ve been searching for a good shortcut to allow you to reply to the previous message (and in the long-term, allow you to reply to the second last message, and so on) as that’s been a hot request among the community (see feature proposal).

For replying to a post, we’re leaning towards CTRL/CMD+UP (see further details here).

However, that shortcut is currently used to reprint the previous message you’ve posted. We’re not sure how common use case that is for Mattermost community but we know CTRL/CMD+UP reprints the previous message on IRC.

So here’s our question to you: how do you feel about replacing the existing CTRL/CMD+UP with replying to a message?

Would you prefer to keep it for reprinting the previous message as IRC does? If so, what other shortcut would you recommend for replying to posts?

I didn’t know about that functionality. Now that I know that I can scroll through my previous messages, it’s kind of interesting. I would say CTRL-R would be nice, but that’s refresh. Maybe CTRL-SHIFT-UP is a compromise since it seemingly doesn’t conflict with anything?

Thanks @jasonsmith for the feedback, appreciate it

CTRL+SHIFT+UP is also an option, that’s true. One worry I had is whether the extra “SHIFT” makes the shortcut less accessible (combination of three keys instead of two) given replying to a previous message is so common. But perhaps that’s not such a big concern. At least it wouldn’t conflict with CTRL+UP.

Out of curiosity, would you find reprinting previous messages useful?

I’ve never thought about when I would need to do that before. Replying is obviously way more common. If we’re OK disrupting legacy users, maybe ctrl-up should be reply.

Aren’t we going to be running out of keys eventually? Would a meta key like used in Emacs (please, no editor wars :slight_smile:) work? Like [Esc] and then at the prompt it would display META or something, at which point you can press R for reply, F to flag, I to eat ice cream, and so on.

I’m really fine with any key just as long as Reply can actually be done from a keyboard shortcut. Many “regular users” (:alien:) have major difficulties understanding that this is not a 1:1 conversation like their SMS or WhatsApp app :slight_smile:

2 Likes

I like @joho68’s idea of a META key. Here’s some other ideas:

CTRL + R

  • Reply to previous message: CTRL + R, R
  • Reply to one above previous message: CTRL + R, 1
  • Reply to two above previous message: CTRL + R, 2
  • … etc through 10 (0; of course)
  • The 11th will have to be clicked.

Note: second key press is without letting go of CTRL.
Note: I realize now that CTRL + R is a bit … occupied …

Slash Command

Additionally, replying to the previous message may be as easy as /r like is available in many video game chat systems. For example:

/r That's a great idea! I'll get started right away.

Indicator

Some sort of indicator (like what shows up when you type the forward slash (/) would be nice. This indicator would show the message your replying to … so you know you targetted the right message.

2 Likes

Why is CTRL + R refresh? Why not just use F5? :expressionless:

I realize now that it’s a browser implementation. I use the mattermost desktop app; which is still just a browser implementation, right?

Hmmmm …

Interesting that CTRL + UP is repeat the previous message. I would expect it to be just UP like it is in almost every CLI (Bash/Terminal, Command Prompt, PowerShell, etc).

I realize that UP allows you to edit previous message. Not sure how useful that is, but maybe that should be something like CTRL + E.

/shrug

^ :frowning2:

¯\_(ツ)_/¯

@joho68 @VertigoRay Interesting idea about using META keys. We’re kind of hitting the issue of available keyboard shortcuts already, given the large amount of OS and browser-default shortcuts we want to support.

Would you know if any Windows apps use META keys for keyboard shortcuts? Would love to try them and out get a feel for how they would work.

@VertigoRay interesting idea on slash commands - not sure if it would be easy to apply it so it works for the second last reply, etc?

On other notes: CTRL+UP to print previous message surfaced from IRC, UP for editing from Slack (and other apps). Oh, and CTRL+R is the browser-default for refreshing the page

@joho68 @VertigoRay Great feedback thus far! Let’s keep the discussion going and continue evaluating the different options.

1 Like

A couple of ideas for /r would be:

  • /r last reply
  • /r1 second to last reply
  • etc …

Could also use /r to bring up the context (like the slash commands), and then use arrow keys or tab (and shift+tab) to toggle through the list. They could be combined as well: /r4 would bring up the 4th previous message to reply to, but when you realized you wanted /r5, just hit up or tab … or backspace then 5. :slight_smile:

The only windows Apps that use META keys that I’m aware of are SublimeText and Atom. They both use CTRL+P to bring up a Go To Anything menu that you can type into to search actions that are available. They also both use CTRL+K to initiate and then follow with another key to execute some custom text editing commands:

  • U: Uppercase the selection
  • L: Lowercase the selection
  • There’s many more …

Good to know about the origin of the commands that have been chosen. I’ve never been a big user of IRC, just used it when necessary. I did know about slack and knew you were mirroring them, but doesn’t mean I agree. Too each their own though. Best to follow suit with the other major players imho.

I agree with @VertigoRay, UP makes more sense to “repeat” previous message. If you ever been at a CLI prompt, that’s what one would expect. Having a shortcut to edit the previous message seems less useful/functional and could possibly be a “mouse click” action, thus releasing CTRL+UP to be used with something else. OTOH, if one wants to remain “compatible” with Slack then I guess we better leave it as is.

I am not immediately aware of a Windows app that uses the META key concept per se, unless you find a Windows version of Emacs for example. But I can’t see how this would not work in MM as long as it’s implemented in an unobtrusive way. Pick a key that doesn’t normally do something in web apps, and then build from there IMHO.

Today, something happens when I enter a colon followed by a few characters, so I get a “pop-up” for “auto completion”. We can do the same thing with a META key like [Esc]. At the editing point, [Esc] isn’t used for anything, so it’s not a “dangerous” key. It could actually be implemented not just at the beginning of text editing, but also in the middle of text editing. Make it context aware so that certain commands are not available if it’s pressed in the middle of text editing. Like so:

[At beginning of text input]

Delay pop-up for 1s, handle keyboard input, if a command is received, act. If no command is received, display pop-up. If command requires further selection, delay next pop-up for 1s, handle keyboard input, if a command is received, act. If no command is received, display next pop-up. This will allow for multi-character META sequences.

[In the middle of text input]

Same as above, but filter out things that are “destructive” in nature, e.g. leaving the current operation. So if META command R is to reply, it should not be available (nor displayed in auto-completion pop-up) while in “mid-text”.

The word META should be displayed somewhere where it’s seen to clearly indicate that “you are now in META mode”. Make any pop-up that appears as a result of a META mode timeout after 5-10s with no input, to allow for every other “system event thread” to run/be handled and not get stuck because of a pop-up, if that is an issue in your implementation.

The above “concept” would allow for quite a few cool things to be implemented:

[Esc] M, bring up usernames for @mention (could be thread or channel only)
[Esc] R, reply, does nothing in mid-text
[Esc] E, bring up emoji-popup (which is better than having to type text after a colon since I never remember the letters :slight_smile: )
[Esc] U, show users of this thread, group, whatever
[Esc] G, show group info
[Esc] F, flag the previous post (perhaps /flag is better for this)
[Esc] [Esc], same as waiting for 1s, in other words do nothing

Or, for [Esc] G, turn it into a multi-meta command like this:

[Esc] G, bring up group menu (after 1s)
[Esc] G H, change group header
[Esc] G P, change group purpose
[Esc] G A, add member, so member menu (excluding current members) is displayed after 1s of no input after A
[Esc] G R, remove member, so member menu is displayed after 1s of no input after R
[Esc] G I, view group info

“Big actions”, like Delete Group should not be META commands, you don’t do them very often and being a “mouse command” is fine for such tasks. They could, however, be available in the pop-up menu that comes after the 1s time-out.

And so on. I’m not sure how useful any of these are :), but since I’m a coder for 40 years, I can’t help myself, so feel free to disregard, I’ve got thick skin :alien:

(By the way, does a parameter to /away display the parameter as “my status” if someone hovers over my username anywhere, if not, it should :slight_smile: )

I like where you’re going with the meta key. I also like the ESC key and all the examples you mentioned. This allows the creation of a very powerful META system. :thumbsup:

You mentioned filtering out R if mid text because it might be destructive. I would prefer not filtering it out and just ensure it’s not destructive; it doesn’t have to be. Here’s the simple use-case:

  • I just typed up a paragraph reply and realized I forgot to attach it to the thread. If it’s destructive/filtered, I have to select all, then cut, then set the reply, and then paste.

The other main thing I would suggest; which is pretty obvious imo: don’t change existing functionality. Just give us another way to do cool things and let users pick their favorite way.

FYI: /away does set your status to away; which is clearly visible on your avatar with the away icon (yellow minus); compared to the online icon (green check mark). Here’s the sample:

2 Likes

Indeed @VertigoRay , this would be very powerful, and it can be extended quite a bit. What I meant by filtering out things that could be destructive is: Don’t make commands available in “mid-text” that would somehow clear the text, that’s all. So, yes, I agree with you :slight_smile:

(As for my question about /away, @VertigoRay, what I meant to ask is if I could attach a message to it, like /away Going for lunch)

@joho68 ahhhh … yeah that makes sense.

I don’t see that functionality currently, but it would definitely be nice … and follow suit well with expected functionality from other systems.

1 Like

Thanks @VertigoRay and @joho68!

and really sorry for the late reply, this slipped my mind.

I see what you mean by META keys. I think that’s actually used by JIRA, where clicking “.” brings up an action menu. I’ve attached an example below

I’m really liking this idea and agree it could be powerful. Just simply relying on different keyboard combinations

  1. results in complicated combinations that you wouldn’t remember anyways,
  2. results in eventually running out of possible options as you guys mentioned

When you suggest using META-key combinations like [ESC] G H to change group header, [ESC] G P to change group purpose, etc. what would be your thoughts on having [ESC] open the META-command, which then lists the different options. You could then search for them + choose the action you want to perform. (Kind of like CTRL+K opens the channel switcher, which lists different channels)

Thinking about a use where you’d want to remove a member but aren’t aware of the [ESC] G multi-command. In that case you could press [ESC], then R, which would have the META-command popup open with actions containing R, e.g.

Reply
Remove Member
...

UP makes more sense to “repeat” previous message. If you ever been at a CLI prompt, that’s what one would expect.

Although that’s true, most of our end users aren’t familiar with a CLI prompt and hence wouldn’t expect UP to “repeat” the previous message. UP is also more familiar with users coming from other apps like Slack…

This could be very, very good. And it would certainly make it a lot easier to maintain a thread/discussion/whatever without having to clickety-clickety-click around with the mouse just to perform basic actions, like replying. And 1+2 is definitely what I’d like to see eliminated.

I think the timer handling should be implemented to allow for less “screen noise” (pop-up) for those that have learned META commands. So if I press ESC G H in rapid succession, I don’t get to see the menu pop up at all. But if I wait for, say, 0.7s between ESC and G, I would get the full META menu, if the input timer expires between the G and the H, I would get the menu, and have the selection bar be positioned on the Group commands.

But either way, if we get the META “system” implemented, I think we have come a long way towards a more efficient interface.

Thanks @joho68, that’s a really good point

I’m wondering about the difference between slash commands and the META key – as they both achieve the same.

E.g. /header could open the channel header modal, or /header This is a new header would update the header to This is a new header.

Wondering your thoughts, given you have more experience with the META shortcuts.

@VertigoRay Feel free to share your thoughts too.

There may not necessarily be a difference in the types of actions available with slash commands and META keys. I guess that is mainly due to historical reasons and Slack compatibility. Some things should perhaps be slash commands, such as the one you suggest (/header).

I think the META key should be used to develop a “complete” set of keyboard shortcuts to control/handle everyday actions such as replying, pinning, editing, deleting, and so on. At least that’s where the top priority should be. I also think that this leaves us more freedom to follow Slack and others on potential slash commands that are or may become available.

And, perhaps the most important reason of all, using this “system” will help us avoid running into conflicts with the web browser, regardless of OS platform and what not.

:mytwocents: :slight_smile:

Very cool – would you be open to working together on the design and implementation? Agree it could be very powerful and would love to work with you on it.

I could share the idea with others and get their input as well.