I am a...
- ๐ Computer Science student at the University of Missouri
- ๐ฅ๏ธ Linux enthusiast
- ๐ง Bash wizard
- ๐ฆ rustacean
Add logging to the live subcommand for easier debugging.
Metrohash is almost 3x faster than sha1. See file_hash
bench.
Metrohash likely has a much higher collision rate than sha1, but the likelihood of collision is low for users due to the data being file contents. The performance win of this change is worth the increased probability of false negatives for detecting if the editor is "dirty".
The output pane height is currently set as the number of output lines. Cap this at some value (~40%) so that it doesn't take over the content area and provide a way to scroll the pane. Allow the user to drag the divider between the editor and output to change the cap %.
Always shrink the output pane to fit the output if that is easier to do.
For scripts that take a long time to run, the user may not want it to automatically re-run the script on every change to the code. Add the ability to disable auto-run. When auto-run is disabled, the user should have the new ability to run the script manually. Like there is currently, once a script is running there is no way to stop it.
Files opened in live mode show the dirty indicator when no changes have been made.
Ratatui does double buffering to efficiently update the terminal by only writing out what changed between draw calls. However, the UI is always redrawn every tick, and Ratatui is an immediate-mode framework meaning that the entire UI must be rebuilt in memory. Most of the time there will be no or few changes, meaning most of the just-created widgets will not be used.
Taking inspiration from the paradigms used in tui-realm, only call Terminal::draw
if an event causes a state update. The main loop and event processing may need refactoring to make this easy.
Additionally, gather some metrics to see how this affects performance:
Enable (full or partial) lint groups:
clippy::pedantic
clippy::nursery
clippy::cargo
See the Clippy website for list of lints.
Currently, if the user presses ^C
when any modal is visible it will close the modal. Sometimes users will spam ^C
to force quit terminal applications. Support this expected behavior by exiting the app on ^C
, but only when in the exit confirmation modal.
Implement with the ropey crate
The current list of commands and their aliases:
run
generate
/gen
live
input-debug
inline-scroll
Add more aliases:
r
g
l
/edit
/e
input
/i
In live mode, when ASCII is enabled, it is impossible to tell whether a cell that contains a digit 0-9 is showing:
48..=57
The Save As modal should have an initial path that
Initialize the input of the Save As modal with the absolute path of the current file, with -copy
appended to the stem of the basename.
e.g while editing the file examples/hello-world.bf
, the Save As modal should be initialized with:
/absolute/path/to/examples/hello-world-copy.bf
If that filename exists, try appending -copy-2
to the original stem:
/absolute/path/to/examples/hello-world-copy-2.bf
Increment the number until the path does not exist.
Improve TUI widget rendering.
crate::widgets
:
CellWidget
ChunkedTapeDisplay
(rename to ChunkedTapeWidget
)WindowDisplay
(rename to TapeChunkWidget
)ratatui
for run subcommandTurn the project into a virtual workspace with crates:
bf
bf::interpreter
bf::commands::generate
bf_cli
bf_tui
bf::widgets
bf::commands::live::widgets
too โThat leaves bf::util
which will get broken up and moved into the correct crate. Anything shared can be moved to bf::utils
or a bf_utils
crate can be created.
At some point the unsaved changes modal was disabled. This modal would appear when a user requests that the app exit while there are unsaved changes to the file. Re-enable this feature.
Add a warning to the modal that is shown then the textarea value is a filename that exists.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.