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
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Navigate with more vim and pager keys. Ctrl-d / Ctrl-u scroll half a pane, PgDn / PgUp a whole pane, the arrows scroll and pan, and h / l pan. All take a count (#61).
Jump back and forward with Ctrl-o and Ctrl-i (or Tab). Following an internal link, gg, G, :<n>, a search match or a table of contents entry records where the view was. Paging and scrolling are not jumps (#60).
Show the table of contents with t. It lists the PDF's bookmarks (which hyperref writes for every \section) over the page area, with the heading you are reading selected. j / k, gg / G and the wheel move the selection, Enter or a click jumps, and t, q or Escape close it (#63).
Clicking an http, https or mailto link opens it in the default browser (open on macOS, xdg-open on Linux), and the status bar says what was opened. Other schemes are ignored, and internal links still jump as before (#62).
Select text with v (by character) or V (by line), extend it with vim motions, and copy it with y. The selection is tinted into the page, and copying writes OSC 52 and, when running locally, also pipes the text to pbcopy, wl-copy or xclip (#64).
macOS: in terminals that zoom their own window on a trackpad pinch, such as Tern, a pinch over termleaf no longer zooms both. Give the terminal app Accessibility, and termleaf keeps the pinches it zooms on away from the terminal (#67).
Install termleaf 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/backyardbit/termleaf/releases/download/v0.4.0/termleaf-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Fix pages left blank after scrolling quickly under herdr. termleaf now keeps its Kitty images within herdr's 64 MiB per-pane limit (#48).
Stop rendering tiles that have scrolled out of view, which cuts CPU use while scrolling by up to half (#49).
Prepare the top of the next page in the direction you are scrolling, and send it only when the terminal is idle, so short bursts of j and k show less blank page (#50).
Size image tiles to half the pane height instead of a fixed 48 rows. Holding j leaves less of the page blank, and the first content shows sooner, most of all in short panes and with large cells. Memory use drops too (#51).
Fix figures that shifted by a pixel or two where two tiles meet. Images are now drawn from one whole decode, so a tiled page matches the whole page (#52).
Fix termleaf exiting with "needs a terminal that supports Kitty graphics" when started in a brand-new pane, as in herdr, before the terminal reports its cell size. It now waits for the size and then draws, and the error messages say which one is missing (#55).
Send the pages ahead of where you are reading while you pause, even when the terminal is slow to take images, as herdr always is. Reading at a normal pace no longer shows blank pages (#56).
Draw Kitty images at three-quarter density and let the terminal scale them up. Scrolling stays smoother, at the cost of slightly softer text (#57).
Install termleaf 0.3.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/backyardbit/termleaf/releases/download/v0.3.2/termleaf-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Fix pages drawn at the wrong scale, with seams between tiles, after the cell pixel size changes but the columns and rows stay the same, as when moving a window between displays with different DPI. termleaf re-measures the cell size on SIGWINCH and, inside zellij, on a periodic CSI 16t poll, then repaints Kitty, Sixel and iTerm2 graphics at the new size (#44).
Install termleaf 0.3.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/backyardbit/termleaf/releases/download/v0.3.1/termleaf-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Search native PDF text with / and Enter. n and N move between matches, counts work, and Escape cancels the prompt or dismisses results (#42).
Search is case-insensitive, supports Unicode and phrases spanning lines, and runs in the background. The status bar shows progress and match counts. Scanned PDFs need an existing text layer; search does not perform OCR (#42).
Matches are highlighted in Kitty, Sixel and iTerm2 graphics. Highlights follow zooming and scrolling, and successful PDF rebuilds rerun the query without moving the view (#42).
Stop terminal queries before reading user input, so terminal replies cannot become stray key presses (#41).
Install termleaf 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/backyardbit/termleaf/releases/download/v0.3.0/termleaf-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Follow no longer stops after a focus-in that no focus-out follows. termleaf used to treat itself as focused from then on and ignore every editor position after the first, for Neovim, Helix, the Vim snippet and termleaf --follow, on every OS. termleaf now trusts focus reports only after it has seen a focus-out (#39).
Helix follow works on macOS. termleaf couldn't read Helix's working directory there, so it never watched a Helix pane (#39).
CI runs the follow end-to-end tests on macOS too (#39).
Install termleaf 0.2.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/backyardbit/termleaf/releases/download/v0.2.1/termleaf-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Sixel and iTerm2 images
Terminals without Kitty graphics now show pages instead of exiting. Sixel covers foot, xterm -ti vt340, mlterm and Windows Terminal. iTerm2 inline images cover WezTerm, iTerm2 and Konsole.
Inside tmux 3.6 or later built with Sixel, termleaf draws Sixel when tmux reports Sixel support. iTerm2 images aren't used inside tmux.
--graphics kitty, --graphics sixel or --graphics iterm2 forces a protocol. The default, auto, picks from what the terminal reports, and exits with an error when it reports none. Kitty terminals take the same Kitty path as before.
Sixel and iTerm2 images are one picture of the page area, sent again on every scroll, zoom and page change. That is slower than Kitty graphics, especially over SSH.
Fixes
Sixel and iTerm2: the tile cache stays within its memory budget, and prefetching takes only the tiles that fit (#17).
iTerm2 images: tiles that arrive after a scroll repaint the page at most every 100 ms (#18), and frames are capped at one every 33 ms (#19).
Sixel and iTerm2: a jump no longer flashes a blank or half-drawn page (#20), and its visible tiles render before its prefetch tiles (#29).
With NO_COLOR set, kitty and Ghostty showed a blank page. Pages draw again (#27).
Inside tmux, termleaf asks the tmux that runs the server in $TMUX, not the first tmux on PATH. A tmux 3.6 server with an older tmux first on PATH is now detected as Sixel, where termleaf used to exit (#30).
SyncTeX
Build with -synctex=1. The README's SyncTeX section has the details.
Inverse search: e (at the pointer, or the middle of the pane), Alt+click or Ctrl+click opens the source line in your editor.
Follow, on by default: termleaf shows the page with your editor's cursor line. F, :follow and :nofollow switch it, and --no-follow starts with it off. termleaf --follow file.tex:line[:column] sends a position from scripts and editor keys. It exits 0 even when no termleaf takes the position.
Editors:
Neovim needs no config. It is reached over its RPC socket, in a multiplexer or without one.
Helix needs no config. Inverse search types the jump into its pane, and follow reads its statusline through the multiplexer.
Vim: inverse search types the jump into its pane. Follow needs contrib/termleaf.vim.
Multiplexers: tmux, herdr, zellij 0.44 or later, GNU screen, kitty windows (with allow_remote_control and listen_on), and WezTerm panes.
Each termleaf listens on $XDG_RUNTIME_DIR/termleaf/<pid>.sock, or on ${TMPDIR:-/tmp}/termleaf-$USER/<pid>.sock, in a directory with mode 0700.
Known limits:
The editor must run in the same multiplexer as termleaf, as your user, on the same machine. Anywhere else (a plain terminal, Konsole, Ghostty), only Neovim works.
Helix follow needs a multiplexer from the list and Helix's default statusline: a NOR, INS or SEL label, then the file name, with line:col last. A file name cut short in a narrow pane, or a statusline covered by the : prompt, moves nothing. Where capture is impossible, a Helix 25.07 key can run termleaf --follow.
Neovim is found by its swap file, so a Neovim with noswapfile or nvim -n isn't followed.
zellij doesn't pass Alt+click or Ctrl+click on, so use e there.
A path containing shell or editor metacharacters can't be typed into an editor. Only Neovim's RPC is used for it (path needs RPC).
The editor features are tested end to end on Linux. On macOS only the unit tests run.
The Homebrew instructions are gone. The tap never existed, so the brew install backyardbit/tap/termleaf line in the v0.1.1 release notes never worked (#10).
Install termleaf 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/backyardbit/termleaf/releases/download/v0.2.0/termleaf-installer.sh | sh