You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 2456ae1
Browse filesBrowse the repository at this point in the historyBrowse files
The big one: Windows auto preview could select chafa before the native opener, so Windows users got pixelated symbol previews by default. That is now changed in internal/media/
backend_windows.go:21: Windows now tries sixel, then native external opener, then chafa. Linux order is unchanged.
Copy file name to clipboardExpand all lines: PLAN.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ Implementation is past the local-shell phase and currently sits at a DB-first, l
12
12
- SQLite-backed local state with migrations, chat/message/media/draft storage, stats, and FTS-backed search.
13
13
- Bubble Tea TUI with modal interaction (`normal`, `insert`, `visual`, `command`, `search`), chat list, message viewport, optional info pane, composer, filters, and help.
14
14
- Local draft persistence, local outgoing message persistence, normal/visual message yanking, text clipboard integration, image clipboard paste/copy integration, attachment staging, message delete flow, and search routing by pane.
15
-
- Media backend detection and in-chat preview behavior with `sixel`, Unix `ueberzug++`, `chafa`, compact audio playback rows, plus native external open/save fallback paths.
15
+
- Media backend detection and in-chat preview behavior with `sixel`, Unix `ueberzug++`, `chafa`, compact audio playback rows, plus native external open/save fallback paths. Windows auto preview prefers Sixel and then the native opener before `chafa`, because Chafa is a low-resolution symbol fallback there rather than a high-quality overlay path.
16
16
- Real `whatsmeow` session store, QR login, logout, rejected-session cleanup, first-use-state local reset on logout, and `doctor` session status reporting.
17
17
- Live WhatsApp connection bootstrap from a paired session, protocol event subscription, inbound chat/message/receipt/media metadata ingestion into SQLite, DB-first UI refreshes, and visible connection state.
18
18
- On-demand remote history fetch for the focused chat, using SQLite paging first and then anchored `whatsmeow` history sync requests before the oldest known local message.
@@ -27,7 +27,7 @@ Implementation is past the local-shell phase and currently sits at a DB-first, l
27
27
- Chat title quality tracking with source precedence, group/contact metadata refresh, and safe placeholders so group JIDs/phone-like IDs are not treated as real names.
28
28
- Direct-chat identity hardening for WhatsApp PN/LID aliases: canonicalize mapped 1:1 chats onto a single chat ID, merge already-split alias rows/messages/drafts/history cursors in SQLite, and preserve the active conversation when a live merge remaps the selected chat.
29
29
- Large-history TUI guardrails: historical imports avoid refresh storms, reconnect catch-up sync shows a blocking progress overlay and batches snapshot refreshes until completion, live refreshes are debounced, stale snapshot reloads do not steal chat focus, message rendering is bounded to the visible window, message cursor scrolling behaves like the chat list viewport, duplicate in-flight history requests are suppressed, and `ueberzug++` media/avatar/sticker overlays pause into blank reserved space while scrolling before resyncing.
30
-
- Terminal/UI polish for real chat data: full/compat/auto emoji rendering, stable emoji fallback for terminals such as `st`, pywal-backed mode indicators with per-mode hex overrides, focused-pane borders that distinguish chat-list vs message-pane input focus, highlighted unread-count badges in the chat list, a structured keymap-driven help screen, non-redundant mode prompts, configurable help/prompt key hints, search match counts in the status bar, configurable cancellation/search-clear bindings, and native Windows runtime defaults that do not affect Linux behavior.
30
+
- Terminal/UI polish for real chat data: full/compat/auto emoji rendering, stable emoji fallback for terminals such as `st` and classic Windows console hosts, pywal-backed mode indicators with per-mode hex overrides, focused-pane borders that distinguish chat-list vs message-pane input focus, highlighted unread-count badges in the chat list, a structured keymap-driven help screen, non-redundant mode prompts, configurable help/prompt key hints, search match counts in the status bar, configurable cancellation/search-clear bindings, platform-specific terminal focus-reporting options, and native Windows runtime defaults that do not affect Linux behavior.
31
31
- Demo/dev workflows that exercise the full local UI without a live WhatsApp session.
Copy file name to clipboardExpand all lines: README.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -211,13 +211,15 @@ All TUI action keys are configurable in `config.toml` using flat `key_<mode>_<ac
211
211
212
212
## Media and previews
213
213
214
-
`preview_backend = "auto"` chooses the best available inline renderer in this order: Sixel, `ueberzug++` where supported, `chafa`, external opener, none. Images, videos, stickers, and avatars can render inline when a capable backend is available. Videos use generated thumbnails when `ffmpeg` is available. Audio messages render as compact playback rows and use `audio_player_command`, which defaults to `mpv --no-video --no-terminal --really-quiet {path}` on Linux and the native Windows opener on Windows.
214
+
`preview_backend = "auto"` chooses the best available renderer. On Linux the order is Sixel, `ueberzug++`, `chafa`, external opener, none. On Windows the order is Sixel, native external opener, `chafa`, none, so Windows does not default to low-resolution symbol previews when the native opener is available. Images, videos, stickers, and avatars can render inline when a capable backend is selected. Videos use generated thumbnails when `ffmpeg` is available. Audio messages render as compact playback rows and use `audio_player_command`, which defaults to `mpv --no-video --no-terminal --really-quiet {path}` on Linux and the native Windows opener on Windows.
215
215
216
216
Remote media starts as metadata in SQLite. Opening, previewing, saving, or running `vimwhat media open <message-id>` can download it through the paired WhatsApp session when a download descriptor exists.
217
217
218
218
## Emoji and theming
219
219
220
-
Emoji rendering defaults to `emoji_mode = "auto"` in `config.toml`. Auto mode preserves full emoji sequences on most UTF-8 terminals, but uses the stable compatibility path for terminals such as `st` that can display emoji glyphs while still misreporting complex emoji cell widths. Set `emoji_mode = "compat"` to force stable degraded rendering, or `emoji_mode = "full"` to force skin tones, ZWJ professions/families, and flags.
220
+
Emoji rendering defaults to `emoji_mode = "auto"` in `config.toml`. Auto mode preserves full emoji sequences on most UTF-8 terminals, but uses the stable compatibility path for terminals such as `st` and classic Windows console hosts that can display emoji glyphs while still misreporting complex emoji cell widths. Set `emoji_mode = "compat"` to force stable degraded rendering, or `emoji_mode = "full"` to force skin tones, ZWJ professions/families, and flags.
221
+
222
+
On Windows, run `vimwhat doctor` if the TUI looks wrong. It reports the terminal environment variables used for media, emoji, and focus-reporting decisions. Older console hosts may not support all optional terminal features; Windows focus reporting is enabled only for known modern hosts or with `VIMWHAT_FORCE_REPORT_FOCUS=1`.
221
223
222
224
Mode indicator colors default to pywal-derived theme colors:
0 commit comments