github-search-cli 9.10.1 → 9.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
6
6
 
7
7
  ---
8
8
 
9
+ ## [9.10.2] — 2026-10-14 (released)
10
+
11
+ ### Fixed
12
+
13
+ - **`Ctrl+E` opens the export chooser.** The startup tip list advertises
14
+ "Press Ctrl+E to export results as CSV or Markdown", but no handler ever
15
+ claimed the chord: `Ctrl+E` did nothing on the results screen, and while the
16
+ query input was focused its emacs binding read the same chord as "move to
17
+ line end". The key handler now claims `Ctrl+E` before the input sees it and
18
+ opens the export overlay (JSON / CSV / Markdown / plain text). With results on
19
+ screen that is the shortest route to a `ghfind-export-<ts>.<ext>` file; with
20
+ an empty result list the status bar reports "No results to export — run a
21
+ search first" instead of opening an empty chooser.
22
+
9
23
  ## [9.10.1] — 2026-10-08 (released)
10
24
 
11
25
  ### Fixed
package/README.md CHANGED
@@ -216,6 +216,7 @@ ghfind --completion fish | source
216
216
  | `↑` / `↓` — `j` / `k` | Navigate results & menus |
217
217
  | `Esc` | Open / close leader menu (contextual actions) |
218
218
  | `Tab` | Auto-complete search qualifier |
219
+ | `Ctrl+E` | Export results (JSON / CSV / Markdown / text) |
219
220
  | `?` or `Ctrl+H` | Help overlay |
220
221
  | `1`–`5` | Switch trending tabs (Today → All) |
221
222
  | `←` / `→` — `h` / `l` | Switch trending tabs (left/right) |
@@ -388,6 +389,10 @@ for the architecture, measurements, and remaining work.
388
389
 
389
390
  Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
390
391
 
392
+ ### v9.10.2
393
+
394
+ - **`Ctrl+E` opens the export chooser** — the startup tip advertised "Press Ctrl+E to export results as CSV or Markdown", but nothing bound the chord: it was ignored on the results screen and, while the query input had focus, its emacs binding read it as "move to line end"; it now opens the export overlay (JSON / CSV / Markdown / plain text), or reports that there is nothing to export yet
395
+
391
396
  ### v9.10.1
392
397
 
393
398
  - **`--interval` is parsed again** — it was documented in `--help`, the README, the how-to guide and all three shell completions, but `parseArgs` had no case for it, so `ghfind --watch --interval 60` searched for the literal string `--interval 60` and polled at the default 300s anyway
@@ -410,19 +415,6 @@ Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
410
415
  - **`Space` now always types a space, and `Esc` opens the command menu** — `Space` opened the menu only while the query input was unfocused, and the only thing that unfocused it was clicking a result row, so `Space` worked only after a mouse click; `Esc` already closed every overlay, so it gains a meaning rather than losing one
411
416
  - **A hover highlight no longer painted lists magenta** — OpenTUI's colour parser accepts only hex and CSS names, so an `rgba()` tint fell through to its magenta fallback
412
417
 
413
- ### v9.9.0
414
-
415
- - **Queries are understood before they are sent** — every surface (TUI, CLI, MCP, `--watch`) parses and checks a query first, so a typo or bad value fails with a specific message and a fix instead of an opaque GitHub 422 or a misleading "network error"; previously only the TUI ran validation at all
416
- - **Qualifier typos are corrected** — `langauge:Rust` → `language:Rust`, `star:1000` → `stars:1000`, `push:>` → `pushed:>`; correction is limited to the qualifiers ghfind knows, so `is:`, `has:` and `props.*` are never mangled
417
- - **Counts accept `k`/`m`** — `stars:10k` → `stars:>=10000`, `size:1m`, `stars:1k..10k`; a bare count keeps GitHub's exact-match meaning, so `stars:100` is still exactly 100
418
- - **Values are validated per qualifier** — numeric counts, `fork:true|false|only`, `archived:true|false`, calendar-checked ISO8601 dates for `created`/`pushed`/`updated`, the `visibility:` enum, and `in:` fields; documented comma-lists like `in:name,description` still work
419
- - **Zero results suggest how to loosen the query** — `No results for "rust stars:>=5000000"` now offers `Try: rust stars:>=500000`, ranked by how sharply each qualifier narrows results
420
- - **`GHFIND_LOG=<path>` writes TUI diagnostics to a file** — the TUI's logger was a silent no-op, making API failures undiagnosable; token values are redacted from logged URLs
421
- - **A 403 no longer claims SSO is the cause** — SSO enforcement, secondary rate limits and org restrictions all produce it, and the message asserted the first one unconditionally; it now reports GitHub's own reason
422
- - **The post-upgrade panel no longer reappears on every launch** — it was triggered by a version inequality nothing ever cleared, so it showed after every single launch _including_ after "later" or "never"; it now acknowledges itself once shown
423
- - **A prerelease is no longer offered as an upgrade** — the version comparison used by Node and the compiled binaries reported `9.9.0-beta.1` as newer than `9.9.0`, i.e. a downgrade; it now follows npm ordering and ignores build metadata
424
- - **A new [how-to guide](docs/HOW-TO.md)** — token setup, writing queries, reading results, recovering from errors, and copy-paste recipes
425
-
426
418
  ## License
427
419
 
428
420
  MIT
package/dist/cli.js CHANGED
@@ -2154,7 +2154,7 @@ var cached = null;
2154
2154
  function getVersion() {
2155
2155
  if (cached) return cached;
2156
2156
  if (true) {
2157
- cached = "9.10.1";
2157
+ cached = "9.10.2";
2158
2158
  return cached;
2159
2159
  }
2160
2160
  try {
@@ -8000,6 +8000,16 @@ ${pack.description ?? ""}`;
8000
8000
  showOverlay("help");
8001
8001
  return;
8002
8002
  }
8003
+ if (key.ctrl && key.name === "e") {
8004
+ key.stopPropagation();
8005
+ if (currentRepos.length > 0) {
8006
+ showOverlay("export");
8007
+ } else {
8008
+ setStatus("No results to export \u2014 run a search first");
8009
+ }
8010
+ renderer.requestRender();
8011
+ return;
8012
+ }
8003
8013
  if (key.name === "tab") {
8004
8014
  if (searchBox.visible) {
8005
8015
  const val = searchInput.value;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-search-cli",
3
- "version": "9.10.1",
3
+ "version": "9.10.2",
4
4
  "description": "Search GitHub from your terminal — repo search, trending repos, npm package search, bookmarks, deep-dive, compare, export. Keyboard + mouse TUI + pipeable CLI.",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1",
@@ -0,0 +1,26 @@
1
+ # v9.10.2
2
+
3
+ A one-key release: the export shortcut the app has been advertising in its own
4
+ startup tips now exists.
5
+
6
+ ## `Ctrl+E` exported nothing
7
+
8
+ The tip list in `src/tips.ts` advertises _"Press Ctrl+E to export results as
9
+ CSV or Markdown"_. Nothing bound the chord. On the results screen `Ctrl+E` was
10
+ ignored outright, and while the query input had focus the line editor's default
11
+ emacs binding claimed the same chord as "move to line end" — the one place it
12
+ did something, it did the wrong thing.
13
+
14
+ The key handler now claims `Ctrl+E` before the input ever sees it, and opens
15
+ the export overlay: JSON, CSV, Markdown, or plain text.
16
+
17
+ - With results on screen, `Ctrl+E` goes straight to the chooser — no detour
18
+ through the leader menu (`Esc` → Navigate → Export) — and writes the same
19
+ `ghfind-export-<ts>.<ext>` file the overlay always wrote.
20
+ - With an empty result list it does not open an empty chooser: the status bar
21
+ says `No results to export — run a search first`.
22
+
23
+ ## Nothing else changed
24
+
25
+ The export overlay itself is untouched — the shortcut drives the existing
26
+ overlay rather than growing a second code path that could drift from it.
package/src/tui.ts CHANGED
@@ -3458,6 +3458,20 @@ ${pack.description ?? ""}`;
3458
3458
  showOverlay("help");
3459
3459
  return;
3460
3460
  }
3461
+ // Ctrl+E opens the export chooser (CSV / Markdown / JSON / plain text)
3462
+ // straight from the results — the shortcut the startup tip advertises.
3463
+ // Claim the chord first: while the query input is focused its default
3464
+ // emacs binding would otherwise also treat Ctrl+E as "move to line end".
3465
+ if (key.ctrl && key.name === "e") {
3466
+ key.stopPropagation();
3467
+ if (currentRepos.length > 0) {
3468
+ showOverlay("export");
3469
+ } else {
3470
+ setStatus("No results to export — run a search first");
3471
+ }
3472
+ renderer.requestRender();
3473
+ return;
3474
+ }
3461
3475
 
3462
3476
  // Tab auto-completes qualifiers in search input
3463
3477
  if (key.name === "tab") {