mirror of
https://github.com/sayanarijit/xplr.git
synced 2024-09-11 11:05:39 +03:00
* Add xplr.util.lscolor and xplr.util.paint (#569) * Add xplr.util.lscolor and xplr.util.style * Fix formatting * Fix clippy suggestions * Remove redundant closures * Optimize, support NO_COLOR, and rename style to paint * Use xplr.util.paint and xplr.util.color in init.lua Co-authored-by: Noah Mayr <dev@noahmayr.com> * Add utility function xplr.util.textwrap (#567) * Add utility function xplr.util.wrap * Cleanup and fix formatting * Update src/lua/util.rs Co-authored-by: Arijit Basu <sayanarijit@users.noreply.github.com> * Update wrap to return lines instead * Fix doc * Rename wrap -> text wrap Co-authored-by: Arijit Basu <sayanarijit@users.noreply.github.com> Co-authored-by: Arijit Basu <sayanarijit@gmail.com> * Add xplr.util.relative_to and xplr.util.path_shorthand (#568) * Add xplr.util.relative_to and xplr.util.path_shorthand * Remove duplicate slash at end * Use pwd from env and remove pathdiff package * Some fixes and improvements * Generate docs * Some more improvements * Improve selection rendering * Improve functions with test cases * Update docs * Minor doc fix * Rename path_shorthand -> shortened * Handle homedir edgecase Also fix init.lua * Minor fix * Use config argument for relative and shortened paths * Prefix relative paths with "." and fix edge cases where we're not showing the file name * Use and_then instead of map and flatten * WIP: Move selection rendering to lua * Make selection renderer function configurable on lua side * Some improvements * Some impovements * Minor doc fix * Remove symlink style --------- Co-authored-by: Arijit Basu <sayanarijit@gmail.com> * Add xplr.util.layout_replaced (#574) Closes: https://github.com/sayanarijit/xplr/issues/573 * Improve selection operations (#575) - `:sl` to list selection. - `:ss` to softlink. - `:sh` to hardlink. - Avoid conflict by adding suffix. - Unselect individual path only on operation success. Closes: - https://github.com/sayanarijit/xplr/issues/572 - https://github.com/sayanarijit/xplr/issues/571 - https://github.com/sayanarijit/xplr/issues/570 * Minor updates * Add more features (#581) * Add more features - Key binding ":se" to edit selection list in $EDITOR - New utility functions: - xplr.util.clone - xplr.util.exists - xplr.util.is_dir - xplr.util.is_file - xplr.util.is_symlink - xplr.util.is_absolute - xplr.util.path_split - xplr.util.node Closes: https://github.com/sayanarijit/xplr/issues/580 Closes: https://github.com/sayanarijit/xplr/issues/579 Closes: https://github.com/sayanarijit/xplr/issues/577 * Fix edit selection list * Fix clippy lints * Fix layout link in doc * xplr.util.shortened -> xplr.util.shorten * Fix more clippy lints * Fix xplr.util.shorten name change * More UI utilities and improvements (#582) * More UI utilities and improvements - Apply style only to the file column in the table. - Properly quote paths. - Expose the applicable style from config in the table renderer argument. - Add utility functions: - xplr.util.node_type - xplr.util.style_mix - xplr.util.shell_escape * Make escaping play nice with shorten * Fix tests * Fix doc * Some fixes * Fix selection editor * Fix clear selection for selection editor * Add selection navigation (#583) * Add selection navigation - FocusNextSelection (ctrl-n) - FocusPreviousSelection (ctrl-p) Also improve batch operations * Minor doc fixes * Minor doc fix * Remove tab -> ctrl-i binding * Improve batch operation interaction - More robust focus operation. - Focus on failed to delete paths. * Fix Rust compatibility * Fix panic on permission denial Also, improve the error messages. * More logging improvements * Fix layout_replace only working with table parameters (#586) * Improve builtin search mode (#585) * Improve builtin search mode * Remove commented out code * Make search ranking and algorithm more extensible * Flatten messages BREAKING: xplr.config.general.sort_and_filter_ui.search_identifier -> xplr.config.general.sort_and_filter_ui.search_identifiers Messages: - Search - SearchFromInput - SearchFuzzy - SearchFuzzyUnranked - SearchFuzzyUnrankedFromInput - SearchRegexUnrankedFromInput - SearchRegex - SearchRegexUnranked - SearchRegexUnrankedFromInput - SearchRegexUnrankedFromInput - CycleSearchAlgorithm - EnableRankedSearch - DisableRankedSearch - ToggleRankedSearch Static config: xplr.config.general.search.algorithm = "Fuzzy" * Handle search ranking in search algorithm * Make CycleSearchAlgorithm only cycle between algorithms, without changing ranking * Separate algorithm and ordering * Minor doc updates * Some cleanup * Final touch * Cycle -> Toggle --------- Co-authored-by: Arijit Basu <sayanarijit@gmail.com> * Fix layout replace for unit layouts (#588) * Allow custom title and ui config in custom layout. (#589) * Allow custom title and ui config in custom layout. Adds the following layouts: - Static - Dynamic Deprecates `CustomContent` (but won't be removed to maintain compatibility). Closes: https://github.com/sayanarijit/xplr/issues/563 * Delete init.lua * Update docs/en/src/layout.md * Update docs/en/src/layout.md * Rename - Paragraph => CustomParagraph - List => CustomList - Table => CustomTable Also update init.lua * Fix clippy errs * Fix doc links * Fix search order * Improve working with file permissions (#591) * Improve working with file permissions Implements: - xplr.util.permissions_rwx - xplr.util.permissions_octal * Edit permissions * Add permissions in Resolved Node (#592) * Add permissions in Relolved Node And handle application/x-executable mime type. * Fix bench * Improve permissions editor * More permissions editor improvements * Doc updates * Remove ResolvedNode.permissions (#593) Reason: Too much serialization making lua calls slow. * Add workaround for macos with legacy coreutils (#595) Refs: - https://github.com/sayanarijit/xplr/issues/594 - https://github.com/sayanarijit/xplr/issues/559 * Use H:M:S format to display logs (#596) * Keep the selection list and clear manually (#597) * Keep the selection list and clear manually Ref: https://github.com/sayanarijit/map.xplr/issues/4 * Fix linting err * Fix broken history (#599) * Fix broken hostory Fixes: https://github.com/sayanarijit/xplr/issues/598 * Minor cleanup * Slightly optimize selection retention (#600) * Update deps * chrono -> time * update: 0.20.2 -> 0.21.1 * Update post-install.md * Upgrade guide * Minor fix * Fix tests * Add missing doc * Fix clippy lints --------- Co-authored-by: Noah Mayr <dev@noahmayr.com>
137 lines
3.9 KiB
Rust
137 lines
3.9 KiB
Rust
use crate::app;
|
|
use crate::ui;
|
|
use criterion::{criterion_group, criterion_main, Criterion};
|
|
use crossterm::execute;
|
|
use crossterm::terminal as term;
|
|
use std::fs;
|
|
use tui::backend::CrosstermBackend;
|
|
use tui::Terminal;
|
|
use xplr::runner::get_tty;
|
|
use xplr::*;
|
|
|
|
const PWD: &str = "/tmp/xplr_bench";
|
|
|
|
fn navigation_benchmark(c: &mut Criterion) {
|
|
fs::create_dir_all(PWD).unwrap();
|
|
(1..10000).for_each(|i| {
|
|
fs::File::create(std::path::Path::new(PWD).join(i.to_string())).unwrap();
|
|
});
|
|
|
|
let lua = mlua::Lua::new();
|
|
let mut app =
|
|
app::App::create("xplr".into(), None, PWD.into(), &lua, None, [].into())
|
|
.expect("failed to create app");
|
|
|
|
app = app
|
|
.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::ChangeDirectory(PWD.into())),
|
|
None,
|
|
))
|
|
.unwrap();
|
|
|
|
c.bench_function("focus next item", |b| {
|
|
b.iter(|| {
|
|
app.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::FocusNext),
|
|
None,
|
|
))
|
|
.unwrap()
|
|
})
|
|
});
|
|
|
|
c.bench_function("focus previous item", |b| {
|
|
b.iter(|| {
|
|
app.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::FocusPrevious),
|
|
None,
|
|
))
|
|
.unwrap()
|
|
})
|
|
});
|
|
|
|
c.bench_function("focus first item", |b| {
|
|
b.iter(|| {
|
|
app.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::FocusFirst),
|
|
None,
|
|
))
|
|
.unwrap()
|
|
})
|
|
});
|
|
|
|
c.bench_function("focus last item", |b| {
|
|
b.iter(|| {
|
|
app.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::FocusLast),
|
|
None,
|
|
))
|
|
.unwrap()
|
|
})
|
|
});
|
|
|
|
c.bench_function("leave and enter directory", |b| {
|
|
b.iter(|| {
|
|
app.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::Back),
|
|
None,
|
|
))
|
|
.unwrap()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::Enter),
|
|
None,
|
|
))
|
|
.unwrap()
|
|
})
|
|
});
|
|
}
|
|
|
|
fn draw_benchmark(c: &mut Criterion) {
|
|
fs::create_dir_all(PWD).unwrap();
|
|
(1..10000).for_each(|i| {
|
|
fs::File::create(std::path::Path::new(PWD).join(i.to_string())).unwrap();
|
|
});
|
|
|
|
let lua = mlua::Lua::new();
|
|
let mut app =
|
|
app::App::create("xplr".into(), None, PWD.into(), &lua, None, [].into())
|
|
.expect("failed to create app");
|
|
|
|
app = app
|
|
.clone()
|
|
.handle_task(app::Task::new(
|
|
app::MsgIn::External(app::ExternalMsg::ChangeDirectory(PWD.into())),
|
|
None,
|
|
))
|
|
.unwrap();
|
|
|
|
term::enable_raw_mode().unwrap();
|
|
let mut stdout = get_tty().unwrap();
|
|
// let mut stdout = stdout.lock();
|
|
execute!(stdout, term::EnterAlternateScreen).unwrap();
|
|
// let stdout = MouseTerminal::from(stdout);
|
|
let backend = CrosstermBackend::new(stdout);
|
|
let mut terminal = Terminal::new(backend).unwrap();
|
|
terminal.hide_cursor().unwrap();
|
|
|
|
c.bench_function("draw on terminal", |b| {
|
|
b.iter(|| {
|
|
terminal.draw(|f| ui::draw(f, &app, &lua)).unwrap();
|
|
})
|
|
});
|
|
|
|
terminal.clear().unwrap();
|
|
terminal.set_cursor(0, 0).unwrap();
|
|
execute!(terminal.backend_mut(), term::LeaveAlternateScreen).unwrap();
|
|
term::disable_raw_mode().unwrap();
|
|
terminal.show_cursor().unwrap();
|
|
}
|
|
|
|
criterion_group!(benches, navigation_benchmark, draw_benchmark);
|
|
criterion_main!(benches);
|