Skip to content

Commit f0ebe5b

Browse files
codedeviateclaude
andcommitted
docs: restructure OUT-OF-SCOPE.md into Waiting/Deferred/Not yet supported/Out of scope buckets
Aligns the file's top-level organization with the recon project convention. Existing items are reclassified into the four buckets while preserving topical sub-groupings (Rendering, Interactive mode, etc.) as subsections. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e902856 commit f0ebe5b

1 file changed

Lines changed: 68 additions & 22 deletions

File tree

OUT-OF-SCOPE.md

Lines changed: 68 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,100 @@
1-
# Out of scope
1+
# Out of Scope & Wishlist
22

3-
Things that have been considered, intentionally not implemented, and may stay that way — or may graduate to a real plan later. Add to this list when something is deferred during design / review; remove when an item ships.
3+
A living list of items raised during design, implementation, or feature sweeps
4+
that are either explicitly deferred, decided against, or noted as "maybe
5+
later". Also doubles as a wishlist — items under "Waiting" are things worth
6+
building once someone explicitly asks. Kept here so ideas don't disappear
7+
into the black hole of spec files after each release.
48

5-
## Platform
9+
Organized into four buckets by reason for non-inclusion. When an item ships,
10+
remove it from this file and note the shipping version in the CHANGELOG
11+
entry rather than leaving a crossed-out line here.
612

7-
- **Windows support.** Code uses POSIX pager invocation, libc SIGPIPE reset, and assumes Unix-style `~/.config/`. Targeting Win would require a separate code path in `pager::setup` and config-path resolution, plus a Windows CI matrix. (`term_width` already uses `crossterm::terminal::size`, so that piece is portable.)
13+
- **Waiting** — can be done; nobody's asked for it.
14+
- **Deferred** — possible to implement; actively put off (scope/complexity
15+
trade-off or waiting on a concrete use case).
16+
- **Not yet supported** — blocked by upstream / ecosystem maturity; may ship
17+
when the blocker clears.
18+
- **Out of scope** — fundamentally can't be implemented, architecturally
19+
mismatched, or intentionally declined by policy.
820

9-
## Rendering
21+
---
22+
23+
## Waiting
24+
25+
### Rendering
1026

11-
- **`--diff-context` filters output.** Today it's only passed to `git2::DiffOptions`; the printer still emits all lines. Real bat shows only changed regions ± context lines when `--diff` is on.
1227
- **Word-boundary wrapping.** `--wrap=character` and `--wrap=auto` currently break at column boundaries (mid-word if necessary). Real word-boundary wrap (break at spaces, hyphenate gracefully) is a different algorithm — fine for prose, arguably wrong for source code anyway, so deferred unless asked.
1328
- **`--wrap=auto` adapting on stdout-not-a-tty.** Real bat treats `auto` as "wrap when stdout is a TTY, never otherwise." We currently treat `auto` and `character` identically. Could add the TTY-aware nuance if someone pipes batty to a tool that chokes on inserted line breaks.
29+
30+
### Theming
31+
32+
- **Custom theme loading from disk.** Themes come exclusively from `two-face::theme::extra()`. A real `--theme-file path/to/theme.tmTheme` flag is not wired.
33+
34+
### Interactive mode
35+
36+
- **Persisted cursor position across runs.** `~/.local/state/batty/positions.toml` or similar — not implemented.
37+
38+
### Markdown rendering
39+
40+
- **Configurable markdown skin.** termimad's `MadSkin::default()` is used; no `--markdown-skin` flag.
41+
42+
### Rhai grammar gaps
43+
44+
- **Char literal scope** — single-quoted `'a'` are technically char literals in Rhai, but we color them as `string.quoted.single` for theme compatibility. Could be revisited if a theme really needs different coloring.
45+
46+
---
47+
48+
## Deferred
49+
50+
### Rendering
51+
52+
- **`--diff-context` filters output.** Today it's only passed to `git2::DiffOptions`; the printer still emits all lines. Real bat shows only changed regions ± context lines when `--diff` is on.
1453
- **Sub-paragraph row precision in markdown.** The source ↔ rendered map is block-granular: a wrapped 6-row paragraph shows the source-line on row 1 with continuations blank in the gutter. Per-row precision would require replacing termimad with a custom renderer (we walk pulldown_cmark events but defer rendering to termimad for layout).
1554
- **8-bit color downsampling.** Output uses truecolor (`as_24_bit_terminal_escaped`); 256-color terminals get whatever the terminal emulator does at render time. Real bat uses `ansi_colours` to emit nearest-color escapes when truecolor isn't supported.
1655
- **HTML output mode.** Bat's `html_for_string`/`html_for_file` APIs in syntect aren't exposed.
1756
- **Image rendering** (kitty / iTerm2 protocols) — `--show-images` not implemented.
1857

19-
## Theming
20-
21-
- **Custom theme loading from disk.** Themes come exclusively from `two-face::theme::extra()`. A real `--theme-file path/to/theme.tmTheme` flag is not wired.
22-
23-
## Interactive mode
58+
### Interactive mode
2459

2560
- **Search (`/pattern`)** — vim-style search not implemented.
2661
- **Mouse support** — keyboard only. No click-to-position-cursor, no scroll-wheel.
2762
- **Mouse-driven link follow** in markdown view — also keyboard-only.
2863
- **Multiple files in one session.** Today `-i` rejects `>1` file. A tabstrip / `:n` `:p` switching would be a fair amount of work.
29-
- **Persisted cursor position across runs.** `~/.local/state/batty/positions.toml` or similar — not implemented.
3064
- **`--wrap` is forced off in interactive mode.** Long lines truncate at the terminal edge. Honoring `--wrap` here would let one source line span multiple visual rows, which breaks the cursor / viewport / status-bar math (all currently 1 source line = 1 row). A proper fix needs per-visual-row scrolling; deferred until someone asks.
3165
- **Horizontal scroll** for long lines that exceed the terminal width when `--wrap` is off — they're truncated by the terminal.
3266

33-
## Follow / tail mode
67+
### Follow / tail mode
3468

3569
- **Low-latency file watching.** v1 polls every 200 ms via `fs::metadata`. A real `notify` / `inotify` / `kqueue` / `FSEvents` watcher would deliver appended bytes immediately at the cost of a fairly heavy dep + per-platform code.
3670
- **Highlighter state preservation across polls.** Each poll re-creates the `Highlighter`, so a multi-line construct (block comment, multi-line string) that begins in one poll's contents and ends in another may briefly miscolor at the boundary. Fix would require persisting `syntect::easy::HighlightLines` state across iterations and replaying only new lines.
3771
- **Multiple files concurrently.** v1 enforces single file. Real `tail -f a.log b.log` interleaves output with `==> file <==` headers.
3872

39-
## Markdown rendering
73+
### Markdown rendering
4074

4175
- **Inline syntax highlighting of fenced code blocks.** termimad's support is limited; we don't pre-process fences with syntect first. Code blocks render with termimad's default code styling.
42-
- **Configurable markdown extension list.** `is_markdown_path()` matches `.md` / `.markdown` / `.mdown` / `.mkd` literally. If you want `.rmd` or `.txt` to auto-render, pass `--markdown` explicitly.
43-
- **Content-based markdown detection.** No first-line sniffing for markdown-y patterns. Extension-based is the user's mental model; sniffing would mis-fire on plaintext with `# headers`.
44-
- **Configurable markdown skin.** termimad's `MadSkin::default()` is used; no `--markdown-skin` flag.
4576

46-
## Rhai grammar gaps
77+
---
78+
79+
## Not yet supported
80+
81+
### Rhai grammar gaps
4782

4883
- **Closure pipe syntax** `|x| x + 1``|` is matched as bitwise-or, no special closure context. Disambiguating from bitwise OR requires backtracking-style context the grammar engine can't easily express; most users won't notice since identifier and operator both color reasonably.
49-
- **Full semantic awareness** of `Fn(...)`, `this`, `global`, etc. — we tokenize them (Fn as builtin; this/global as variable.language) but don't reflect Rhai's special semantics (e.g., `this` only valid inside method-style functions). That's intelligence beyond TextMate scope.
50-
- **Char literal scope** — single-quoted `'a'` are technically char literals in Rhai, but we color them as `string.quoted.single` for theme compatibility. Could be revisited if a theme really needs different coloring.
5184

52-
## Code-quality nits (intentionally tolerated)
85+
---
5386

54-
(empty — flush 0.5.0 cleared the `PrinterConfig::wrap` placeholder.)
87+
## Out of scope
88+
89+
### Platform
90+
91+
- **Windows support.** Code uses POSIX pager invocation, libc SIGPIPE reset, and assumes Unix-style `~/.config/`. Targeting Win would require a separate code path in `pager::setup` and config-path resolution, plus a Windows CI matrix. (`term_width` already uses `crossterm::terminal::size`, so that piece is portable.)
92+
93+
### Markdown rendering
94+
95+
- **Configurable markdown extension list.** `is_markdown_path()` matches `.md` / `.markdown` / `.mdown` / `.mkd` literally. If you want `.rmd` or `.txt` to auto-render, pass `--markdown` explicitly.
96+
- **Content-based markdown detection.** No first-line sniffing for markdown-y patterns. Extension-based is the user's mental model; sniffing would mis-fire on plaintext with `# headers`.
97+
98+
### Rhai grammar gaps
99+
100+
- **Full semantic awareness** of `Fn(...)`, `this`, `global`, etc. — we tokenize them (Fn as builtin; this/global as variable.language) but don't reflect Rhai's special semantics (e.g., `this` only valid inside method-style functions). That's intelligence beyond TextMate scope.

0 commit comments

Comments
 (0)