130 lines · 3.9 KB · TypeScript
RawDownload
import type { DownloadFocus, Region, ResultFocus, Section, SeedFocus } from "./store"; export interface Hint {  keys: string;  label: string;} interface HelpGroup {  title: string;  hints: Hint[];} export const HELP_GROUPS: HelpGroup[] = [  {    title: "Navigate",    hints: [      { keys: "↑↓←→ / hjkl", label: "Navigate panes and lists" },      { keys: "↵", label: "Open" },      { keys: "tab", label: "Switch pane" },      { keys: "esc", label: "Back" },      { keys: "o", label: "Default download folder" },      { keys: "t", label: "Extra trackers" },      { keys: "q", label: "Quit" },    ],  },  {    title: "Search",    hints: [      { keys: "/", label: "Edit search" },      { keys: "f", label: "Filter list" },      { keys: "d", label: "Download (shift+d: folder)" },      { keys: "s", label: "Sort results" },      { keys: "z", label: "Hide dead torrents" },      { keys: "y", label: "Copy magnet" },      { keys: "↵", label: "Open details" },      { keys: "e", label: "Export as .torrent" },      { keys: "m", label: "Paste magnet" },    ],  },  {    title: "Downloads",    hints: [      { keys: "p", label: "Pause/resume" },      { keys: "c", label: "Cancel or remove (shift+c: all)" },      { keys: "f", label: "Retry failed" },      { keys: "d", label: "Download again" },      { keys: "e", label: "Open folder" },      { keys: "s", label: "Export torrent file" },    ],  },  {    title: "Seeding",    hints: [      { keys: "p", label: "Pause/resume" },      { keys: "c", label: "Remove (shift+c: all)" },      { keys: "e", label: "Open folder" },    ],  },]; // Footer labels stay terse so the contextual hint row never wraps; the `?`// overlay (HELP_GROUPS) carries the full, descriptive list. Rare or// self-announcing actions (z) stay `?`-only to keep every row inside 80 cols.const NAVIGATE: Hint = { keys: "↑↓←→", label: "Move" }; const ALWAYS: Hint = { keys: "?", label: "Keys" }; const SWITCH: Hint = { keys: "tab", label: "Switch" }; const FOLDER: Hint = { keys: "e", label: "Folder" }; const TORRENT: Hint = { keys: "s", label: "Export" }; const EXPORT: Hint = { keys: "e", label: "Export" }; export function footerHints(  region: Region,  section: Section,  downloadFocus?: DownloadFocus | null,  seedFocus?: SeedFocus | null,  resultFocus?: ResultFocus | null,): Hint[] {  if (region === "sidebar") {    return [      NAVIGATE,      { keys: "↵", label: "Open" },      SWITCH,      ALWAYS,      { keys: "q", label: "Quit" },    ];  }  if (section === "seeding") {    const label =      seedFocus === "seeding" ? "Pause" : seedFocus === "missing" ? "Retry" : "Resume";    return [{ keys: "p", label }, { keys: "c", label: "Remove from list" }, FOLDER, SWITCH, ALWAYS];  }  if (section === "downloads") {    if (downloadFocus === "paused") {      return [{ keys: "p", label: "Resume" }, { keys: "c", label: "Cancel" }, FOLDER, TORRENT, SWITCH, ALWAYS];    }    if (downloadFocus === "failed") {      return [{ keys: "f", label: "Retry" }, { keys: "c", label: "Remove" }, FOLDER, TORRENT, SWITCH, ALWAYS];    }    if (downloadFocus === "recent") {      // Removal is list bookkeeping, never file deletion, and the label says      // so. Clear-all (shift+c) stays `?`-only, like D.      return [        { keys: "d", label: "Redownload" },        { keys: "c", label: "Remove from list" },        FOLDER,        TORRENT,        SWITCH,        ALWAYS,      ];    }    return [{ keys: "p", label: "Pause" }, { keys: "c", label: "Cancel" }, FOLDER, TORRENT, SWITCH, ALWAYS];  }  return [    NAVIGATE,    // The footer advertises only the default download key; D (download to a    // chosen folder) stays bound but lives in the `?` sheet alone.    { keys: "d", label: "Download" },    { keys: "y", label: "Copy" },    resultFocus === "detail" ? EXPORT : { keys: "s", label: "Sort" },    { keys: "/", label: "Search" },    { keys: "f", label: "Filter" },    SWITCH,    ALWAYS,  ];}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t