Adds the ability to hide/show the right-side PDF preview pane:
- Cmd+\ / Ctrl+\ keyboard shortcut
- Floating button at the editor's bottom-right corner (icon switches
between PanelRightCloseIcon and PanelRightOpenIcon based on state)
- Editor expands to fill freed space when preview is hidden
- Preview defaults to visible (no behaviour change for existing users)
State is held in a small Zustand store (preview-store.ts).
Co-authored-by: opalsaints <242018735+opalsaints@users.noreply.github.com>
- Refactor: extract shared find_git_bash() function used by both
create_command and check_claude_status (eliminates code duplication)
- Validate user-specified CLAUDE_CODE_GIT_BASH_PATH exists before using it,
falling back to auto-detection if the path is invalid
- Check existing error state before setting stderr errors to avoid
masking more specific earlier errors
- Make zero-output error message platform-aware (git-bash hint only on Windows)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The env var cleanup logic was stripping CLAUDE_CODE_GIT_BASH_PATH along
with other CLAUDE_CODE_* vars, causing Claude Code to fail even when the
user had explicitly set it. This also adds auto-detection of git-bash
from common install paths and git.exe on PATH.
Additionally, surface git-bash related stderr errors to the UI and show
a clear error message when the process fails with zero output.
Closes#109
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The separate debug webview failed in dev mode due to CORS preflight
blocking Tauri IPC calls, resulting in a blank window (#109 reporter
also experienced this).
Replace it with a bottom panel overlay in the main window:
- Same webview = no IPC issues, direct access to log buffer
- Toggle with Ctrl+Shift+D (same shortcut)
- Lazy-loaded DebugPage component
- Click backdrop or press shortcut again to close
- Revert log-store.ts cross-window emitTo back to emit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Expand %USERPROFILE% etc. via ExpandEnvironmentStringsW when reading
registry PATH entries
- Use is_file() instead of exists() for binary detection
- Fix debug window showing blank: use emitTo() for cross-window events
instead of emit() which only targets the current window
- Update step numbering and doc comments
- Improve error message to avoid double-wrapping
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GUI apps inherit a stale PATH from login time, so if Claude was
installed afterwards it won't be found by which::which(). Read the
real User + System PATH from the Windows registry (HKCU/HKLM) and
search for claude.exe / claude.cmd there.
Also adds fallback paths for Volta, Scoop, pnpm global, and standard
Node.js installs, and replaces the bare "claude" fallback with a
proper error.
Addresses #109
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
resolveTexRoot now detects \documentclass to find the actual root file
instead of treating the active sub-file as the compilation target.
This fixes incorrect PDF preview when editing non-main .tex files.
Closes#106
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Windows (#101): Add explicit FS scopes to each permission in
default.json so Tauri's scope validator accepts Windows paths.
Remove silent .catch(() => {}) on mkdir/writeTextFile so errors
surface via toast instead of failing silently. Replace all
.split("/").pop() with .split(/[/\\]/).pop() (14 occurrences)
for correct path parsing on Windows.
Linux (#100): Add ELF linker version script (symbols.map) that
hides statically linked ICU/HarfBuzz/FreeType/Fontconfig/Graphite2
symbols from the dynamic symbol table. This prevents symbol
collisions with WebKit2GTK's own dynamic copies of these libraries,
which caused a segfault at startup. The static linking introduced
in v1.0.10 to fix#91 is preserved—ICU remains embedded in the
binary so it works across distros.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tectonic's limited package support makes it unusable for academic work
with custom .sty/.cls files. This adds opt-in support for shelling out
to a locally installed TeXLive distribution.
Backend (latex.rs):
- compile_with_texlive(): multi-pass compilation (2-3 engine passes +
optional bibtex/biber), with xdvipdfmx fallback for .xdv → .pdf
- find_texlive_binary(): resolves binaries via PATH, standard install
locations, and macOS login-shell fallback for GUI apps
- detect_bib_tool(): scans .tex for biblatex/bibliography to choose
biber vs bibtex
- texlive_env_path(): injects TeXLive bin dir into subprocess PATH so
xelatex can find xdvipdfmx internally
- detect_texlive Tauri command: reports available engines and version
- compile_latex gains use_texlive parameter; error messages show which
backend ran (e.g. "Compilation failed (TeXLive/xelatex)")
- All paths passed to TeX are relative to avoid tilde expansion in
iCloud paths (com~apple~CloudDocs)
Frontend:
- New settings-store.ts with persisted compilerBackend preference
- Backend selector dropdown in PDF preview toolbar
- All compile call sites pass the setting through to the backend
- detectTexlive() and TexliveStatus for engine availability checks
Tectonic remains the default. TeXLive is opt-in via the toolbar
dropdown. All existing tests pass (152/152).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>