Skip to content

Commit ed3f30b

Browse files
committed
cp dines
1 parent c197045 commit ed3f30b

10 files changed

Lines changed: 52 additions & 41 deletions

File tree

src/cli.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ const packageJson = JSON.parse(
1919
);
2020
export const VERSION = packageJson.version;
2121

22-
import { exitAlternateScreen } from "./utils/screen.js";
22+
import { exitAlternateScreenBuffer } from "./utils/screen.js";
2323

2424
// Global Ctrl+C handler to ensure it always exits
2525
process.on("SIGINT", () => {
2626
// Force exit immediately, clearing alternate screen buffer
27-
exitAlternateScreen();
27+
exitAlternateScreenBuffer();
2828
process.stdout.write("\n");
2929
process.exit(130); // Standard exit code for SIGINT
3030
});

src/commands/blueprint/list.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { getBlueprintUrl } from "../../utils/url.js";
1818
import { colors } from "../../utils/theme.js";
1919
import { getStatusDisplay } from "../../components/StatusBadge.js";
2020
import { DevboxCreatePage } from "../../components/DevboxCreatePage.js";
21-
import { exitAlternateScreen } from "../../utils/screen.js";
21+
import { exitAlternateScreenBuffer } from "../../utils/screen.js";
2222

2323
const PAGE_SIZE = 10;
2424
const MAX_FETCH = 100;
@@ -317,7 +317,7 @@ const ListBlueprintsUI = ({
317317

318318
// Handle Ctrl+C to force exit
319319
if (key.ctrl && input === "c") {
320-
exitAlternateScreen(); // Exit alternate screen
320+
exitAlternateScreenBuffer(); // Exit alternate screen
321321
process.exit(130);
322322
}
323323

src/commands/devbox/list.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { ResourceActionsMenu } from "../../components/ResourceActionsMenu.js";
1818
import { ActionsPopup } from "../../components/ActionsPopup.js";
1919
import { getDevboxUrl } from "../../utils/url.js";
2020
import { useViewportHeight } from "../../hooks/useViewportHeight.js";
21-
import { exitAlternateScreen } from "../../utils/screen.js";
21+
import { exitAlternateScreenBuffer } from "../../utils/screen.js";
2222
import { colors } from "../../utils/theme.js";
2323

2424
interface ListOptions {
@@ -551,7 +551,7 @@ const ListDevboxesUI = ({
551551
useInput((input, key) => {
552552
// Handle Ctrl+C to force exit
553553
if (key.ctrl && input === "c") {
554-
exitAlternateScreen(); // Exit alternate screen
554+
exitAlternateScreenBuffer(); // Exit alternate screen
555555
process.exit(130);
556556
}
557557

src/commands/menu.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import React from "react";
22
import { render } from "ink";
3-
import { enterAlternateScreen, exitAlternateScreen } from "../utils/screen.js";
3+
import {
4+
enterAlternateScreenBuffer,
5+
exitAlternateScreenBuffer,
6+
} from "../utils/screen.js";
47

58
import { Router } from "../router/Router.js";
69
import { NavigationProvider } from "../store/navigationStore.js";
@@ -33,8 +36,7 @@ export async function runMainMenu(
3336
initialScreen: ScreenName = "menu",
3437
focusDevboxId?: string,
3538
) {
36-
// Enter alternate screen buffer for fullscreen experience (like top/vim)
37-
//enterAlternateScreen();
39+
enterAlternateScreenBuffer();
3840

3941
try {
4042
const { waitUntilExit } = render(
@@ -53,8 +55,7 @@ export async function runMainMenu(
5355
console.error("Error in menu:", error);
5456
}
5557

56-
// Exit alternate screen buffer
57-
//exitAlternateScreen();
58+
exitAlternateScreenBuffer();
5859

5960
process.exit(0);
6061
}

src/components/InteractiveSpawn.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
*/
66
import React from "react";
77
import { spawn, ChildProcess } from "child_process";
8-
import { exitAlternateScreen, enterAlternateScreen } from "../utils/screen.js";
8+
import {
9+
exitAlternateScreenBuffer,
10+
enterAlternateScreenBuffer,
11+
} from "../utils/screen.js";
912

1013
interface InteractiveSpawnProps {
1114
command: string;
@@ -34,7 +37,7 @@ export const InteractiveSpawn: React.FC<InteractiveSpawnProps> = ({
3437
hasSpawnedRef.current = true;
3538

3639
// Exit alternate screen so SSH gets a clean terminal
37-
exitAlternateScreen();
40+
exitAlternateScreenBuffer();
3841

3942
// Small delay to ensure terminal state is clean
4043
setTimeout(() => {
@@ -52,7 +55,7 @@ export const InteractiveSpawn: React.FC<InteractiveSpawnProps> = ({
5255
hasSpawnedRef.current = false;
5356

5457
// Re-enter alternate screen after process exits
55-
enterAlternateScreen();
58+
enterAlternateScreenBuffer();
5659

5760
if (onExit) {
5861
onExit(code);
@@ -65,7 +68,7 @@ export const InteractiveSpawn: React.FC<InteractiveSpawnProps> = ({
6568
hasSpawnedRef.current = false;
6669

6770
// Re-enter alternate screen on error
68-
enterAlternateScreen();
71+
enterAlternateScreenBuffer();
6972

7073
if (onError) {
7174
onError(error);
@@ -86,4 +89,3 @@ export const InteractiveSpawn: React.FC<InteractiveSpawnProps> = ({
8689
// The subprocess output goes directly to the terminal via stdio: "inherit"
8790
return null;
8891
};
89-

src/components/MainMenu.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Breadcrumb } from "./Breadcrumb.js";
66
import { VERSION } from "../cli.js";
77
import { colors } from "../utils/theme.js";
88
import { useViewportHeight } from "../hooks/useViewportHeight.js";
9-
import { exitAlternateScreen } from "../utils/screen.js";
9+
import { exitAlternateScreenBuffer } from "../utils/screen.js";
1010

1111
interface MenuItem {
1212
key: string;
@@ -67,7 +67,7 @@ export const MainMenu = ({ onSelect }: MainMenuProps) => {
6767
} else if (input === "s" || input === "3") {
6868
onSelect("snapshots");
6969
} else if (key.ctrl && input === "c") {
70-
exitAlternateScreen();
70+
exitAlternateScreenBuffer();
7171
process.exit(130);
7272
}
7373
});

src/components/ResourceListView.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { ErrorMessage } from "./ErrorMessage.js";
88
import { Table, Column } from "./Table.js";
99
import { colors } from "../utils/theme.js";
1010
import { useViewportHeight } from "../hooks/useViewportHeight.js";
11-
import { exitAlternateScreen } from "../utils/screen.js";
11+
import { exitAlternateScreenBuffer } from "../utils/screen.js";
1212

1313
// Format time ago in a succinct way
1414
export const formatTimeAgo = (timestamp: number): string => {
@@ -218,7 +218,7 @@ export function ResourceListView<T>({ config }: ResourceListViewProps<T>) {
218218

219219
// Handle Ctrl+C to force exit
220220
if (key.ctrl && input === "c") {
221-
exitAlternateScreen(); // Exit alternate screen
221+
exitAlternateScreenBuffer(); // Exit alternate screen
222222
process.exit(130);
223223
}
224224

src/utils/CommandExecutor.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@ import {
1212
outputResult,
1313
OutputOptions,
1414
} from "./output.js";
15-
import { enableSynchronousUpdates, disableSynchronousUpdates } from "./terminalSync.js";
16-
import { exitAlternateScreen, enterAlternateScreen } from "./screen.js";
15+
import {
16+
enableSynchronousUpdates,
17+
disableSynchronousUpdates,
18+
} from "./terminalSync.js";
19+
import {
20+
exitAlternateScreenBuffer,
21+
enterAlternateScreenBuffer,
22+
} from "./screen.js";
1723
import YAML from "yaml";
1824

1925
export class CommandExecutor<T = unknown> {
@@ -46,18 +52,18 @@ export class CommandExecutor<T = unknown> {
4652

4753
// Interactive mode
4854
// Enter alternate screen buffer (this automatically clears the screen)
49-
55+
5056
enableSynchronousUpdates();
51-
57+
5258
const { waitUntilExit } = render(renderUI(), {
5359
patchConsole: false,
5460
exitOnCtrlC: false,
5561
});
5662
await waitUntilExit();
57-
63+
5864
// Exit alternate screen buffer
5965
disableSynchronousUpdates();
60-
exitAlternateScreen();
66+
exitAlternateScreenBuffer();
6167
}
6268

6369
/**
@@ -79,18 +85,18 @@ export class CommandExecutor<T = unknown> {
7985

8086
// Interactive mode
8187
// Enter alternate screen buffer (this automatically clears the screen)
82-
enterAlternateScreen();
88+
enterAlternateScreenBuffer();
8389
enableSynchronousUpdates();
84-
90+
8591
const { waitUntilExit } = render(renderUI(), {
8692
patchConsole: false,
8793
exitOnCtrlC: false,
8894
});
8995
await waitUntilExit();
90-
96+
9197
// Exit alternate screen buffer
9298
disableSynchronousUpdates();
93-
exitAlternateScreen();
99+
exitAlternateScreenBuffer();
94100
}
95101

96102
/**
@@ -113,18 +119,18 @@ export class CommandExecutor<T = unknown> {
113119

114120
// Interactive mode
115121
// Enter alternate screen buffer
116-
enterAlternateScreen();
122+
enterAlternateScreenBuffer();
117123
enableSynchronousUpdates();
118-
124+
119125
const { waitUntilExit } = render(renderUI(), {
120126
patchConsole: false,
121127
exitOnCtrlC: false,
122128
});
123129
await waitUntilExit();
124-
130+
125131
// Exit alternate screen buffer
126132
disableSynchronousUpdates();
127-
exitAlternateScreen();
133+
exitAlternateScreenBuffer();
128134
}
129135

130136
/**

src/utils/interactiveCommand.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import { enterAlternateScreen, exitAlternateScreen } from "./screen.js";
1+
import {
2+
enterAlternateScreenBuffer,
3+
exitAlternateScreenBuffer,
4+
} from "./screen.js";
25

36
/**
47
* Wrapper for interactive commands that need alternate screen buffer management
58
*/
69
export async function runInteractiveCommand(command: () => Promise<void>) {
710
// Enter alternate screen buffer
8-
enterAlternateScreen();
11+
enterAlternateScreenBuffer();
912

1013
try {
1114
await command();
1215
} finally {
1316
// Exit alternate screen buffer
14-
exitAlternateScreen();
17+
exitAlternateScreenBuffer();
1518
}
1619
}

src/utils/screen.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* Terminal screen buffer utilities.
3-
*
3+
*
44
* The alternate screen buffer provides a fullscreen experience similar to
55
* applications like vim, top, or htop. When enabled, the terminal saves
66
* the current screen content and switches to a clean buffer. Upon exit,
@@ -12,15 +12,14 @@
1212
* This provides a fullscreen experience where content won't mix with
1313
* previous terminal output. Like vim or top.
1414
*/
15-
export function enterAlternateScreen(): void {
15+
export function enterAlternateScreenBuffer(): void {
1616
process.stdout.write("\x1b[?1049h");
1717
}
1818

1919
/**
2020
* Exit the alternate screen buffer and restore the previous screen content.
2121
* This returns the terminal to its original state before enterAlternateScreen() was called.
2222
*/
23-
export function exitAlternateScreen(): void {
23+
export function exitAlternateScreenBuffer(): void {
2424
process.stdout.write("\x1b[?1049l");
2525
}
26-

0 commit comments

Comments
 (0)