diff --git a/AppImage/components/terminal-panel.tsx b/AppImage/components/terminal-panel.tsx index 754532d..66f7e07 100644 --- a/AppImage/components/terminal-panel.tsx +++ b/AppImage/components/terminal-panel.tsx @@ -14,9 +14,8 @@ import { Lightbulb, Terminal, Plus, - LayoutGrid, - Columns, - Rows, + Split, + Grid2X2, } from "lucide-react" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" @@ -170,12 +169,8 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl try { setIsSearching(true) - setUseOnline(true) - // Format query: replace spaces with + for cheat.sh API const formattedQuery = query.trim().replace(/\s+/g, "+") - - // Use ?QT options: Q=no comments (code only), T=no syntax highlighting const url = `https://cht.sh/${formattedQuery}?QT` console.log("[v0] Fetching from cheat.sh:", url) @@ -183,7 +178,7 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl const response = await fetch(url, { signal: AbortSignal.timeout(10000), headers: { - "User-Agent": "curl/7.68.0", // cheat.sh works better with curl user agent + "User-Agent": "curl/7.68.0", }, }) @@ -199,15 +194,13 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl throw new Error("No results found") } - // Split by double newlines to get separate examples const blocks = text.split(/\n\s*\n/).filter((block) => block.trim()) const examples: string[] = [] for (const block of blocks) { const lines = block.split("\n").filter((line) => { const trimmed = line.trim() - // Filter out URLs, metadata, and empty lines - return trimmed && !trimmed.startsWith("http") && !trimmed.includes("cheat.sh") && !trimmed.includes("[") // Remove attribution lines like [user] [source] + return trimmed && !trimmed.startsWith("http") && !trimmed.includes("cheat.sh") && !trimmed.includes("[") }) if (lines.length > 0) { @@ -221,11 +214,12 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl console.log("[v0] Parsed examples:", examples.length) if (examples.length > 0) { + setUseOnline(true) setSearchResults([ { command: query, description: `Results from cheat.sh for "${query}"`, - examples: examples.slice(0, 8), // Show up to 8 examples + examples: examples.slice(0, 8), }, ]) } else { @@ -247,13 +241,15 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl } const debounce = setTimeout(() => { - if (searchQuery) { + if (searchQuery && searchQuery.length >= 2) { + // Only search if query is at least 2 characters searchCheatSh(searchQuery) } else { setSearchResults([]) setFilteredCommands(proxmoxCommands) + setUseOnline(true) // Reset to online when query is cleared } - }, 500) + }, 800) // Increased debounce to 800ms to avoid premature requests return () => clearTimeout(debounce) }, [searchQuery]) @@ -486,19 +482,10 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl
- -
- {activeTerminal?.isConnected ? "Connected" : "Disconnected"} -
+
{terminals.length} / 4 terminals
@@ -509,31 +496,26 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl onClick={() => setLayout("vertical")} variant="outline" size="sm" - className={`h-8 px-2 ${layout === "vertical" ? "bg-zinc-700" : ""}`} - title="Split Vertical" + className={`h-8 px-2 ${layout === "vertical" ? "bg-blue-500/20 border-blue-500" : ""}`} > - + + - {terminals.length >= 3 && ( - - )} )}