docs: Fix capitalization of keyboard keys.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2020-08-10 17:09:14 -07:00
committed by Tim Abbott
parent c155403884
commit fb2e56e3c9
28 changed files with 158 additions and 158 deletions

View File

@@ -217,11 +217,11 @@ Two editors often available by default on Linux systems are:
* **Nano**: A very simple, beginner-friendly editor. However, it lacks a lot of
features useful for programming, such as syntax highlighting, so we only
recommended it for quick edits to things like configuration files. Launch by
running command `nano <filename>`. Exit by pressing *control-X*.
running command `nano <filename>`. Exit by pressing *Ctrl-X*.
* **[Vim](https://www.vim.org/)**: A very powerful editor that can take a while
to learn. Launch by running `vim <filename>`. Quit Vim by pressing *escape*,
typing `:q`, and then pressing *return*. Vim comes with a program to learn it
to learn. Launch by running `vim <filename>`. Quit Vim by pressing *Esc*,
typing `:q`, and then pressing *Enter*. Vim comes with a program to learn it
called `vimtutor` (just run that command to start it).
Other options include:

View File

@@ -721,7 +721,7 @@ and is enabled by default in that case. To disable it, set
- Suppressed notifications when quoting a message mentioning yourself.
- Message editing now has the compose widgets for emoji, video calls, etc.
- Message editing now has a Markdown preview feature just like compose.
- Message editing now uses same "enter-sends" behavior as compose.
- Message editing now uses same "Enter-sends" behavior as compose.
- Organization administrators can now edit users' custom profile fields.
- Optimized performance of data import from Slack, HipChat, etc.
- Improved "new user" emails to clearly indicator login details.
@@ -828,7 +828,7 @@ Zulip installations; it has minimal changes for existing servers.
#### Full feature changelog
- Added an organization setting for message deletion time limits.
- Added an organization setting to control who can edit topics.
- Added ctrl+K keyboard shortcut for getting to search (same as /, but
- Added Ctrl+K keyboard shortcut for getting to search (same as /, but
works even when you're inside compose).
- Renamed the hotkey for starring a message to Ctrl+S.
- Added the new `SOCIAL_AUTH_SUBDOMAIN` setting, which all servers using
@@ -970,7 +970,7 @@ Zulip installations; it has minimal changes for existing servers.
- Added support for uploading files in the message-edit UI.
- Redesigned the compose are for private messages to use pretty pills
rather than raw email addresses to display recipients.
- Added new ctrl+B, ctrl+I, ctrl+L compose shortcuts for inserting
- Added new Ctrl+B, Ctrl+I, Ctrl+L compose shortcuts for inserting
common syntax.
- Added warning when linking to a private stream via typeahead.
- Added support for automatically-numbered Markdown lists.

View File

@@ -18,7 +18,7 @@ slow/expensive/complex features like querying the Twitter API to
render tweets nicely). The frontend implementation is in JavaScript,
based on [marked.js](https://github.com/chjj/marked)
(`static/js/echo.js`), and is used to preview and locally echo
messages the moment the sender hits enter, without waiting for round
messages the moment the sender hits Enter, without waiting for round
trip from the server. Those frontend renderings are only shown to the
sender of a message, and they are (ideally) identical to the backend
rendering.
@@ -71,7 +71,7 @@ If you're going to manually test some changes in the frontend Markdown
implementation, the easiest way to do this is as follows:
1. Login to your development server.
2. Stop your Zulip server with ctrl-C, leaving the browser open.
2. Stop your Zulip server with Ctrl-C, leaving the browser open.
3. Compose and send the messages you'd like to test. They will be
locally echoed using the frontend rendering.

View File

@@ -249,11 +249,11 @@ populated and where the focus is placed.
should now be sending to a stream.)
- Click to send
- Turn off enter-to-send.
- Send a two-paragraph message using tab and enter.
- Send a two-paragraph message using control-enter or command-enter.
- Turn on enter-to-send.
- Hit enter to send.
- Turn off Enter-to-send.
- Send a two-paragraph message using Tab and Enter.
- Send a two-paragraph message using Ctrl-Enter or Cmd-Enter.
- Turn on Enter-to-send.
- Hit Enter to send.
### Popover menus ###

View File

@@ -99,7 +99,7 @@ casper.then(function () {
casper.waitUntilVisible("#private_message_recipient", function () {
common.pm_recipient.expect("cordelia@zulip.com");
common.keypress(27); //escape
common.keypress(27); //Esc
casper.page.sendEvent("keypress", "k");
casper.page.sendEvent("keypress", "r");
});
@@ -165,7 +165,7 @@ casper.then(function () {
// Make sure multiple PM recipients display properly.
var recipients = ["cordelia@zulip.com", "othello@zulip.com"];
casper.then(function () {
common.keypress(27); // escape to dismiss compose box
common.keypress(27); // Esc to dismiss compose box
});
casper.waitWhileVisible(".message_comp");
common.then_send_message("private", {
@@ -175,7 +175,7 @@ common.then_send_message("private", {
});
casper.then(function () {
common.keypress(27); // escape to dismiss compose box
common.keypress(27); // Esc to dismiss compose box
});
casper.then(function () {
common.un_narrow();

View File

@@ -488,8 +488,8 @@ run_test("markdown_shortcuts", () => {
range_length = selected_word.length;
// Test bold:
// Mac env = cmd+b
// Windows/Linux = ctrl+b
// Mac env = Cmd+b
// Windows/Linux = Ctrl+b
event.keyCode = 66;
event.ctrlKey = isCtrl;
event.metaKey = isCmd;
@@ -503,8 +503,8 @@ run_test("markdown_shortcuts", () => {
assert.equal("****Any **text**.", $("#compose-textarea").val());
// Test italic:
// Mac = cmd+i
// Windows/Linux = ctrl+i
// Mac = Cmd+I
// Windows/Linux = Ctrl+I
$("#compose-textarea").val(input_text);
range_start = compose_value.search(selected_word);
range_length = selected_word.length;
@@ -520,8 +520,8 @@ run_test("markdown_shortcuts", () => {
assert.equal("**Any *text*.", $("#compose-textarea").val());
// Test link insertion:
// Mac = cmd+shift+l
// Windows/Linux = ctrl+shift+l
// Mac = Cmd+Shift+L
// Windows/Linux = Ctrl+Shift+L
$("#compose-textarea").val(input_text);
range_start = compose_value.search(selected_word);
range_length = selected_word.length;
@@ -535,7 +535,7 @@ run_test("markdown_shortcuts", () => {
compose.handle_keydown(event, $("#compose-textarea"));
}
// This function cross tests the cmd/ctrl + Markdown shortcuts in
// This function cross tests the Cmd/Ctrl + Markdown shortcuts in
// Mac and Linux/Windows environments. So in short, this tests
// that e.g. Cmd+B should be ignored on Linux/Windows and Ctrl+B
// should be ignored on Mac.
@@ -569,7 +569,7 @@ run_test("markdown_shortcuts", () => {
// Default (Linux/Windows) userAgent tests:
test_i_typed(false, false);
// Check all the ctrl + Markdown shortcuts work correctly
// Check all the Ctrl + Markdown shortcuts work correctly
all_markdown_test(true, false);
// The Cmd + Markdown shortcuts should do nothing on Linux/Windows
os_specific_markdown_test(false, true);
@@ -579,7 +579,7 @@ run_test("markdown_shortcuts", () => {
// Mac userAgent tests:
test_i_typed(false, false);
// The ctrl + Markdown shortcuts should do nothing on mac
// The Ctrl + Markdown shortcuts should do nothing on mac
os_specific_markdown_test(true, false);
// Check all the Cmd + Markdown shortcuts work correctly
all_markdown_test(false, true);

View File

@@ -1002,7 +1002,7 @@ run_test("initialize", () => {
event.target.id = "some_non_existing_id";
$("form#send_message_form").trigger(event);
// Setup jquery functions used in compose_textarea enter
// Set up jquery functions used in compose_textarea Enter
// handler.
let range_length = 0;
$("#compose-textarea").range = function () {

View File

@@ -123,47 +123,47 @@ run_test("mappings", () => {
assert.equal(map_press(47).name, "search"); // slash
assert.equal(map_press(106).name, "vim_down"); // j
assert.equal(map_down(219, false, true).name, "escape"); // ctrl + [
assert.equal(map_down(67, false, true).name, "copy_with_c"); // ctrl + c
assert.equal(map_down(75, false, true).name, "search_with_k"); // ctrl + k
assert.equal(map_down(83, false, true).name, "star_message"); // ctrl + s
assert.equal(map_down(190, false, true).name, "narrow_to_compose_target"); // ctrl + .
assert.equal(map_down(219, false, true).name, "escape"); // Ctrl + [
assert.equal(map_down(67, false, true).name, "copy_with_c"); // Ctrl + C
assert.equal(map_down(75, false, true).name, "search_with_k"); // Ctrl + K
assert.equal(map_down(83, false, true).name, "star_message"); // Ctrl + S
assert.equal(map_down(190, false, true).name, "narrow_to_compose_target"); // Ctrl + .
// More negative tests.
assert.equal(map_down(47), undefined);
assert.equal(map_press(27), undefined);
assert.equal(map_down(27, true), undefined);
assert.equal(map_down(86, false, true), undefined); // ctrl + v
assert.equal(map_down(90, false, true), undefined); // ctrl + z
assert.equal(map_down(84, false, true), undefined); // ctrl + t
assert.equal(map_down(82, false, true), undefined); // ctrl + r
assert.equal(map_down(79, false, true), undefined); // ctrl + o
assert.equal(map_down(80, false, true), undefined); // ctrl + p
assert.equal(map_down(65, false, true), undefined); // ctrl + a
assert.equal(map_down(70, false, true), undefined); // ctrl + f
assert.equal(map_down(72, false, true), undefined); // ctrl + h
assert.equal(map_down(88, false, true), undefined); // ctrl + x
assert.equal(map_down(78, false, true), undefined); // ctrl + n
assert.equal(map_down(77, false, true), undefined); // ctrl + m
assert.equal(map_down(67, false, false, true), undefined); // cmd + c
assert.equal(map_down(75, false, false, true), undefined); // cmd + k
assert.equal(map_down(83, false, false, true), undefined); // cmd + s
assert.equal(map_down(75, true, true), undefined); // shift + ctrl + k
assert.equal(map_down(83, true, true), undefined); // shift + ctrl + s
assert.equal(map_down(219, true, true, false), undefined); // shift + ctrl + [
assert.equal(map_down(86, false, true), undefined); // Ctrl + V
assert.equal(map_down(90, false, true), undefined); // Ctrl + Z
assert.equal(map_down(84, false, true), undefined); // Ctrl + T
assert.equal(map_down(82, false, true), undefined); // Ctrl + R
assert.equal(map_down(79, false, true), undefined); // Ctrl + O
assert.equal(map_down(80, false, true), undefined); // Ctrl + P
assert.equal(map_down(65, false, true), undefined); // Ctrl + A
assert.equal(map_down(70, false, true), undefined); // Ctrl + F
assert.equal(map_down(72, false, true), undefined); // Ctrl + H
assert.equal(map_down(88, false, true), undefined); // Ctrl + X
assert.equal(map_down(78, false, true), undefined); // Ctrl + N
assert.equal(map_down(77, false, true), undefined); // Ctrl + M
assert.equal(map_down(67, false, false, true), undefined); // Cmd + C
assert.equal(map_down(75, false, false, true), undefined); // Cmd + K
assert.equal(map_down(83, false, false, true), undefined); // Cmd + S
assert.equal(map_down(75, true, true), undefined); // Shift + Ctrl + K
assert.equal(map_down(83, true, true), undefined); // Shift + Ctrl + S
assert.equal(map_down(219, true, true, false), undefined); // Shift + Ctrl + [
// CMD tests for MacOS
// Cmd tests for MacOS
global.navigator.platform = "MacIntel";
assert.equal(map_down(219, false, true, false).name, "escape"); // ctrl + [
assert.equal(map_down(219, false, false, true), undefined); // cmd + [
assert.equal(map_down(67, false, true, true).name, "copy_with_c"); // ctrl + c
assert.equal(map_down(67, false, true, false), undefined); // cmd + c
assert.equal(map_down(75, false, false, true).name, "search_with_k"); // cmd + k
assert.equal(map_down(75, false, true, false), undefined); // ctrl + k
assert.equal(map_down(83, false, false, true).name, "star_message"); // cmd + s
assert.equal(map_down(83, false, true, false), undefined); // ctrl + s
assert.equal(map_down(190, false, false, true).name, "narrow_to_compose_target"); // cmd + .
assert.equal(map_down(190, false, true, false), undefined); // ctrl + .
assert.equal(map_down(219, false, true, false).name, "escape"); // Ctrl + [
assert.equal(map_down(219, false, false, true), undefined); // Cmd + [
assert.equal(map_down(67, false, true, true).name, "copy_with_c"); // Ctrl + C
assert.equal(map_down(67, false, true, false), undefined); // Cmd + C
assert.equal(map_down(75, false, false, true).name, "search_with_k"); // Cmd + K
assert.equal(map_down(75, false, true, false), undefined); // Ctrl + K
assert.equal(map_down(83, false, false, true).name, "star_message"); // Cmd + S
assert.equal(map_down(83, false, true, false), undefined); // Ctrl + S
assert.equal(map_down(190, false, false, true).name, "narrow_to_compose_target"); // Cmd + .
assert.equal(map_down(190, false, true, false), undefined); // Ctrl + .
// Reset platform
global.navigator.platform = "";
});

View File

@@ -329,7 +329,7 @@ run_test("comma", () => {
assert.deepEqual(widget.items(), [items.blue, items.red, items.yellow]);
});
run_test("enter key with text", () => {
run_test("Enter key with text", () => {
const info = set_up();
const config = info.config;
const items = info.items;

View File

@@ -285,7 +285,7 @@ run_test("initialize", () => {
_setup("ver");
search.is_using_input_method = true;
searchbox_form.trigger(ev);
// No change on enter keyup event when using input tool
// No change on Enter keyup event when using input tool
assert(!is_blurred);
assert(!search_button.prop("disabled"));

View File

@@ -242,7 +242,7 @@ run_test("initialize", () => {
_setup("ver");
search.is_using_input_method = true;
searchbox_form.trigger(ev);
// No change on enter keyup event when using input tool
// No change on Enter keyup event when using input tool
assert(!is_blurred);
assert(!search_button.prop("disabled"));

View File

@@ -91,7 +91,7 @@ exports.set_up_alert_words = function () {
$("#create_alert_word_form").on("keypress", "#create_alert_word_name", (event) => {
const key = event.which;
// Handle enter (13) as "add".
// Handle Enter (13) as "add".
if (key === 13) {
event.preventDefault();

View File

@@ -14,7 +14,7 @@ const util = require("./util");
function convert_enter_to_click(e) {
const key = e.which;
if (key === 13) {
// enter
// Enter
$(e.currentTarget).trigger("click");
}
}
@@ -682,7 +682,7 @@ exports.initialize = function () {
// Don't let clicks in the compose area count as
// "unfocusing" our compose -- in other words, e.g.
// clicking "Press enter to send" should not
// clicking "Press Enter to send" should not
// trigger the composebox-closing code above.
// But do allow our formatting link.
if (!$(e.target).is("a")) {

View File

@@ -731,7 +731,7 @@ exports.handle_keydown = function (event, textarea) {
const isItalic = code === 73 && !event.shiftKey;
const isLink = code === 76 && event.shiftKey;
// detect command and ctrl key
// detect Cmd and Ctrl key
const isCmdOrCtrl = common.has_mac_keyboard() ? event.metaKey : event.ctrlKey;
if ((isBold || isItalic || isLink) && isCmdOrCtrl) {
@@ -744,21 +744,21 @@ exports.handle_keydown = function (event, textarea) {
}
if (isBold) {
// ctrl + b: Convert selected text to bold text
// Ctrl + B: Convert selected text to bold text
wrap_text_with_markdown("**", "**");
if (!range.length) {
textarea.caret(textarea.caret() - 2);
}
}
if (isItalic) {
// ctrl + i: Convert selected text to italic text
// Ctrl + I: Convert selected text to italic text
wrap_text_with_markdown("*", "*");
if (!range.length) {
textarea.caret(textarea.caret() - 1);
}
}
if (isLink) {
// ctrl + l: Insert a link to selected text
// Ctrl + L: Insert a link to selected text
wrap_text_with_markdown("[", "](url)");
const position = textarea.caret();
const txt = document.getElementById(textarea[0].id);

View File

@@ -115,7 +115,7 @@ function get_topic_matcher(query) {
// nextFocus is set on a keydown event to indicate where we should focus on keyup.
// We can't focus at the time of keydown because we need to wait for typeahead.
// And we can't compute where to focus at the time of keyup because only the keydown
// has reliable information about whether it was a tab or a shift+tab.
// has reliable information about whether it was a Tab or a Shift+Tab.
let nextFocus = false;
exports.should_enter_send = function (e) {
@@ -129,33 +129,33 @@ exports.should_enter_send = function (e) {
this_enter_sends = !has_modifier_key;
} else {
// If enter_sends is not enabled, just hitting
// enter should add a newline, but with a
// non-shift modifier key held down, we should
// send. With shift, we shouldn't, because
// shift+enter to get a newline is a common
// Snter should add a newline, but with a
// non-Shift modifier key held down, we should
// send. With Shift, we shouldn't, because
// Shift+Enter to get a newline is a common
// keyboard habit for folks for dealing with other
// chat products where enter-always-sends.
// chat products where Enter-always-sends.
this_enter_sends = has_non_shift_modifier_key;
}
return this_enter_sends;
};
exports.handle_enter = function (textarea, e) {
// Used only if enter doesn't send.
// Used only if Enter doesn't send.
// Since this enter doesn't send, we just want to do
// the browser's default behavior for the "enter" key.
// Since this Enter doesn't send, we just want to do
// the browser's default behavior for the "Enter" key.
// Letting the browser handle it works great if the
// key actually pressed was enter or shift-enter.
// key actually pressed was Enter or Shift-Enter.
// But the default browser behavior for ctrl/alt/meta
// + enter is to do nothing, so we need to emulate
// the browser behavior for "enter" in those cases.
// But the default browser behavior for Ctrl/Alt/Meta
// + Enter is to do nothing, so we need to emulate
// the browser behavior for "Enter" in those cases.
//
// We do this using caret and range from jquery-caret.
const has_non_shift_modifier_key = e.ctrlKey || e.metaKey || e.altKey;
if (has_non_shift_modifier_key) {
// To properly emulate browser "enter", if the
// To properly emulate browser "Enter", if the
// user had selected something in the textarea,
// we need those characters to be cleared.
const range = textarea.range();
@@ -177,7 +177,7 @@ function handle_keydown(e) {
const code = e.keyCode || e.which;
if (code === 13 || (code === 9 && !e.shiftKey)) {
// Enter key or tab key
// Enter key or Tab key
let target_sel;
if (e.target.id) {
@@ -190,12 +190,12 @@ function handle_keydown(e) {
const on_compose = target_sel === "#compose-textarea";
if (on_stream || on_topic || on_pm) {
// For enter, prevent the form from submitting
// For tab, prevent the focus from changing again
// For Enter, prevent the form from submitting
// For Tab, prevent the focus from changing again
e.preventDefault();
}
// In the compose_textarea box, preventDefault() for tab but not for enter
// In the compose_textarea box, preventDefault() for Tab but not for Enter
if (on_compose && code !== 13) {
e.preventDefault();
}
@@ -230,8 +230,8 @@ function handle_keydown(e) {
) {
// If no typeaheads are shown and the user is tabbing from the message content box,
// then there's no need to wait and we can change the focus right away.
// Without this code to change the focus right away, if the user presses enter
// before they fully release the tab key, the tab will be lost. Note that we don't
// Without this code to change the focus right away, if the user presses Enter
// before they fully release the Tab key, the Tab will be lost. Note that we don't
// want to change focus right away in the private_message_recipient box since it
// takes the typeaheads a little time to open after the user finishes typing, which
// can lead to the focus moving without the autocomplete having a chance to happen.
@@ -258,7 +258,7 @@ function handle_keydown(e) {
function handle_keyup(e) {
const code = e.keyCode || e.which;
if (code === 13 || (code === 9 && !e.shiftKey)) {
// Enter key or tab key
// Enter key or Tab key
if (nextFocus) {
$(nextFocus).trigger("focus");
nextFocus = false;
@@ -854,7 +854,7 @@ exports.content_typeahead_selected = function (item, event) {
}
beginning += "#**" + item.name;
if (event && event.key === ">") {
// Normally, one accepts typeahead with `tab` or `enter`, but when completing
// Normally, one accepts typeahead with `Tab` or `Enter`, but when completing
// stream typeahead, we allow `>`, the delimiter for stream+topic mentions,
// as a completion that automatically sets up stream+topic typeahead for you.
beginning += ">";
@@ -1034,7 +1034,7 @@ exports.initialize_compose_typeahead = function (selector) {
return items;
},
updater: exports.content_typeahead_selected,
stopAdvance: true, // Do not advance to the next field on a tab or enter
stopAdvance: true, // Do not advance to the next field on a Tab or Enter
completions,
automated: exports.compose_automated_selection,
trigger_selection: exports.compose_trigger_selection,
@@ -1144,7 +1144,7 @@ exports.initialize = function () {
compose_pm_pill.set_from_typeahead(item);
}
},
stopAdvance: true, // Do not advance to the next field on a tab or enter
stopAdvance: true, // Do not advance to the next field on a Tab or Enter
});
exports.initialize_compose_typeahead("#compose-textarea");

View File

@@ -125,7 +125,7 @@ function remove_div(div, ranges, selection) {
exports.copy_handler = function () {
// This is the main handler for copying message content via
// `ctrl+C` in Zulip (note that this is totally independent of the
// `Ctrl+C` in Zulip (note that this is totally independent of the
// "select region" copy behavior on Linux; that is handled
// entirely by the browser, our HTML layout, and our use of the
// no-select/auto-select CSS classes). We put considerable effort
@@ -134,7 +134,7 @@ exports.copy_handler = function () {
//
// * If the selection is contained within a single message, we
// want to just copy the portion that was selected, which we
// implement by letting the browser handle the ctrl+C event.
// implement by letting the browser handle the Ctrl+C event.
//
// * Otherwise, we want to copy the bodies of all messages that
// were partially covered by the selection.

View File

@@ -471,7 +471,7 @@ exports.drafts_handle_events = function (e, event_key) {
}
const focused_draft_id = row_with_focus().data("draft-id");
// Allows user to delete drafts with backspace
// Allows user to delete drafts with Backspace
if (event_key === "backspace" || event_key === "delete") {
if (focused_draft_id !== undefined) {
const draft_row = row_with_focus();
@@ -498,7 +498,7 @@ exports.drafts_handle_events = function (e, event_key) {
}
}
// This handles when pressing enter while looking at drafts.
// This handles when pressing Enter while looking at drafts.
// It restores draft that is focused.
if (event_key === "enter") {
if (document.activeElement.parentElement.hasAttribute("data-draft-id")) {

View File

@@ -264,7 +264,7 @@ function is_composition(emoji) {
function process_enter_while_filtering(e) {
if (e.keyCode === 13) {
// enter key
// Enter key
e.preventDefault();
const first_emoji = get_rendered_emoji(0, 0);
if (first_emoji) {
@@ -411,7 +411,7 @@ exports.navigate = function (event_name, e) {
// If search is active and results are empty then return immediately.
if (search_is_active === true && search_results.length === 0) {
// We don't want to prevent default for keys like backspace and space.
// We don't want to prevent default for keys like Backspace and space.
return false;
}
@@ -513,7 +513,7 @@ function process_keypress(e) {
if (!is_filter_focused && pressed_key !== 58) {
// ':' => 58, is a hotkey for toggling reactions popover.
if ((pressed_key >= 32 && pressed_key <= 126) || pressed_key === 8) {
// Handle only printable characters or backspace.
// Handle only printable characters or Backspace.
e.preventDefault();
e.stopPropagation();
@@ -522,7 +522,7 @@ function process_keypress(e) {
let new_query = "";
if (pressed_key === 8) {
// Handles backspace.
// Handles Backspace.
new_query = old_query.slice(0, -1);
} else {
// Handles any printable character.
@@ -573,10 +573,10 @@ function register_popover_events(popover) {
$(".emoji-popover-filter").on("keydown", process_enter_while_filtering);
$(".emoji-popover").on("keypress", process_keypress);
$(".emoji-popover").on("keydown", (e) => {
// Because of cross-browser issues we need to handle backspace
// key separately. Firefox fires `keypress` event for backspace
// Because of cross-browser issues we need to handle Backspace
// key separately. Firefox fires `keypress` event for Backspace
// key but chrome doesn't so we need to trigger the logic for
// handling backspace in `keydown` event which is fired by both.
// handling Backspace in `keydown` event which is fired by both.
if (e.which === 8) {
process_keypress(e);
}

View File

@@ -16,14 +16,14 @@ const menu_dropdown_hotkeys = ["down_arrow", "up_arrow", "vim_up", "vim_down", "
// The `message_view_only` property is a convenient and performant way
// to express a common case of which hotkeys do something in which
// views. It is set for hotkeys (like `Ctrl + s`) that only have an effect
// views. It is set for hotkeys (like `Ctrl + S`) that only have an effect
// in the main message view with a selected message.
// `message_view_only` hotkeys, as a group, are not processed if any
// overlays are open (e.g. settings, streams, etc.).
const keydown_shift_mappings = {
// these can be triggered by shift + key only
9: {name: "shift_tab", message_view_only: false}, // tab
// these can be triggered by Shift + key only
9: {name: "shift_tab", message_view_only: false}, // Tab
32: {name: "shift_spacebar", message_view_only: true}, // space bar
37: {name: "left_arrow", message_view_only: false}, // left arrow
39: {name: "right_arrow", message_view_only: false}, // right arrow
@@ -32,14 +32,14 @@ const keydown_shift_mappings = {
};
const keydown_unshift_mappings = {
// these can be triggered by key only (without shift)
9: {name: "tab", message_view_only: false}, // tab
27: {name: "escape", message_view_only: false}, // escape
// these can be triggered by key only (without Shift)
9: {name: "tab", message_view_only: false}, // Tab
27: {name: "escape", message_view_only: false}, // Esc
32: {name: "spacebar", message_view_only: true}, // space bar
33: {name: "page_up", message_view_only: true}, // page up
34: {name: "page_down", message_view_only: true}, // page down
35: {name: "end", message_view_only: true}, // end
36: {name: "home", message_view_only: true}, // home
33: {name: "page_up", message_view_only: true}, // PgUp
34: {name: "page_down", message_view_only: true}, // PgDn
35: {name: "end", message_view_only: true}, // End
36: {name: "home", message_view_only: true}, // Home
37: {name: "left_arrow", message_view_only: false}, // left arrow
39: {name: "right_arrow", message_view_only: false}, // right arrow
38: {name: "up_arrow", message_view_only: false}, // up arrow
@@ -53,25 +53,25 @@ const keydown_ctrl_mappings = {
const keydown_cmd_or_ctrl_mappings = {
67: {name: "copy_with_c", message_view_only: false}, // 'C'
75: {name: "search_with_k", message_view_only: false}, // 'K'
83: {name: "star_message", message_view_only: true}, // 's'
83: {name: "star_message", message_view_only: true}, // 'S'
190: {name: "narrow_to_compose_target", message_view_only: true}, // '.'
};
const keydown_either_mappings = {
// these can be triggered by key or shift + key
// these can be triggered by key or Shift + key
// Note that codes for letters are still case sensitive!
//
// We may want to revisit both of these. For backspace, we don't
// We may want to revisit both of these. For Backspace, we don't
// have any specific mapping behavior; we are just trying to disable
// the normal browser features for certain OSes when we are in the
// compose box, and the little bit of backspace-related code here is
// dubious, but may apply to shift-backspace.
// For enter, there is some possibly that shift-enter is intended to
// have special behavior for folks that are used to shift-enter behavior
// compose box, and the little bit of Backspace-related code here is
// dubious, but may apply to Shift-Backspace.
// For Enter, there is some possibly that Shift-Enter is intended to
// have special behavior for folks that are used to Shift-Enter behavior
// in other apps, but that's also slightly dubious.
8: {name: "backspace", message_view_only: true}, // backspace
13: {name: "enter", message_view_only: false}, // enter
46: {name: "delete", message_view_only: false}, // delete
8: {name: "backspace", message_view_only: true}, // Backspace
13: {name: "enter", message_view_only: false}, // Enter
46: {name: "delete", message_view_only: false}, // Delete
};
const keypress_mappings = {
@@ -231,7 +231,7 @@ exports.process_escape_key = function (e) {
return true;
}
// If the user hit the escape key, cancel the current compose
// If the user hit the Esc key, cancel the current compose
compose_actions.cancel();
return true;
}
@@ -303,7 +303,7 @@ exports.process_enter_key = function (e) {
if (overlays.settings_open()) {
// On the settings page just let the browser handle
// the enter key for things like submitting forms.
// the Enter key for things like submitting forms.
return false;
}
@@ -323,20 +323,20 @@ exports.process_enter_key = function (e) {
return false;
}
// This handles when pressing enter while looking at drafts.
// This handles when pressing Rnter while looking at drafts.
// It restores draft that is focused.
if (overlays.drafts_open()) {
drafts.drafts_handle_events(e, "enter");
return true;
}
// If we're on a button or a link and have pressed enter, let the
// If we're on a button or a link and have pressed Enter, let the
// browser handle the keypress
//
// This is subtle and here's why: Suppose you have the focus on a
// stream name in your left sidebar. j and k will still move your
// cursor up and down, but Enter won't reply -- it'll just trigger
// the link on the sidebar! So you keep pressing enter over and
// the link on the sidebar! So you keep pressing Enter over and
// over again. Until you click somewhere or press r.
if ($("a:focus,button:focus").length > 0) {
return false;
@@ -353,7 +353,7 @@ exports.process_enter_key = function (e) {
}
// If we got this far, then we're presumably in the message
// view, so in that case "enter" is the hotkey to respond to a message.
// view, so in that case "Enter" is the hotkey to respond to a message.
// Note that "r" has same effect, but that is handled in process_hotkey().
compose_actions.respond_to_message({trigger: "hotkey enter"});
return true;
@@ -400,13 +400,13 @@ exports.process_shift_tab_key = function () {
return true;
}
// Shift-tabbing from the edit message cancel button takes you to save.
// Shift-Tabbing from the edit message cancel button takes you to save.
if ($(".message_edit_cancel").filter(":focus").length > 0) {
$(".message_edit_save").trigger("focus");
return true;
}
// Shift-tabbing from the edit message save button takes you to the content.
// Shift-Tabbing from the edit message save button takes you to the content.
const focused_message_edit_save = $(".message_edit_save").filter(":focus");
if (focused_message_edit_save.length > 0) {
focused_message_edit_save
@@ -416,7 +416,7 @@ exports.process_shift_tab_key = function () {
return true;
}
// Shift-tabbing from emoji catalog/search results takes you back to search textbox.
// Shift-Tabbing from emoji catalog/search results takes you back to search textbox.
if (emoji_picker.reactions_popped()) {
return emoji_picker.navigate("shift_tab");
}
@@ -430,7 +430,7 @@ exports.process_shift_tab_key = function () {
exports.process_hotkey = function (e, hotkey) {
const event_name = hotkey.name;
// This block needs to be before the `tab` handler.
// This block needs to be before the `Tab` handler.
switch (event_name) {
case "up_arrow":
case "down_arrow":
@@ -524,7 +524,7 @@ exports.process_hotkey = function (e, hotkey) {
}
if (exports.in_content_editable_widget(e)) {
// We handle the enter key in process_enter_key().
// We handle the Enter key in process_enter_key().
// We ignore all other keys.
return false;
}
@@ -560,7 +560,7 @@ exports.process_hotkey = function (e, hotkey) {
// browser behavior.
if (event_name === "backspace") {
if ($("#compose-send-button").is(":focus")) {
// Ignore backspace; don't navigate back a page.
// Ignore Backspace; don't navigate back a page.
return true;
}
}
@@ -572,7 +572,7 @@ exports.process_hotkey = function (e, hotkey) {
// Process hotkeys specially when in an input, select, textarea, or send button
if (exports.processing_text()) {
// Note that there is special handling for enter/escape too, but
// Note that there is special handling for Enter/Esc too, but
// we handle this in other functions.
if (event_name === "left_arrow" && compose_state.focus_in_empty_compose()) {
@@ -595,9 +595,9 @@ exports.process_hotkey = function (e, hotkey) {
$(":focus").caret(Infinity).animate({scrollTop: height}, "fast");
return true;
} else if (event_name === "search_with_k") {
// Do nothing; this allows one to use ctrl+k inside compose.
// Do nothing; this allows one to use Ctrl+K inside compose.
} else if (event_name === "star_message") {
// Do nothing; this allows one to use ctrl+s inside compose.
// Do nothing; this allows one to use Ctrl+S inside compose.
} else {
// Let the browser handle the key normally.
return false;
@@ -684,7 +684,7 @@ exports.process_hotkey = function (e, hotkey) {
drafts.launch();
return true;
case "reply_message": // 'r': respond to message
// Note that you can "enter" to respond to messages as well,
// Note that you can "Enter" to respond to messages as well,
// but that is handled in process_enter_key().
compose_actions.respond_to_message({trigger: "hotkey"});
return true;
@@ -790,7 +790,7 @@ exports.process_hotkey = function (e, hotkey) {
};
/* We register both a keydown and a keypress function because
we want to intercept pgup/pgdn, escape, etc, and process them
we want to intercept PgUp/PgDn, Esc, etc, and process them
as they happen on the keyboard. However, if we processed
letters/numbers in keydown, we wouldn't know what the case of
the letters were.

View File

@@ -164,7 +164,7 @@ exports.create = function (opts) {
},
// this will remove the last pill in the container -- by default tied
// to the "backspace" key when the value of the input is empty.
// to the "Backspace" key when the value of the input is empty.
// If quiet is a truthy value, the event handler associated with the
// pill will not be evaluated. This is useful when using clear to reset
// the pills.
@@ -316,7 +316,7 @@ exports.create = function (opts) {
const id = $pill.data("id");
funcs.removePill(id);
$next.trigger("focus");
// the "backspace" key in Firefox will go back a page if you do
// the "Backspace" key in Firefox will go back a page if you do
// not prevent it.
e.preventDefault();
}

View File

@@ -187,15 +187,15 @@ function handle_message_row_edit_keydown(e) {
switch (code) {
case 13:
if ($(e.target).hasClass("message_edit_content")) {
// Pressing enter to save edits is coupled with enter to send
// Pressing Enter to save edits is coupled with Enter to send
if (composebox_typeahead.should_enter_send(e)) {
const row = $(".message_edit_content").filter(":focus").closest(".message_row");
const message_edit_save_button = row.find(".message_edit_save");
if (message_edit_save_button.prop("disabled")) {
// In cases when the save button is disabled
// we need to disable save on pressing enter
// we need to disable save on pressing Enter
// Prevent default to avoid new-line on pressing
// enter inside the textarea in this case
// Enter inside the textarea in this case
e.preventDefault();
return;
}
@@ -230,13 +230,13 @@ function handle_inline_topic_edit_keydown(e) {
let row;
const code = e.keyCode || e.which;
switch (code) {
case 13: // Handle enter key in the recipient bar/inline topic edit form
case 13: // Handle Enter key in the recipient bar/inline topic edit form
row = $(e.target).closest(".recipient_row");
exports.save_inline_topic_edit(row);
e.stopPropagation();
e.preventDefault();
return;
case 27: // handle escape
case 27: // handle Esc
exports.end_if_focused_on_inline_topic_edit();
e.stopPropagation();
e.preventDefault();

View File

@@ -114,9 +114,9 @@ exports.initialize = function () {
});
searchbox_form.on("compositionend", () => {
// Set `is_using_input_method` to true if enter is pressed to exit
// Set `is_using_input_method` to true if Enter is pressed to exit
// the input tool popover and get the text in the search bar. Then
// we suppress searching triggered by this enter key by checking
// we suppress searching triggered by this Enter key by checking
// `is_using_input_method` before searching.
// More details in the commit message that added this line.
exports.is_using_input_method = true;
@@ -140,7 +140,7 @@ exports.initialize = function () {
}
const code = e.which;
if (code === 13 && search_query_box.is(":focus")) {
// We just pressed enter and the box had focus, which
// We just pressed Enter and the box had focus, which
// means we didn't use the typeahead at all. In that
// case, we should act as though we're searching by
// operators. (The reason the other actions don't call

View File

@@ -140,7 +140,7 @@ function create_stream() {
created_stream = stream_name;
// Even though we already check to make sure that while typing the user cannot enter
// newline characters (by pressing the enter key) it would still be possible to copy
// newline characters (by pressing the Enter key) it would still be possible to copy
// and paste over a description with newline characters in it. Prevent that.
if (description.includes("\n")) {
ui_report.message(

View File

@@ -929,7 +929,7 @@ exports.initialize = function () {
$(".subscriptions").on("click", "[data-dismiss]", (e) => {
e.preventDefault();
// we want to make sure that the click is not just a simulated
// click; this fixes an issue where hitting "enter" would
// click; this fixes an issue where hitting "Enter" would
// trigger this code path due to bootstrap magic.
if (e.clientY !== 0) {
exports.show_subs_pane.nothing_selected();

View File

@@ -62,7 +62,7 @@ mirror script instead of using Webathena.</p>
<ol>
<li>Run <code>screen -x zulip</code> to connect to the mirroring
screen session created above.</li>
<li>The first time, you'll need to type <code>ctrl-a c</code> to switch to a new terminal in your screen session.</li>
<li>The first time, you'll need to type <code>Ctrl-A c</code> to switch to a new terminal in your screen session.</li>
<li><code>kinit -l7d && aklog</code></li>
<li>(Type type your password to renew your Kerberos tickets).</li>
</ol>

View File

@@ -37,5 +37,5 @@ There are several ways to access an existing PM or group PM.
* Click on any user or group in the right sidebar.
* Start typing a user's name in [search](/help/search-for-messages). You'll be
able to select PMs or group PMs with that user.
* Open the compose box, and enter in a (list of) users. Type `Ctr + .` (or
* Open the compose box, and enter in a (list of) users. Type `Ctrl + .` (or
`Cmd + .` on a mac) to open that conversation.

View File

@@ -6963,7 +6963,7 @@ paths:
description: |
Present if `realm_user` is present in `fetch_event_types`.
Whether the user setting for [sending on pressing enter](/help/enable-enter-to-send)
Whether the user setting for [sending on pressing Enter](/help/enable-enter-to-send)
in the compose box is enabled.
user_id:
type: integer

View File

@@ -228,7 +228,7 @@ def _reload():
# re-executing in the current process, start a new one
# and cause the current process to exit. This isn't
# ideal since the new process is detached from the parent
# terminal and thus cannot easily be killed with ctrl-C,
# terminal and thus cannot easily be killed with Ctrl-C,
# but it's better than not being able to autoreload at
# all.
# Unfortunately the errno returned in this case does not