rv-bible-cli 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -1,19 +1,21 @@
1
- # rv — Recovery Version Bible CLI
1
+ # rvb — Recovery Version Bible CLI
2
2
 
3
3
  A fast, study-grade terminal Bible reader for the Recovery Version. Offline-first, footnote-aware, cross-reference deep-linking, clipboard-friendly.
4
4
 
5
5
  ```
6
6
  npm install -g rv-bible-cli
7
- rv
7
+ rvb
8
8
  ```
9
9
 
10
+ > **Note:** `rv` also works as an alias on Mac/Linux.
11
+
10
12
  ## Quick Start
11
13
 
12
14
  ```bash
13
- rv john 3 # read a chapter (interactive pager)
14
- rv john 3:16 # read a single verse
15
- rv search grace # concordance search (1,129 curated words)
16
- rv help # see all commands and shortcuts
15
+ rvb john 3 # read a chapter (interactive pager)
16
+ rvb john 3:16 # read a single verse
17
+ rvb search grace # concordance search (1,129 curated words)
18
+ rvb help # see all commands and shortcuts
17
19
  ```
18
20
 
19
21
  ## Features
@@ -21,24 +23,24 @@ rv help # see all commands and shortcuts
21
23
  ### Reading
22
24
 
23
25
  ```bash
24
- rv john 3 # chapter mode — opens full-screen pager
25
- rv john 3:16 # single verse
26
- rv john 3:16-18 # verse range
27
- rv john 3:16,18,20 # specific verses
28
- rv john 3:16 rom 8:28 # verses across books
29
- rv jn 3 # fuzzy book names (jn, gen, rm, eph, rev, etc.)
30
- rv john 3 --notes # inline footnote markers + footnote block
31
- rv john 3 --outline # section headers inline
32
- rv john 3 --full # both notes and outline
33
- rv john 3 --raw # plain text, no pager (also auto when piped)
26
+ rvb john 3 # chapter mode — opens full-screen pager
27
+ rvb john 3:16 # single verse
28
+ rvb john 3:16-18 # verse range
29
+ rvb john 3:16,18,20 # specific verses
30
+ rvb john 3:16 rom 8:28 # verses across books
31
+ rvb jn 3 # fuzzy book names (jn, gen, rm, eph, rev, etc.)
32
+ rvb john 3 --notes # inline footnote markers + footnote block
33
+ rvb john 3 --outline # section headers inline
34
+ rvb john 3 --full # both notes and outline
35
+ rvb john 3 --raw # plain text, no pager (also auto when piped)
34
36
  ```
35
37
 
36
38
  ### Footnotes
37
39
 
38
40
  ```bash
39
- rv note john 3:16 # all footnotes for a verse
40
- rv note john 3:16 2d # specific footnote by marker
41
- rv note john 3:14-16 # footnotes for a range
41
+ rvb note john 3:16 # all footnotes for a verse
42
+ rvb note john 3:16 2d # specific footnote by marker
43
+ rvb note john 3:14-16 # footnotes for a range
42
44
  ```
43
45
 
44
46
  ### Search
@@ -46,12 +48,12 @@ rv note john 3:14-16 # footnotes for a range
46
48
  Concordance-first for known words (1,129 curated entries), FTS5 full-text for everything else.
47
49
 
48
50
  ```bash
49
- rv search grace # concordance lookup
50
- rv search grace in romans # scoped to a book
51
- rv search "only begotten" # phrase match
52
- rv search eternal life # multi-word AND
53
- rv search grace --fts # force raw FTS5
54
- rv search grace --all # show all results (default: 20/page)
51
+ rvb search grace # concordance lookup
52
+ rvb search grace in romans # scoped to a book
53
+ rvb search "only begotten" # phrase match
54
+ rvb search eternal life # multi-word AND
55
+ rvb search grace --fts # force raw FTS5
56
+ rvb search grace --all # show all results (default: 20/page)
55
57
  ```
56
58
 
57
59
  ### Copy to Clipboard
@@ -59,18 +61,18 @@ rv search grace --all # show all results (default: 20/page)
59
61
  Add `--copy` to any read command. Output displays normally AND goes to clipboard.
60
62
 
61
63
  ```bash
62
- rv john 3:16 --copy # "John 3:16 For God so loved..."
63
- rv john 3:16 --copy --no-ref # plain text only
64
- rv john 3:16 --copy --numbered # "16 For God so loved..."
65
- rv john 3:16 --copy --md # markdown block quote
66
- rv search grace --copy # copy all results
64
+ rvb john 3:16 --copy # "John 3:16 For God so loved..."
65
+ rvb john 3:16 --copy --no-ref # plain text only
66
+ rvb john 3:16 --copy --numbered # "16 For God so loved..."
67
+ rvb john 3:16 --copy --md # markdown block quote
68
+ rvb search grace --copy # copy all results
67
69
  ```
68
70
 
69
71
  ### Navigation
70
72
 
71
73
  ```bash
72
- rv # home screen — browse books, pick chapters
73
- rv continue # resume last-read chapter
74
+ rvb # home screen — browse books, pick chapters
75
+ rvb continue # resume last-read chapter
74
76
  ```
75
77
 
76
78
  ## Pager
@@ -124,7 +126,7 @@ Study mode persists across navigation — follow a cross-ref and you stay in stu
124
126
 
125
127
  ### Home Screen
126
128
 
127
- Press `H` from the pager or run `rv` with no arguments.
129
+ Press `H` from the pager or run `rvb` with no arguments.
128
130
 
129
131
  | Key | Action |
130
132
  |-----|--------|
package/dist/index.js CHANGED
@@ -85,10 +85,10 @@ function renderHomepage() {
85
85
  if (last) {
86
86
  const bookName = getBookInfo(last.book)?.full_name ?? last.book;
87
87
  lines.push(chalk.dim(` Last read: ${bookName} ${last.chapter}`));
88
- lines.push(chalk.dim(' › rv continue'));
88
+ lines.push(chalk.dim(' › rvb continue'));
89
89
  }
90
90
  else {
91
- lines.push(chalk.dim(' Get started: rv john 1'));
91
+ lines.push(chalk.dim(' Get started: rvb john 1'));
92
92
  }
93
93
  lines.push('');
94
94
  // Book grid
@@ -110,7 +110,7 @@ function renderHomepage() {
110
110
  lines.push(...renderGrid(nt));
111
111
  lines.push('');
112
112
  // Hints
113
- lines.push(chalk.dim(' rv <book> <chapter> rv search <query> rv continue'));
113
+ lines.push(chalk.dim(' rvb <book> <chapter> rvb search <query> rvb continue'));
114
114
  lines.push('');
115
115
  console.log(lines.join('\n'));
116
116
  }
@@ -229,7 +229,7 @@ program
229
229
  .option('--copy', 'copy displayed output to clipboard')
230
230
  .action(async (args, opts) => {
231
231
  if (args.length === 0) {
232
- console.error('Usage: rv note <ref> [marker] (e.g. rv note john 3:16 or rv note john 3:16 1a)');
232
+ console.error('Usage: rvb note <ref> [marker] (e.g. rvb note john 3:16 or rvb note john 3:16 1a)');
233
233
  process.exit(1);
234
234
  }
235
235
  // Try no-marker mode: parse all args as verse refs (every ref must have verses).
@@ -263,7 +263,7 @@ program
263
263
  }
264
264
  // Marker mode: last token is the marker, everything before is the ref.
265
265
  if (args.length < 2) {
266
- console.error('Usage: rv note <ref> <marker> (e.g. rv note john 3:16 1a)');
266
+ console.error('Usage: rvb note <ref> <marker> (e.g. rvb note john 3:16 1a)');
267
267
  process.exit(1);
268
268
  }
269
269
  const marker = args[args.length - 1];
@@ -351,7 +351,7 @@ program
351
351
  .action(async (queryArgs, opts) => {
352
352
  const { queryTokens, book } = parseScope(queryArgs);
353
353
  if (queryTokens.length === 0) {
354
- console.error('Usage: rv search <query> [in <book>]');
354
+ console.error('Usage: rvb search <query> [in <book>]');
355
355
  process.exit(1);
356
356
  }
357
357
  const word = queryTokens.join(' ');
@@ -428,7 +428,7 @@ program
428
428
  if (!isTTY) {
429
429
  // Non-interactive: show "showing N of M" hint and stop
430
430
  const ftsFlag = opts.fts ? ' --fts' : '';
431
- const cmd = `rv search ${word}${book ? ` in ${(getBookInfo(book)?.full_name ?? book).toLowerCase()}` : ''}${ftsFlag}`;
431
+ const cmd = `rvb search ${word}${book ? ` in ${(getBookInfo(book)?.full_name ?? book).toLowerCase()}` : ''}${ftsFlag}`;
432
432
  console.log('');
433
433
  console.log(chalk.dim(` showing ${offset} of ${all.length} · ${cmd} --all to show all`));
434
434
  break;
@@ -457,7 +457,7 @@ program
457
457
  .action(async (opts) => {
458
458
  const last = getLastRead();
459
459
  if (!last) {
460
- console.log(chalk.dim(' Nothing read yet — try: rv john 1'));
460
+ console.log(chalk.dim(' Nothing read yet — try: rvb john 1'));
461
461
  return;
462
462
  }
463
463
  if (opts.full) {
@@ -504,43 +504,43 @@ program
504
504
  const b = chalk.bold;
505
505
  const c = chalk.cyan;
506
506
  console.log(`
507
- ${b('rv — Recovery Version Bible CLI')}
507
+ ${b('rvb — Recovery Version Bible CLI')}
508
508
 
509
509
  ${b('READING')}
510
- ${c('rv john 3')} Read a chapter (opens pager in terminal)
511
- ${c('rv john 3:16')} Read a single verse
512
- ${c('rv john 3:16-18')} Read a verse range
513
- ${c('rv john 3:16,18,20')} Multiple specific verses
514
- ${c('rv john 3:16 rom 8:28')} Verses across books
515
- ${c('rv jn 3')} Fuzzy book names ${d('(jn → John, gen → Genesis, rm → Romans)')}
516
- ${c('rv john 3 --notes')} Show footnote markers + footnote block
517
- ${c('rv john 3 --outline')} Show section headers inline
518
- ${c('rv john 3 --full')} Both notes and outline
519
- ${c('rv john 3 --raw')} Plain text, no pager ${d('(also auto when piped)')}
510
+ ${c('rvb john 3')} Read a chapter (opens pager in terminal)
511
+ ${c('rvb john 3:16')} Read a single verse
512
+ ${c('rvb john 3:16-18')} Read a verse range
513
+ ${c('rvb john 3:16,18,20')} Multiple specific verses
514
+ ${c('rvb john 3:16 rom 8:28')} Verses across books
515
+ ${c('rvb jn 3')} Fuzzy book names ${d('(jn → John, gen → Genesis, rm → Romans)')}
516
+ ${c('rvb john 3 --notes')} Show footnote markers + footnote block
517
+ ${c('rvb john 3 --outline')} Show section headers inline
518
+ ${c('rvb john 3 --full')} Both notes and outline
519
+ ${c('rvb john 3 --raw')} Plain text, no pager ${d('(also auto when piped)')}
520
520
 
521
521
  ${b('FOOTNOTES')}
522
- ${c('rv note john 3:16')} All footnotes for a verse
523
- ${c('rv note john 3:16 2d')} Specific footnote by marker
524
- ${c('rv note john 3:14-16')} Footnotes for a range
522
+ ${c('rvb note john 3:16')} All footnotes for a verse
523
+ ${c('rvb note john 3:16 2d')} Specific footnote by marker
524
+ ${c('rvb note john 3:14-16')} Footnotes for a range
525
525
 
526
526
  ${b('SEARCH')} ${d('concordance-first for known words, FTS5 for everything else')}
527
- ${c('rv search grace')} Concordance lookup ${d('(1,129 curated words)')}
528
- ${c('rv search grace in rom')} Scoped to a book
529
- ${c('rv search "only begotten"')} Phrase match via FTS5
530
- ${c('rv search eternal life')} Multi-word AND match
531
- ${c('rv search grace --fts')} Force raw FTS5
532
- ${c('rv search grace --all')} Show all results ${d('(default: 20 per page)')}
527
+ ${c('rvb search grace')} Concordance lookup ${d('(1,129 curated words)')}
528
+ ${c('rvb search grace in rom')} Scoped to a book
529
+ ${c('rvb search "only begotten"')} Phrase match via FTS5
530
+ ${c('rvb search eternal life')} Multi-word AND match
531
+ ${c('rvb search grace --fts')} Force raw FTS5
532
+ ${c('rvb search grace --all')} Show all results ${d('(default: 20 per page)')}
533
533
 
534
534
  ${b('NAVIGATION')}
535
- ${c('rv')} Home screen — browse books, pick chapters
536
- ${c('rv continue')} Resume last-read chapter
535
+ ${c('rvb')} Home screen — browse books, pick chapters
536
+ ${c('rvb continue')} Resume last-read chapter
537
537
 
538
538
  ${b('COPY')} ${d('add --copy to any read command')}
539
- ${c('rv john 3:16 --copy')} Copy with reference prefix
540
- ${c('rv john 3:16 --copy --no-ref')} Plain text only
541
- ${c('rv john 3:16 --copy --numbered')} Verse number prefix
542
- ${c('rv john 3:16 --copy --md')} Markdown block quote
543
- ${c('rv search grace --copy')} Copy all search results
539
+ ${c('rvb john 3:16 --copy')} Copy with reference prefix
540
+ ${c('rvb john 3:16 --copy --no-ref')} Plain text only
541
+ ${c('rvb john 3:16 --copy --numbered')} Verse number prefix
542
+ ${c('rvb john 3:16 --copy --md')} Markdown block quote
543
+ ${c('rvb search grace --copy')} Copy all search results
544
544
 
545
545
  ${b('PAGER SHORTCUTS')} ${d('chapter mode in terminal')}
546
546
  ${d('Scroll')} ↑↓ or j/k line · Space/b page · g top · G bottom
package/dist/ui/Pager.js CHANGED
@@ -931,8 +931,10 @@ function Pager({ initialBook, initialChapter, initialNotes, initialOutline, star
931
931
  MajorProphets: 'Major Prophets', MinorProphets: 'Minor Prophets',
932
932
  Gospels: 'Gospels', Paul: 'Epistles of Paul', Others: 'General Epistles & Prophecy',
933
933
  };
934
+ // Acts is miscategorized as "Gospels" in the DB — override it
935
+ const BOOK_OVERRIDES = { Act: 'History of the Church' };
934
936
  const bookInfo = getBookInfo(book);
935
- const categoryLabel = CATEGORY_LABELS[bookInfo?.category ?? ''] ?? '';
937
+ const categoryLabel = BOOK_OVERRIDES[book] ?? CATEGORY_LABELS[bookInfo?.category ?? ''] ?? '';
936
938
  const topVerseIdx = verseAtLine(verseMap, scrollOffset) + 1;
937
939
  const title = `${bookName} ${chapter}`;
938
940
  const position = `${topVerseIdx}/${verses.length}`;
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "rv-bible-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Fast, offline terminal Bible reader for the Recovery Version. Footnotes, cross-references, concordance search, interactive pager.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
- "rv": "dist/index.js"
8
+ "rv": "dist/index.js",
9
+ "rvb": "dist/index.js"
9
10
  },
10
11
  "files": [
11
12
  "dist/",