utils.ts
components/PromptInput/utils.ts
61
Lines
1744
Bytes
3
Exports
4
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with ui-flow. It contains 61 lines, 4 detected imports, and 3 detected exports.
Important relationships
- components/PromptInput/HistorySearchInput.tsx
- components/PromptInput/IssueFlagBanner.tsx
- components/PromptInput/Notifications.tsx
- components/PromptInput/PromptInput.tsx
- components/PromptInput/PromptInputFooter.tsx
- components/PromptInput/PromptInputFooterLeftSide.tsx
- components/PromptInput/PromptInputFooterSuggestions.tsx
- components/PromptInput/PromptInputHelpMenu.tsx
- components/ManagedSettingsSecurityDialog/utils.ts
- components/Spinner/utils.ts
- components/TrustDialog/utils.ts
- components/agents/utils.ts
Detected exports
isVimModeEnabledgetNewlineInstructionsisNonSpacePrintable
Keywords
shiftnewlineinputconfighasusedbackslashreturnisshiftenterkeybindinginstalledterminalsetupgetglobalconfigutilsmode
Detected imports
../../commands/terminalSetup/terminalSetup.js../../ink.js../../utils/config.js../../utils/env.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
import {
hasUsedBackslashReturn,
isShiftEnterKeyBindingInstalled,
} from '../../commands/terminalSetup/terminalSetup.js'
import type { Key } from '../../ink.js'
import { getGlobalConfig } from '../../utils/config.js'
import { env } from '../../utils/env.js'
/**
* Helper function to check if vim mode is currently enabled
* @returns boolean indicating if vim mode is active
*/
export function isVimModeEnabled(): boolean {
const config = getGlobalConfig()
return config.editorMode === 'vim'
}
export function getNewlineInstructions(): string {
// Apple Terminal on macOS uses native modifier key detection for Shift+Enter
if (env.terminal === 'Apple_Terminal' && process.platform === 'darwin') {
return 'shift + ⏎ for newline'
}
// For iTerm2 and VSCode, show Shift+Enter instructions if installed
if (isShiftEnterKeyBindingInstalled()) {
return 'shift + ⏎ for newline'
}
// Otherwise show backslash+return instructions
return hasUsedBackslashReturn()
? '\\⏎ for newline'
: 'backslash (\\) + return (⏎) for newline'
}
/**
* True when the keystroke is a printable character that does not begin
* with whitespace — i.e., a normal letter/digit/symbol the user typed.
* Used to gate the lazy space inserted after an image pill.
*/
export function isNonSpacePrintable(input: string, key: Key): boolean {
if (
key.ctrl ||
key.meta ||
key.escape ||
key.return ||
key.tab ||
key.backspace ||
key.delete ||
key.upArrow ||
key.downArrow ||
key.leftArrow ||
key.rightArrow ||
key.pageUp ||
key.pageDown ||
key.home ||
key.end
) {
return false
}
return input.length > 0 && !/^\s/.test(input) && !input.startsWith('\x1b')
}