Commit Graph

166 Commits

Author SHA1 Message Date
Christian Rocha 0e7cd09bf6 Tidy up comments 2021-09-28 14:00:29 -04:00
Erik G e402e8b567
Cancelable reads (#120)
This commit implements cancelable reads, which allows Bubble Tea programs to run in succession in a single application. It also makes sure all goroutines terminate before `Program.Start()` returns.

Closes #24.
2021-09-28 13:30:11 -04:00
Christian Rocha ad19c664fe Condense/scope init cmd 2021-09-07 15:37:14 -04:00
Christian Rocha ea0550121e Don't close the msgs channel on shutdown 2021-08-02 10:50:04 -04:00
Christian Rocha 5f41a91e02 Fix Windows stuff related to the refactor at 49a5d16 2021-08-02 10:50:04 -04:00
Christian Rocha 4bfad658ad Simplify how we listen for window resizes 2021-08-02 10:50:04 -04:00
Christian Rocha 30fd7a8f20 Better logic in input checks 2021-08-02 10:50:04 -04:00
Christian Rocha 9f9b3aea96 Read input regardless of whether or not it's a TTY
This commit also contains some refactors:

* Refactor away inputStatus type
* Refactor away program.inputIsTTY member
* Simplify how we setup and restore input when it's a TTY
2021-08-02 10:50:04 -04:00
Christian Rocha 9826251f08 Add WithInputTTY ProgramOption 2021-08-02 10:50:04 -04:00
Christian Rocha e87344b791 Move ProgramOptions into a separate file 2021-08-02 10:50:04 -04:00
Christian Rocha 3a9ede46f6 Condense a scoped if-statement 2021-08-02 10:50:04 -04:00
Christian Rocha 0886ee26b0 Msgs can now be sent to Programs with Program.Send(Msg) 2021-07-01 11:06:21 -04:00
Christian Rocha 1f773e8f20 Fix a race where artifacts could print when exiting a program
This commit also consolidates the exit operations for consistency's
sake, and adds a kill() method to renderers for stopping them without
performing any final rendering.
2021-06-02 14:49:54 -04:00
Christian Rocha 85ab476698 Add ProgramOptions for entering the altscreen and enabling the mouse
Because they run ansyncronously, the analogous commands, when run in
a Model's Init() function, could fire after the renderer has starting
writing to output, rendering artifacts to the commandline.
2021-06-02 14:49:54 -04:00
Christian Rocha 035d2abd3e Properly cast inputStatus types + mark related linter false positive 2021-05-31 10:43:31 -04:00
Christian Rocha 3e98f55adf Add linter ignore rule for windows-related false positive on unix 2021-05-31 10:43:31 -04:00
Christian Rocha 3256fae4d4 Force a full repaint when resizing the window
v0.13.4 introduced a regression where lines weren't always cleared when
resizing the window resulting in the presence of rendering artifacts.
This commit fixes that.
2021-05-31 10:37:32 -04:00
Christian Rocha c07cbd1e32 Pull batch processing into the internal message switch 2021-05-06 18:10:17 -04:00
Christian Rocha 4fbe50adb6 Disable mouse when exiting due to a panic 2021-05-05 18:11:56 -04:00
Christian Rocha 3dff6d4b58 Deprecate Program.EnterAltScreen Program.ExitAltScreen methods
The EnterAltScreen/ExitAltScreen commands should be used instead.
2021-05-05 18:11:56 -04:00
Christian Rocha 5c150ebf38 Add cmds for toggling mouse mode + deprecate equivalent Program methods
Also automatically disable mouse mode on exit.
2021-05-05 18:11:56 -04:00
Tobias Klauser 295f7bd246 Use golang.org/x/term
The golang.org/x/crypto/ssh/terminal package is deprecated and merely a
wrapper around golang.org/x/term. Use the latter directly and avoid the
dependency on the former altogether.
2021-04-29 15:05:50 +02:00
Christian Muehlhaeuser d2c1d9bfb0 Omit unhandled error 2021-03-12 01:25:54 +01:00
Kiyon ac36017f86 WithOutput option should take io.Writer as argument. 2021-03-09 03:51:34 +01:00
kiyon 86b93a31c0
Add commands for toggling the altscreen (#62)
* Add commands EnterAltScreen and ExitAltScreen for toggling the altscreen
* Add altscreen toggling example
* ignore .idea

Co-authored-by: Christian Rocha <christian@rocha.is>
2021-03-08 12:48:34 -05:00
Christian Rocha b3f62af8b5 Add nil renderer and combination TUI-daemon program example
The Nil Renderer essentially disables the Bubble Tea renderer sending
loggings and print statements to stdout. It can be enabled via the
ProgramOption WithoutRenderer.
2021-03-07 13:01:54 -05:00
Christian Rocha 0780601791 Open a TTY if input is not a TTY, unless the user has spec'd otherwise 2021-02-27 16:03:34 -05:00
Christian Rocha 4e2643f318 Make sure we pass our mutex by reference 2021-02-27 16:03:34 -05:00
Carlos Alexandro Becker b2d948b53c Fixed a couple of typos
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
2021-01-17 15:58:50 +01:00
Christian Rocha 9f04c936da Always listen for SIGINT 2021-01-11 18:11:28 -05:00
Christian Rocha c4aeadd762 Generalize output from an *os.File to an io.Writer 2020-12-30 17:59:00 -05:00
Christoph Hartmann e84314c622 allow custom input and handle eof for os.input properly
Signed-off-by: Christoph Hartmann <chris@lollyrock.com>
2020-12-30 17:59:00 -05:00
Christian Rocha 8e01f5f58a Add command for hiding the cursor 2020-12-03 13:56:37 -05:00
Christian Rocha 6d70abd7d5 When showing/hiding the cursor operate on the program's io.Writer
Previously we were operating on io.Stdout.
2020-12-03 13:56:37 -05:00
Christian Rocha 480bdd41fc
Fix typo in doc comment + improve that comment 2020-10-18 12:43:41 -04:00
Christian Rocha 26899c73b3
Init, Update and View are now methods on interface Model 2020-10-15 16:08:19 -04:00
Kilian Drechsler 26477f70c0 print recovered panic message to terminal 2020-10-08 19:45:16 +00:00
Christian Rocha 3b9d076c80
Fix typo in comment 2020-10-05 14:42:09 -04:00
Christian Rocha fb48e03639
Gracefully recover from panics (but still print stack traces) by default 2020-09-21 13:14:24 -04:00
Christian Muehlhaeuser e634ad5341
Fix typo 2020-08-19 23:54:42 +02:00
Christian Rocha 6fcdf9908f
Improve examples in docs 2020-07-30 11:30:33 -04:00
Christian Rocha 17035473db
More documentation edits 2020-07-29 20:54:15 -04:00
Christian Rocha a5e38222c5
Don't expose ReadInput 2020-07-29 20:51:55 -04:00
Christian Rocha c0f67a2927
Improve GoDocs 2020-07-29 20:50:00 -04:00
Christian Rocha 2f53eeb54b
Fix a bug in macOS terminal where stuff could get sucked into the scroll area 2020-07-13 11:39:04 -04:00
Christian Rocha 8d26b4ebd7
Use mouse consts in termenv 2020-06-25 12:42:31 -04:00
Christian Rocha f3fd9decc9
Improve some comments 2020-06-24 12:14:35 -04:00
Toby Padilla e90039d16e Fix captured variable 2020-06-23 17:26:00 -04:00
Christian Rocha de147c5061
Add mouse wheel support to pager example 2020-06-23 12:01:23 -04:00
Christian Rocha 5ec2c0712a
Move cursor to (0,0) when entering the altscreen
This should fix cases in some terminals where the following paint is
vertically offset.
2020-06-22 20:47:35 -04:00
Christian Rocha d86cb562f0
Add basic mouse support 2020-06-22 20:41:26 -04:00
Christian Rocha 3a70ecdde1
Use same output for altscreen stuff as everything else 2020-06-22 15:55:52 -04:00
Christian Rocha 673752658f
Comments and cleanup 2020-06-22 13:40:32 -04:00
Christian Rocha 6bd34bdd14
Remove commands for manually getting terminal size; no longer needed
Tea core now sends the terminal dimensions on start and when the window
is resized (except on Windows where SIGWINCH, the resize signal, is not
supported).
2020-06-18 22:47:17 -04:00
Christian Rocha a6deb077c5
Adjust comments 2020-06-17 19:43:19 -04:00
Christian Rocha 4dc6992767
Cmds for scrolling + handle renderer msgs in a renderer method 2020-06-17 18:46:04 -04:00
Christian Rocha a492302609
Adjust exports of new msgs + add msg to replace ignored lines 2020-06-17 18:19:27 -04:00
Christian Rocha 8539cfcf8c
Fix a bug where left area on the first line was not always cleared 2020-06-17 14:50:39 -04:00
Christian Rocha debaf312f7
Disable resize listening on windows since it's not supported 2020-06-17 12:27:16 -04:00
Christian Rocha a152cce4b6
Adjust comments + move some code around 2020-06-17 12:12:45 -04:00
Christian Rocha 683473c26d
Blind pass at adding high performance scrolling into the renderer 2020-06-16 22:06:46 -04:00
Christian Rocha 2896e0e8e6
Remove now unused vars from old renderer 2020-06-08 12:48:57 -04:00
Christian Rocha fcbc427098
Properly shut down renderer when quitting program 2020-06-08 12:48:57 -04:00
Christian Rocha 87434a2569
Buffer/ticker-based renderer 2020-06-08 12:48:57 -04:00
Christian Rocha b10f6d6791
How about if we count the lines rendered correctly 2020-05-28 10:47:15 -04:00
Christian Rocha e7130c9633
Remove an extraneous var and rename another var for clarity 2020-05-28 10:26:03 -04:00
Christian Rocha 99df3d4226
Only render if view has actually changed 2020-05-28 10:20:59 -04:00
Christian Rocha 3b8b011b5a
Rename to Bubble Tea (with the import name tea) 2020-05-25 19:48:36 -04:00
Christian Rocha 4bf40fbe62
Rename project to Boba 2020-05-12 16:39:08 -04:00
Christian Rocha 9dd9461dde
It's a safer bet not to render any extra newlines whatsoever 2020-05-11 23:07:48 -04:00
Christian Rocha 5ae602953c
Fix bug where extra blank line was being adding to output 2020-05-11 23:07:00 -04:00
Christian Rocha b50ee76165
Subs shouldn't take a model as an argument
This also nullifies the need for SubMap
2020-05-04 18:52:44 -04:00
Christian Rocha f93b752fcc
Remove ErrMsg and ModelAssertionErr 2020-04-22 11:00:30 -04:00
Christian Rocha aa6d766e42
Catch errors when reading keyboard input 2020-04-22 10:39:43 -04:00
Christian Rocha 50b16d2df1
Model doesn't need to be a member of the Program struct
This also fixes a race condition
2020-04-22 10:31:43 -04:00
Christian Rocha 4351c9f903
Cmds no longer takes a Model as an argument, CmdMap no longer needed 2020-04-22 10:15:04 -04:00
Christian Rocha 4f2c60372d
Improve some comments 2020-04-20 14:08:27 -04:00
Christian Muehlhaeuser bf92cd6cce
Add missing error handling 2020-04-17 20:35:54 +02:00
Christian Rocha 27416e9976
Add nil checks to CmdMap and SubMap functors 2020-04-10 15:43:32 -04:00
Christian Rocha 4a41a61919
Short-ciruit the message loop when processing batched commands 2020-04-03 18:31:40 -04:00
Christian Rocha cd63ed1e44
Stop old subscription when it becomes reassigned as nil 2020-04-02 12:10:10 -04:00
Christian Rocha 2e509ad32c
Don't do command batching if the batch is 0 items long 2020-04-01 12:05:05 -04:00
Christian Rocha 1bf93b1ccf
Provisionally add `CmdMap` and `SubMap` functions 2020-03-31 16:28:16 -04:00
Christian Rocha 6e769686f1
Add support for command batching 2020-03-31 16:08:03 -04:00
Christian Rocha 5b001ee17f
Spinner example 2020-02-10 16:35:29 -05:00
Christian Rocha 02d3086885
Fix typos in comments 2020-02-10 12:44:04 -05:00
Christian Rocha 5383f5a61e
Wrap termenv altscreen functions to make things simpler for the end user 2020-02-01 21:07:35 -05:00
Christian Muehlhaeuser f382f4db4a
Move ansi helpers to termenv 2020-01-31 13:52:20 +01:00
Christian Rocha bb06373836
Whoops, accidentally commited this new Sub type idea 2020-01-29 21:37:37 -05:00
Christian Rocha 4b4655b14a
Note about project being a pre-release 2020-01-27 21:27:20 -05:00
Christian Rocha 444c36b31f
Rework subscriptions, allowing for them to be easily managed by the developer 2020-01-25 21:28:16 -05:00
Christian Muehlhaeuser 1c98700015
syslog is only available on unix systems 2020-01-25 07:15:56 +01:00
Christian Muehlhaeuser bc67e3896b
Add platform-specific terminal init & restore 2020-01-25 07:15:29 +01:00
Christian Rocha 79af4ad6d5
More functional rendering approach 2020-01-22 16:15:30 -08:00
Christian Rocha 524cf2cffd
convenience function for creating an ErrMsg from an error 2020-01-20 10:54:58 -08:00
Christian Rocha e1d4a14345
Commands should probably receive the model as an arg, right? 2020-01-20 10:35:03 -08:00
Christian Rocha a318d24593
Fix a bug where the initial command wasn't running 2020-01-19 00:46:14 -05:00
Christian Rocha 824703a661
Remove stray log that was making rendering weird 2020-01-19 00:13:19 -05:00
Christian Rocha 6a0489592f
Programs should take an init type/function as the first argument
This is in line with the way Elm works. Also update examples.
2020-01-18 22:22:04 -05:00
Christian Rocha 11006d0a90
Move last render height info to the program level 2020-01-18 10:36:39 -05:00