mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-08 08:52:12 +00:00
Each DAP output event copied the whole console array and re-rendered every buffered line, so a debuggee writing continuously to stdout froze the window after tens of thousands of lines. Output is now queued and applied once per animation frame (merged per session and category), the buffer is capped (50,000 entries, plus the console buffer-size setting), and the Debug console renders only the visible rows. Refs #377 Co-authored-by: a-rookie-of-C-language <[email protected]>
282 lines
4.1 KiB
CSS
282 lines
4.1 KiB
CSS
.root {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
min-height: 0;
|
|
}
|
|
|
|
.emptyWrap {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100%;
|
|
}
|
|
|
|
.sessionTabs {
|
|
min-width: 0;
|
|
border: 0;
|
|
background: none;
|
|
}
|
|
|
|
.toolbar {
|
|
height: 32px;
|
|
flex: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
padding: 0 8px 0 4px;
|
|
border-bottom: 1px solid var(--border);
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.tool {
|
|
width: 26px;
|
|
height: 26px;
|
|
flex: none;
|
|
}
|
|
|
|
.sep {
|
|
flex: none;
|
|
width: 1px;
|
|
height: 16px;
|
|
background: var(--border);
|
|
margin: 0 5px;
|
|
}
|
|
|
|
.tabs {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
flex: none;
|
|
}
|
|
|
|
.tab {
|
|
height: 24px;
|
|
padding: 0 8px;
|
|
border-radius: var(--radius-small);
|
|
color: var(--fg);
|
|
font-size: var(--fs-ui);
|
|
white-space: nowrap;
|
|
}
|
|
.tab:hover {
|
|
background: var(--bg-toolbar-hover);
|
|
}
|
|
.tabActive,
|
|
.tabActive:hover {
|
|
background: var(--bg-toolbar-selected);
|
|
color: var(--fg-strong);
|
|
}
|
|
.tab:focus-visible {
|
|
outline: 2px solid var(--focus-ring);
|
|
outline-offset: -2px;
|
|
}
|
|
|
|
.panel {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
}
|
|
|
|
.split {
|
|
flex: 1;
|
|
min-height: 0;
|
|
min-width: 0;
|
|
}
|
|
|
|
/* frames */
|
|
.frames {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 0;
|
|
padding: 4px 0;
|
|
}
|
|
|
|
.threadSelect {
|
|
margin: 0 8px 4px;
|
|
}
|
|
|
|
.frameList {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
display: flex;
|
|
flex-direction: column;
|
|
outline: none;
|
|
padding: 0 4px;
|
|
}
|
|
|
|
.frame {
|
|
height: var(--h-row);
|
|
flex: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 0 8px;
|
|
border-radius: var(--radius-small);
|
|
text-align: left;
|
|
font-size: var(--fs-ui);
|
|
color: var(--fg);
|
|
white-space: nowrap;
|
|
}
|
|
.frame:hover {
|
|
background: var(--bg-tree-hover);
|
|
}
|
|
.frameSelected,
|
|
.frameSelected:hover {
|
|
background: var(--bg-tree-selected-inactive);
|
|
}
|
|
.frameList:focus-within .frameSelected {
|
|
background: var(--bg-tree-selected);
|
|
}
|
|
.frameLibrary .frameName {
|
|
color: var(--fg-muted);
|
|
}
|
|
|
|
.frameIcon {
|
|
flex: none;
|
|
}
|
|
|
|
.frameName {
|
|
flex: none;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.frameFile {
|
|
flex: 1;
|
|
min-width: 0;
|
|
/* ", File.java:12" hugs the name, cancelling the row gap. */
|
|
margin-left: -6px;
|
|
color: var(--fg-subtle);
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.hiddenFrames {
|
|
color: var(--fg-subtle);
|
|
font-style: italic;
|
|
}
|
|
|
|
.note {
|
|
padding: 4px 12px;
|
|
color: var(--fg-subtle);
|
|
font-size: var(--fs-ui);
|
|
}
|
|
|
|
/* variables */
|
|
.variables {
|
|
height: 100%;
|
|
min-width: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 0;
|
|
}
|
|
|
|
.evalField {
|
|
height: 30px;
|
|
flex: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 0 4px 0 12px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
.repl {
|
|
height: 28px;
|
|
flex: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.prompt {
|
|
color: var(--fg-subtle);
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
.evalInput {
|
|
flex: 1;
|
|
min-width: 0;
|
|
background: none;
|
|
border: 0;
|
|
outline: none;
|
|
color: var(--fg-strong);
|
|
font: var(--fs-ui) var(--font-mono);
|
|
-webkit-user-select: text;
|
|
user-select: text;
|
|
}
|
|
.evalInput::placeholder {
|
|
color: var(--fg-subtle);
|
|
font-family: var(--font-ui);
|
|
}
|
|
.evalInput:disabled {
|
|
cursor: default;
|
|
}
|
|
|
|
/* console */
|
|
.console {
|
|
flex: 1;
|
|
min-width: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 0;
|
|
}
|
|
|
|
.consoleOutput {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
position: relative;
|
|
padding: 6px 14px;
|
|
font-family: var(--font-mono);
|
|
font-size: var(--fs-ui);
|
|
line-height: 18px;
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
-webkit-user-select: text;
|
|
cursor: text;
|
|
-webkit-user-select: text;
|
|
user-select: text;
|
|
outline: none;
|
|
color: var(--fg);
|
|
}
|
|
|
|
.consoleInner {
|
|
position: relative;
|
|
width: 100%;
|
|
}
|
|
|
|
.out {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
min-width: 100%;
|
|
color: var(--fg);
|
|
}
|
|
.cat-stderr {
|
|
color: var(--danger);
|
|
}
|
|
.cat-console,
|
|
.cat-system {
|
|
color: var(--fg-subtle);
|
|
}
|
|
.cat-important {
|
|
color: var(--accent);
|
|
}
|
|
.cat-input {
|
|
color: var(--fg-secondary);
|
|
}
|
|
.cat-result {
|
|
color: var(--fg-emphasis);
|
|
}
|
|
|
|
.repl {
|
|
margin: 0 14px 2px;
|
|
border-bottom: 0;
|
|
border-top: 1px solid var(--border);
|
|
}
|