Contribute to Open Source. Search issue labels to find the right project for you!

"Copy link to conversation" doesn't work when reached from keyboard


If on a message I hit i to pull up the message actions menu, then down a bunch to get to the “Copy link to conversation” option, and enter to select it: * I get the nice green “Copied!” message that tells me the link was copied, but * nothing is actually copied. When I go paste from the clipboard elsewhere, I get whatever was previously there. (This is true of both the ctrl-v and the middle-click clipboards.)

On the other hand if I do the same thing with the mouse, hitting the down-caret to open the menu and then the “Copy link to conversation” option, it works fine. (It goes into both clipboards, in fact.)

I’m pretty sure this used to work, so it seems to be a regression.

Updated 16/08/2017 04:28 8 Comments

hotkeys: Add Alt+up and Alt+down for previous/next unread topic.


Alt+down should do the same thing as n (next unread topic), and Alt+up should go to the previous unread topic.

Full discussion at, but some highlights are: * Using Alt+down solves the problem of accidentally typing ‘n’ when you have an open compose box * Other messaging apps have an Alt+up and Alt+down, which makes these super discoverable * They nicely couple with Alt+left for going back (when you overshoot)

Updated 26/07/2017 01:53 3 Comments

hotkeys: Make "n" key cycle to PMs as well as streams.


We should make the popular “n” key work with PM conversations as well as streams.

The mode of operation should be this: * if you’re in streams, keep cycling in streams * if you’re in PMs, keep cycling in PMs * if you run out of unread threads in streams/PMs, switch to PMs/streams respectively

A related thing to fix, which we should probably split out an issue for if it’s not easy to piggyback on to this change, is that if you are narrowed to a muted stream, you should cycle topics in that stream while you have unread topics there. (But for all other situations, ignore muted topics.)

Updated 17/08/2017 08:32 2 Comments

refactor/test: Clean up hotkey.js.


We can accomplish a couple goals with static/js/hotkey.js:

  • Eliminate nearly all jQuery calls (besides keydown/keypress) by delegating to other modules like settings.js, compose.js, popover.js, etc.
  • Add more coverage to hotkey.js (via frontend_tests/node_tests/hotkey.js)

This is a good task for a relative newbie who has a little bit of experience with Zulip node tests.

The best way to accomplish this is with a series of pretty small commits. You will want to be thorough with both adding automated tests and manually testing your changes.

Updated 31/07/2017 18:48 11 Comments

hotkey for hopping through stream/pm history


Right now the “r” hotkey allows users to reply either the stream containing the highlighted(/selected) message or the author of the message they have highlighted (w/ “R”). However, the selected box does not update over through time, thus you have to either use the arrow keys to scroll up and down to get to the appropriate message or narrow your scope by selecting one specific stream/pm to be in focus. I prefer to sit at the global screen to process all my messages but it is very inefficient/inconvenient to repeatedly scroll up and down to get to the right place. Having the selected box automatically update as new messages come in would be slightly better, but would still lock me into one stream. Also, while “c” allows me to send a message to anywhere, it would result in non-trivial time wasted and introduces potential errors (misspelling a stream or topic name or failing to use the drop down box correctly).

Therefore, I would like (and I think it would be useful for other like minded users) to have a new hot key binding that hopped back through time to the topics you most recently replied in. For instance, if I messaged (stream/topic): “IT/maintenance”, “IT/upgrades” and then “Everyone/helpdesk”, this new hotkey (arbitrarily for example setting it to “ctrl+t”) if pressed from the global screen would start composing a new message to “Everyone/helpdesk”, pressing ctrl+t would switch the message to “IT/upgrades” and another ctrl+t would switch the message to “IT/maintenance”. ctrl+T should do the same but for private messages. I think that having it be a key pairing is important, so that it could be invoked multiple times (i.e. if it is just “t”, then pressing “t” a second time would add the literal character to a message).

Several immediate questions and my proposals: Q. How frequently are these stacks updated? A. Each time a message is sent, the stacks should be updated, using MRU (probably). Q. What happens if you have nothing in that stack and try to use it? A. The same functionality as “c” (or “C”) Q. What happens if you try to hop back through more history than you have (i.e. you press it 4 times when you’ve only sent messages to 3 unique locations)? A. It cycles through back to the first one Q. How many hops are stored in this stack? A. There would be some fixed limit (potentially configurable) (e.g. 10 hops). There would also be some timeout (potentially configurable / togglable) that would remove old entries (i.e. when you send the one message to random user X, it gets removed from your history after X hours, so that if you don’t exceed the fixed limit, it still removes cruft). Q. What happens if you are not at the global scope? A. If your scope is narrowed to a stream, stream hops (ctrl+t) would only show topics within that stream, pm hops (ctrl+T), would show all PMs. If your scope was narrowed to a topic, stream hops would do nothing, pm hops would still traverse all PMs. If your scope is narrowed to a PM, stream hops would iterate all streams and pm hops would do nothing.

Updated 09/06/2017 13:02 4 Comments

Fork me on GitHub