Commit graph

3004 commits

Author SHA1 Message Date
b1b50b7ff0
feat(gui): clipboard, title, cursor, attention 2026-03-30 21:17:27 +02:00
273be78055
fix(gui): fix shutdown hang 2026-03-30 20:58:52 +02:00
875c42ad9e
fix(gui): map keys to vaxis Key constants 2026-03-30 20:54:34 +02:00
c353c92bc3
fix(gui): map uppercase/shifted codepoints when *only* the shift modifer is set 2026-03-30 20:46:59 +02:00
0a9842f34d
fix(gui): correct dispatching of mouse dragging events 2026-03-30 20:40:39 +02:00
9b0f40f155
fix(gui): don't map control characters 2026-03-30 20:32:39 +02:00
a9efe0ca4c
fix(gui): eliminate row clipping at top of window 2026-03-30 20:28:09 +02:00
7fc2113b8a
feat(gui): implement double-wide glyph support 2026-03-30 19:56:54 +02:00
4291ccf2c5
fix(gui): resolve crashes and glyph rendering bugs from M3 smoke test 2026-03-30 00:27:24 +02:00
996e6714ba
fix(gui): shader build 2026-03-29 20:01:45 +02:00
ae0f62c3bf
feat(gui): M3 - TrueType rasterizer with fontconfig font discovery
Replace the M2 stub rasterizer with a real font rasterizer:

- build.zig.zon: add TrueType as a lazy path dependency
- build.zig: swap stub_rasterizer_mod for truetype_rasterizer_mod; link
  fontconfig + libc on Linux; TrueType dep is lazy (falls back gracefully)
- src/gui/rasterizer/truetype.zig: andrewrk/TrueType rasterizer; loadFont
  uses fontconfig to locate the font file, derives cell dimensions from
  vertical metrics (ascent−descent) and 'M' advance width; render blits the
  A8 glyph bitmap into the caller-provided staging buffer with correct
  baseline placement (ascent_px + off_y) and double-wide support (+cell_w
  x-offset for kind=.right); arena allocator per render call
- src/gui/rasterizer/font_finder.zig: OS dispatcher (Linux only for now)
- src/gui/rasterizer/font_finder/linux.zig: fontconfig C API - FcFontMatch
  resolves a font name pattern to an absolute file path

Requires: libfontconfig-dev  (already present alongside libgl-dev etc.)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:33:24 +02:00
39b482b2e0
feat(gui): M2 - sokol_gfx GPU backend initialised from wio window
Implements milestone 2 of the wio+sokol_gfx cross-platform GUI renderer:

- build.zig.zon: add wio and sokol-zig as lazy path dependencies
- build.zig: wire -Drenderer=gui - creates modules for gpu, app, and the
  stub rasterizer; links sokol_clib against system GL/X11/Xi/Xcursor/ALSA
  (requires: libgl-dev libx11-dev libxi-dev libxcursor-dev libasound2-dev)
- src/gui/gpu/builtin.glsl.zig: hand-crafted GLCORE ShaderDesc with a
  full-screen-quad vertex stage and a cell-grid fragment stage; Y-flip via
  row_count*cell_size_y; FsParams as 4 INT uniforms; RGBA32UI cell texture
  and R8 glyph-atlas texture with NONFILTERING samplers
- src/gui/gpu/gpu.zig: sokol_gfx backend mirroring the d3d11 backend;
  TRIANGLE_STRIP pipeline, CPU-side glyph atlas shadow, per-frame cell
  texture update via sg.updateImage
- src/gui/rasterizer/stub.zig: blank-glyph stub rasterizer for M2 testing
- src/gui/wio/app.zig: wio event loop + thespian bridge; creates a core
  OpenGL 3.3 context, calls sg.setup/gpu.init, sends RDR messages for
  WindowCreated/Resize/keyboard/mouse events, renders on screen_pending
- src/gui/wio/input.zig: wio Button → Flow codepoint/mouse-button mapping
- src/renderer/gui/renderer.zig: standard renderer interface consumed by
  tui.zig; dispatches RDR events, delegates font/cursor/clipboard to app
2026-03-29 19:04:52 +02:00
9c66b19650 feat(gui): M1 shared core — extract src/gui/ and replace -Dgui with -Drenderer
Move shared types out of src/win32/ into a new src/gui/ package:
- xy.zig: generic XY(T) coordinate type
- xterm.zig: 256-color palette table (used by all GPU renderers)
- GlyphIndexCache.zig: glyph→atlas-slot mapping
- Cell.zig: Rgba8 and Cell extracted from d3d11.zig
- GlyphRasterizer.zig: comptime interface spec/checker

Update src/win32/ imports to point to ../gui/ and delete the
moved originals.

Replace the -Dgui bool option with -Drenderer enum { terminal, gui,
d3d11 }, wiring .d3d11 to the existing win32 DirectWrite path and
keeping build_options.gui = (renderer != .terminal) for tui.zig.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 23:22:31 +01:00
a782bfb690
fix: don't filter super, hyper and meta modifiers for no reason
This filter was introduced to ignore caps lock, scroll lock and num lock
modifier bits. super, hyper and meta might actually be useful though.
2026-03-28 14:48:07 +01:00
f61c716c27
feat: configure default markdown formatter to reflow at reflow_width 2026-03-26 09:39:06 +01:00
e930effa0c
feat: add {{reflow_width}} expansion 2026-03-26 09:38:28 +01:00
Volodia Kraplich
7f07f544c9 feat(lsp): support toml 2026-03-25 12:34:52 +01:00
84a45810a6
fix(lsp): fallback to sorting completions by label for LSPs that don't return unique sortText 2026-03-25 12:30:44 +01:00
JailBird
561124e667 Add formatter for YAML and LSP for YAML and RPM .spec 2026-03-25 09:10:48 +01:00
Ingo Lohmar
9df7a13934 feat: 0-based status line column
Optional fifth entry in bottom_bar "linenumber" widget: If literally "true",
display column 0-based (instead of 1-based) a la Emacs.
2026-03-24 15:30:32 +01:00
Miguel Granero
742e70a670 feat: change base path of git blame for subrepo support 2026-03-24 14:02:54 +01:00
fb19d50c20
fix: update flow-syntax to get tree-sitter-markdown fix for serialization buffer overflow 2026-03-24 14:01:44 +01:00
edwloef
c0e315495c invert priorities in file type guess 2026-03-24 13:56:25 +01:00
11d0e9e7e3
fix: avoid dangling Project pointer crash in LSP and git handlers 2026-03-23 13:09:19 +01:00
76e4a843c7
fix: windows build 2026-03-18 13:31:11 +01:00
7847589982
feat: update tree-sitter package to 0.26 (also adds languages)
This is a major update of the tree-sitter depedencies (via flow-syntax). In
addtion to updating tree-sitter from the 0.24 branch to 0.26 there are also
updates to all tree-sitter parsers and a couple of new languages. The
supported tree-sitter ABI is now at version 15. (min version still 13)

New languages:

d (dlang)
llvm (LLVM IR)
comment (tags in comment blocks in many languages)
query (tree-sitter queries)
rpmbash (bash embedded in rpmspec files)

This should also unblock a few other file type requests, but they are not
included here directly and will follow later.

closes #540
2026-03-18 10:57:09 +01:00
3551c765b2
feat: update flow-syntax for tree-sitter 0.26 and several new languages 2026-03-17 22:39:58 +01:00
a5df57f824
fix: sort filelist items 2026-03-17 22:27:35 +01:00
c93f829cd5
fix: sort files in each directory of the file tree 2026-03-17 22:21:42 +01:00
22ed9a32d7
fix(symbol_palette): add indent to match highlights 2026-03-17 22:11:45 +01:00
Igor Támara
3a16d7fe50 Add indentation according to depth in symbol palette 2026-03-13 13:32:25 -05:00
44755db745
build: add cleanup script for night builds 2026-03-11 19:47:48 +01:00
cf283e98fc
fix: typescript file type should inherit queries from javascript file type 2026-03-02 17:48:16 +01:00
1cf22db498
fix: reset hover on focus_out events 2026-02-23 21:51:05 +01:00
4cbd8fbde3
fix: prevent endless looping on tab bar widget updates
Now that Widget addresses do not have to be stable we can greatly simplfy
and in the process eliminate the potential for update looping.

The closes #520
2026-02-23 21:48:41 +01:00
cdd6fee9d6
refactor: compare widgets via the .ptr memeber instead of via their addresses
Widget is a handle type. Sort of a smart pointer. Comparing their addresses
is brittle because it requires keeping Widget pointers stable. This is
nonsense because Widget identity is actually determined by the actual
widget object it points to.

This big refactor elimits the requirement that Widget addresses remain
stable to work properly with Widget.walk and Widget.get.
2026-02-23 21:44:24 +01:00
xoxorwr
2266c92eab word left stops before newline when moved from other line 2026-02-22 08:42:21 +01:00
xoxorwr
523f08c281 Move right stops at last character 2026-02-21 23:28:24 +01:00
xoxorwr
2d55a3a843 ctrl+del stops before end of line 2026-02-21 21:50:19 +01:00
634f453e38
feat: update flow-syntax to add syntax highlighting of embedded documents (injections) 2026-02-21 21:32:24 +01:00
cdc026525b
docs: update zon file version tag 2026-02-21 19:31:08 +01:00
xoxorwr
a93b905bdd Add auto_open_panel_for_diagnostics 2026-02-21 17:32:26 +01:00
Ingo Lohmar
3f0578a909 fix: scroll_view_center_cycle no-op in "dead" area, fix bottom scroll offset
Testing for precise rows leads to a "dead" area if cursor row is in topmost
half-screen of a file.  Less strict comparison makes the command useful in
that area as well.
2026-02-21 17:26:38 +01:00
Aleksandar Hornjak
dc4d16b062 fix(vim): paste crash on empty clipboard 2026-02-21 16:42:20 +01:00
eb77164b13
fix: make ignore_alt_text_modifiers actually do what it says 2026-02-20 16:01:07 +01:00
586ec861a9
fix: select file tree node after expanding it 2026-02-19 20:09:51 +01:00
d442769958
refactor: clean-up naming of file_tree_palette.Value.follow_path 2026-02-19 20:08:16 +01:00
7708457bb8
fix: clear file tree filter when expanding a folder 2026-02-19 19:54:35 +01:00
90106e32f0
feat: expand the file tree to the current file when opening 2026-02-19 19:37:11 +01:00
4ec95cbe78
refactor: make file_tree_palette read all files and icons via the project_manager 2026-02-19 16:00:55 +01:00