From b09bc6656080d4d12e1d06734aae2ec33af5c1ed Mon Sep 17 00:00:00 2001 From: Shreya Keshive Date: Tue, 15 Jul 2025 10:19:59 -0400 Subject: Adds the user's active file in the IDE to the footer (#4154) --- packages/cli/src/config/config.test.ts | 2 +- packages/cli/src/config/config.ts | 3 ++- packages/cli/src/ui/components/Footer.tsx | 41 +++++++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 4 deletions(-) (limited to 'packages/cli/src') diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index ad8b1d44..5043fd59 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -868,7 +868,7 @@ describe('loadCliConfig ideMode', () => { expect(config.getIdeMode()).toBe(false); }); - it('should add __ide_server when ideMode is true', async () => { + it('should add _ide_server when ideMode is true', async () => { process.argv = ['node', 'script.js', '--ide-mode']; const argv = await parseArguments(); process.env.TERM_PROGRAM = 'vscode'; diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 626f23e1..a5eb327d 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -18,6 +18,7 @@ import { FileDiscoveryService, TelemetryTarget, MCPServerConfig, + IDE_SERVER_NAME, } from '@google/gemini-cli-core'; import { Settings } from './settings.js'; @@ -285,7 +286,7 @@ export async function loadCliConfig( } if (ideMode) { - mcpServers['_ide_server'] = new MCPServerConfig( + mcpServers[IDE_SERVER_NAME] = new MCPServerConfig( undefined, // command undefined, // args undefined, // env diff --git a/packages/cli/src/ui/components/Footer.tsx b/packages/cli/src/ui/components/Footer.tsx index 95904cd9..5524114b 100644 --- a/packages/cli/src/ui/components/Footer.tsx +++ b/packages/cli/src/ui/components/Footer.tsx @@ -4,10 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { Box, Text } from 'ink'; import { Colors } from '../colors.js'; -import { shortenPath, tildeifyPath, tokenLimit } from '@google/gemini-cli-core'; +import { + shortenPath, + tildeifyPath, + tokenLimit, + ideContext, + ActiveFile, +} from '@google/gemini-cli-core'; import { ConsoleSummaryDisplay } from './ConsoleSummaryDisplay.js'; import process from 'node:process'; import Gradient from 'ink-gradient'; @@ -43,6 +49,24 @@ export const Footer: React.FC = ({ const limit = tokenLimit(model); const percentage = promptTokenCount / limit; + const [activeFile, setActiveFile] = useState( + undefined, + ); + + useEffect(() => { + const updateActiveFile = () => { + const currentActiveFile = ideContext.getActiveFileContext(); + setActiveFile(currentActiveFile); + }; + + updateActiveFile(); + + const unsubscribe = ideContext.subscribeToActiveFile(setActiveFile); + return () => { + unsubscribe(); + }; + }, []); + return ( @@ -59,6 +83,19 @@ export const Footer: React.FC = ({ {branchName && ({branchName}*)} )} + {activeFile && activeFile.filePath && ( + + | + + {shortenPath(tildeifyPath(activeFile.filePath), 70)} + + {activeFile.cursor && ( + + :{activeFile.cursor.line}:{activeFile.cursor.character} + + )} + + )} {debugMode && ( {' ' + (debugMessage || '--debug')} -- cgit v1.2.3