Files
openidea/src/features/debugger/editor/editor.module.css
T
l0ng-ai fb3d42b76d feat: Align editor, workbench, run/debug and VCS interactions with IntelliJ IDEA
Keymap
- Let AltGr characters through instead of firing Ctrl+Alt shortcuts (Windows/Linux)
- Double Shift: strict press/release timing, ignored while typing or after Shift+click
- Chords wait 2s and swallow an unmatched second stroke
- Drop CodeMirror defaults that clash with IDEA keys; ⌘Enter is Split Line, add
  Scroll to Center and Code Block Start/End
- Add missing IDEA defaults (⌃J, ⌘Y, ⇧⌘C, ⌥⌘Y, ⇧⌘M, F9 Resume, ⌘R Rerun, …)

Editor
- Tab inserts at the caret; smart Backspace to the proper indent; Enter continues
  a `//` comment; per-language line comment placement
- Back/Forward records navigations only; ⌘F searches the selected text
- In-place rename; ⌃Space inserts a sole candidate; commit characters only for a
  focused lookup; usage highlighting survives edits; ⌥Enter offers fixes from the
  caret line; ⌘-hover shows declaration info only for navigable targets

Workbench
- Tool windows: primary and split area per side, six Move To anchors, layout migration
- ⌘W closes tool window content; Shift+Esc from the editor; closing a tab
  activates the left neighbour; preview tab and tab limit follow IDEA defaults
- Switcher lists open editors and tool windows; Recent Files Delete removes items
- Search Everywhere tab/scope behaviour; popups close when the window deactivates
- Project view: Copy/Move dialogs on paste, skippable usage search on delete,
  new-file input cancels on blur; Settings search Esc clears the filter
- Status bar breadcrumbs open a children popup; notification timeouts

Run / Debug / Build / Terminal
- Run asks to stop a running single-instance config; Rerun restarts silently;
  "Allow multiple instances" option
- Run chooser: Enter runs, Shift debugs, F4/Delete/digits
- Type into the console for stdin; Stop covers debug sessions
- Log (Shift+click) and temporary (Alt+click) breakpoints; independent suspend/log
  options; Evaluate prefill and history; changed-value highlighting; expandable hints
- Build window opens on failure and jumps to the first error
- Terminal confirms closing a busy tab and lets IDE shortcuts through

VCS
- Correct ours/theirs labels during rebase, cherry-pick and revert
- Smart/Force Checkout; remote branch checkout updates the local branch
- Partial commit by changed block; inline before-commit check results
- F7 continues into the next file; Rollback Lines; Commit and Push; Amend message swap
- Branch delete with Restore; force push confirmation; editable push target;
  update summary with the incoming commits
2026-10-25 00:35:33 +08:00

175 lines
4.4 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Line-number gutter element class; the marker is a pseudo-element that, like
* IDEA, replaces the number (centred on the element's content box).
*/
.bp {
position: relative;
color: transparent !important;
}
.bp::before {
content: "";
position: absolute;
left: calc(50% + 1px);
top: 50%;
width: 1em;
height: 1em;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--danger);
box-sizing: border-box;
pointer-events: none;
}
.normal::before {
background: var(--danger);
}
/* Disabled / muted: hollow circle. */
.disabled::before {
background: transparent;
border: 1.5px solid var(--danger);
}
/* Not bound by the adapter. */
.unverified::before {
background: var(--fg-gutter);
}
/* Condition / hit count: dot with a small notch. */
.conditional::before {
background: radial-gradient(circle at 50% 50%, var(--bg-app) 0 0.16em, var(--danger) 0.18em);
}
/* Logpoint: diamond. */
.log::before {
border-radius: 1.5px;
width: 0.8em;
height: 0.8em;
transform: translate(-50%, -50%) rotate(45deg);
}
/* Bound by the debugger in a running session (expui breakpointValid). */
.verified::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointValid.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .verified::before {
background-image: url("../../../ui/expui/breakpoints/breakpointValid_dark.svg");
}
/* Method breakpoints / field watchpoints (expui icons). */
.method::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointMethod.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .method::before {
background-image: url("../../../ui/expui/breakpoints/breakpointMethod_dark.svg");
}
.methodDisabled::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointMethodDisabled.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .methodDisabled::before {
background-image: url("../../../ui/expui/breakpoints/breakpointMethodDisabled_dark.svg");
}
.methodVerified::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointMethodValid.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .methodVerified::before {
background-image: url("../../../ui/expui/breakpoints/breakpointMethodValid_dark.svg");
}
.field::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointField.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .field::before {
background-image: url("../../../ui/expui/breakpoints/breakpointField_dark.svg");
}
.fieldDisabled::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointFieldDisabled.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .fieldDisabled::before {
background-image: url("../../../ui/expui/breakpoints/breakpointFieldDisabled_dark.svg");
}
.fieldVerified::before {
border-radius: 0;
background: url("../../../ui/expui/breakpoints/breakpointFieldValid.svg") center / contain no-repeat;
}
:global(:root[data-theme^="dark"]) .fieldVerified::before {
background-image: url("../../../ui/expui/breakpoints/breakpointFieldValid_dark.svg");
}
/* Beat the caret row (`.cm-activeLine`), as IDEA does; the suspended line wins over a breakpoint. */
:global(.cm-editor) :global(.cm-line).bpLine {
background: var(--bg-breakpoint-line);
}
:global(.cm-editor) :global(.cm-line).execLine {
background: var(--bg-debug-line);
}
.inlineValue {
margin-left: 24px;
color: var(--syn-inline-value);
font-size: var(--fs-ui);
font-family: var(--font-mono);
white-space: pre;
pointer-events: none;
-webkit-user-select: none;
user-select: none;
}
/* Data Views › Show value tooltip on mouse hover. */
.valueTooltip {
max-width: 520px;
padding: 4px 8px;
font-family: var(--font-mono);
font-size: var(--fs-code);
white-space: pre-wrap;
word-break: break-word;
}
.valueTooltipTree {
padding: 2px 0;
white-space: normal;
}
.valueExpand {
display: inline-flex;
align-items: center;
justify-content: center;
width: 16px;
height: 16px;
margin-right: 4px;
padding: 0;
border: 0;
border-radius: var(--radius-small);
background: transparent;
color: var(--fg-muted);
vertical-align: -3px;
cursor: pointer;
}
.valueExpand:hover {
background: var(--bg-hover, transparent);
color: var(--fg-strong);
}
.valueName {
color: var(--fg-strong);
}
.valueType {
color: var(--fg-subtle);
}