feat(capture): OCR region to clipboard (LATER item)
All checks were successful
Check / eval (push) Successful in 3m6s
All checks were successful
Check / eval (push) Successful in 3m6s
Tools › Capture gains "OCR region → clipboard", self-gated on tesseract: slurp the region (Esc cancels silently, the recording.nix pattern), grim it, tesseract stdin→stdout, wl-copy. Whitespace-only recognition toasts "No text recognized" instead of clobbering the clipboard; success toasts the word count. tesseract ships English-only through the menu's package set — the unscoped wrapper pulls every language's traineddata, a real cost on a compile-from-source distro; overriding with more languages is documented at the package line. Verified: V0; V1 — template-home builds with the gated row + case and menu bash -n; functional — the profile's own tesseract read a rendered test image back verbatim, proving the OCR half of the pipe. The grim/slurp half needs a session → HARDWARE-QUEUE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -234,9 +234,6 @@ them as composable commands, not dead ends.
|
||||
- **Night-light geo mode**: lat/long auto sunset/sunrise (means wlsunset).
|
||||
- **Per-theme icon overrides** / more icon packs (ROADMAP § Icon themes).
|
||||
- **MIPI/IPU software-ISP camera** support (no-UVC machines).
|
||||
- **OCR screenshot-to-text**: a Capture › entry (grim region → tesseract
|
||||
→ clipboard) — recording (#12, shipped 2026-07-04) already reshaped
|
||||
the submenu, so this is now a two-row addition.
|
||||
- **Doctor Waybar warning**: a self-gating bar indicator fed by
|
||||
`nomarchy-doctor` (shipped 2026-07-04) — appears only when the sheet
|
||||
has a ✖; click opens the sheet.
|
||||
|
||||
@@ -167,6 +167,11 @@ QA machine), the **T14s** (webcam case).
|
||||
(tooltips, fastfetch labels) is visible on summer-day +
|
||||
flexoki-light, kanagawa floats are lighter than the bg (upstream
|
||||
sumiInk4). Anything that reads worse than before → reopen 28b.
|
||||
- [ ] **OCR region (LATER item)** — Tools › Capture › "OCR region →
|
||||
clipboard": select a region with visible text → toast reports
|
||||
the word count and `wl-paste` yields the text; Esc in slurp
|
||||
cancels silently; a text-free region toasts "No text recognized"
|
||||
without clobbering the clipboard.
|
||||
- [ ] **Look & Feel submenu (item 19)** — root menu: "Look & Feel"
|
||||
(replacing Theme, root still six rows) → Theme grid opens, Next
|
||||
wallpaper cycles instantly, Night light toggles (and is GONE
|
||||
|
||||
@@ -17,6 +17,26 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-05 — OCR screenshot-to-text (iteration #41, LATER item)
|
||||
- **Task:** LATER › OCR (NEXT is fully human/event-gated, so LATER is
|
||||
in play per LOOP.md). Bullet deleted.
|
||||
- **Did:** Capture › "OCR region → clipboard" (self-gated on
|
||||
tesseract): slurp (Esc = silent cancel, the recording pattern) →
|
||||
grim → tesseract stdin/stdout → wl-copy, whitespace-only results
|
||||
toast instead of clobbering the clipboard; success toasts the word
|
||||
count. tesseract ships eng-only via rofi.nix home.packages
|
||||
(override documented — unscoped it drags every language's
|
||||
traineddata, real cost on a compile-from-source distro).
|
||||
- **Verified:** V0; V1 — template-home builds, menu bash -n, gated
|
||||
row + case present; FUNCTIONAL — the profile's own tesseract read a
|
||||
rendered test image back verbatim ("Nomarchy OCR smoke test 42"),
|
||||
so the OCR half of the pipe is proven; grim/slurp half needs a
|
||||
session → V3 queued.
|
||||
- **Pending:** V3.
|
||||
- **Next suggestion:** LATER: doctor Waybar warning (self-gating bar
|
||||
indicator fed by nomarchy-doctor) or auto-timezone tooltip; both
|
||||
small.
|
||||
|
||||
## 2026-07-05 — Look & Feel menu category (iteration #40, item 19)
|
||||
- **Task:** BACKLOG NEXT#19 — its ≥3-entries gate is met (Theme, Next
|
||||
wallpaper, Night light). Item deleted.
|
||||
|
||||
@@ -370,6 +370,7 @@ ${themeRows}
|
||||
row "Region → file" applets-screenshooter
|
||||
row "Full screen → clipboard" camera-photo
|
||||
row "Full screen → file" camera-photo
|
||||
command -v tesseract >/dev/null 2>&1 && row "OCR region → clipboard" scanner
|
||||
if command -v nomarchy-record >/dev/null 2>&1; then
|
||||
if nomarchy-record active; then
|
||||
row "■ Stop recording" media-playback-stop
|
||||
@@ -389,6 +390,16 @@ ${themeRows}
|
||||
*"Region → clipboard"*) grim -g "$(slurp)" - | wl-copy ;;
|
||||
*"Region → file"*) mkdir -p "$dir"; grim -g "$(slurp)" "$file" \
|
||||
&& notify-send "Screenshot saved" "$file" ;;
|
||||
*"OCR region"*)
|
||||
# Select → screenshot → tesseract → clipboard. Esc in slurp
|
||||
# cancels silently (the recording.nix pattern); recognizing
|
||||
# nothing toasts instead of copying an empty clipboard.
|
||||
geo=$(slurp) || exit 0
|
||||
txt=$(grim -g "$geo" - | tesseract stdin stdout 2>/dev/null)
|
||||
[ -n "''${txt//[[:space:]]/}" ] \
|
||||
|| { notify-send "OCR" "No text recognized in that region."; exit 0; }
|
||||
printf '%s' "$txt" | wl-copy
|
||||
notify-send "OCR" "Copied $(printf '%s' "$txt" | wc -w) word(s) to the clipboard." ;;
|
||||
*"Full screen → clipboard"*) grim - | wl-copy ;;
|
||||
*"Full screen → file"*) mkdir -p "$dir"; grim "$file" \
|
||||
&& notify-send "Screenshot saved" "$file" ;;
|
||||
@@ -796,6 +807,10 @@ in
|
||||
pkgs.nodejs # npx, for the Ask Claude module (claude-code from npm)
|
||||
pkgs.networkmanager_dmenu # network module: rofi wifi/VPN picker
|
||||
pkgs.rofi-pulse-select # audio module: sink/source switcher
|
||||
# Capture › OCR region: English only — the unscoped wrapper drags
|
||||
# in every language's traineddata, a real cost on a compile-from-
|
||||
# source distro. More languages: override in your home.nix.
|
||||
(pkgs.tesseract.override { enableLanguages = [ "eng" ]; })
|
||||
];
|
||||
|
||||
# networkmanager_dmenu drives rofi (not bare dmenu) and uses rofi's
|
||||
|
||||
Reference in New Issue
Block a user