103 lines
5.2 KiB
TypeScript
103 lines
5.2 KiB
TypeScript
|
|
import type { TerminalProps } from './terminalHelpers';
|
||
|
|
|
||
|
|
const themeFingerprint = (theme: TerminalProps['terminalTheme'] | undefined): string => (
|
||
|
|
theme?.colors ? `${theme.id}:${theme.colors.background}:${theme.colors.foreground}:${theme.colors.cursor}` : ''
|
||
|
|
);
|
||
|
|
|
||
|
|
export const terminalPropsAreEqual = (
|
||
|
|
prev: TerminalProps,
|
||
|
|
next: TerminalProps,
|
||
|
|
): boolean => (
|
||
|
|
prev.host === next.host
|
||
|
|
&& prev.keys === next.keys
|
||
|
|
&& prev.identities === next.identities
|
||
|
|
&& prev.snippets === next.snippets
|
||
|
|
&& prev.snippetPackages === next.snippetPackages
|
||
|
|
&& prev.compactToolbar === next.compactToolbar
|
||
|
|
&& prev.lineTimestampsAvailable === next.lineTimestampsAvailable
|
||
|
|
&& prev.onDeleteSnippets === next.onDeleteSnippets
|
||
|
|
&& prev.chainHosts === next.chainHosts
|
||
|
|
&& themeFingerprint(prev.appearanceTheme ?? prev.terminalTheme) === themeFingerprint(next.appearanceTheme ?? next.terminalTheme)
|
||
|
|
&& prev.knownHosts === next.knownHosts
|
||
|
|
// Solo tab switches only flip isVisible. Skipping it leaves isVisibleRef
|
||
|
|
// stale, so hidden panes keep the visible write path and tab-return recovery
|
||
|
|
// in useTerminalEffects never runs (#1985).
|
||
|
|
&& prev.isVisible === next.isVisible
|
||
|
|
&& prev.paneLayoutKey === next.paneLayoutKey
|
||
|
|
&& prev.inWorkspace === next.inWorkspace
|
||
|
|
&& prev.isResizing === next.isResizing
|
||
|
|
&& prev.isFocusMode === next.isFocusMode
|
||
|
|
&& prev.isPaneMagnified === next.isPaneMagnified
|
||
|
|
&& prev.isFocused === next.isFocused
|
||
|
|
&& prev.isFocusedPane === next.isFocusedPane
|
||
|
|
&& prev.fontFamilyId === next.fontFamilyId
|
||
|
|
&& prev.fontSize === next.fontSize
|
||
|
|
&& prev.followAppTerminalTheme === next.followAppTerminalTheme
|
||
|
|
// accentMode / customAccent intentionally omitted — Terminal reads appearanceChromeStore.
|
||
|
|
&& prev.terminalSettings === next.terminalSettings
|
||
|
|
&& prev.sessionId === next.sessionId
|
||
|
|
&& prev.restoreState === next.restoreState
|
||
|
|
&& prev.vaultInitializedOverride === next.vaultInitializedOverride
|
||
|
|
&& prev.shellType === next.shellType
|
||
|
|
&& prev.lastCwd === next.lastCwd
|
||
|
|
&& prev.restoreTerminalCwd === next.restoreTerminalCwd
|
||
|
|
&& prev.sessionDisplayName === next.sessionDisplayName
|
||
|
|
&& prev.startupCommand === next.startupCommand
|
||
|
|
&& prev.noAutoRun === next.noAutoRun
|
||
|
|
&& prev.pendingScriptId === next.pendingScriptId
|
||
|
|
&& prev.pendingScript === next.pendingScript
|
||
|
|
&& prev.reuseConnectionFromSessionId === next.reuseConnectionFromSessionId
|
||
|
|
&& prev.requireFreshConnection === next.requireFreshConnection
|
||
|
|
&& prev.attachExistingSession === next.attachExistingSession
|
||
|
|
&& prev.serialConfig === next.serialConfig
|
||
|
|
&& prev.hotkeyScheme === next.hotkeyScheme
|
||
|
|
&& prev.disableTerminalFontZoom === next.disableTerminalFontZoom
|
||
|
|
&& prev.keyBindings === next.keyBindings
|
||
|
|
&& prev.isBroadcastEnabled === next.isBroadcastEnabled
|
||
|
|
&& prev.isWorkspaceComposeBarOpen === next.isWorkspaceComposeBarOpen
|
||
|
|
&& prev.sessionLog === next.sessionLog
|
||
|
|
&& prev.sshDebugLogEnabled === next.sshDebugLogEnabled
|
||
|
|
&& prev.sudoAutofillPassword === next.sudoAutofillPassword
|
||
|
|
&& prev.sudoAutofillCandidates === next.sudoAutofillCandidates
|
||
|
|
&& prev.showSelectionAIAction === next.showSelectionAIAction
|
||
|
|
&& prev.onHotkeyAction === next.onHotkeyAction
|
||
|
|
&& prev.onTerminalFontSizeChange === next.onTerminalFontSizeChange
|
||
|
|
&& prev.onStatusChange === next.onStatusChange
|
||
|
|
&& prev.onSessionExit === next.onSessionExit
|
||
|
|
&& prev.onTerminalDataCapture === next.onTerminalDataCapture
|
||
|
|
&& prev.onOsDetected === next.onOsDetected
|
||
|
|
&& prev.onCloseSession === next.onCloseSession
|
||
|
|
&& prev.onUpdateHost === next.onUpdateHost
|
||
|
|
&& prev.onAddKnownHost === next.onAddKnownHost
|
||
|
|
&& prev.onExpandToFocus === next.onExpandToFocus
|
||
|
|
&& prev.onTogglePaneMagnification === next.onTogglePaneMagnification
|
||
|
|
&& prev.onCommandExecuted === next.onCommandExecuted
|
||
|
|
&& prev.onCommandSubmitted === next.onCommandSubmitted
|
||
|
|
&& prev.onSplitHorizontal === next.onSplitHorizontal
|
||
|
|
&& prev.onSplitVertical === next.onSplitVertical
|
||
|
|
&& prev.onOpenSftp === next.onOpenSftp
|
||
|
|
&& prev.onTerminalCwdChange === next.onTerminalCwdChange
|
||
|
|
&& prev.onTerminalTitleChange === next.onTerminalTitleChange
|
||
|
|
&& prev.onTerminalBell === next.onTerminalBell
|
||
|
|
&& prev.onTerminalOutput === next.onTerminalOutput
|
||
|
|
&& prev.onTerminalContextReaderChange === next.onTerminalContextReaderChange
|
||
|
|
&& prev.onOpenScripts === next.onOpenScripts
|
||
|
|
&& prev.onOpenHistory === next.onOpenHistory
|
||
|
|
&& prev.onOpenTheme === next.onOpenTheme
|
||
|
|
&& prev.onOpenSystem === next.onOpenSystem
|
||
|
|
&& prev.onToggleBroadcast === next.onToggleBroadcast
|
||
|
|
&& prev.onToggleComposeBar === next.onToggleComposeBar
|
||
|
|
&& prev.onBroadcastInput === next.onBroadcastInput
|
||
|
|
&& prev.onBroadcastInterruptPriorityChange === next.onBroadcastInterruptPriorityChange
|
||
|
|
&& prev.onSnippetExecutorChange === next.onSnippetExecutorChange
|
||
|
|
&& prev.onProgrammaticCommandLogRewriteChange === next.onProgrammaticCommandLogRewriteChange
|
||
|
|
&& prev.onAddSelectionToAI === next.onAddSelectionToAI
|
||
|
|
&& prev.onRename === next.onRename
|
||
|
|
&& prev.onDetach === next.onDetach
|
||
|
|
&& prev.onStartSessionDrag === next.onStartSessionDrag
|
||
|
|
&& prev.onEndSessionDrag === next.onEndSessionDrag
|
||
|
|
&& prev.onDetachPointerDown === next.onDetachPointerDown
|
||
|
|
&& prev.onDetachDragStart === next.onDetachDragStart
|
||
|
|
&& prev.onDetachDragEnd === next.onDetachDragEnd
|
||
|
|
);
|