Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 1 addition & 27 deletions apps/web/src/components/chat/ChatComposer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ import {
import { attachmentUploadBlockReason } from "../../lib/attachmentUploadState";
import type { AssistantCitationSourceAnchor } from "~/lib/assistantTextSelection";
import { shortcutLabelForCommand } from "../../keybindings";
import { persistClientSettingsUpdate } from "../../hooks/useSettings";
import {
type TerminalContextDraft,
type TerminalContextSelection,
Expand Down Expand Up @@ -199,7 +198,6 @@ import {
ComposerRestingImagePreviews,
} from "./ComposerAttachmentStrip";
import { ComposerPrimaryActions } from "./ComposerPrimaryActions";
import { ComposerRichTextToggle } from "./ComposerRichTextToggle";
import { ComposerFooterPrimaryActions } from "./ComposerFooterControls";
import { ComposerPendingUserInputPanel } from "./ComposerPendingUserInputPanel";
import { ComposerPlanFollowUpBanner } from "./ComposerPlanFollowUpBanner";
Expand Down Expand Up @@ -306,7 +304,6 @@ export interface ChatComposerHandle {
openModelPicker: () => void;
stepReasoningEffort: (direction: 1 | -1) => void;
toggleModelPicker: () => void;
toggleRichText: () => void;
openControl: (command: KeybindingCommand) => void;
isModelPickerOpen: () => boolean;
isCaretAtStart: () => boolean;
Expand Down Expand Up @@ -2855,13 +2852,6 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
openModelPickerStable();
}
},
toggleRichText: () => {
if (isLiteralPendingAnswer) return;
persistClientSettingsUpdate((current) => ({
...current,
composerRichTextEnabled: !current.composerRichTextEnabled,
})).catch(console.error);
},
openControl: (command) => {
if (composerBlurFrameRef.current !== null) {
window.cancelAnimationFrame(composerBlurFrameRef.current);
Expand Down Expand Up @@ -3439,23 +3429,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
showMobilePendingAnswerActions && "hidden sm:flex",
)}
>
{composerAttachButton || !isLiteralPendingAnswer ? (
<div className="me-2 flex items-center gap-0.5">
{composerAttachButton}
{isLiteralPendingAnswer ? null : (
<ComposerRichTextToggle
richTextEnabled={settings.composerRichTextEnabled}
shortcutLabel={shortcutLabelForCommand(
keybindings,
"composer.toggleRichText",
{
context: { terminalFocus: false, terminalOpen, modelPickerOpen: false },
},
)}
/>
)}
</div>
) : null}
{composerAttachButton ? <div className="me-2">{composerAttachButton}</div> : null}
<div
data-chat-composer-actions="right"
data-chat-composer-transition-actions="true"
Expand Down
41 changes: 0 additions & 41 deletions apps/web/src/components/chat/ComposerRichTextToggle.tsx

This file was deleted.

6 changes: 0 additions & 6 deletions apps/web/src/components/chat/composerShortcuts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,6 @@ export function composerShortcutCommands(
"modelPicker.toggle": ({ event }) => {
if (!event.repeat) composerRef.current?.toggleModelPicker();
},
"composer.toggleRichText": ({ event }) => {
// The flip remounts the editor, which would drop an unsaved citation comment.
if (event.target instanceof Element && event.target.closest("[data-citation-comment-editor]"))
return false;
if (!event.repeat) composerRef.current?.toggleRichText();
},
"composer.increaseEffort": ({ event }) => {
if (!event.repeat) composerRef.current?.stepReasoningEffort(1);
},
Expand Down
11 changes: 1 addition & 10 deletions apps/web/src/keybindings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -768,21 +768,12 @@ describe("composer and pull request shortcuts", () => {
});

it.each(["MacIntel", "Win32", "Linux"])(
"resolves composer toggle and alternate send chords in their contexts on %s",
"reserves the alternate send chord for the focused composer on %s",
(platform) => {
const modifier = {
metaKey: platform === "MacIntel",
ctrlKey: platform !== "MacIntel",
};
for (const terminalFocus of [false, true]) {
assert.strictEqual(
resolveShortcutCommand(event({ key: "/", ...modifier }), DEFAULT_RESOLVED_KEYBINDINGS, {
platform,
context: { terminalFocus },
}),
terminalFocus ? null : "composer.toggleRichText",
);
}
const shiftedEnter = event({ key: "Enter", shiftKey: true, ...modifier });
for (const composerRequiresModifier of [false, true]) {
const context = {
Expand Down
4 changes: 1 addition & 3 deletions docs/user/composer.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ The composer writes Markdown and shows it styled as you type. Markers such as
them. Lines starting with `- `, `1. `, `- [ ] `, `> `, `# ` or `---` become lists,
task lists, quotes, headings and rules; ` ``` ` followed by Enter opens a code
block. What you typed is what the agent receives, markers and numbering
included, and `#1234` without a space still looks up a pull request. To see the
plain Markdown instead, press the **¶** button beside attach; it is the same
switch as **Settings → Chat → Rich text composer**.
included, and `#1234` without a space still looks up a pull request.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved

Enter sends. In a list or quote, **Shift+Enter** continues it, and Shift+Enter
on an empty line moves out one level, then leaves it; **Tab** nests a list item
Expand Down
1 change: 0 additions & 1 deletion docs/user/keybindings.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ Use `mod+shift+e` for effort, `mod+shift+a` for permissions, `mod+shift+x` for t
workspace, and `mod+shift+g` for the Git branch. The workspace menu includes the
current checkout, a new worktree, and the previous worktree when available.
Use `mod+shift+l` to reuse the previous worktree directly.
Use `mod+/` to switch the composer between rich text and its Markdown source.

To change effort one step without opening the picker, bind
**Composer: Increase Effort** and **Composer: Decrease Effort** in Keybindings.
Expand Down
1 change: 0 additions & 1 deletion packages/contracts/src/keybindings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ export const STATIC_KEYBINDING_COMMANDS = [
"appearance.cycle",
"themeEditor.toggle",
"composer.stash",
"composer.toggleRichText",
"composer.sendAlternate",
"composer.sendBackground",
"composer.sendAndNewThread",
Expand Down
1 change: 0 additions & 1 deletion packages/shared/src/keybindings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,6 @@ export const DEFAULT_KEYBINDINGS: ReadonlyArray<KeybindingRule> = [
{ key: "mod+alt+shift+a", command: "appearance.cycle", when: "!terminalFocus" },
{ key: "mod+alt+shift+t", command: "themeEditor.toggle" },
{ key: "mod+s", command: "composer.stash", when: "!terminalFocus" },
{ key: "mod+/", command: "composer.toggleRichText", when: "!terminalFocus" },
{ key: "mod+shift+enter", command: "thread.steerQueuedMessage", when: "!terminalFocus" },
{ key: "alt+arrowup", command: "thread.editQueuedMessage", when: "composerFocus" },
{ key: "mod+enter", command: "composer.sendAlternate", when: "composerFocus && turnRunning" },
Expand Down
Loading