Commit graph

306 commits

Author SHA1 Message Date
CJ van den Berg
a69cf3273d build: export some symbols for thespian.Loop 2024-06-10 04:43:43 -07:00
Rylee Lyman
e2c19c3c8f fix: update to zig 0.13, broken test 2024-06-09 04:53:58 -07:00
Jari Vetoniemi
9bbcebb7bc ScrollView: do scroll bounds checking early
The ScrollView will panic if scroll.y is given a number that is outside
the content size.
2024-06-08 19:45:22 -07:00
Tim Culverhouse
0cb81e30eb parser: fix handling of function keys with kitty encoding 2024-06-05 12:52:49 -05:00
Tim Culverhouse
91152eecdf parser: remove log line 2024-06-05 11:56:08 -05:00
Tim Culverhouse
43a714de0c parser: fix query responses for kitty kbd, decrpm 2024-06-05 11:49:03 -05:00
CJ van den Berg
d21940bdbd build: make most dependencies optional 2024-06-05 07:31:46 -07:00
Tim Culverhouse
e8670bd585 tty(windows): refactor and complete windows tty
Refactor the tty implementations. Complete the windows implementation
2024-06-05 06:31:18 -07:00
Jari Vetoniemi
54def846bf TextView: add Error to buffer operations
Typed error sets are nice to have.
2024-06-04 12:07:25 -07:00
Jari Vetoniemi
71b8ecc7c2 TextView: fix cols when appending to a buffer
If appending to a buffer through writer for example, the cols may not be
correct if the writes don't end up in a newline (\n). Fix this by
keeping track of the cols of previous append.
2024-06-04 12:07:25 -07:00
Tim Culverhouse
84cd9fdebe fix(loop): fix stopping and starting of loop
When stopping the loop, we never reset `should_quit` which caused the
program to not read any input if the loop were started again
2024-06-03 07:36:12 -05:00
Tim Culverhouse
052ff24c2f mouse: enable button motion tracking and any motion
Zellij doesn't support any motion at time of this commit, so we also try
to enable button motion first
2024-06-03 06:19:02 -05:00
Tim Culverhouse
3ea76daf28 vaxis: remove fixme 2024-06-02 17:58:32 -05:00
Tim Culverhouse
3ff1d0749a vaxis: use legacy sgrs for VHS_RECORD 2024-06-02 17:49:08 -05:00
Tim Culverhouse
6b6807d9ec resize: reset cursor sgr prior to erasing screen
Reset cursor sgr to prevent erasing the screen with some unknown
background color.
2024-06-01 06:52:21 -05:00
Jari Vetoniemi
ee113c4269 widgets: add CodeView widget
CodeView widget allows viewing code in a more visually pleasing manner.
It combines LineNumbers widget to provide line numbers on the side.
The CodeView widget allows you to optionally highlight a specific line
and show indentation guidelines.

It is not intended to be a fully fledged editor, but rather for showing
code snippets to a user.

While it is not a fully fledged editor, this widget's code can give you
a good starting point.
2024-05-31 18:21:54 -05:00
Jari Vetoniemi
84b4821d43 widgets: add TextView widget
The TextView widget provides a simple way to show text content in
a scrollable window.

This implementation does not offer automatic line wrapping for now.

Text content is backed by the Buffer struct. The buffer can be styled
for visually appealing and colorful content, for example to provide
a syntax highlighting.

The buffer provides a writer() interface which allows providing content
from a stream, such as logging.
2024-05-31 18:21:54 -05:00
Jari Vetoniemi
b215aec75b widgets: add LineNumbers widget
The LineNumbers widget draws vertical list of numbers.
This can be used as a line number bar for a text editor for example.
2024-05-31 18:21:54 -05:00
Jari Vetoniemi
f25b8ab421 widgets: add ScrollView widget
The ScrollView widget can be used to introduce scrollable elements into
existing widgets.

To use the ScrollView, you must use the ScrollView's writeCell and
readCell functions rather than the ones from Window.
2024-05-31 18:21:54 -05:00
Rylee Lyman
fbaa6ca8df fix: manually reschedule to avoid hang on macOS
libxev's .rearm semantics are unfortunately not very
portable---rescheduling the exact same event on macOS / kqueue seems
to cause the event loop to hang, while manually rescheduling and
returning .disarm does not.
2024-05-31 11:17:08 -05:00
Tim Culverhouse
49cc8ae7c4 xev: change log scope
We don't want the scope to look like it's from the xev library
2024-05-30 16:03:59 -05:00
Tim Culverhouse
d294428b74 examples(xev): duplicate functionality of vaxis example
The xev example is now a complete replication of the vaxis example, but
using xev as the event loop
2024-05-30 11:10:03 -05:00
Tim Culverhouse
335ea9f2d0 xev: fix todos 2024-05-30 10:06:28 -05:00
Tim Culverhouse
bbd9184e00 loop: add an xev loop implementation
This loop adds an xev.File wrapper called TtyWatcher which delivers
events to the users callback. Note that this implementation does not
handle any of the writes. Writes are always safe in the main thread, so
we let users decide how they will schedule those (buffered writers, xev
writes, etc)
2024-05-30 09:43:48 -05:00
Tim Culverhouse
04f1586e8f vaxis: add panic handler function
Applications may use this to handle panics gracefully
2024-05-30 09:43:48 -05:00
Tim Culverhouse
5f41978054 refactor(vaxis): require an io.AnyWriter for writes
All vaxis functions that write to the terminal now require an
io.AnyWriter as a parameter
2024-05-29 13:13:54 -05:00
Tim Culverhouse
59abd7d7d4 refactor(vaxis): move tty out of vaxis
Refactor to move the tty out of the vaxis struct. All vaxis writes now
take an io.AnyWriter
2024-05-29 11:33:39 -05:00
Tim Culverhouse
cf2d2ab50b GraphemeCache: remove testing alias 2024-05-29 10:27:59 -05:00
Tim Culverhouse
572bb8ba6a image: remove testing alias 2024-05-29 10:26:28 -05:00
Tim Culverhouse
d7c3a7496d refactor(tty): move state into Vaxis struct
Move tty state (*not* termios, though) into Vaxis struct
2024-05-28 12:18:07 -05:00
Tim Culverhouse
49003b0e2b refactor(parser): make parser easier to read and more robust
Refactor the parser to be more robust and easier to read.
2024-05-28 10:33:36 -05:00
Tim Culverhouse
93ac8e00f8 vaxis: add support for color scheme updates 2024-05-26 06:52:06 -05:00
Tim Culverhouse
6b9f91986c vaxis: add support for color reports (OSC 4, 10, 11, 12)
Add support for querying colors (index, foreground, background, and
cursor)
2024-05-24 10:59:20 -05:00
Tim Culverhouse
fba8984cf8 window(print): check for col after loop and at very beginning 2024-05-24 09:03:11 -05:00
Tim Culverhouse
3a3f7d32cf vaxis: add a logo 2024-05-23 20:16:01 -05:00
Tim Culverhouse
a9a0abf16b window(wrap): fix when we shift to new line
Add a newline at the top of the loop instead of the bottom
2024-05-23 20:15:14 -05:00
Tim Culverhouse
465c01e403 chore: remove TODO from tty 2024-05-23 15:41:59 -05:00
Tim Culverhouse
11dcd099fa tty: correctly handle partial reads 2024-05-23 15:39:08 -05:00
CJ van den Berg
473357f24a parser: don't enable pixel mouse if the terminal explicitly says it doesn't support it 2024-05-23 13:05:36 -05:00
CJ van den Berg
1c11333717 tty: do not close /dev/tty on macos
Attempting to close /dev/tty may block indefinitely on macos if another
thread is already blocked on a read operation. As there is no practical
use for closing /dev/tty on exit besides unblocking other threads (which
does not work on macos anyway) we can just skip the close call.
2024-05-23 12:38:11 -05:00
CJ van den Berg
55809160b9 vaxis: detect pixel mouse mode and translate coordinates to cell offsets
This detects support for pixel mouse mode so it can be enabled only
if supported.

This also translates pixel coordinates to something more compatible
with plaine cell coordinates. This make it much easier to write
applications that support both.
2024-05-22 15:04:26 -05:00
CJ van den Berg
a75cce6e78 parser: fix panic on zero mouse coordinate reports 2024-05-22 15:04:26 -05:00
Tim Culverhouse
1b957ec84e fix examples, update readme features 2024-05-22 14:09:15 -05:00
CJ van den Berg
d48826c0b1 vaxis: add osc52 copy/paste support 2024-05-22 13:51:19 -05:00
Tim Culverhouse
a1263b1baa mouse: enable pixel tracking 2024-05-21 15:00:14 -05:00
Tim Culverhouse
1dc90bd764 image: use image options struct, add more functionality
Use an options struct for controlling image output. Add more
functionality from the core kitty image protocol
2024-05-21 11:14:07 -05:00
CJ van den Berg
8871ca2aef vaxis: add functions to query the terminal and enable features in two steps
This allows better integration with applications that are using a custom
main loop.
2024-05-21 11:12:49 -05:00
Tim Culverhouse
fff034d20a image: remove debug log statement 2024-05-21 08:07:28 -05:00
CJ van den Berg
9906a67ef6 screen: fix off by one error in readCell bounds checks 2024-05-21 06:35:48 -05:00
CJ van den Berg
0333e178bd screen: fix off by one error in writeCell bounds checks 2024-05-17 15:04:31 -05:00
CJ van den Berg
329ba0e43b window: do not attempt to fill offscreen windows 2024-05-17 15:04:31 -05:00
Tim Culverhouse
4f5db2b224 core: apply quirk for termux
Termux spews SGR sequences to the screen if they are not legacy encoded.
Add a quirk for termux (TERMUX_VERSION will be set)
2024-05-17 07:25:06 -05:00
Tim Culverhouse
9d11d13085 window: remove deprecated code, add printSegment 2024-05-16 07:00:41 -05:00
Tim Culverhouse
dea1a875e0 chore: zig fmt 2024-05-12 20:27:24 -05:00
00JCIV00
173ff4e216 Removed old vaxis.zig 2024-05-12 20:25:51 -05:00
00JCIV00
6e97c8d21d Fixed PR Corrections 2024-05-12 20:25:51 -05:00
00JCIV00
ee13f32b17 Removed previously missing (now duplicative) assert declaration 2024-05-12 20:25:51 -05:00
00JCIV00
037a301bd6 Added missing 'assert' definition for TextInput 2024-05-12 20:25:51 -05:00
00JCIV00
ca0371bc44 Updated 'os' to 'posix' for Zig v0.12-3457 2024-05-12 20:25:51 -05:00
00JCIV00
46b82062de Improved the Table Widget
- Added support for creating Tables from `ArrayList([]const u8)`.
- Added the `col_width` field to TableContext to help with Mouse support.
2024-05-12 20:25:51 -05:00
00JCIV00
0329ae9b95 Improved the Table Widget
- Added better Integer bounds checks with Saturated Operators.
- Implemented truncated cells using the "..." suffix.
2024-05-12 20:25:51 -05:00
00JCIV00
96cbae13fc Improved Integer bounds checking with Saturated Operators. 2024-05-12 20:25:51 -05:00
00JCIV00
3e1e6200b4 Added the read_thread to the Vaxis struct and made null handling more idiomatic. 2024-05-12 20:25:51 -05:00
00JCIV00
8d842c8b44 Added some various integer overflow protections 2024-05-12 20:25:51 -05:00
00JCIV00
32a4b4baab Added bounds protection to Alignment Window initialization 2024-05-12 20:25:51 -05:00
00JCIV00
26cd121a75 Reset the 'enter' binding to 0x0D after upstream fix 2024-05-12 20:25:51 -05:00
00JCIV00
a07d4f19a7 Reorganized Namespaces
- Consolidated `main.zig` into `vaxis.zig` as the new library entry point.
- Exposed more Types throughout the library for more transparent doc navigation.
- Reorganized certain Modules and Types to be more coherent and readable.
- Re-generated docs to reflect these changes.
2024-05-12 20:25:51 -05:00
00JCIV00
f8544be262 Added the table.zig example
- Created a basic user management example for the Table widget.
2024-05-12 20:25:51 -05:00
00JCIV00
09a8188851 Added the new Table Widget
- Added `Table.zig` under the `src/widgets` directory and `widgets.zig` module.
- Created the `drawTable()` function to draw a Table to the provided parent Window based on the provided ArrayList.
- Created the `TableContext` struct to manage state and attributes for the `drawTable()` function.
2024-05-12 20:25:51 -05:00
00JCIV00
392dffb307 Made more declarations public in src/Window.zig 2024-05-12 20:25:51 -05:00
00JCIV00
1e30dd7d31 Fixed main.Key.enter binding 2024-05-12 20:25:51 -05:00
Tim Culverhouse
ca4346e35a window(fill): fix bounds check
The bounds check should terminate at the window height.

Fixes: f7f4606f1d "window(fill): bounds check the memcpy op"
2024-05-12 20:24:31 -05:00
Tim Culverhouse
f7f4606f1d window(fill): bounds check the memcpy op
Bounds check our window before performing any direct buffer access. This
affects clear and fill, and allows a window to technically be out of
bounds, but only the visual portion of the window will be filled.
2024-05-11 06:38:08 -05:00
Tim Culverhouse
cce22e8850 options: allow applications to set requested kitty flags 2024-05-10 19:57:02 -05:00
Tim Culverhouse
972129a764 vaxis: apply quirk for vhs
Apply a quirk when in a vhs recording session. Vaxis will automatically
use `wcwidth` and no kitty keyboard
2024-05-09 20:22:45 -05:00
CJ van den Berg
8819e192cc vaxis: export Parser, Tty and getWinsize for applications that cannot use Loop 2024-05-09 19:14:49 -05:00
CJ van den Berg
cde85103a1 window: add readCell method 2024-05-09 06:20:56 -05:00
Tim Culverhouse
bb5d79ef75 core: implement legacy SGR sequences and fallbacks 2024-05-08 13:59:57 -05:00
Tim Culverhouse
48a8aa509c widgets(text_input): protect against zero-width window
A zero-width window could set the text_input.draw method into an
infinite loop. Explicitly protect against this case.
2024-05-06 19:03:07 -05:00
Tim Culverhouse
920e490e4c widgets: add Scrollbar widget 2024-05-06 18:54:35 -05:00
Tim Culverhouse
fa7d94f3df window(print): use const Segment 2024-05-03 13:58:23 -05:00
Tim Culverhouse
6abfd8fc3f render: skip clearing images if they aren't supported 2024-05-03 13:57:03 -05:00
Tim Culverhouse
0fe1142989 widgets(nvim): fix scroll down 2024-05-03 12:30:04 -05:00
Tim Culverhouse
cbfa56bb1b log: remove cursor log lines 2024-05-03 12:12:01 -05:00
Tim Culverhouse
ed1867cf39 examples(nvim): update example api
The nvim widget needs work, but at least you can run the example
2024-05-02 20:13:45 -05:00
Tim Culverhouse
a0db41f87c render: add cli renderer
Add a renderer for applications running on the primary screen. This
renderer uses relative cursor positioning, and works with all the same
primitives as the alternate screen.

Fix a bug where repositioning was never turned back to false. This was a
nasty one with huge perf implications.

Set internal cells to a space and default on init. This prevents us from
writing them. As a result, we now issue a hardware clear on resize.
2024-05-02 12:50:33 -05:00
Tim Culverhouse
e43f0907ec vaxis: fix InternalScreen.writeCell
writeCell was clearing the retaining capacity of the wrong arraylist
when writing the uri_id.
2024-05-02 10:38:39 -05:00
Tim Culverhouse
50242b984b loop: fully clean up tty when stopping event loop
Previously, stopping the read thread would not fully clean up the tty.
This could result in issues such as #9 where the terminal state was
borked upon return to shell or if temporarily exiting the TUI.

Fixes: #9
2024-04-30 16:42:10 -05:00
Tim Culverhouse
6d995fe737 color: change eql to switch statement 2024-04-30 13:38:32 -05:00
Tim Culverhouse
fc9f55d6fa perf: improve perf of fill and Screen.init
Use @memset for initializing and filling a Screen.
2024-04-30 12:33:46 -05:00
Tim Culverhouse
31b97f73d2 tests: fix TextInput test 2024-04-30 09:02:32 -05:00
Tim Culverhouse
5ad01f6a3a image: fix base64 and example 2024-04-30 09:02:16 -05:00
Tim Culverhouse
df2f936317 tty: handle key_release events 2024-04-30 08:55:26 -05:00
Tim Culverhouse
92883f5d42 event: handle key_release events 2024-04-30 08:42:21 -05:00
Tim Culverhouse
cb685f3780 perf: improve equality checks
Improve equality checks during render calls by creating bespoke eql
methods or using std.mem instead of std.meta
2024-04-30 06:50:45 -05:00
Tim Culverhouse
4e3a53c536 widgets(textinput): fix grapheme API 2024-04-29 14:21:03 -05:00
Tim Culverhouse
8a71cd4c85 zg: complete replacement of ziglyph with zg 2024-04-29 14:00:08 -05:00
Tim Culverhouse
9fec6f122b core: replace ziglyph.GraphemeIterator with zg version
ziglyph is being replaced by zg. Replace all calls to ziglyph grapheme
iterator with the zg version
2024-04-29 13:03:01 -05:00
Tim Culverhouse
41f76e8f03 vaxis: refactor to split Loop and Vaxis
Refactor the main API to split Loop and Vaxis types. This enables the
core Vaxis type to be more easily referenced in other types, since it
doesn't require a comptime type parameter. This will make the switch to
the zg unicode library easier.
2024-04-29 12:26:50 -05:00
Tim Culverhouse
03f5986c52 window: remove unused code 2024-04-29 09:52:01 -05:00