Christian Muehlhaeuser
3795c036c4
add: Exec, ReleaseTerminal and RestoreTerminal to re-use input and terminal ( #237 )
...
* add: program.ReleaseTerminal and RestoreTerminal to re-use input & terminal
* chore(examples): add altscreen toggling to exec demo
* chore: put low-level altscreen stuff alongside other screen funcs
* docs: edit GoDocs for ReleaseTerminal and RestoreTerminal
* feat(renderer): add internal Msg renderMsg to immediately repaint
* fix: repaint instantly on RestoreTerminal
* fix: restore the altscreen state when restoring the terminal
* feat: implement Cmd-based API for blocking *exec.Cmds
* feat: allow Exec to return custom messages
* feat: allow Exec to be run without a callback
* fix: separate parameters for exec.Command examples
* fix: error message would get printed over by prompt in exec example
* fix: ignore signals while child process is running
* feat: allow to execute other things besides exec.Commands (#280 )
* feat: allow to execute other things besides exec.Commands.
* fix: lint issues
* fix: renames, examples
* fix: callback type should be exported
* docs(exce): tiny ExecCommand doc comment correction
* chore(exec): break out Cmd for clarity's sake in example
* fix(exec): give the terminal a moment to catch up if exiting altscreen
* docs(exec): tidy up doc comments
* chore(exec): disambiguate methods for restoring the terminal state vs input
Co-authored-by: Christian Rocha <christian@rocha.is>
Co-authored-by: Carlos A Becker <caarlos0@gmail.com>
2022-04-12 10:23:10 -04:00
Christian Muehlhaeuser
515ef02733
Move cancelreader into a separate package
2022-04-05 20:41:21 +02:00
Christian Rocha
9a1310846c
docs: Program#Send, Program#Quit, and Program#Kill no longer provisional
2022-03-31 14:38:13 -04:00
Christian Muehlhaeuser
2296184dc5
fix: don't check terminal size if we're not writing to a terminal
2022-02-14 17:00:40 -05:00
Christian Muehlhaeuser
6301f93cb2
Support receiving batched mouse events
...
Mouse events may trigger more than a single events simultaneously.
Fixes #212 .
2022-02-13 08:40:04 +01:00
Ayman Bagabas
42cd4c3191
feat: kill the program and restore terminal state
...
* Add Kill() to force kill the program from the outside
* Prevent renderer channel from being closed multiple times
2022-02-08 10:13:05 -08:00
Carlos Alexandro Becker
9a06319ff1
feat: tea.Batch returns nil if all cmds are nil ( #217 )
...
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
2022-02-03 12:08:34 -03:00
Christian Stewart
608fde59ed
fix(tea): allocate msgs channel in constructor
...
Race condition bug: Start() is called in a new gorotuine, then Send(). If the
Send happens before the msgs channel is allocated, the message is dropped.
Instead allocate the channel in the constructor, so msgs is never nil.
Signed-off-by: Christian Stewart <christian@paral.in>
2022-01-14 13:15:29 -05:00
Christian Rocha
119144e78c
ANSI compression is now opt-in via the WithANSICompressor program option
2021-10-30 13:04:27 -04:00
Niklas Johansson
56aa4efb60
tea: Add StartReturningModel()
...
Sometimes it is useful to obtain the final model after the
program has finished. Add StartReturningModel() (Model, error),
so that it is possible to obtain the final model.
Make sure to keep the original Start() error function, so that
everything is backwards compatible.
2021-10-28 14:19:46 -04:00
Christian Rocha
1f12bda862
Add program-level quit convenience method
2021-10-15 10:37:25 -04:00
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