Showing preview only (1,543K chars total). Download the full file or copy to clipboard to get everything.
Repository: Canop/broot
Branch: main
Commit: 5293d3231198
Files: 290
Total size: 1.4 MB
Directory structure:
gitextract_ip4l8ksy/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ └── tests.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE
├── README.md
├── bacon.toml
├── benches/
│ ├── composite.rs
│ ├── fuzzy.rs
│ ├── path_normalization.rs
│ ├── shared/
│ │ ├── mod.rs
│ │ └── names.rs
│ └── toks.rs
├── build-all-targets.sh
├── build.rs
├── build.sh
├── features.md
├── man/
│ └── page
├── release.sh
├── resources/
│ ├── default-conf/
│ │ ├── conf.hjson
│ │ ├── skins/
│ │ │ ├── catppuccin-macchiato.hjson
│ │ │ ├── catppuccin-mocha.hjson
│ │ │ ├── dark-blue.hjson
│ │ │ ├── dark-gruvbox.hjson
│ │ │ ├── dark-orange.hjson
│ │ │ ├── native-16.hjson
│ │ │ ├── solarized-dark.hjson
│ │ │ ├── solarized-light.hjson
│ │ │ ├── tokyo-night.hjson
│ │ │ └── white.hjson
│ │ └── verbs.hjson
│ ├── icons/
│ │ ├── nerdfont/
│ │ │ ├── README.md
│ │ │ └── data/
│ │ │ ├── double_extension_to_icon_name_map.rs
│ │ │ ├── extension_to_icon_name_map.rs
│ │ │ ├── file_name_to_icon_name_map.rs
│ │ │ └── icon_name_to_icon_code_point_map.rs
│ │ └── vscode/
│ │ └── data/
│ │ ├── README
│ │ ├── double_extension_to_icon_name_map.rs
│ │ ├── extension_to_icon_name_map.rs
│ │ ├── file_name_to_icon_name_map.rs
│ │ └── icon_name_to_icon_code_point_map.rs
│ └── syntect/
│ └── README.md
├── rustfmt.toml
├── src/
│ ├── app/
│ │ ├── app.rs
│ │ ├── app_context.rs
│ │ ├── app_panels.rs
│ │ ├── app_state.rs
│ │ ├── cmd_context.rs
│ │ ├── cmd_result.rs
│ │ ├── display_context.rs
│ │ ├── mod.rs
│ │ ├── mode.rs
│ │ ├── panel.rs
│ │ ├── panel_id.rs
│ │ ├── panel_purpose.rs
│ │ ├── panel_reference.rs
│ │ ├── panel_state.rs
│ │ ├── sel_info.rs
│ │ ├── selection.rs
│ │ ├── standard_status.rs
│ │ ├── state_type.rs
│ │ └── status.rs
│ ├── browser/
│ │ ├── browser_state.rs
│ │ └── mod.rs
│ ├── cli/
│ │ ├── args.rs
│ │ ├── install_launch_args.rs
│ │ └── mod.rs
│ ├── command/
│ │ ├── command.rs
│ │ ├── completion.rs
│ │ ├── mod.rs
│ │ ├── panel_input.rs
│ │ ├── parts.rs
│ │ ├── scroll.rs
│ │ ├── sel.rs
│ │ ├── sequence.rs
│ │ └── trigger_type.rs
│ ├── conf/
│ │ ├── conf.rs
│ │ ├── default.rs
│ │ ├── default_flags.rs
│ │ ├── file_size.rs
│ │ ├── format.rs
│ │ ├── import.rs
│ │ ├── mod.rs
│ │ ├── special_handling_conf.rs
│ │ └── verb_conf.rs
│ ├── content_search/
│ │ ├── content_match.rs
│ │ ├── content_search_result.rs
│ │ ├── mod.rs
│ │ └── needle.rs
│ ├── content_type/
│ │ ├── extensions.rs
│ │ ├── magic_numbers.rs
│ │ └── mod.rs
│ ├── display/
│ │ ├── areas.rs
│ │ ├── cell_size.rs
│ │ ├── col.rs
│ │ ├── displayable_tree.rs
│ │ ├── flags_display.rs
│ │ ├── git_status_display.rs
│ │ ├── layout_instructions.rs
│ │ ├── luma.rs
│ │ ├── matched_string.rs
│ │ ├── mod.rs
│ │ ├── num_format.rs
│ │ ├── permissions.rs
│ │ ├── screen.rs
│ │ └── status_line.rs
│ ├── errors.rs
│ ├── file_sum/
│ │ ├── mod.rs
│ │ └── sum_computation.rs
│ ├── filesystems/
│ │ ├── filesystems_state.rs
│ │ ├── mod.rs
│ │ ├── mount_list.rs
│ │ └── mount_space_display.rs
│ ├── flag/
│ │ └── mod.rs
│ ├── git/
│ │ ├── ignore.rs
│ │ ├── mod.rs
│ │ ├── status.rs
│ │ └── status_computer.rs
│ ├── help/
│ │ ├── help_content.rs
│ │ ├── help_features.rs
│ │ ├── help_search_modes.rs
│ │ ├── help_state.rs
│ │ ├── help_verbs.rs
│ │ └── mod.rs
│ ├── hex/
│ │ ├── byte.rs
│ │ ├── hex_view.rs
│ │ └── mod.rs
│ ├── icon/
│ │ ├── font.rs
│ │ ├── icon_plugin.rs
│ │ └── mod.rs
│ ├── image/
│ │ ├── double_line.rs
│ │ ├── image_view.rs
│ │ ├── mod.rs
│ │ ├── source_image.rs
│ │ ├── svg.rs
│ │ └── zune_compat.rs
│ ├── keys.rs
│ ├── kitty/
│ │ ├── detect_support.rs
│ │ ├── image_renderer.rs
│ │ ├── mod.rs
│ │ └── terminal_esc.rs
│ ├── launchable.rs
│ ├── lib.rs
│ ├── main.rs
│ ├── net/
│ │ ├── client.rs
│ │ ├── message.rs
│ │ ├── mod.rs
│ │ └── server.rs
│ ├── path/
│ │ ├── anchor.rs
│ │ ├── closest.rs
│ │ ├── common.rs
│ │ ├── from.rs
│ │ ├── mod.rs
│ │ ├── normalize.rs
│ │ └── special_path.rs
│ ├── pattern/
│ │ ├── candidate.rs
│ │ ├── composite_pattern.rs
│ │ ├── content_pattern.rs
│ │ ├── content_regex_pattern.rs
│ │ ├── exact_pattern.rs
│ │ ├── fuzzy_pattern.rs
│ │ ├── input_pattern.rs
│ │ ├── mod.rs
│ │ ├── name_match.rs
│ │ ├── operator.rs
│ │ ├── pattern.rs
│ │ ├── pattern_object.rs
│ │ ├── pattern_parts.rs
│ │ ├── pos.rs
│ │ ├── regex_pattern.rs
│ │ ├── search_mode.rs
│ │ └── tok_pattern.rs
│ ├── permissions/
│ │ ├── mod.rs
│ │ └── permissions_unix.rs
│ ├── preview/
│ │ ├── dir_view.rs
│ │ ├── mod.rs
│ │ ├── preview.rs
│ │ ├── preview_state.rs
│ │ ├── preview_transformer.rs
│ │ └── zero_len_file_view.rs
│ ├── print.rs
│ ├── shell_install/
│ │ ├── bash.rs
│ │ ├── fish.rs
│ │ ├── mod.rs
│ │ ├── nushell.rs
│ │ ├── powershell.rs
│ │ ├── state.rs
│ │ └── util.rs
│ ├── skin/
│ │ ├── app_skin.rs
│ │ ├── cli_mad_skin.rs
│ │ ├── ext_colors.rs
│ │ ├── help_mad_skin.rs
│ │ ├── mod.rs
│ │ ├── panel_skin.rs
│ │ ├── purpose_mad_skin.rs
│ │ ├── skin_entry.rs
│ │ ├── status_mad_skin.rs
│ │ └── style_map.rs
│ ├── stage/
│ │ ├── filtered_stage.rs
│ │ ├── mod.rs
│ │ ├── stage.rs
│ │ ├── stage_state.rs
│ │ └── stage_sum.rs
│ ├── syntactic/
│ │ ├── mod.rs
│ │ ├── syntax_theme.rs
│ │ ├── syntaxer.rs
│ │ └── text_view.rs
│ ├── task_sync.rs
│ ├── terminal.rs
│ ├── trash/
│ │ ├── mod.rs
│ │ ├── trash_sort.rs
│ │ ├── trash_state.rs
│ │ └── trash_state_cols.rs
│ ├── tree/
│ │ ├── mod.rs
│ │ ├── sort.rs
│ │ ├── tree.rs
│ │ ├── tree_line.rs
│ │ ├── tree_line_type.rs
│ │ └── tree_options.rs
│ ├── tree_build/
│ │ ├── bid.rs
│ │ ├── bline.rs
│ │ ├── build_report.rs
│ │ ├── builder.rs
│ │ └── mod.rs
│ ├── tty/
│ │ ├── mod.rs
│ │ ├── tline.rs
│ │ ├── tline_builder.rs
│ │ ├── trange.rs
│ │ ├── tstring.rs
│ │ └── tty_view.rs
│ ├── verb/
│ │ ├── coarity.rs
│ │ ├── exec_pattern.rs
│ │ ├── execution_builder.rs
│ │ ├── external_execution.rs
│ │ ├── external_execution_mode.rs
│ │ ├── file_type_condition.rs
│ │ ├── internal.rs
│ │ ├── internal_execution.rs
│ │ ├── internal_focus.rs
│ │ ├── internal_path.rs
│ │ ├── internal_select.rs
│ │ ├── invocation_parser.rs
│ │ ├── mod.rs
│ │ ├── sequence_execution.rs
│ │ ├── verb.rs
│ │ ├── verb_arg_def.rs
│ │ ├── verb_description.rs
│ │ ├── verb_execution.rs
│ │ ├── verb_invocation.rs
│ │ ├── verb_store.rs
│ │ └── write.rs
│ └── watcher.rs
├── target.sh
├── tests/
│ └── search_strings.rs
├── version.sh
└── website/
├── .gitignore
├── README.md
├── ddoc.hjson
└── src/
├── README.md
├── common-problems.md
├── community.md
├── conf_file.md
├── conf_verbs.md
├── css/
│ ├── site.css
│ └── tab-langs.css
├── export.md
├── file-operations.md
├── help.md
├── icons.md
├── index.md
├── input.md
├── install-br.md
├── install.md
├── js/
│ ├── broot.js
│ └── tab-langs.js
├── launch.md
├── modal.md
├── navigation.md
├── panels.md
├── remote.md
├── skins.md
├── staging-area.md
├── trash.md
├── tree_view.md
├── tricks.md
└── verbs.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
github: [Canop]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'bug'
assignees: ''
---
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'enhancement'
assignees: ''
---
================================================
FILE: .github/workflows/tests.yml
================================================
name: Tests
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
================================================
FILE: .gitignore
================================================
.bacon-locations
.ignore
/*-deploy.sh
/d.sh
/.config
/bench.sh
/broot_*.zip
/build
/compile.sh
/fix-win-toolchain.sh
/glassbench_*.db
/press
/releases
/screens
/target
/termux-deploy.sh
/trav
/website/site
deploy.sh
dev.log
.DS_Store
/zigbuild
/.intentionally-empty-file.o
================================================
FILE: CHANGELOG.md
================================================
### v1.56.1 - 2026-03-20
<a name="v1.56.1"></a>
- fix a typo in a verb in default conf
### v1.56.0 - 2026-03-20
<a name="v1.56.0"></a>
- `impacted_panel` verb argument, allows the effect of a verb to be on another panel (eg to scroll the preview panel without removing the focus from the tree) - Fix #1119
- `focus_panel_left` and `focus_panel_right` internals - Fix #1115
#### Major Feature: merge staged files to issue a single command
When a verb argument has a `space-separated` or `comma-separated` flag, a single external command is run even when the selection is multiple - Fix #465
The default `verbs.json` file has an example of a `zip` verb building an archive from all staged files.
### v1.55.0 - 2026-02-09
<a name="v1.55.0"></a>
- activate Kitty Graphics Protocol to display Hi-Res images in iTerm2 - Thanks @kidonng
- Tokyo Night skin ( https://github.com/Canop/broot/blob/main/resources/default-conf/skins/tokyo-night.hjson ) - Thanks @hb-hello
- matches related to several name patterns joined with and/or in a composite pattern are merged instead of having just the first one shown - Thanks @Tomaz-Vieira
- nushell integration: switch $nu.temp-path to $nu.temp-dir - #1116 - Thanks @stevenxxiu
### v1.54.0 - 2025-12-03
<a name="v1.54.0"></a>
- fix crash on rendering B&W images with Kitty image protocol
- don't match directories when a composite pattern has a content pattern, even negated (eg `/js$/&!c/;`: it's clear the user wants to match js *files* not containing a semicolon)
### v1.53.0 - 2025-11-08
<a name="v1.53.0"></a>
- fix some cases of the verb not removed from the input on execution (with a risk of accidental double execution)
- add the `:filesystems` (short `:fs`) verb and state on windows (it was already present on linux and mac).
- improve the generation of preview pattern from a file tree pattern (i.e. going from `/java$/&c/test` to `/test` on opening a matching file in preview). With this change broot avoids filtering the preview when it shouldn't (eg when you searched `/java$/|c/test`) - See #1097
- display files whose name isn't valid UTF-8 (they were previously ignored)
- android executable is back to the official binary archive
### v1.52.0 - 2025-11-01
<a name="v1.52.0"></a>
- `auto_open_staging_area` preference - Fix #1090
- search content of file target of symlink - Fix #1081
- fix nushell script (swapped logic for --listen and --listen-auto) - Thanks @cderwin
- return non-zero exit code on error - Thanks @Sambhram1
### v1.51.0 - 2025-10-05
<a name="v1.51.0"></a>
- improved image rendering (both speed by using the zune-image library, and quality with bilinear interpolation)
- fix compilation broken by 1.50.0 on Android- thanks @dead10ck
- `--listen-auto` listens for commands on a random linux socket - Fix #1064
- when auto-completing, `back-tab` cycles in reverse order - Fix #1071
### v1.50.0 - 2025-09-25
<a name="v1.50.0"></a>
- big text files now only partially loaded for initial display, remaining being done in background - Fix #1052
- better support of kitty image protocol over tmux, ssh or unknown terminals, with `kitty_graphics_display` option and `$TMUX_NEST_COUNT` env variable - see PR #1034 - Thanks @stevenxxiu
- "trash" compilation feature removed: trash related features are built depending on the platform
- build chain revised. Future official releases should include a Mac binary
- fix crash on double unstage of last entry in stage panel - fix #1057
- fallback to transparent background for text preview when the skin specifies nothing - Thanks @letmeiiiin
### v1.49.1 - 2025-09-15
<a name="v1.49.1"></a>
- watching made much more efficient (some deep changes won't lead to an automatic refresh which only impacts dir size)
- the name given with `--listen` is now provided to verb as the `{server-name}` verb argument
### v1.49.0 - 2025-09-13
<a name="v1.49.0"></a>
- `:toggle_watch` internal, with `:watch` shortcut, bound by default to `alt-w`. When watching is active, the tree is refreshed whenever any directory/file, even deep, is changed - Fix #730
- fallback to a transparent background for images in image preview instead of a specific color - Fix #1040 - Thanks @letmeiiiin
- fix --server socket written at a non writable location on Android/termux - Fix #1045
### v1.48.0 - 2025-08-29
<a name="v1.48.0"></a>
- Support for the 'Cmd' modifier in key shortcuts (the key is called 'Command', 'Super', 'Apple', 'Windows', depending on systems and users)
- "filesystem" features have been made available for Mac:
- the `:fs` screen, listing filesystems
- filesystem free space & total space displayed when size computations are requested
- device id displayed with `:toggle_device_id` (shortcut: "dev")
- Fix `.config/git/ignore` not being loaded on Mac - Fix #1032 - Thanks @9999years
### v1.47.0 - 2025-06-26
<a name="v1.47.0"></a>
- text files with control chars were previously previewed as binary. They're now displayed as text with some '�' when needed - Fix #977
- files with ANSI escape codes (such as the one you would obtain with `dysk --color yes > ansi.txt` can now be previewed with `:preview_tty` - Fix #1019
- first line of the tree is cropped (right aligned) when it doesn't fit
### v1.46.5 - 2025-05-30
<a name="v1.46.5"></a>
- fix `:focus some/path` called in a command sequence always opening new panel - Fix #1014
### v1.46.4 - 2025-05-14
<a name="v1.46.4"></a>
- support for keys F13 to F24 (if your system supports it)
- fix `:focus` with argument given in configuration going up one level when root is selected - Fix #1009
- fix `--max-depth` ignored when in `default_flags` - Fix #1013
### v1.46.3 - 2025-04-24
<a name="v1.46.3"></a>
- fix broot waiting for events on internals like `:quit` - Fix #1006
### v1.46.2 - 2025-04-21
<a name="v1.46.2"></a>
- fix broken nushell script (`--max-depth` again) - Thanks @sandyspiers & @amitkot
### v1.46.1 - 2025-04-20
<a name="v1.46.1"></a>
- fix nushell script broken by new `--max-depth` argument - Thanks @lizclipse
### v1.46.0 - 2025-04-16
<a name="v1.46.0"></a>
- `:set_max_depth <number>` and `:unset_max_depth` - Fix #843 - Thanks @mcky
- clear cache when files are deleted in staging area - Fix #999
- recompute preview transform when source file changed since last preview
### v1.45.1 - 2025-03-25
<a name="v1.45.1"></a>
- Fix compilation failing without `--locked` - Fix #995
### v1.45.0 - 2025-03-17
<a name="v1.45.0"></a>
- Fix total search impossible to redo after refresh - Fix #986
- With `refresh_after: false`, a verb configuration can request that the tree isn't refreshed after its execution - Fix #987
### v1.44.7 - 2025-02-12
<a name="v1.44.7"></a>
- fix bad regex match position - Fix #979
- update resvg dependency to 0.44 - Thanks @NoisyCoil
- on `--server`, remove the existing socket if it already exists - Thanks @VasilisManol
### v1.44.6 - 2025-01-12
<a name="v1.44.6"></a>
-fix .ignore files ignored when not in a git repository - Fix #970
-update git2 dependency to 0.20 - Fix #974
### v1.44.5 - 2025-01-02
<a name="v1.44.5"></a>
- no real change (just reverting a crate name to ease some packaging)
### v1.44.4 - 2025-01-01
<a name="v1.44.4"></a>
- fix panic in preview on syntax coloring (when a sublime syntax isn't compatible with the regex engine) - Fix #967
### v1.44.3 - 2024-12-26
<a name="v1.44.3"></a>
- removed default bindings on left and right keys. You may add them back by adding this to your verbs.hjson:
```Hjson
{ key: "left", internal: "back" }
{ key: "right", internal: "open_stay" }
```
- rustc minimal version changed from 1.76 to 1.79, which allows better performing image rendering
- remove dependency to onig, to allow compatibility with gcc 15 - Fix #956
### v1.44.2 - 2024-10-22
<a name="v1.44.2"></a>
- temp files created for kitty now erased on quitting or when too many of them have been written
- no longer panics when launched with BROOT_LOG=debug but the broot.log file can't be created - Fix #951
- fix user and group names displayed as "????" when coming from openldap - Fix #953
### v1.44.1 - 2024-10-16
<a name="v1.44.1"></a>
- fix wrong position of IMEs (input method editors) popup - thanks @xubaiwang - See #948
- improve querying the terminal for capabilities (prevent some escape chars from leaking)
### v1.44.0 - 2024-09-07
<a name="v1.44.0"></a>
- `:focus_staging_area_no_open` internal, focus the staging area if it's already open, does nothing in other case - Fix #926
- fix some composite patterns with several operators and no parenthesis
### v1.43.0 - 2024-08-30
<a name="v1.43.0"></a>
- 'Size' and 'Deletion date' columns in trash screen. This screen now supports the `:toggle_date`, `:toggle_size`, `:sort_by_date`, and `:sort_by_size` internals.
- new `:show` internal make the provided path visible and selected, adding lines to the tree if necessary, does nothing if the provided path is not a descendant of the current tree root (this part may change depending on feedback) - Fix #936
### v1.42.0 - 2024-08-18
<a name="v1.42.0"></a>
- support of `.ignore` files with the same syntax than `.gitignore`. They have priority over `.gitignore` so that a personal `.ignore` file can override a shared `.gitignore` - See https://dystroy.org/broot/tree_view/#hidden-ignored-files - Fix #613
- `:toggle_ignore` internal, identical to `:toggle_git_ignore`, but with a clearer name so should be preferred
- the `panels` verb filter now works in most contexts (it was previously only checked on key events)
- many dependencies updated
### v1.41.1 - 2024-08-04
<a name="v1.41.1"></a>
- allow compilation with rustc 1.76 - Fix #925
### v1.41.0 - 2024-08-04
<a name="v1.41.0"></a>
#### Major Feature: :search_again
ctrl-s now triggers `:search_again` which either
- brings back the last used search pattern, when no filtering pattern is active
- does a "total search" if a filtering pattern is active and the search wasn't complete
#### Major Feature: internals changing panel widths
* `set_panel_width`, taking as parameter the index of the panel and the desired width
* `move_panel_divider`, taking as parameter the index of the divider and the desired change
`ctrl-<` is bound by default to `:move_panel_divider 0 -1`
`ctrl->` is bound by default to `:move_panel_divider 0 1`
See http://dystroy.org/broot/panels/#resize-panels
#### Minor Changes:
- when git file infos are shown, and git ignored files aren't hidden, those files are flagged with a 'I' - Fix #916
- Remove .bak extension from content search exclusion list - Fix #915
- Update nerdfont and vscode icons - Thanks @jpaju
- `{initial-root}` verb argument
### v1.40.0 - 2024-07-16
<a name="v1.40.0"></a>
#### Major Feature: preview transformers
You can now define preview transformers to be applied before preview.
They allow for example previewing PDF or Office files, or beautifying JSON files.
Edit the `preview_transformers` array in your conf.hjson file.
See https://dystroy.org/broot/conf_file/#preview
#### Fixes
- fix search on root - Fix #904
- fix some verb cycling problems - Fix #902
### v1.39.2 - 2024-07-08
<a name="v1.39.2"></a>
- fix UNC paths being displayed on Windows (regression at 1.39.1) - Fix #812 (again)
### v1.39.1 - 2024-07-05
<a name="v1.39.1"></a>
- fix high-resolution (kitty protocole) image broken in release mode - Fix #885
- canonicalize paths when focusing them (mostly useful when following links)
- a few minor internal optimizations
### v1.39.0 - 2024-05-31
<a name="v1.39.0"></a>
- `:open_trash` shows the content of the trash. Other new internals & verbs: `:delete_trashed_file`, `:restore_trashed_file`, `:purge_trash` - Fix #855
- it's now possible to remove a default keybinding by defining a verb with no execution - Fix #632
- fix build on Android - thanks @dead10ck
### v1.38.0 - 2024-05-04
<a name="v1.38.0"></a>
- `-{flags}` verb lets you change the state the same way you do it at start, eg `:-sd` to show sizes and dates
- calling `:focus` on the tree root now goes up the tree (experimental)
### v1.37.0 - 2024-04-28
<a name="v1.37.0"></a>
- optionally display lines surrounding a matching line in preview, with `lines_before_match_in_preview` and `lines_after_match_in_preview` - Fix #756
- filtered preview: jump between matches with `:next_match` (default: `tab`) and `:previous_match` (default `shift-tab`)
- display setuid, setgid and sticky bits in permission - Fix #863, Thanks @Jisu-Woniu
### v1.36.1 - 2024-03-11
<a name="v1.36.1"></a>
- fix ANSI code leaking to the input on start on Mac - Fix #854
### v1.36.0 - 2024-03-01
<a name="v1.36.0"></a>
- releases at github should be more `cargo binstall` friendly - Thanks @FrancescElies
- improved `--help`
- new `:stage_all_directories` internal - Fix #844
- `:print_tree` is one line shorter, so as to let the original shell command visible without scroll
- fix and document the "kitty-csi-check" optional feature which can be enabled at compilation
### v1.35.0 - 2024-03-01
<a name="v1.35.0"></a>
- Nerdfont icon theme - Fix #333 - Thanks @JonasLeonhard, @cho-m, @texastoland, @asdf8dfafjk and others
### v1.34.0 - 2024-02-24
<a name="v1.34.0"></a>
- new `--verb-output` launch argument, dedicated to the new `:clear_output` and `:write_output` internals - Fix #825
- verb sequences (based on `cmd`) can take arguments from the verb invocation
- don't fail launch in case of bad verb configuration, more helpful error message in such case
- faster kitty image rendering by default - Fix #789
- `{file-git-relative}` verb argument - Thanks @VasilisManol
- modify nushell function import: `use` instead of `source` - Thanks @texastoland and @FrancescElies
- fix some resizing and flickering problems on Windows (appeared with 1.33.0) - Fix #840
- write `installed` flag file on `--install` - Fix #837
### v1.33.1 - 2024-02-03
<a name="v1.33.1"></a>
- fix the release's version
### v1.33.0 - 2024-02-03
<a name="v1.33.0"></a>
- on terminals supporting the kitty keyboard protocol, you can now define and use key combinations like `space-n`, `ctrl-alt-a-b`, `shift-space-c`, `ctrl-enter`, etc.
- new syntax for special paths - Fix #687, #669
### v1.32.0 - 2024-01-02
<a name="v1.32.0"></a>
- with "modal" enabled, `initial_mode` setting lets you choose whether to start in `input` mode or `command` mode (default) - Fix #708
### v1.31.0 - 2023-12-30
<a name="v1.31.0"></a>
- keep broot's work dir synchronized with the root of the current panel. Can be disabled in conf with `update_work_dir: false` - Fix #813
- fix `:trash` internal not working on staged files
### v1.30.2 - 2023-12-23
<a name="v1.30.2"></a>
- don't canonicalize paths on windows on new panels - Fix #809
### v1.30.1 - 2023-12-03
<a name="v1.30.1"></a>
- nushell script: replace the deprecated `def-env` with `def --env` - Thanks @melMass
### v1.30.0 - 2023-12-03
<a name="v1.30.0"></a>
- `:trash` internal - I'd like feedback on this one - Fix #799
- solve symlinks on `:panel_right` to display the dest path and the dest filesystem - Fix #804
- `:panel_right` on a directory now removes the filter
- more '~' expansion in verb arguments
### v1.29.0 - 2023-11-22
<a name="v1.29.0"></a>
- `terminal_title` option in configuration - Fix #794
- `:toggle_tree` internal and `--tree` and `--no-tree` launch flags (experimental, feedback welcome) - Fix #670 - Thanks @eldad
- `{git-name}` verb argument
### v1.28.1 - 2023-11-13
<a name="v1.28.1"></a>
- fix a regression in handling of rooted gitignore patterns - Fix #795
### v1.28.0 - 2023-11-12
<a name="v1.28.0"></a>
- left and right keys bound to verbs can be used when the input isn't empty, if they would have no effect to the input
- default_flags now accept long parameters, including --cmd - Fix #790
- gitignore: fix relative patterns with several tokens - Fix #782
### v1.27.0 - 2023-10-29
<a name="v1.27.0"></a>
- the `apply_to` verb filter accepts new values: `text_file` and `binary_file`. Broot users editing files in their terminal (vi, emacs, etc.) should configure broot to open their text editor on `enter`: see https://dystroy.org/broot/tricks/#change-standard-file-opening
- small breaking change: `:stage_all_files` now stages also symlinks - Fix #606
- new `{git-root}` verb argument - Fix 760 - Thanks @9999years
- fix a freeze on windows when launching a search with `-c` - Thanks @3tilley
- fix automatic preview pattern not escaping spaces and colons - Fix #778
### v1.26.1 - 2023-09-30
<a name="v1.26.1"></a>
- improved status line
### v1.26.0 - 2023-09-27
<a name="v1.26.0"></a>
- when given a path to a file at launch, broot now selects it in the tree and opens it in preview - Fix #729
- allow rebinding of the 'tab' and 'esc' keys with the `:next_match` and `:escape` internals - Fix #740
- fix fuzzy patterns not case insensitive on some characters - Fix #746
### v1.25.2 - 2023-09-20
<a name="v1.25.2"></a>
- optional BROOT_CONFIG_DIR env var - the site now shows all env variables: https://dystroy.org/broot/launch/#environment-variables
- `--only-folders` now longer allows symlinks to non directories - Fix #742
### v1.25.1 - 2023-09-03
<a name="v1.25.1"></a>
- fix shift-char in input extending the selection - Fix #733
### v1.25.0 - 2023-08-19
<a name="v1.25.0"></a>
- allow unescaped '::' in pattern position, experimental (might be removed)
- allow hexa color notation in skins (eg `#fb0` or `#FFD700`)
### v1.24.2 - 2023-07-18
<a name="v1.24.2"></a>
- fix a case of br script installation failing on Windows/Powershell
### v1.24.1 - 2023-07-16
<a name="v1.24.1"></a>
- slightly better `--help`
### v1.24.0 - 2023-07-16
<a name="v1.24.0"></a>
- installer for the powershell br script on windows - Thanks @felixkroemer
- new `--help`, more compact
- allow extra spaces before the verb
- updated man page, now distributed in releases as /man/broot.1
### v1.23.0 - 2023-06-16
<a name="v1.23.0"></a>
- prettier, faster SVG rendering
- reorganize default conf files, with a "skins" subfolder
### v1.22.1 - 2023-05-23
<a name="v1.22.1"></a>
- allow dir computations in /run/media - Fix #704 - Thanks @jinliu
- fix included solarized-dark.hjson skin file
### v1.22.0 - 2023-05-18
<a name="v1.22.0"></a>
- define disk space availability colors in skin - Fix #705
- left elision of path when path/name doesn't fit - Fix #700
### v1.21.3 - 2023-05-02
<a name="v1.21.3"></a>
- `switch_terminal` verb parameter - Thanks @stevenxxiu
- on Windows, when using `-c`, clear events after delay - Fix #699
### v1.21.2 - 2023-03-30
<a name="v1.21.2"></a>
- update dependencies because of some yanked ones
### v1.21.1 - 2023-03-23
<a name="v1.21.1"></a>
- resolve `~` in special paths - Fix #685
- better clipboard support on MacOS - Thanks @bryan824
### v1.21.0 - 2023-03-17
<a name="v1.21.0"></a>
- better nushell integration (no need to quote arguments anymore, fix path extension broken by new version of nushell) - Thanks @stevenxxiu
- don't show modal-only keys in help page when modal mode isn't enabled
### v1.20.2 - 2023-02-19
<a name="v1.20.2"></a>
- fix debug statement printed in some cases (mostly on Windows) - Fix #672
### v1.20.1 - 2023-02-08
<a name="v1.20.1"></a>
- fix status line not always displaying the hint of the input's verb - Fix #665
### v1.20.0 - 2023-02-03
<a name="v1.20.0"></a>
- unless overridden, `/proc` is now `no-enter`, which solves freezes when searching on `/` in some system - See #639
- SVG files now rendered as images in the preview panel
- new version of the nushell function. You should be prompted for an update - Fix #656 - Thanks @FrancescElies and @mediumrarez
- `no-hide` special paths - Thanks @Avlllo
- preview can now be opened on directories, showing their first level - Fix #405
- better determine whether the terminal is white or dark in some (probably rare) cases - See https://github.com/Canop/terminal-light/issues/2
### v1.19.0 - 2023-01-03
<a name="v1.19.0"></a>
- Nushell support - Fix #375 - Thanks @FrancescElies, @mediumrarez, and issue contributors
### v1.18.0 - 2022-12-21
<a name="v1.18.0"></a>
- Hjson configuration file can now omit outside braces (it's "braceless Hjson"), making it much cleaner
- allow opening the help screen with just the `?` key on Windows (as for other systems)
- fix a crash in some cases of input being cleaned with a selection - Fix #643
### v1.17.1 - 2022-12-15
<a name="v1.17.1"></a>
- Windows specific implementation of :cpp
### v1.17.0 - 2022-12-09
<a name="v1.17.0"></a>
- max file size for content search now configurable (default is now 10MB) - Fix #626
- file summing now avoids /proc and /run
- default configuration sets /media as not entered by default (can be commented out, of course)
### v1.16.2 - 2022-11-04
<a name="v1.16.2"></a>
- you can restrict the panels in which verbs apply with the verb configuration `panels` parameter
- fix rm on Windows behaving "recursively" (it was `cmd /c del /Q /S {file}`) - Fix #627
### v1.16.1 - 2022-10-13
<a name="v1.16.1"></a>
- fix ctrl-left not usable anymore in filtered preview to remove filtering
### v1.16.0 - 2022-10-07
<a name="v1.16.0"></a>
- status messages now displayed on toggling (for example showing hidden files)
- upgrade terminal-light to 1.0.1 for better recognition of background color on high precision color terminals
- in default configuration, ctrl-left never opens a panel to the left, as I think this was most often unwanted (one too many hit on cltr-left). It's possible to get the old behavior by binding ctrl-left to `:panel_left` instead of the new `:panel_left_no_open` internal.
- New escaping rules let you skip many `\`, especially when building regexes - See new rules at https://dystroy.org/broot/input/#escaping - Fix #592
### v1.15.0 - 2022-09-24
<a name="v1.15.0"></a>
- with `show_matching_characters_on_path_searches: false`, it's possible to show only file names even when searching paths - Fix #490
- `--sort-by-type-dirs-first` and `--sort-by-type-dirs-last` - Fix #602
- modal: in input mode, uppercase letters don't trigger verbs anymore - Fix #604
- fix `:line_down_no_cycle` which was cycling - Fix #603
- selecting lines up or down with the mouse wheel now wraps in both direction (ie going up when your on top brings you to the bottom, and vice-versa)
- `:select` internal, which can be used to select a visible file when given a path as argument. Experimental
### v1.14.3 - 2022-09-12
<a name="v1.14.3"></a>
- fix crash with token searches - Fix #504 - Thanks @FedericoStra
### v1.14.2 - 2022-07-11
<a name="v1.14.2"></a>
- Terminal background luma determination now works on all tested unixes, including MacOS - Fix #575
- Allow `:focus` based verbs to take a pattern - Fix #389
### v1.14.1 - 2022-07-06
<a name="v1.14.1"></a>
Due to a technical problem, background color based skin selection is disabled on non linux systems.
### v1.14.0 - 2022-07-05
<a name="v1.14.0"></a>
#### Major Feature: imports
A configuration file can now import one or several other ones.
An import can have a condition on the terminal's background color, which makes it possible to import either a dark or a light theme depending on the current terminal settings.
You're also encouraged to split your configuration in several files, as is now done for the default configuration.
### Minor changes
- fix `--cmd` not working (it was accidentally renamed in `--commands`, `-c` was still working) - Fix #570
### v1.13.3 - 2022-06-19
<a name="v1.13.2"></a>
- fix `default_flags` in conf not working anymore - Fix #566
### v1.13.2 - 2022-06-18
<a name="v1.13.2"></a>
- advice to hit alt-i and|or alt-h when no file is visible - Fix #556
- examples on search modes in help screen - Fix #559
- list of syntactic themes in default conf
- the --file-export-path launch argument which was deprecated since broot 1.6 has been removed (redirect the output of broot instead)
- better built-in verbs for Windows - Thanks @Spacelord-XaN
- take the .git/info/exclude file into account for ignoring - Thanks @refi64
Note: The released archive doesn't include an Android build - see https://github.com/Canop/broot/issues/565
### v1.13.1 - 2022-05-30
<a name="v1.13.1"></a>
- fix alt-enter failing to cd to directory
### v1.13.0 - 2022-05-29
<a name="v1.13.0"></a>
- close the staging area when it's emptied with a verb (e.g. on `:rm`)
- format files counts with thousands separator - Fix #549
- try verbs in order allowing some with filters before one without - Fix #552
### v1.12.0 - 2022-05-05
<a name="v1.12.0"></a>
- `:stage_all_files` internal, adding to the staging area all the files verifying the current pattern. Mapped by default to ctrl-a
### v1.11.1 - 2022-04-04
<a name="v1.11.1"></a>
- fix broot not being usable while an image is being opened by hitting enter on linux - Fix #530
### v1.11.0 - 2022-04-02
<a name="v1.11.0"></a>
- sorting by type, with 3 new internals: `:sort_by_type_dirs_first`, `:sort_by_type_dirs_last`, and `:sort_by_type`. The last one lets you toggle between no sort, sorting by type with directories first, and sorting by type with directories last. - Fix #467
### v1.10.0 - 2022-03-29
<a name="v1.10.0"></a>
- verb filtering on file extension - Fix #508
- don't quit on tiny terminals - Fix #511
- fix the `capture_mouse` config item which was described in documentation but not usable (the non documented `disable_mouse_capture` argument was working and is kept for compatibility)
### v1.9.4 - 2022-03-07
<a name="v1.9.4"></a>
- don't query size of remote filesystems anymore. This fixes some 10 seconds hangs in some cases (e.g. filesystem screen) when a remote filesystem is unreachable
### v1.9.3 - 2022-02-15
<a name="v1.9.3"></a>
- keep same line visible in preview when resizing
- `:previous_dir` and `:next_dir` internals - Fix #502
### v1.9.2 - 2022-01-23
<a name="v1.9.2"></a>
- instead of crashing on syntect panic in code preview, fall back to unstyled text - Fix #485
- fix files in worktree missing from git statuses - Fix #428
### v1.9.1 - 2022-01-07
<a name="v1.9.1"></a>
- fix a few problems of speed, flickering and uncleaned background with high resolution image preview
### v1.9.0 - 2022-01-06
<a name="v1.9.0"></a>
- total search (launched with ctrl-s) shows all matches - This is experimental and might be reversed, opinions welcome
- kitty graphics protocol used for high definition image rendering on recent enough versions of WezTerm - Fix #473
- fix syntaxic preview of Python files broken by comments - Fix #477
- home key bound to :input_go_to_start, end key bound to :input_go_to_end - Fix #475
### v1.8.1 - 2021-12-29
<a name="v1.8.1"></a>
- fix regex pattern automatically built from content pattern when going from a tree search to a file preview isn't escaped - Fix #472
<a name="v1.8.0"></a>
### v1.8.0 - 2021-12-26
- alt-i bound to toggle_git_ignore
- alt-h bound to toggle_hidden
- text previews switches to hexa when there are not printable chars (eg escape sequences)
<a name="v1.7.5"></a>
### v1.7.5 - 2021-12-16
- Make the "clipboard" feature non default again, as it proves to make compilation harder on some platform. I still distribute executables with this feature and you can still try the compilation with `cargo install broot --features "clipboard"`
<a name="v1.7.4"></a>
### v1.7.4 - 2021-12-01
- Fix 1 or 2 characters of the right ASCII column in hex view sometimes lost
<a name="v1.7.3"></a>
### v1.7.3 - 2021-11-19
- Fix rendering artefacts on Windows, like a duplicate input line
<a name="v1.7.2"></a>
### v1.7.2 - 2021-11-18
- include more syntaxes for preview of code files (using the list from the bat project) - Fix #464
<a name="v1.7.1"></a>
### v1.7.1 - 2021-11-07
- fix clipboard filled with dummy value on launch on X11
<a name="v1.7.0"></a>
### v1.7.0 - 2021-10-30
- "clipboard" feature now default (can still be removed at compilation with `--no-default-features`)
- fix clipboard features not working on some recent linux distributions
- you can now select part of the input with shift arrows or by dragging the mouse cursor
- new internals: input_selection_cut and input_selection_copy (not bound by default)
<a name="v1.6.6"></a>
### v1.6.6 - 2021-10-22
- make it possible to rebind left and right arrow keys without breaking usage in input - Fix #438
<a name="v1.6.5"></a>
### v1.6.5 - 2021-10-01
- improve decision on whether to trim root - Fix #434
- better make the tree's selected line visible
<a name="v1.6.4"></a>
### v1.6.4 - 2021-10-01
- better scrolling behaviors - Fix #419
- fix special-path::Enter for symlinks - Fix #448
<a name="v1.6.3"></a>
### v1.6.3 - 2021-08-02
- hjson: fix bad parsing on tab before colon
- now checks all args of externals are set, doesn't use the raw {arg}
<a name="v1.6.2"></a>
### v1.6.2 - 2021-07-31
- broot reads now both the TERM and TERMINAL env variables to try determine whether the terminal is Kitty
- using `:toggle_device_id`, you can display the device id of files (unix only)
- fix a few problems with filesystems analysis by upgrading lfs-core to 0.4.2 - Fix #420
- a few minor rendering improvements
<a name="v1.6.1"></a>
### v1.6.1 - 2021-06-23
- fix compilation on freeBSD
- fix `:filesystems` view not listing disks whose mount point has a space character
- fix panic on searching `cr/.*` if a file starts with an empty line - Fix #406
- fix preview of linux pseudo-files
- identify "RAM" and "encrypted" disks in `:filesystems` view
<a name="v1.6.0"></a>
### v1.6.0 - 2021-06-16
- `{root}` argument (current tree root) can be used in verb patterns - Fix #395
- `working_dir` verb attribute - Fix #396
- client-server mode fixed, no longer feature-gated (but still only available on unix like systems)
- broot tries to keep same selection on option changes
- `:tree_up` and `:tree_down` internals, mapped to ctrl-up and ctrl-down - Fix #399
- better handling of auto color mode: two separate behaviors: for app running and for export when leaving - Fix #397
- remove the deprecated `--no-style` launch argument (use `--color no` instead)
- deprecate the `--out` argument (redirecting the output is the recommended solution)
- fix a few minor bugs
<a name="v1.5.1"></a>
### v1.5.1 - 2021-06-03
- fixed a few problems with the `:del_word_right` internal
<a name="v1.5.0"></a>
### v1.5.0 - 2021-06-02
- new `auto_exec` verb property: a non-auto_exec verb isn't executed directly on a keyboard shortcut but fills the input so that it may be edited before execution on enter key
- add support for backtab key (by default it's bound to :previous_match)
- `:rename` built-in verb, best used with its keyboard shortcut F2
- new standard verb arguments: `{file-stem}`, `{file-extension}`, and `{file-dot-extension}`,
- new `:toggle_second_tree` internal - Fix #388
- total size of staging area computed and displayed if sizes displayed elsewhere
- new `file_sum_threads_count` conf property to define the number of threads used for file summing (size, count, last modified). The goal is to more easily search what's the best value depending on the cpu, OS and disk type/speed
- `:input_clear` internal - Fix #24
<a name="v1.4.0"></a>
### v1.4.0 - 2021-05-11
- the default (non prefixed) search is now "path fuzzy" instead of "name fuzzy". You can still change the default mode and mode bindings in the config. This was done after a survey in chat.
- new "unordered tokens" search type: `t/ab,cd` searches for tokens "ab" and "cd" in any order and case insensitive in the subpath, matches for example `src/dcd/Bab.rs` - Fix #378
- fix search modes configuration removing all default mappings - Fix #383
- conf / quit_on_last_cancel to allow quitting with esc when there's nothing to cancel - Fix #380
- new `parent` skin entry for the part of the sub-path before the file name (visible when you search on subpath)
- when a content search has been done, opening a file with a compatible command (like the standard `:edit`) opens on the first line with a match
<a name="v1.3.1"></a>
### v1.3.1 - 2021-04-30
- fix `:previous_match` not jumping over indirect matches - Fix #377
- fix typing a prefixed pattern then emptying it while keeping the prefix doesn't remove filtering - Fix #379
- fix shifted matching chars highlighting with regex patterns when showing icons - Fix #376
<a name="v1.3.0"></a>
### v1.3.0 - 2021-04-28
#### Minor changes:
- modal mode: revert to command mode on command execution - Fix #372
- modal mode: when in command mode, '/' only enters input mode and is never appended to the input
- better handle failing external programs when not leaving broot
#### Major feature: staging area
You may add files to the staging area then apply a command on all of them. This new feature is described [here](https://dystroy.org/broot/staging-area).
Several verbs have been added. Type "stag" in help to see them and their keyboard shortcuts.
<a name="v1.2.10"></a>
### v1.2.10 - 2021-04-03
- fix shift based key shortcuts - Fix #363
- check there's another panel before executing verbs with other-panel argument - Fix #366
<a name="v1.2.9"></a>
### v1.2.9 - 2021-03-18
- fix panic on `:input_del_word_left` - Fix #361
- remove diacritics and normalize unicode from input on fuzzy search (an unnormalized string with unwanted diacritics most often happen when you paste a string in the input)
<a name="v1.2.8"></a>
### v1.2.8 - 2021-03-11
- it's possible to define several key shortcuts for a verb, using the "keys" property
- improvements of fuzzy matching
<a name="v1.2.7"></a>
### v1.2.7 - 2021-02-28
- don't ask again for installation if no sourcing file has been found
<a name="v1.2.6"></a>
### v1.2.6 - 2021-02-27
- clipboard features (copy and paste verbs) now work on Android/Termux (needs the Termux API to be installed)
- fix a compilation problem on non gnu windows - Thanks @Stargateur
- obey '--color no' even in standard application mode. In that case, automatically enable selection marks or you wouldn't know what line is selected
<a name="v1.2.5"></a>
### v1.2.5 - 2021-02-25
- fix style characters being written in `--no-style` mode - Fix #346
- replace `--no-style` with `--color` taking `yes`, `no` or `auto`, with detection of output being piped in `auto` mode (default). `--no-style` is still usable but it's not documented anymore - Fix #347
- fix wrong version number written in log file - Fix #349
- by default the number of panels is now limited to 2 (can be changed in conf with `max_panels_count`). The goal is to improve the global ergonomics for the most common (universal?) use case - Fix #345
<a name="v1.2.4"></a>
### v1.2.4 - 2021-02-14
- :line_down_no_cycle and :line_up_nocycle. They may be mapped instead of :line_up and :line_down when you don't want to cycle (ie arrive on top when you go down past the end of the tree/list) - Fix #344
- fix selected line number rendering in text preview
<a name="v1.2.3"></a>
### v1.2.3 - 2021-02-06
- special paths in "no-enter" or "hide" aren't counted when summing sizes or dates. It's a compromise: it makes all sums a little slower, especially if you have a lot of special paths or complex ones, but it allows skipping over the very slow disks and thus makes some cases much faster - Fix #331
- br fish shell function uses shell completion of broot
- tree height in `:pt` now applies even when there are more root items (thus truncating the tree) - Fix #341
- fix the F5 and F6 shortcuts (copy and move between panels) in the default configuration
<a name="v1.2.1"></a>
### v1.2.1 - 2021-01-27
- allow dashes instead of underscores in conf property names. This fixes a regression as "special-paths", "ext-colors" and "search-modes" were defined with a dash up to version 1.0.7. Now both spellings are OK - Fix #330
- fix some problems with paths containing spaces (regression since 1.1.11)- Fix #329
<a name="v1.2.0"></a>
### v1.2.0 - 2021-01-14
- experimental "modal mode" (or "vim mode") in broot. See https://dystroy.org/broot/vim_mode/
- fix mouse staying captured during external app execution - Fix #325
<a name="v1.1.11"></a>
### v1.1.11 - 2021-01-07
- fix handling of rules starting with '/' in the global gitignore - Fix #321
- alt-c now mapped to the new :copy_line verb which, when in tree, puts the selected path in the clipboard and, when in text preview, puts the selected text line in the clipboard - Fix #322
- it's possible to define verb execution patterns as arrays instead of simple strings, to avoid having to escape quotes - Fix #319
<a name="v1.1.10"></a>
### v1.1.10 - 2020-12-24
broot now accepts both TOML and Hjson files for configuration. Default is Hjson. I explain the change [here](https://dystroy.org/blog/hjson-in-broot/)
<a name="v1.0.9"></a>
### v1.0.9 - 2020-12-19
- fix handling on quotes in configured verbs - Fix #316
<a name="v1.0.8"></a>
### v1.0.8 - 2020-12-01
- when sizes are displayed (eg on `br -s`), show size of root line and root filesystem info
- modified size cache management makes some size computations faster
- sizes (and dates and counts) are progressively displayed
<a name="v1.0.7"></a>
### v1.0.7 - 2020-11-27
* :previous_same_depth and :next_same_depth internals
* in kitty terminal, image preview is high definition
<a name="v1.0.6"></a>
### v1.0.6 - 2020-11-19
* optional icons, thanks to @asdf8dfafjk (@fiAtcBr on Miaou) - See https://dystroy.org/broot/icons
* dev.log renamed into broot.log
* `:line_up` and `:line_down` accept an optional count as argument - Fix #301
<a name="v1.0.5"></a>
### v1.0.5 - 2020-11-05
* in case of IO error when previewing a file, display the error instead of quitting
* fix regression related to display of texts with characters taking several columns
* preview now supports opening system files with size 0 (eg /proc "files")
<a name="v1.0.4"></a>
### v1.0.4 - 2020-10-22
* don't use absolute paths for built-in verbs
* fix freeze on circular symlink chains
* `:filesystems` (alias `:fs`) display all mounted filesystems in a filtrable view. You can enter to browse at the mount point (unix only for now)
* `:toggle_root_fs` (alias `:rfs`) toogles showing information on the filesystem of the current directory
* filesystem information (mainly size and usage) related to the current filesystem displayed in whale-spotting mode
<a name="v1.0.3"></a>
### v1.0.3 - 2020-10-07
* change the syntax of cols_order in conf
* fix left key moving the cursor to start of input (instead of just one char left)
<a name="v1.0.2"></a>
### v1.0.2 - 2020-10-04
* `cr/` patterns search on file content with regular expressions
* search modes and their prefixes listed in help
<a name="v1.0.1"></a>
### v1.0.1 - 2020-09-30
* don't apply .gitignore files (including the global one) when not in a git repository - Fix #274
* the "clipboard" optional feature adds:
* the `:copy_path` verb which copies the selected path to the clipboard (mapped to alt-c)
* the `:input_paste` verb which inserts the clipboard content in the input (mapped to ctrl-v)
* it's now possible to define verbs executing sequences of commands - Fix #277
* fix opening of link of link - Fix #280
* broot is now compatible with Android, you can use it on Termux for example
* help page lists all optional features enabled at compilation
* list of verbs in help page is searchable
<a name="v1.0.0"></a>
### v1.0.0 - 2020-09-01
- nothing new, which is better when you want to call your software stable
<a name="v0.20.3"></a>
### v0.20.3 - 2020-08-23
- fix a few problems with tabulation rendering
- fix a few cases of files being called "huge" while they're only very big
<a name="v0.20.2"></a>
### v0.20.2 - 2020-08-18
- fix esc key not removing the filter in text preview
<a name="v0.20.1"></a>
### v0.20.1 - 2020-08-18
- completion of the "client-server" feature
- the tree tries to keep the selection when you remove a filter using the esc key
- :focus now has a shortcut for when a file is selected too: ctrl-f
- show_selection_mark preference in config (mostly for cases the background isn't clear enough)
- **breaking change:** The working directory of external processes launched by broot isn't set anymore by default.
If you want it to be changed, add `set_working_dir = true` to the verb definition.
<a name="v0.20.0"></a>
### v0.20.0 - 2020-08-16
- it's now possible to launch a terminal as sub process from broot (and be back to broot on exit)
- the selected directory is now the working dir for subprocess launched from broot
- images are previewed as such
- :preview_binary, :preview_text, and :preview_image verbs allow the choice of previewing mode
- fix a possible panic in previewed files on displaying fuzzy pattern matches
<a name="v0.19.4"></a>
### v0.19.4 - 2020-07-31
- don't install the br shell function when --outcmd is set or $BR_INSTALL is "no" - Fix #265
- more relevant status hints - Fix #261
<a name="v0.19.3"></a>
### v0.19.3 - 2020-07-27
- refined search in preview interaction (see blog https://dystroy.org/blog/broot-c-search/)
<a name="v0.19.2"></a>
### v0.19.2 - 2020-07-26
- "client-server" feature (see client-server.md)
- preview's pattern is kept when changing file
- selected line in preview, interesting when removing the pattern (to see what's around a match)
- faster availability of huge files in preview
- search in preview now interrupted by key events (just like the trees)
- a content search in a tree is propagated as a regex in a preview on :panel_right (ctrl-right)
- syntax theme choice in conf.toml
- {line} in a verb execution pattern refers to the line number
<a name="v0.19.1"></a>
### v0.19.1 - 2020-07-17
Force trimming root when searching (trimming root when not searching is no longer the default)
<a name="v0.19.0"></a>
### v0.19.0 - 2020-07-16
#### Major feature: the preview panel
Hit ctrl-right when a file is selected and you get the preview.
<a name="v0.18.6"></a>
### v0.18.6 - 2020-07-10
- `[ext-colors]` section in config
- a few minor fixes and changes
<a name="v0.18.5"></a>
### v0.18.5 - 2020-07-05
- git status takes into account overloading of enter and alt-enter
- a few minor fixes and changes
<a name="v0.18.4"></a>
### v0.18.4 - 2020-07-02
- `--git-status` launch option
- fix rendering on windows
<a name="v0.18.3"></a>
### v0.18.3 - 2020-06-30
Faster rendering (0.18.2 made it slower on some terminals)
<a name="v0.18.2"></a>
### v0.18.2 - 2020-06-29
Remove flickering
<a name="v0.18.1"></a>
### v0.18.1 - 2020-06-28
Column order is now configurable - Fix #127
<a name="v0.18.0"></a>
### v0.18.0 - 2020-06-26
#### Major change: Recursive last modified date computation
The date of directories is now the modification date of the last modified inner file, whatever its depth. This is computed in the background and doesn't slow your navigation.
#### Major change: Sort mode
Size can now be displayed out of sort mode, which concerns either size or dates.
There are new launch arguments:
* `--sort-by-count` : sort by number of files in directories
* `--sort-by-date` : sort by dates, taking content into account (make it easy to find deep recent files)
* `--sort-by-size` : sort by size
* `--whale-spotting` or `-w` : "whale spotting" mode (sort by size and show all files)
The `-s` launch argument now works similarly to -d or -p : it doesn't activate a sort mode but activates showing the sizes. `-s` has been replaced with `-w`.
Similarly new verbs have been defined:
* `:toggle_counts`, with shortcut `counts` shows the number of files in directories
* `:toggle_sizes`, with shortcut `sizes` shows the sizes of files and directories
* `:sort_by_count` has for shortcut `sc`
* `:sort_by_date` has for shortcut `sd`
* `:sort_by_size` has `ss` as shortcut
* `:no_sort` removes the current sort mode, if any
<a name="v0.17.0"></a>
### v0.17.0 - 2020-06-21
#### Major feature: keep broot open behind terminal editors
If you now open vi or emacs from broot with `leave_broot = false` you should
be back in broot after you quit the editor - Fix #34 - Fix #144 - Fix #158
#### Minor changes:
- it's possible to define input edition shortcuts - Fix #235
- MacOS: config directory for new install is ~/.config/broot - Fix #103
<a name="v0.16.0"></a>
### v0.16.0 - 2020-06-20
#### Major feature: composite patterns
It's now possible to use logical operators on patterns.
For example:
* `!/txt$/` : files whose name doesn't end in "txt"
* `carg|c/carg` : files whose name or content has "carg"
* `(json|xml)&c/test` : files containing "test" and whose name fuzzily contains either "json" or "xml"
The document contains other examples and precisions.
<a name="v0.15.1"></a>
### v0.15.1 - 2020-06-12
- fix some problems related to relative paths in built in cp and mv
<a name="v0.15.0"></a>
### v0.15.0 - 2020-06-12
#### Major feature: new input syntax - Breaking Change
New search modes (see https://dystroy.org/broot/input/#the-filtering-pattern) :
- fuzzy or regex on sub-paths (the path starting from the displayed root)
- search in file content
- it's possible to configure how search modes are selected in config
- search pattern characters can be escaped with a '\'
#### Minor changes:
- tab goes to next direct match when there's no verb in input - Fix #234
- `:open_stay_filter` to be used if you want to keep the pattern when you navigate - Fix #240
- mouse capture can be disabled with `capture_mouse = false` - Fix #238
- several small fixes
<a name="v0.14.2"></a>
### v0.14.2 - 2020-06-01
- `apply_to` verb property - fix #237
<a name="v0.14.1"></a>
### v0.14.1 - 2020-05-29
- fix uppercase letters ignored in input field
<a name="v0.14.0"></a>
### v0.14.0 - 2020-05-29
#### Major feature: `:focus` verb
This verb can be called, and parameterized, with a path as argument, which makes it possible to have a shortcut to a specific location.
As a result, the specific `:focus_user_home` and `:focus_root` verbs have been removed (`:focus ~` works on all OS).
#### Major feature: panels!
There are three major ways to open a new panel:
- by using ctrl-left or ctrl-right, which can also be used to navigate between panels
- when a verb is edited, by using ctrl-p, which opens a panel which on closure will fill the argument
- by using any verb with a bang. For example `:focus! ~` or `:!help`
When you have two panels, you may use some new verbs like :copy_to_panel which copies the selection to the selected location in the other panel.
Many new verbs and functions are related to panels but broot can still be used exactly as before without using panels.
#### Major feature: autocompletion
Using the Tab key you can complete verbs or paths
#### Major feature: special paths
Some paths can be handled in a specific way. Fix #205 and #208
You can for example decide that some slow disk shouldn't be entered automatically
#### Minor changes:
- date/time format configurable - Fix #229
- esc doesn't quit broot anymore (by popular demand)
It's probably a good idea to remove your existing conf.toml file so that broot creates a brand new one with suggestions of shortcuts.
<a name="v0.13.6"></a>
### v0.13.6 - 2020-04-08
- ignore diacritics in searches - Fix #216
<a name="v0.13.5"></a>
### v0.13.5 - 2020-03-28
- right key open directory, left key gets back (when input is empty) - Fix #179
- replace ~ in path arguments with user home dir - Fix #211
- use $XDG_CONFIG_HOME/git/ignore when the normal core.excludesFile git setting is missing - Fix #212
- add a man page to archive - Fix #165
<a name="v0.13.4"></a>
### v0.13.4 - 2020-03-13
- support for an arg made of an optional group - Fix #210
<a name="v0.13.3"></a>
### v0.13.3 - 2020-02-27
- fix a compilation problem related to dependency (termimad) version
<a name="v0.13.2"></a>
### v0.13.2 - 2020-02-16
- fix -i and -I launch arguments being ignored (fix #202)
<a name="v0.13.1"></a>
### v0.13.1 - 2020-02-08
- fix background not always removed when skin requires no background (Fix #194)
<a name="v0.13.0"></a>
### v0.13.0 - 2020-02-05
#### Major change: git related features
- `:show_git_file_info` compute git repo statistics and file statuses. Statistics are computed in background and cached.
- `:git_diff` verb launching `git diff {file}`
- `:git_status` filter files to show only the ones which are relevant for `git status` (warning: slow on big repositories)
#### Major change: rewamped launch flags
Several new launch flags have been added, mostly doing the opposite of previous ones (eg `-S` negates `-s`) and a new entry in the conf.toml lets you define default flags (which can be overridden by the ones you pass on the command line).
Do `br --help` to view the complete list of flags.
#### Minor changes:
- on refresh or after command, if the previously selected path can't be selected (missing file, probably) then the previous index will be kept if possible
- alt-enter can be rebinded (users should not do that without binding `:cd`, though)
<a name="v0.12.2"></a>
### v0.12.2 - 2020-01-29
- fix Ctrl-J being interpreted as Enter (fix #177)
<a name="v0.12.1"></a>
### v0.12.1 - 2020-01-25
- fix panic on some inputs starting with a `/` (Fix #175)
- TAB key now jumps to direct matches only
- `--conf` arg to launch broot with specific config file(s) (fix #141)
<a name="v0.12.0"></a>
### v0.12.0 - 2020-01-19
- **breaking change:** commands given with `--cmd` must be separated (default separator is `;`)
- fix some cases of terminal let in a bad state on errors (thanks Nathan West)
- bring some changes to the fish shell function and its installation (PR #128)
- consider path `$ZDOTDIR/.zshrc` for zsh shell function sourcing (fix #90)
- don't use .gitignore files of parent repositories
- change default value of the toggle_trim_root to false (fix #106 but might be reverted)
- `:print_relative_path` verb (fix #169, thanks Roshan George)
- `:chmod` verb
<a name="v0.11.9"></a>
### v0.11.9 - 2020-01-15
- fix a case of bad selection after search followed by interrupted search (#147)
- `--set-install-state` can be used in tests or manual installs to set the installation state
- Raspberry now a default target available in installation page
- fix a regression: `br -s` not finishing computing size until receiving an event
- display the real size of sparse files (fix #102)
<a name="v0.11.8"></a>
### v0.11.8 - 2020-01-12
- set different skins for the r, w and x parts of the mode (permission)
- compatibility with freeBSD
- generate shell completion scripts on build (deep into the target directory)
- `--print-shell-function` launch argument to print the shell functions to stdout
<a name="v0.11.7"></a>
### v0.11.7 - 2020-01-11
- fix cancelled verbs possibly executed (fix #104) (major dangerous bug)
<a name="v0.11.6"></a>
### v0.11.6 - 2020-01-10
- backspace was previously bound to :back if not consumed by input. This is removed
- fix unsignificative event interpreted as previous event repetition
- fix wrong background applied on sizes in tree display
- allow env vars used in verb execution to contain parameters (fix #114)
- allow the use of arrow keys as triggers for verbs (fix #121)
- fix scroll adjustment when using the arrow keys (when there's a scrollbar) (fix #112)
<a name="v0.11.5"></a>
### v0.11.5 - 2020-01-10
- keep same path selected when lines are reordered (such as when directory sizes are computed
- changed the skin used before installation so that it works better on white backgrounds
<a name="v0.11.4"></a>
### v0.11.4 - 2020-01-09
- make :open_stay and :open_leave work in help screen (applying on configuration file)
- Mac/fish: use ~/.config/fish even on systems where the config home is usually different
- Mac/bash: add .bash_profile to the list of possible sourcing files
- define ctrl-c as a new way to quit
<a name="v0.11.3"></a>
### v0.11.3 - 2020-01-09
- fix the 'n' answer being ignored when user is asked authorization
<a name="v0.11.2"></a>
### v0.11.2 - 2019-12-30
- fix alt-enter not recognized on some computers
<a name="v0.11.0"></a>
### v0.11.0 - 2019-12-21
New major feature: the `:total_search` verb, normally triggered with *ctrl-s*: done after a search it repeats it but looks at **all** the children, even if it's long and there were a lot of matches
<a name="v0.10.5"></a>
### v0.10.5 - 2019-12-20
- should not panic anymore when opening arbitrary files on server
- allow more keys for verbs. For example you can use `enter` (this one won't apply on directories but only on files)
- display all possible verb completions in status
- don't query the terminal size after start: use the new Resize event of Crossterm
<a name="v0.10.4"></a>
### v0.10.4 - 2019-12-16
* fuzzy search performance improvement
* verb invocation now optional so that a verb can be defined to just introduce a keyboard shortcut
* owner and group separately skinned
* screen redrawn on resize (but tree not recomputed, you may want to do F5 to have the best sized tree)
* changes in br shell function storage and sourcing from fish, bash, and zsh. Fixes #39 and #53.
Note that broot will ask you again to install the br function
<a name="v0.10.3"></a>
### v0.10.3 - 2019-11-27
* fix panic on doing `:rm` on the last child of current root
* refactor help page generation using Termimad templates
* clear help background when terminal was resized between redraws
<a name="v0.10.2"></a>
### v0.10.2 - 2019-11-15
* colored status line
* better handling of errors when opening files externally
* spinner replaced with an explicit text
* `:parent` no longer keeps the filter (this was too confusing)
* new `:up` command, focusing the parent of the current tree root
* `$PAGER` used in default config. Fix #20
* default conf links to the white background skin published on web site
* new "default" entry in skin, to define a global background replacing the terminal's one
<a name="v0.10.1"></a>
### v0.10.1 - 2019-11-04
* incorporate crossterm 0.13.2 to fix a regression in vi launch (see https://github.com/Canop/broot/issues/73)
<a name="v0.10.0"></a>
### v0.10.0 - 2019-11-03
* moved to the crossterm 0.13 and termimad 0.7.1
* broot runs on stderr,
* broot can run in a subshell
Those changes allow tricks like `my_unix_command "$(broot)"` when you do `:pp` to print the path on stdout from broot
<a name="v0.9.6"></a>
### v0.9.6 - 2019-09-20
* smarter cut of the status line when it doesn't fit the console's width
* fix mouse click on the status line crashing broot
* prevent the best match from being hidden inside "unlisted" matches
<a name="v0.9.5"></a>
### v0.9.5 - 2019-09-15
* keyboard keys & shortcuts can be defined for more actions, all built-in verbs documented in website
* paths built from verb arguments are now normalized
<a name="v0.9.4"></a>
### v0.9.4 - 2019-09-13
New internal verbs like :focus_root, :focus_user_home, :refresh, :select_first
You can define triggering keys for verbs.
For example you can add those mappings:
[[verbs]]
invocation = "root"
key = "F9"
execution = ":focus_root"
[[verbs]]
invocation = "home"
key = "ctrl-H"
execution = ":focus_user_home"
[[verbs]]
invocation = "top"
key = "F6"
execution = ":select_first"
[[verbs]]
invocation = "bottom"
key = "F7"
execution = ":select_last"
Then, when doing <key>Ctrl-H</key>, you would go to you user home (`~` when on linux) and <key>F7</key> would select the last line of the tree.
A few more keys are defined as default, like F1 for `:help` and F5 for `:refresh`.
<a name="v0.9.3"></a>
### v0.9.3 - 2019-08-02
Launching broot with `--sizes` now sets a set of features enabling fast "whale spotting" navigation
<a name="v0.9.2"></a>
### v0.9.2 - 2019-07-31
Fix non consistent builds due to lack of precise versioning in crossterm subcrate versioning
<a name="v0.9.1"></a>
### v0.9.1 - 2019-07-29
#### Major change
* A new syntax allows specifying verbs which can work on relative paths or absolute paths alike.
For example the old definition of `cp` was
invocation = "cp {newpath}"
execution = "/bin/cp -r {file} {parent}{newpath}"
and it's now
invocation = "cp {newpath}"
execution = "/bin/cp -r {file} {newpath:path-from-parent}"
The :path-from-parent formatting means the token will be interpreted as a path, and if it's
not starting with a / will be prefixed by the parent path.
It's possible to also use `{subpath:path-from-directory}` where directory is parent only if
the selected file isn't a directory itself.
#### Minor changes
- shift-tab selects the previous match
- mouse wheel support (selection in tree, scroll in help)
- the input field handles left/right arrow keys, home/end, click, and delete
<a name="v0.9.0"></a>
### v0.9.0 - 2019-07-19
#### Major change
The logic behind opening has changed to allow easier opening of files in non terminal applications without closing broot.
**Old behavior:**
- in case of enter or double-click
- on a directory: open that directory, staying in broot
- on a file: open the file, quitting broot
- in case of alt-enter
- on a directory: cd to that directory, quitting broot
- on a file: cd to that file's parent directory, quitting broot
**New behavior:**
- in case of enter or double-click
- on a directory: open that directory, staying in broot
- on a file: open that file in default editor, not closing broot
- in case of alt-enter
- on a directory: cd to that directory, quitting broot
- on a file: open that file in default editor, quitting broot
#### Minor change
- Hitting `?` more directly opens the help screen, even when executing a verb
<a name="v0.8.6"></a>
### v0.8.6 - 2019-07-03
- Hitting enter when first line is selected, or clicking it, goes up to the parent directory
- detect and color executable files on windows
- new toggle to display dates of files (last modification)
- a few small improvements
<a name="v0.8.5"></a>
### v0.8.5 - 2019-06-20
- minor cosmetic changes (this version was mostly released to ensure consistency with termimad's crate)
<a name="v0.8.4"></a>
### v0.8.4 - 2019-06-17
- apply verbs on link files, not on their targets (rm some_link was dangerous)
<a name="v0.8.3"></a>
### v0.8.3 - 2019-06-16
- mouse support: click to select, double-click to open
<a name="v0.8.2"></a>
### v0.8.2 - 2019-06-15
- fix wrong result of scrolling when help text fits the screen
<a name="v0.8.1"></a>
### v0.8.1 - 2019-06-10
- change default skin to only use highly compatible colors
- allow ANSI colors in skin configuration
<a name="v0.8.0"></a>
### v0.8.0 - 2019-06-07
Half broot has been rewritten to allow Windows compatibility. Termion has been replaced with crossterm.
<a name="v0.7.5"></a>
### v0.7.5 - 2019-04-03
- try to give arguments to verbs executed with --cmd
- Hitting <enter> no longer quits when root is selected (many users found it confusing)
<a name="v0.7.4"></a>
### v0.7.4 - 2019-03-25
- fix verbs crashing broot in /
- fix user displayed in place of user with :perm
<a name="v0.7.3"></a>
### v0.7.3 - 2019-03-22
- :print_tree outputs the tree. See [documentation](https://dystroy.org/broot/documentation/usage/#export-a-tree) for examples of use
- F5 refreshes the tree
<a name="v0.7.2"></a>
### v0.7.2 - 2019-03-15
- env variables usable in verb execution patterns, which makes it possible to use `$EDITOR` in default conf.toml
- ctrl-u and ctrl-d are now alternatives to page-up and page-down
- better error messages regarding faulty configurations
- more precise errors in case of invalid regexes
- use the OS specific file opener instead of xdg-open (concretly it means `open` is now used on MacOS)
Thanks Ophir LOJKINE for his contributions in this release
<a name="v0.7.1"></a>
### v0.7.1 - 2019-03-08
- fix a few problems with the count of "unlisted" files
<a name="v0.7.0"></a>
### v0.7.0 - 2019-03-07
##### Major changes
- verbs can now accept complex arguments. This allows functions like mkdir, mv, cp, etc. and your own rich commands
- custom verbs can be executed without leaving broot (if defined with `leave_broot=false`)
##### Minor changes
- Ctrl-Q shortcut to leave broot
- fix a case of incorrect count of "unlisted" files
<a name="v0.6.3"></a>
### v0.6.3 - 2019-02-23
- `br` installer for the fish shell
- faster directory size computation (using a pool of threads)
- fix alt-enter failing to cd when the path had spaces
- executable files rendered with a different color
<a name="v0.6.2"></a>
### v0.6.2 - 2019-02-18
- all colors can be configured in conf.toml
<a name="v0.6.1"></a>
### v0.6.1 - 2019-02-14
- complete verbs handling in help screen
- faster regex search
- fix missing version in `broot -V`
<a name="v0.6.0"></a>
### v0.6.0 - 2019-02-12
##### Major changes
- broot now installs the **br** shell function itself *(for bash and zsh, help welcome for other shells)*
- new verb `:toggle_trim_root` allows to keep all root children
- verbs can refer to `{directory}` which is the parent dir when a simple file is selected
- user configured verbs can be launched from parent shell too (like is done for `cd {directory}`)
##### Minor changes
- allow page up and page down on help screen
- fuzzy pattern: increase score of match starting after word separator
- better handle errors on a few cases of non suitable root (like passing an invalid path)
- clearer status error on `:cd`. Mentions `<alt><enter>` in help
- add a scrollbar on help screen
<a name="v0.5.2"></a>
### v0.5.2 - 2019-02-04
- More responsive on slow disks
- fix a link to documentation in autogenerated conf
<a name="v0.5.1"></a>
### v0.5.1 - 2019-02-03
- alt-enter now executes `:cd`
<a name="v0.5.0"></a>
### v0.5.0 - 2019-01-30
- patterns can be regexes (add a slash before or after the pattern)
- configuration parsing more robust
- no need to put all verbs in config: builtins are accessible even without being in config
- no need to type the entire verb shortcut: if only one is possible it's proposed
- verbs with {file} usable in help state: they apply to the configuration file
- clear in app error message when calling :cd and not using the br shell function
- bring back jemalloc (it's faster for broot)
- more precise display of file/dir sizes
<a name="0.4.7"></a>
### 0.4.7 - 2019-01-21
- fix some cases of panic on broot quitting
- new `--cmd` program argument allows passing a sequence of commands to be immediately executed (see [updated documentation](https://github.com/Canop/broot/blob/master/documentation.md#passing-commands-as-program-argument))
- better handling of symlink (display type of target, show invalid links, allow verbs on target)
- compiled with rustc 1.32 which brings about 4% improvements in perfs compared to 1.31
<a name="v0.4.6"></a>
### v0.4.6 - 2019-01-12
- fix configured verbs not correctly handling paths with spaces
- fix `:q` not instantly quitting broot when computing size
- hit enter on tree root correctly quits broot
<a name="v0.4.5"></a>
### v0.4.5 - 2019-01-11
- Faster search, mainly
<a name="v0.4.3"></a>
### v0.4.3 - 2019-01-08
- Faster search and directory size computation.
<a name="v0.4.2"></a>
### v0.4.2 - 2019-01-07
- more complete search if time allows
- search pattern kept after verb execution
<a name="v0.4.1"></a>
### v0.4.1 - 2019-01-07
- first public release
================================================
FILE: CONTRIBUTING.md
================================================
Before you start, unless you're fixing a typo or proposing a trivial change, please
- discuss the need and technical design first, either in an issue or on [miaou](https://miaou.dystroy.org/3768)
- keep it simple and focused
- don't touch more files or lines than necessary
- apply the standard formatting of the project
- check tests
And remember: there's no problem in asking when not sure, even if somebody else may have asked before, we're humans.
More info at https://dystroy.org/blog/contributing/
================================================
FILE: Cargo.toml
================================================
[package]
name = "broot"
version = "1.56.1"
authors = ["dystroy <denys.seguret@gmail.com>"]
repository = "https://github.com/Canop/broot"
homepage = "https://dystroy.org/broot"
documentation = "https://dystroy.org/broot"
description = "File browser and launcher"
edition = "2021"
keywords = ["cli", "fuzzy", "tree", "search", "file"]
license = "MIT"
categories = ["command-line-utilities"]
readme = "README.md"
build = "build.rs"
rust-version = "1.83"
exclude = ["website", "broot*.zip"]
[features]
default = []
clipboard = ["terminal-clipboard"]
kitty-csi-check = ["xterm-query"]
[dependencies]
base64 = "0.22"
bet = "1.1"
char_reader = "0.1"
chrono = "0.4"
clap = { version = "4.4", features = ["derive", "cargo"] }
clap-help = "1.4"
cli-log = "2.1"
crokey = "1.3"
custom_error = "1.6"
deser-hjson = "2.2.3"
directories = "4.0"
file-size = "1.0.3"
flate2 = "1.0"
flex-grow = "0.1"
git2 = { version = "0.20", default-features = false } # waiting for a good pure-rust alternative
glob = "0.3"
id-arena = "2.2.1"
image = "=0.25.6" # later versions ask for rust 1.85+
zune-core = "0.4.12"
zune-image = "0.4.15"
include_dir = "0.7"
lazy-regex = "3.5"
libc = "0.2"
lru = "0.16.3"
memmap2 = "0.9"
notify = "8.0"
once_cell = "1.18" # waiting for https://github.com/rust-lang/rust/issues/109736
opener = "0.8"
pathdiff = "0.2"
phf = { version = "0.13", features = ["macros"] }
rand = "0.8"
rayon = "1.9"
resvg = "0.45"
rustc-hash = "2"
secular = { version = "1.0", features = ["normalization", "bmp"] }
serde = { version = "1.0", features = ["derive"] }
smallvec = "1.15" # version 2 is still alpha
splitty = "1.0.2"
strict = "0.2"
syntect = { package = "syntect-no-panic", version = "6.0", default-features = false, features = ["default-fancy"] } # see https://github.com/Canop/broot/pull/968
tempfile = "3.2"
termimad = "0.34"
terminal-clipboard = { version = "0.4.1", optional = true }
terminal-light = "1.8"
toml = "0.9"
umask = "2.1.0"
unicode-width = "0.2"
vte = "0.15"
which = "=4.4.0" # following versions ask for a a more recent rustc
xterm-query = { version = "0.5", optional = true }
[dev-dependencies]
glassbench = "0.4.4"
[target.'cfg(any(target_os = "windows", all(unix, not(any(target_os = "ios", target_os = "android")))))'.dependencies]
trash = "=5.2.2" # later versions ask for rust 1.85+
[target.'cfg(any(target_os = "linux", target_os = "windows", target_os = "macos"))'.dependencies]
lfs-core = "0.17.0"
[target.'cfg(target_family = "unix")'.dependencies]
uzers = "0.12"
[target.'cfg(target_os = "windows")'.dependencies]
is_executable = "1.0.1"
[build-dependencies]
clap = { version = "4.4", features = ["derive", "cargo"] }
clap_complete = "4.4"
clap_mangen = "0.2.12"
[profile.dev]
debug = false
[profile.release]
debug = false
lto = "fat"
codegen-units = 1 # this removes a few hundred bytes from the final exec size
strip = "symbols"
[[bench]]
name = "fuzzy"
harness = false
[[bench]]
name = "toks"
harness = false
[[bench]]
name = "composite"
harness = false
[[bench]]
name = "path_normalization"
harness = false
[patch.crates-io]
# bet = { path = "../bet" }
# clap-help = { path = "../clap-help" }
# coolor = { path = "../coolor" }
# crokey = { path = "../crokey" }
# crossterm = { path = "../crossterm-rs/crossterm" }
# csv2svg = { path = "../csv2svg" }
# deser-hjson = { path = "../deser-hjson" }
# glassbench = { path = "../glassbench" }
# lazy-regex = { path = "../lazy-regex" }
# lfs-core = { path = "../lfs-core" }
# minimad = { path = "../minimad" }
# secular = { path = "../secular", features=["normalization"] }
# syntect-no-panic = { path = "../syntect" }
# terminal-clipboard = { path = "../terminal-clipboard" }
# umask = { path = "../umask" }
# cli-log = { path = "../cli-log" }
# lazy-regex-proc_macros = { path = "../lazy-regex/src/proc_macros" }
# strict = { path = "../strict" }
# termimad = { path = "../termimad" }
# terminal-light = { path = "../terminal-light" }
# xterm-query = { path = "../xterm-query" }
[package.metadata.binstall]
pkg-url = "{ repo }/releases/download/v{ version }/{ name }_{ version }{ archive-suffix }"
bin-dir = "{ target }/{ bin }{ binary-ext }"
pkg-fmt = "zip"
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2018 Canop
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
## Broot
[![Tests][s3]][l3] [![MIT][s2]][l2] [![Latest Version][s1]][l1] [![Chat on Miaou][s4]][l4] [![Packaging status][srep]][lrep]
[s1]: https://img.shields.io/crates/v/broot.svg
[l1]: https://crates.io/crates/broot
[s2]: https://img.shields.io/badge/license-MIT-blue.svg
[l2]: LICENSE
[s3]: https://github.com/Canop/broot/actions/workflows/tests.yml/badge.svg
[l3]: https://github.com/Canop/broot/actions/workflows/tests.yml
[s4]: https://miaou.dystroy.org/static/shields/room.svg
[l4]: https://miaou.dystroy.org/3490?broot
[srep]: https://repology.org/badge/tiny-repos/broot.svg
[lrep]: https://repology.org/project/broot/versions
Broot is a better way to navigate directories, find files, and launch commands.

[**Complete Documentation**](https://dystroy.org/broot/) -
[**Installation Instructions**](https://dystroy.org/broot/install/) -
[**Contributing or Getting Help**](https://dystroy.org/blog/contributing/)
## Get an overview of a directory, even a big one
Hit `br -s`

Notice the *unlisted*?
That's what makes it usable, where the old `tree` command would produce pages of output.
`.gitignore` files are properly dealt with to put unwanted files out of your way.
As you sometimes want to see gitignored files, or hidden ones, you'll soon get used to the <kbd>alt</kbd><kbd>i</kbd> and <kbd>alt</kbd><kbd>h</kbd> shortcuts to toggle those visibilities.
(you can ignore them though, see [documentation](https://dystroy.org/broot/navigation/#toggles)).
## Find a directory, then `cd` to it
type a few letters

Hit <kbd>alt</kbd><kbd>enter</kbd> and you're back to the terminal in the desired location.
This way, you can navigate to a directory with the minimum amount of keystrokes, even if you don't exactly remember where it is.
Broot is fast and doesn't block (any keystroke interrupts the current search to start the next one).
Most useful keys for this:
* the letters of what you're looking for
* <kbd>enter</kbd> on the root line to go up to the parent (staying in broot)
* <kbd>enter</kbd> to focus a directory (staying in broot)
* <kbd>esc</kbd> to get back to the previous state or clear your search
* <kbd class=b>↓</kbd> and <kbd class=b>↑</kbd> may be used to move the selection
* <kbd>alt</kbd><kbd>enter</kbd> to get back to the shell, having `cd` to the selected directory
* <kbd>alt</kbd><kbd>h</kbd> to toggle showing hidden files (the ones whose name starts with a dot)
* <kbd>alt</kbd><kbd>i</kbd> to toggle showing gitignored files
* `:q` if you just want to quit (you can use <kbd>ctrl</kbd><kbd>q</kbd> if you prefer)
## Never lose track of file hierarchy while you search

Broot tries to select the most relevant file. You can still go from one match to another one using <kbd>tab</kbd> or arrow keys.
You may also search with a regular expression. To do this, add a `/` before the pattern.
And you have [other types of searches](input/#the-filtering-pattern), for example, searching on file content (start with `c/`):

You may also apply logical operators or combine patterns, for example, searching `test` in all files except JSON ones could be `!/json$/&c/test` and searching `carg` both in file names and file contents would be `carg|c/carg`.
Once the file you want is selected, you can
* hit <kbd>enter</kbd> (or double-click) to open it in your system's default program
* hit <kbd>alt</kbd><kbd>enter</kbd> to open it in your system's default program and close broot
* hit <kbd>ctrl</kbd><kbd>→</kbd> to preview it (and then a second time to go inside the preview)
* type a verb. For example, `:e` opens the file in your preferred editor (which may be a terminal one)
[blog: a broot content search workflow](https://dystroy.org/blog/broot-c-search/)
## Manipulate your files
Most often, when not using broot, you move your files in the blind. You do a few `ls` before, then your manipulation, and maybe you check after.
You can instead do it without losing the view of the file hierarchy.

Move, copy, rm, mkdir, are built in, and you can add your own shortcuts.
Here's chmod:

## Manage files with panels
When a directory is selected, do <kbd>ctrl</kbd><kbd>→</kbd> and you open another panel (you may open other ones, or navigate between them, with <kbd>ctrl</kbd><kbd>←</kbd> and <kbd>ctrl</kbd><kbd>→</kbd>).

(yes, colors are fully customizable)
You can, for example, copy or move elements between panels:

If you like, you may do it Norton Commander style by binding `:copy_to_panel` to <kbd>F5</kbd> and `:move_to_panel` to <kbd>F6</kbd>.
## Preview files
Hit <kbd>ctrl</kbd><kbd>→</kbd> when a file is selected, and the preview panel appears.


The preview panel stays synchronized with the selection in the tree panels.
Broot displays images in high resolution when the terminal supports Kitty's graphics protocol
(compatible terminals: [Kitty](https://sw.kovidgoyal.net/kitty/index.html), [WezTerm](https://wezfurlong.org/wezterm/)):

## Apply a standard or personal command to a file

Just find the file you want to edit with a few keystrokes, type `:e`, then <kbd>enter</kbd>.
You can add verbs or configure the existing ones; see [documentation](https://dystroy.org/broot/conf_file/#verbs-shortcuts-and-keys).
And you can add shortcuts, for example, a <kbd>ctrl</kbd> sequence or a function key
## Apply commands on several files
Add files to the [staging area](staging-area), then execute any command on all of them.

## Replace `ls` (and its clones):
If you want to display *sizes*, *dates*, and *permissions*, do `br -sdp` which gets you this:

You may also toggle options with a few keystrokes while inside broot.
For example, you could have typed this `-sdp` while in broot.
Or hit <kbd>alt</kbd><kbd>h</kbd> and you see hidden files.
## Sort, see what takes space:
You may sort by launching broot with `--sort-by-size` or `--sort-by-date`. Or you may, inside broot, type a space, then `sd`, and <kbd>enter</kbd> and you toggled the `:sort_by_date` mode.
When sorting, the whole content of the directories is taken into account. So if you want to find on Monday morning the most recently modified files, launch `br --sort-by-date ~`.
If you start broot with the `--whale-spotting` option (or its shortcut `-w`), you get a mode tailored to "whale spotting" navigation, making it easy to determine what files or folders take space.
Sizes, dates, and file counts are computed in the background; you don't have to wait for them when you navigate.

And you keep all broot tools, like filtering or the ability to delete or open files and directories.
If you hit `:fs`, you can check the usage of all filesystems, so that you focus on cleaning the full ones.

## Check git statuses:
Use `:gf` to display the statuses of files (what are the new ones, the modified ones, etc.), the current branch name and the change statistics.

And if you want to see *only* the files which would be displayed by the `git status` command, do `:gs`. From there it's easy to edit, or diff, selected files.

From there, it's easy to edit, diff, or revert selected files.
[blog: use broot and meld to diff before commit](https://dystroy.org/blog/gg/)
## Further Reading
See **[Broot's web site](https://dystroy.org/broot)** for instructions regarding installation and usage.
================================================
FILE: bacon.toml
================================================
# This is a configuration file for the bacon tool
# More info at https://github.com/Canop/bacon
default_job = "check"
env.CARGO_TERM_COLOR = "always"
[jobs]
[jobs.check-all]
command = ["cargo", "check", "--all-targets"]
need_stdout = false
watch = ["tests", "benches", "examples"]
[jobs.bacon-ls]
command = [ "cargo", "check", "--message-format", "json-diagnostic-rendered-ansi" ]
analyzer = "cargo_json"
need_stdout = true
[exports.cargo-json-spans]
auto = true
exporter = "analyzer"
line_format = "{diagnostic.level}:{span.file_name}:{span.line_start}:{span.line_end}:{diagnostic.message}"
path = "bacon-analyzzzer.json"
[jobs.check]
command = [
"cargo", "check",
"--features", "clipboard kitty-csi-check",
]
need_stdout = false
watch = ["benches"]
[jobs.android]
command = [
"cargo", "ndk", "check",
"-t", "x86_64",
"--features", "clipboard",
]
need_stdout = false
[jobs.miri]
command = ["cargo", "+nightly", "miri", "run"]
need_stdout = true
[jobs.windows]
command = [
"cross", "build",
"--target", "x86_64-pc-windows-gnu",
"--features", "clipboard"
]
[jobs.netbsd]
command = [
"cross", "build",
"--target", "x86_64-unknown-netbsd",
"--release",
"--features", "clipboard"
]
[jobs.light]
command = ["cargo", "check"]
need_stdout = false
[jobs.clippy]
command = [
"cargo", "clippy",
"--",
"-W", "clippy::explicit_iter_loop",
"-A", "clippy::bool_to_int_with_if",
"-A", "clippy::collapsible_else_if",
"-A", "clippy::collapsible_if",
"-A", "clippy::derive_partial_eq_without_eq",
"-A", "clippy::if_same_then_else",
"-A", "clippy::len_without_is_empty",
"-A", "clippy::manual_clamp",
"-A", "clippy::manual_range_contains",
"-A", "clippy::manual_unwrap_or",
"-A", "clippy::match_like_matches_macro",
"-A", "clippy::module_inception",
"-A", "clippy::needless_bool",
"-A", "clippy::needless_range_loop",
"-A", "clippy::neg_multiply",
"-A", "clippy::uninlined_format_args",
"-A", "clippy::unnecessary_map_or",
"-A", "clippy::vec_init_then_push",
]
need_stdout = false
[jobs.pedantic]
command = [
"cargo", "clippy",
"--",
"-W", "clippy::pedantic",
"-A", "clippy::bool_to_int_with_if",
"-A", "clippy::map_unwrap_or",
"-A", "clippy::match_like_matches_macro",
"-A", "clippy::missing_errors_doc",
"-A", "clippy::module_inception",
"-A", "clippy::similar_names",
"-A", "clippy::struct_excessive_bools",
"-A", "clippy::too_many_lines",
"-A", "clippy::unnecessary_debug_formatting",
"-A", "clippy::unreadable_literal",
"-A", "clippy::wildcard_imports",
"-A", "clippy::vec_init_then_push",
"-A", "clippy::single_match_else",
]
need_stdout = false
[jobs.test]
command = ["cargo", "test"]
need_stdout = true
[keybindings]
a = "job:check-all"
i = "job:initial"
c = "job:clippy"
d = "job:doc-open"
t = "job:test"
r = "job:check-all"
================================================
FILE: benches/composite.rs
================================================
mod shared;
use {
broot::{
command::CommandParts,
pattern::*,
},
glassbench::*,
};
// this file benches composite patterns on file names so don't
// use file content sub patterns here
static PATTERNS: &[&str] = &[
"réveil",
"r&!e",
"(!e&!b)|c",
];
fn bench_score_of_composite(gb: &mut Bench) {
let search_modes = SearchModeMap::default();
for pattern in PATTERNS {
let name = format!("Composite({:?})::score_of", &pattern);
gb.task(name, |b| {
let parts = CommandParts::from(pattern.to_string());
let cp = Pattern::new(&parts.pattern, &search_modes, 10*1024*1024).unwrap();
b.iter(|| {
for name in shared::NAMES {
pretend_used(cp.score_of_string(name));
}
});
});
}
}
glassbench!(
"Composite Patterns",
bench_score_of_composite,
);
================================================
FILE: benches/fuzzy.rs
================================================
mod shared;
use {
broot::pattern::FuzzyPattern,
glassbench::*,
};
static PATTERNS: &[&str] = &["réveil", "AB", "e", "brt", "brootz"];
fn bench_score_of_fuzzy(gb: &mut Bench) {
for pattern in PATTERNS {
let task_name = format!("Fuzzy({pattern:?})::score_of");
gb.task(task_name, |b| {
let fp = FuzzyPattern::from(pattern);
b.iter(|| {
for name in shared::NAMES {
pretend_used(fp.score_of(name));
}
});
});
}
}
glassbench!(
"Fuzzy Patterns",
bench_score_of_fuzzy,
);
================================================
FILE: benches/path_normalization.rs
================================================
use {
broot::path,
glassbench::*,
};
static PATHS: &[&str] = &[
"/abc/test/../thing.png",
"/abc/def/../../thing.png",
"/home/dys/test",
"/home/dys",
"/home/dys/",
"/home/dys/..",
"/home/dys/../",
"/..",
"../test",
"/home/dys/../../../test",
"/a/b/c/d/e/f/g/h/i/j/k/l/m/n",
"/a/b/c/d/e/f/g/h/i/j/k/l/m/n/",
"/",
"π/2",
];
fn bench_normalization(gb: &mut Bench) {
gb.task("normalize_path", |b| {
b.iter(|| {
for path in PATHS {
pretend_used(path::normalize_path(path));
}
});
});
}
glassbench!(
"Path Normalization",
bench_normalization,
);
================================================
FILE: benches/shared/mod.rs
================================================
mod names;
pub use names::*;
================================================
FILE: benches/shared/names.rs
================================================
pub static NAMES: &[&str] = &[
" brr ooT",
"Réveillon",
"dys",
"test",
" tetsesstteststt ",
"a rbrroot",
"Ab",
"test again",
"des réveils",
"pi",
"a quite longer name",
"compliqué - 这个大象有多重",
"brrooT",
"1",
"another name.jpeg",
"aaaaaab",
"a ab abba aab",
"abcdrtodota",
"palimpsestes désordonnés",
"a",
"π",
"normal.dot",
"ùmeé9$njfbaù rz&é",
"FactoryFactoryFactoryFactory.java",
"leftPad.js",
"Cargo.toml",
"Cargo.lock",
"main.rs",
".gitignore",
"lib.rs",
" un réveil",
"aaaaaaaaaaaaaaaaabbbbbbb",
"BABABC B AB",
"réveils",
"paem",
"poëme",
"mjrzemrjzm mrjz mrzr rb root",
"&cq",
"..a",
"~~~~~",
"ba",
"bar",
"bar ro ot",
"& aé &a é",
"mùrz*jfzùenfzeùrjmùe",
"krz",
"q",
"mjrfzm e",
"dystroy.org",
"www",
"termimad",
"minimad",
"regex",
"lazy_regex",
"jaquerie",
"Tillon",
"Tellini",
"Garo",
"Portequoi",
"Terdi",
"Ploplo",
"le dragon",
"l'ours",
"la tortue géante",
"le chamois",
"dystroy",
"bra ernre rjrz a e3 broorar/ e/ smallvec/memmap;r b oot4 Z",
"un petit peu n'importe quoi",
"dans",
"cette",
"liste",
"Broot",
" broot",
" broot ",
"b-root",
"biroute",
"Miaou",
"meow",
"et",
"surtout",
"La Grande Roulette",
"this list is",
"very obviously",
"tailored at stressing",
"the engine",
"and the reader",
"C++",
"javascript",
"SQL",
"C#",
"Haskell",
"Lisp",
"Pascal",
"and",
"Fortran",
"are just missing from this codebase",
"denys",
"seguret",
"is",
"the",
"author",
"bro o o o o o o o o o o o o ot",
"bro o o o o o o o o o o o o otz",
"br bro boo broot brootz",
"b b bb bb ca e 1234 oooot",
"Bo br BBBroo OOOOOt",
"kir ba lrbvr b rbaz broot",
"nrel ora hr rbooo t roo jrzz 7 tz",
"not matching anything, is it ?",
"ae/r/re /reee/ea",
"era",
"lrlb rre o",
"rjre nr",
];
================================================
FILE: benches/toks.rs
================================================
mod shared;
use {
broot::pattern::TokPattern,
glassbench::*,
};
static PATTERNS: &[&str] = &["a", "réveil", "bro,c", "e,jenc,arec,ehro", "broot"];
fn bench_score_of_toks(gb: &mut Bench) {
for pattern in PATTERNS {
let task_name = format!("TokPattern({pattern:?})::score_of");
gb.task(task_name, |b| {
let fp = TokPattern::new(pattern);
b.iter(|| {
for name in shared::NAMES {
pretend_used(fp.score_of(name));
}
});
});
}
}
glassbench!(
"Tokens Patterns",
bench_score_of_toks,
);
================================================
FILE: build-all-targets.sh
================================================
#WARNING: This script is NOT meant for normal installation, it's dedicated
# to the compilation of all supported targets.
# This is a long process and it involves specialized toolchains.
# For usual compilation do
# cargo build --release
# or read all possible installation solutions on
# https://dystroy.org/broot/install
H1="\n\e[30;104;1m\e[2K\n\e[A" # style first header
H2="\n\e[30;104m\e[1K\n\e[A" # style second header
EH="\e[00m\n\e[2K" # end header
NAME=broot
version=$(./version.sh)
echo -e "${H1}Compilation of all targets for $NAME $version${EH}"
# Clean previous build
rm -rf build
mkdir build
echo " build cleaned"
# Build versions for other platforms using cargo cross
cross_build() {
export RUSTFLAGS=""
target_name="$1"
target="$2"
features="$3"
echo -e "${H2}Compiling the $target_name version (target=$target, features='$features')${EH}"
cargo clean --quiet
if [[ -n $features ]]
then
cross build --quiet --target "$target" --release --features "$features"
else
cross build --quiet --target "$target" --release
fi
mkdir "build/$target"
if [[ $target_name == 'Windows' ]]
then
exec="$NAME.exe"
else
exec="$NAME"
fi
cp "target/$target/release/$exec" "build/$target/"
echo " Done"
}
cross_build "x86-64 GLIBC" "x86_64-unknown-linux-gnu" "clipboard"
cross_build "NetBSD/amd64" "x86_64-unknown-netbsd" ""
cross_build "MUSL" "x86_64-unknown-linux-musl" ""
cross_build "ARM 32" "armv7-unknown-linux-gnueabihf" ""
cross_build "ARM 32 MUSL" "armv7-unknown-linux-musleabi" ""
cross_build "ARM 64" "aarch64-unknown-linux-gnu" ""
cross_build "ARM 64 MUSL" "aarch64-unknown-linux-musl" ""
cross_build "Windows" "x86_64-pc-windows-gnu" "clipboard"
# use zig to build a version for GLIBC 2.28
# cargo zigbuild must be installed before
target="x86_64-unknown-linux-gnu"
glibc_version="2.28"
zig_target="$target.$glibc_version"
echo -e "${H2}Compiling for $target with GLIBC $glibc_version version${EH}"
cargo zigbuild --release --target "$zig_target"
folder="$target-glibc$glibc_version"
mkdir "build/$folder"
cp "target/$target/release/$NAME" "build/$folder/"
echo " Done"
# use zig with docker to build a Mac version
target="aarch64-apple-darwin"
echo -e "${H2}Compiling for $target ${EH}"
docker run \
--rm -it -v $(pwd):/io -w /io ghcr.io/rust-cross/cargo-zigbuild \
cargo zigbuild --release --target "$target" --target-dir "zigbuild"
mkdir "build/$target"
cp "zigbuild/$target/release/$NAME" "build/$target/"
echo " Done"
# use cargo-ndk to build an android version
# cargo-ndk and the NDK must first be installed and ANDROID_NDK_HOME point to the NDK
ndk_target="x86_64"
target="${ndk_target}-linux-android"
echo -e "${H2}Compiling for $target ${EH}"
cargo ndk build -t $ndk_target --features clipboard --release
mkdir "build/$target"
cp "target/$target/release/$NAME" "build/$target/"
echo " Done"
# build the local version
target=$(./target.sh)
echo -e "${H2}Compiling the local target - $target${EH}"
cargo clean
cargo build --release --features "clipboard"
mkdir "build/$target/"
cp "target/release/$NAME" "build/$target/"
echo " Done"
# Find, and copy the completion scripts
# (they are re built as part of the normal compilation by build.rs)
echo -e "${H2}Copying completion scripts${EH}"
mkdir build/completion
cp "$(broot -c 'rp/release\/build\/broot-[^\/]+\/out\/broot.bash;:parent;:pp' target)/"* build/completion
echo " Done"
# copy the default conf
echo -e "${H2}copying default configuration${EH}"
cp -r resources/default-conf build
echo " Done"
# add the resource (the icons font)
echo -e "${H2}copying vscode-icon font${EH}"
mkdir build/resources
cp resources/icons/vscode/vscode.ttf build/resources
echo "the font file comes from https://github.com/vscode-icons/vscode-icons/ and is licensed as MIT" > build/resources/README.md
echo " Done"
# add a summary of content
echo '
This archive contains pre-compiled binaries.
For more information, or if you prefer to compile yourself, see https://dystroy.org/broot/install
' > build/install.md
echo -e "${H1}FINISHED${EH}"
================================================
FILE: build.rs
================================================
//! This file is executed during broot compilation.
//! It builds shell completion scripts and the man page
//!
//! Note: to see the eprintln messages, run cargo with
//! cargo -vv build --release
use {
clap::CommandFactory,
clap_complete::{Generator, Shell},
std::{env, ffi::OsStr},
};
include!("src/cli/args.rs");
/// The man page built by clap-mangen is too rough to be used as is. It's only
/// used as part of a manual process to update the one in /man/page
/// so this generation is usually not needed
pub const BUILD_MAN_PAGE: bool = false;
fn write_completions_file<G: Generator + Copy, P: AsRef<OsStr>>(
generator: G,
out_dir: P,
) {
let mut args = Args::command();
for name in &["broot", "br"] {
clap_complete::generate_to(generator, &mut args, (*name).to_string(), &out_dir)
.expect("clap complete generation failed");
}
}
/// write the shell completion scripts which will be added to
/// the release archive
fn build_completion_scripts() {
let out_dir = env::var_os("OUT_DIR").expect("out dir not set");
write_completions_file(Shell::Bash, &out_dir);
write_completions_file(Shell::Elvish, &out_dir);
write_completions_file(Shell::Fish, &out_dir);
write_completions_file(Shell::PowerShell, &out_dir);
write_completions_file(Shell::Zsh, &out_dir);
eprintln!("completion scripts generated in {out_dir:?}");
}
/// generate the man page from the Clap configuration
fn build_man_page() -> std::io::Result<()> {
let out_dir = env::var_os("OUT_DIR").expect("out dir not set");
let out_dir = PathBuf::from(out_dir);
let cmd = Args::command();
let man = clap_mangen::Man::new(cmd);
let mut buffer = Vec::<u8>::default();
man.render(&mut buffer)?;
let file_path = out_dir.join("broot.1");
std::fs::write(&file_path, buffer)?;
eprintln!("map page generated in {file_path:?}");
Ok(())
}
fn main() -> std::io::Result<()> {
build_completion_scripts();
if BUILD_MAN_PAGE {
build_man_page()?;
}
Ok(())
}
================================================
FILE: build.sh
================================================
# This script compiles broot for the local system
#
# After compilation, broot can be found in target/release
#
# If you're not a developer but just want to install broot to use it,
# you'll probably prefer one of the options listed at
# https://dystroy.org/broot/install
#
# Depending on your system, it's possible one of the 'features'
# won't compile for you. You may remove them (see features.md)
#
# The line below can be safely executed on systems which don't
# support sh scripts.
cargo build --release --features "clipboard"
================================================
FILE: features.md
================================================
This page defines the optional features which may be applied on compilation:
* clipboard
* trash
* kitty-csi-check
Feature gating is usually temporary: they may be removed when a technical problem is solved, when a feature becomes "mainstream", or when it's dropped because no user mentioned using it.
## The "clipboard" feature
This feature allows the `:copy_path` verb which copies the currently selected path into the clipboard, as well as copy-pasting from,to,within the input.
Limits:
- the feature doesn't compile right now on some platforms (for example Raspberry)
- on some platforms the content leaves the clipboard when you quit broot (so you must paste while broot is still running)
## The "trash" feature
This feature enables commands for managing the system Trash. They are `:open_trash`, `:delete_trashed_file`, `:restore_trashed_file`, `:purge_trash`.
## The "kitty-csi-check" feature
The Kitty graphics protocol allows displaying images in high resolution in broot.
Most terminals don't support it, so support must be verified.
Doing this with CSI escape sequences is a solution, but it involve delays and should only be enabled when this support can't be determined with [environment variables](https://dystroy.org/broot/launch/#environment-variables).
Enabling this feature is thus not recommended unless you use a terminal you know support this protocol and isn't recognized by broot. If this happen, please tell me so that we can update one of the fast checks.
================================================
FILE: man/page
================================================
.\" Manpage for broot
.\" Some items starting with a # are replaced on build
.TH broot 1 "#date" "#version" "broot manpage"
.SH NAME
broot \- Tree view, file manager, configurable launcher
.SH SYNOPSIS
.B broot
[\fIflags\fR]
[\fIoptions\fR]
[path]
.br
.B br
[\fIflags\fR]
[\fIoptions\fR]
[path]
.SH DESCRIPTION
\fBbroot\fR lets you explore file hierarchies with a tree-like view, manipulate files, launch actions, and define your own shortcuts.
.PP
\fBbroot\fR is best launched as \fBbr\fR: this shell function gives you access to more commands, especially \fIcd\fR. The \fBbr\fR shell function is interactively installed on first \fBbroot\fR launch.
.PP
Flags and options can be classically passed on launch but also written in the configuration file. Each flag has a counter-flag so that you can cancel at command line a flag which has been set in the configuration file.
.SH FLAGS
FLAGS
.TP
\fB\-d\fR, \fB\-\-dates\fR
Show the last modified date of files and directories
.TP
\fB\-D\fR, \fB\-\-no\-dates\fR
Don\*(Aqt show the last modified date
.TP
\fB\-f\fR, \fB\-\-only\-folders\fR
Only show folders
.TP
\fB\-F\fR, \fB\-\-no\-only\-folders\fR
Show folders and files alike
.TP
\fB\-\-show\-root\-fs\fR
Show filesystem info on top
.TP
\fB\-g\fR, \fB\-\-show\-git\-info\fR
Show git statuses on files and stats on repo
.TP
\fB\-G\fR, \fB\-\-no\-show\-git\-info\fR
Don\*(Aqt show git statuses on files and stats on repo
.TP
\fB\-\-git\-status\fR
Only show files having an interesting git status, including hidden ones
.TP
\fB\-\-help\fR
Print help information
.TP
\fB\-h\fR, \fB\-\-hidden\fR
Show hidden files
.TP
\fB\-H\fR, \fB\-\-no\-hidden\fR
Don\*(Aqt show hidden files
.TP
\fB\-i\fR, \fB\-\-git\-ignored\fR
Show git ignored files
.TP
\fB\-I\fR, \fB\-\-no\-git\-ignored\fR
Don\*(Aqt show git ignored files
.TP
\fB\-p\fR, \fB\-\-permissions\fR
Show permissions
.TP
\fB\-P\fR, \fB\-\-no\-permissions\fR
Don\*(Aqt show permissions
.TP
\fB\-s\fR, \fB\-\-sizes\fR
Show the size of files and directories
.TP
\fB\-S\fR, \fB\-\-no\-sizes\fR
Don\*(Aqt show sizes
.TP
\fB\-\-sort\-by\-count\fR
Sort by count (only show one level of the tree)
.TP
\fB\-\-sort\-by\-date\fR
Sort by date (only show one level of the tree)
.TP
\fB\-\-sort\-by\-size\fR
Sort by size (only show one level of the tree)
.TP
\fB\-\-sort\-by\-type\fR
Same as sort\-by\-type\-dirs\-first
.TP
\fB\-\-sort\-by\-type\-dirs\-first\fR
Sort by type, directories first (only show one level of the tree)
.TP
\fB\-\-sort\-by\-type\-dirs\-last\fR
Sort by type, directories last (only show one level of the tree)
.TP
\fB\-w\fR, \fB\-\-whale\-spotting\fR
Sort by size, show ignored and hidden files
.TP
\fB\-\-no\-sort\fR
Don\*(Aqt sort
.TP
\fB\-t\fR, \fB\-\-trim\-root\fR
Trim the root too and don\*(Aqt show a scrollbar
.TP
\fB\-T\fR, \fB\-\-no\-trim\-root\fR
Don\*(Aqt trim the root level, show a scrollbar
.TP
\fB\-\-outcmd\fR=\fIOUTCMD\fR
Where to write the produced cmd (if any)
.TP
\fB\-c\fR, \fB\-\-cmd\fR=\fICMD\fR
Semicolon separated commands to execute
.TP
\fB\-\-color\fR=\fICOLOR\fR [default: auto]
Whether to have styles and colors (default is usually OK)
.br
.br
[\fIpossible values: \fRauto, yes, no]
.TP
\fB\-\-conf\fR=\fICONF\fR
Semicolon separated paths to specific config files
.TP
\fB\-\-height\fR=\fIHEIGHT\fR
Height (if you don\*(Aqt want to fill the screen or for file export)
.TP
\fB\-\-install\fR
Install or reinstall the br shell function
.TP
\fB\-\-set\-install\-state\fR=\fISET_INSTALL_STATE\fR
Where to write the produced cmd (if any)
.br
.br
[\fIpossible values: \fRundefined, refused, installed]
.TP
\fB\-\-print\-shell\-function\fR=\fIPRINT_SHELL_FUNCTION\fR
Print to stdout the br function for a given shell
.TP
\fB\-\-listen\fR=\fILISTEN\fR
A socket to listen to for commands
.TP
\fB\-\-get\-root\fR
Ask for the current root of the remote broot
.TP
\fB\-\-write\-default\-conf\fR=\fIWRITE_DEFAULT_CONF\fR
Write default conf files in given directory
.TP
\fB\-\-send\fR=\fISEND\fR
A socket that broot sends commands to before quitting
.TP
\fB\-V\fR, \fB\-\-version\fR
Print version
.TP
.SH BUGS
.PP
.B broot
is known to be slow on most \fIWindows\fR installations.
.PP
On unix and mac platforms, most problems you may encounter are related to some terminals or terminal multiplexers which either intercepts some standard TTY instructions or break buffering or size querying. The list of shortcuts you can define in the config file is thus dependent of your system.
.SH AUTHOR
.B broot
is free and open-source and is written by \fIdenys.seguret@gmail.com\fR. The source code and documentation are available at https://dystroy.org/broot
================================================
FILE: release.sh
================================================
# build a new release of broot
# This isn't used for normal compilation (see https://dystroy.org/broot for instruction)
# but for building the official releases
version=$(./version.sh)
echo "Building release $version"
# make the build directory and compile for all targets
./build-all-targets.sh
# add the readme and changelog in the build directory
echo "This is broot. More info and installation instructions on https://dystroy.org/broot" > build/README.md
cp CHANGELOG.md build
# add the man page and fix its date and version
cp man/page build/broot.1
sed -i "s/#version/$version/g" build/broot.1
sed -i "s/#date/$(date +'%Y\/%m\/%d')/g" build/broot.1
# publish version number
echo "$version" > build/version
# prepare the release archive
rm broot_*.zip
cd build
zip -r "../broot_$version.zip" *
cd -
# copy it to releases folder
mkdir -p releases/broot_${version}
cp "broot_$version.zip" releases/broot_${version}
================================================
FILE: resources/default-conf/conf.hjson
================================================
###############################################################
# This configuration file lets you
# - define new commands
# - change the shortcut or triggering keys of built-in verbs
# - change the colors
# - set default values for flags
# - set special behaviors on specific paths
# - and more...
#
# Configuration documentation is available at
# https://dystroy.org/broot
#
# This file's format is Hjson ( https://hjson.github.io/ ). Some
# properties are commented out. To enable them, remove the `#`.
#
###############################################################
###############################################################
# Default flags
# You can set up flags you want broot to start with by
# default, for example `default_flags="-ihp"` if you usually want
# to see hidden and gitignored files and the permissions (then
# if you don't want the hidden files at a specific launch,
# you can launch broot with `br -H`).
# A popular flag is the `g` one which displays git related info.
#
# default_flags:
###############################################################
# Terminal's title
# If you want the terminal's title to be updated when you change
# directory, set a terminal_title pattern by uncommenting one of
# the examples below and tuning it to your taste.
#
# terminal_title: "[broot] {git-name}"
# terminal_title: "{file} 🐄"
# terminal_title: "-= {file-name} =-"
# reset_terminal_title_on_exit: false
###############################################################
# Date/Time format
# If you want to change the format for date/time, uncomment the
# following line and change it according to
# https://docs.rs/chrono/0.4.11/chrono/format/strftime/index.html
#
# date_time_format: %Y/%m/%d %R
###############################################################
# uncomment to activate modal mode
#
# (you really should read https://dystroy.org/broot/modal/
# before as it may not suit everybody even among vim users)
#
# You may start either in 'command' mode, or in 'input' mode
#
# modal: true
# initial_mode: command
###############################################################
# Whether to mark the selected line with a triangle
#
show_selection_mark: true
###############################################################
# Column order
# cols_order, if specified, must be a permutation of the following
# array. You should keep the name column at the end as it has a
# variable length.
#
# cols_order: [
# mark
# git
# size
# permission
# date
# count
# branch
# name
# ]
###############################################################
# True Colors
# If this parameter isn't set, broot tries to automatically
# determine whether true colors (24 bits) are available.
# As this process is unreliable, you may uncomment this setting
# and set it to false or true if you notice the colors in
# previewed images are too off.
#
# true_colors: false
###############################################################
# Icons
# If you want to display icons in broot, uncomment this line
# (see https://dystroy.org/broot/icons for installation and
# troubleshooting)
#
# icon_theme: vscode
###############################################################
# Special paths
# If some paths must be handled specially, uncomment (and change
# this section as per the examples)
# Setting "list":"never" on a dir prevents broot from looking at its
# children when searching, unless the dir is the selected root.
# Setting "sum":"never" on a dir prevents broot from looking at its
# children when computing the total size and count of files.
# Setting "show":"always" makes a file visible even if its name
# starts with a dot.
# Setting "list":"always" may be useful on a link to a directory
# (they're otherwise not entered by broot unless selected)
#
special_paths: {
"/media" : {
list: "never"
sum: "never"
}
"~/.config": { "show": "always" }
"trav": {
show: always
list: "always",
sum: "never"
}
# "~/useless": { "show": "never" }
# "~/my-link-I-want-to-explore": { "list": "always" }
}
###############################################################
# Quit on last cancel
# You can usually cancel the last state change on escape.
# If you want the escape key to quit broot when there's nothing
# to cancel (for example when you just opened broot), uncomment
# this parameter
#
# quit_on_last_cancel: true
###############################################################
# Search modes
#
# broot allows many search modes.
# A search mode is defined by
# - the way to search: 'fuzzy', 'exact', 'regex', or 'tokens'.
# - where to search: file 'name', 'path', or file 'content'
# A search pattern may for example be "fuzzy path" (default),
# "regex content" or "exact path".
#
# The search mode is selected from its prefix. For example, if
# you type "abc", the default mode is "fuzzy path". If you type
# "/abc", the mode is "regex path". If you type "rn/abc", the mode
# is "regex name".
#
# This mapping may be modified. You may want to dedicate the
# empty prefix (the one which doesn't need a '/') to the
# search mode you use most often. The example below makes it
# easy to search on name rather than on the subpath.
#
# More information on
# https://dystroy.org/broot/input/#the-filtering-pattern
#
# search_modes: {
# <empty>: fuzzy name
# /: regex name
# }
###############################################################
# File Extension Colors
#
# uncomment and modify the next section if you want to color
# file name depending on their extension
#
# ext_colors: {
# png: rgb(255, 128, 75)
# rs: yellow
# }
###############################################################
# Max file size for content search
#
# Bigger files are ignored when searching their content. You
# can specify this size either in ISO units (eg 5GB) or in
# the old binary units (eg 44Kib)
content_search_max_file_size: 10MB
###############################################################
# Max Panels Count
#
# Change this if you sometimes want to have more than 2 panels
# open
# max_panels_count: 2
###############################################################
# Update work dir
#
# By default, broot process' work dir is kept in sync with the
# current's panel root. If you want to keep it unchanged,
# uncomment this setting
#
# update_work_dir: false
###############################################################
# Kitty Keyboard extension
#
# If you want to use advanced keyboard shortcuts in Kitty
# compatible terminals (Kitty, Wezterm), set this to true.
#
# This makes it possible to use shortcuts like 'space-n',
# 'ctrl-alt-a-b', 'shift-space', etc.
#
enable_kitty_keyboard: false
###############################################################
# lines around matching line in filtered preview
#
# When searching the content of a file, you can have either
# only the matching lines displayed, or some of the surrounding
# ones too.
#
lines_before_match_in_preview: 1
lines_after_match_in_preview: 1
###############################################################
# transformations before preview
#
# It's possible to define transformations to apply to some files
# before calling one of the default preview renderers in broot.
# Below are three examples that you may uncomment and adapt:
#
preview_transformers: [
// # Use mutool to render any PDF file as an image
// # In this example we use placeholders for the input and output files
// {
// input_extensions: [ "pdf" ] // case doesn't matter
// output_extension: png
// mode: image
// command: [ "mutool", "draw", "-w", "1000", "-o", "{output-path}", "{input-path}" ]
// }
// # Use LibreOffice to render Office files as images
// # In this example, {output-dir} is used to specify where LibreOffice must write the result
// {
// input_extensions: [ "xls", "xlsx", "doc", "docx", "ppt", "pptx", "ods", "odt", "odp" ]
// output_extension: png
// mode: image
// command: [
// "libreoffice", "--headless",
// "--convert-to", "png",
// "--outdir", "{output-dir}",
// "{input-path}"
// ]
// }
// # Use jq to beautify JSON
// # In this example, the command refers to neither the input nor the output,
// # so broot pipes them to the stdin and stdout of the jq process
// {
// input_extensions: [ "json" ]
// output_extension: json
// mode: text
// command: [ "jq" ]
// }
// # Use zmore to preview compressed text files
// {
// input_extensions: [ "gz", "z", "tgz" ] // case doesn't matter
// output_extension: txt
// mode: text
// command: [ "zmore" ]
// }
]
###############################################################
# Imports
#
# While it's possible to have all configuration in one file,
# it's more convenient to split it in several ones.
# Importing also allows to set a condition on the terminal's
# color, which makes it possible to have a different skin
# chosen when your terminal has a light background and when
# it has a light one.
imports: [
# Verbs are better configured in verbs.hjson. But you
# can also add another files for your personal verbs
verbs.hjson
# This file contains the skin to use when the terminal
# is dark (or when this couldn't be determined)
{
luma: [
dark
unknown
]
# (un)comment to choose your preferred skin
file: skins/dark-blue.hjson
//file: skins/catppuccin-macchiato.hjson
//file: skins/catppuccin-mocha.hjson
//file: skins/dark-gruvbox.hjson
//file: skins/dark-orange.hjson
//file: skins/solarized-dark.hjson
}
# This skin is imported when your terminal is light
{
luma: light
# (un)comment to choose your preferred skin
//file: skins/solarized-light.hjson
file: skins/white.hjson
}
]
================================================
FILE: resources/default-conf/skins/catppuccin-macchiato.hjson
================================================
###############################################################
# A skin for a terminal with a dark background
# This skin uses RGB values so won't work for some
# terminals.
#
# Created by Majixed
# Based on the catppuccin-mocha theme by A. Taha Baki <atahabaki@pm.me>
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
input: rgb(202, 211, 245) none
# fg:none bg:$surface2
selected_line: none rgb(91, 96, 120)
# fg:$text bg:none
default: rgb(202, 211, 245) none
# fg:$overlay0 bg:none
tree: rgb(110, 115, 141) none
# fg:$sapphire bg:none
parent: rgb(125, 196, 228) none
file: none none
#
### PERMISSIONS
#
perm__: rgb(184, 192, 224) none
# $peach
perm_r: rgb(245, 169, 127) none
# $maroon
perm_w: rgb(238, 153, 160) none
# $green
perm_x: rgb(166, 218, 149) none
# $teal
owner: rgb(139, 213, 202) none
# $sky
group: rgb(145, 215, 227) none
#
### DATE
#
# $subtext1
dates: rgb(184, 192, 224) none
#
### DIRECTORY
#
# $lavender
directory: rgb(183, 189, 248) none Bold
# $green
exe: rgb(166, 218, 149) none
# $yellow
link: rgb(238, 212, 159) none
# $subtext0
pruning: rgb(165, 173, 203) none Italic
#
### PREVIEW
#
# fg:$text bg:$mantle
preview_title: rgb(202, 211, 245) rgb(30, 32, 48)
# fg:$text bg:$mantle
preview: rgb(202, 211, 245) rgb(30, 32, 48)
# fg:$overlay0
preview_line_number: rgb(110, 115, 141) none
# fg:$overlay0
preview_separator: rgb(110, 115, 141) none
#
### MATCH
#
char_match: rgb(238, 212, 159) rgb(73, 77, 100) Bold Italic
content_match: rgb(238, 212, 159) rgb(73, 77, 100) Bold Italic
preview_match: rgb(238, 212, 159) rgb(73, 77, 100) Bold Italic
# children count
# fg:$yellow bg:none
count: rgb(238, 212, 159) none
sparse: rgb(237, 135, 150) none
content_extract: rgb(237, 135, 150) none Italic
#
### GIT
#
git_branch: rgb(245, 169, 127) none
git_insertions: rgb(245, 169, 127) none
git_deletions: rgb(245, 169, 127) none
git_status_current: rgb(245, 169, 127) none
git_status_modified: rgb(245, 169, 127) none
git_status_new: rgb(245, 169, 127) none Bold
git_status_ignored: rgb(245, 169, 127) none
git_status_conflicted: rgb(245, 169, 127) none
git_status_other: rgb(245, 169, 127) none
staging_area_title: rgb(245, 169, 127) none
#
### FLAG
#
flag_label: rgb(237, 135, 150) none
flag_value: rgb(237, 135, 150) none Bold
#
### STATUS
#
# fg:none #bg:$mantle
status_normal: none rgb(30, 32, 48)
# fg:$red bg:$mantle
status_italic: rgb(237, 135, 150) rgb(30, 32, 48) Italic
# fg:$maroon bg:$mantle
status_bold: rgb(238, 153, 160) rgb(30, 32, 48) Bold
# fg:$maroon bg:$mantle
status_ellipsis: rgb(238, 153, 160) rgb(30, 32, 48) Bold
# fg:$text bg:$red
status_error: rgb(202, 211, 245) rgb(237, 135, 150)
# fg:$maroon bg:$mantle
status_job: rgb(238, 153, 160) rgb(40, 38, 37)
# fg:$maroon bg:$mantle
status_code: rgb(238, 153, 160) rgb(30, 32, 48) Italic
# fg:$maroon bg:$mantle
mode_command_mark: rgb(238, 153, 160) rgb(30, 32, 48) Bold
#
### HELP
#
# fg:$text
help_paragraph: rgb(202, 211, 245) none
# fg:$red
help_headers: rgb(237, 135, 150) none Bold
# fg:$peach
help_bold: rgb(245, 169, 127) none Bold
# fg:$yellow
help_italic: rgb(238, 212, 159) none Italic
# fg:green bg:$surface0
help_code: rgb(166, 218, 149) rgb(54, 58, 79)
# fg:$overlay0
help_table_border: rgb(110, 115, 141) none
#
### HEX
#
# fg:$text
hex_null: rgb(202, 211, 245) none
# fg:$peach
hex_ascii_graphic: rgb(245, 169, 127) none
# fg:$green
hex_ascii_whitespace: rgb(166, 218, 149) none
# fg: teal
hex_ascii_other: rgb(139, 213, 202) none
# fg: red
hex_non_ascii: rgb(237, 135, 150) none
# fg:$text bg:$red
file_error: rgb(243, 60, 44) none
#
### PURPOSE
#
purpose_normal: none none
purpose_italic: rgb(169, 90, 127) none Italic
purpose_bold: rgb(169, 90, 127) none Bold
purpose_ellipsis: none none
#
### SCROLLBAR
#
# fg:$surface0
scrollbar_track: rgb(54, 58, 79) none
# fg:$surface1
scrollbar_thumb: rgb(91, 96, 120) none
#
### GOODTOBAD
#
good_to_bad_0: rgb(166, 218, 149) none
good_to_bad_1: rgb(139, 213, 202) none
good_to_bad_2: rgb(145, 215, 227) none
good_to_bad_3: rgb(125, 196, 228) none
good_to_bad_4: rgb(138, 173, 244) none
good_to_bad_5: rgb(183, 189, 248) none
good_to_bad_6: rgb(198, 160, 246) none
good_to_bad_7: rgb(245, 169, 127) none
good_to_bad_8: rgb(238, 153, 160) none
good_to_bad_9: rgb(237, 135, 150) none
}
================================================
FILE: resources/default-conf/skins/catppuccin-mocha.hjson
================================================
###############################################################
# A skin for a terminal with a dark background
# This skin uses RGB values so won't work for some
# terminals.
#
# Created by A. Taha Baki <atahabaki@pm.me>
# Based on the built-in gruvbox theme.
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
input: rgb(205, 214, 244) none
# fg:none bg:$surface2
selected_line: none rgb(88, 91, 112)
# fg:$text bg:none
default: rgb(205, 214, 244) none
# fg:$overlay0 bg:none
tree: rgb(108, 112, 134) none
# fg:$sapphire bg:none
parent: rgb(116, 199, 236) none
file: none none
#
### PERMISSIONS
#
perm__: rgb(186, 194, 222) none
# $peach
perm_r: rgb(250, 179, 135) none
# $maroon
perm_w: rgb(235, 160, 172) none
# $green
perm_x: rgb(166, 227, 161) none
# $teal
owner: rgb(148, 226, 213) none
# $sky
group: rgb(137, 220, 235) none
#
### DATE
#
# $subtext1
dates: rgb(186, 194, 222) none
#
### DIRECTORY
#
# $lavender
directory: rgb(180, 190, 254) none Bold
# $green
exe: rgb(166, 227, 161) none
# $yellow
link: rgb(249, 226, 175) none
# $subtext0
pruning: rgb(166, 173, 200) none Italic
#
### PREVIEW
#
# fg:$text bg:$mantle
preview_title: rgb(205, 214, 244) rgb(24, 24, 37)
# fg:$text bg:$mantle
preview: rgb(205, 214, 244) rgb(24, 24, 37)
# fg:$overlay0
preview_line_number: rgb(108, 112, 134) none
# fg:$overlay0
preview_separator: rgb(108, 112, 134) none
#
### MATCH
#
char_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic
content_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic
preview_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic
# children count
# fg:$yellow bg:none
count: rgb(249, 226, 175) none
sparse: rgb(243, 139, 168) none
content_extract: rgb(243, 139, 168) none Italic
#
### GIT
#
git_branch: rgb(250, 179, 135) none
git_insertions: rgb(250, 179, 135) none
git_deletions: rgb(250, 179, 135) none
git_status_current: rgb(250, 179, 135) none
git_status_modified: rgb(250, 179, 135) none
git_status_new: rgb(250, 179, 135) none Bold
git_status_ignored: rgb(250, 179, 135) none
git_status_conflicted: rgb(250, 179, 135) none
git_status_other: rgb(250, 179, 135) none
staging_area_title: rgb(250, 179, 135) none
#
### FLAG
#
flag_label: rgb(243, 139, 168) none
flag_value: rgb(243, 139, 168) none Bold
#
### STATUS
#
# fg:none #bg:$mantle
status_normal: none rgb(24, 24, 37)
# fg:$red bg:$mantle
status_italic: rgb(243, 139, 168) rgb(24, 24, 37) Italic
# fg:$maroon bg:$mantle
status_bold: rgb(235, 160, 172) rgb(24, 24, 37) Bold
# fg:$maroon bg:$mantle
status_ellipsis: rgb(235, 160, 172) rgb(24, 24, 37) Bold
# fg:$text bg:$red
status_error: rgb(205, 214, 244) rgb(243, 139, 168)
# fg:$maroon bg:$mantle
status_job: rgb(235, 160, 172) rgb(40, 38, 37)
# fg:$maroon bg:$mantle
status_code: rgb(235, 160, 172) rgb(24, 24, 37) Italic
# fg:$maroon bg:$mantle
mode_command_mark: rgb(235, 160, 172) rgb(24, 24, 37) Bold
#
### HELP
#
# fg:$text
help_paragraph: rgb(205, 214, 244) none
# fg:$red
help_headers: rgb(243, 139, 168) none Bold
# fg:$peach
help_bold: rgb(250, 179, 135) none Bold
# fg:$yellow
help_italic: rgb(249, 226, 175) none Italic
# fg:green bg:$surface0
help_code: rgb(166, 227, 161) rgb(49, 50, 68)
# fg:$overlay0
help_table_border: rgb(108, 112, 134) none
#
### HEX
#
# fg:$text
hex_null: rgb(205, 214, 244) none
# fg:$peach
hex_ascii_graphic: rgb(250, 179, 135) none
# fg:$green
hex_ascii_whitespace: rgb(166, 227, 161) none
# fg: teal
hex_ascii_other: rgb(148, 226, 213) none
# fg: red
hex_non_ascii: rgb(243, 139, 168) none
# fg:$text bg:$red
file_error: rgb(251, 73, 52) none
#
### PURPOSE
#
purpose_normal: none none
purpose_italic: rgb(177, 98, 134) none Italic
purpose_bold: rgb(177, 98, 134) none Bold
purpose_ellipsis: none none
#
### SCROLLBAR
#
# fg:$surface0
scrollbar_track: rgb(49, 50, 68) none
# fg:$surface1
scrollbar_thumb: rgb(88, 91, 112) none
#
### GOODTOBAD
#
good_to_bad_0: rgb(166, 227, 161) none
good_to_bad_1: rgb(148, 226, 213) none
good_to_bad_2: rgb(137, 220, 235) none
good_to_bad_3: rgb(116, 199, 236) none
good_to_bad_4: rgb(137, 180, 250) none
good_to_bad_5: rgb(180, 190, 254) none
good_to_bad_6: rgb(203, 166, 247) none
good_to_bad_7: rgb(250, 179, 135) none
good_to_bad_8: rgb(235, 160, 172) none
good_to_bad_9: rgb(243, 139, 168) none
}
================================================
FILE: resources/default-conf/skins/dark-blue.hjson
================================================
###############################################################
# A skin for a terminal with a dark background
#
# To create your own skin, copy this file, change the entries
# and import your skin file from the main conf file (look
# for "imports")
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
###############################################################
# Skin
# If you want to change the colors of broot,
# uncomment the following block and start messing
# with the various values.
# A skin entry value is made of two parts separated with a '/':
# The first one is the skin for the active panel.
# The second one, optional, is the skin for non active panels.
# You may find explanations and other skins on
# https://dystroy.org/broot/skins
###############################################################
skin: {
default: gray(22) none / gray(20) none
tree: gray(8) None / gray(4) None
parent: gray(18) None / gray(13) None
file: gray(22) None / gray(15) None
directory: ansi(110) None bold / ansi(110) None
exe: Cyan None
link: Magenta None
pruning: gray(12) None Italic
perm__: gray(5) None
perm_r: ansi(94) None
perm_w: ansi(132) None
perm_x: ansi(65) None
owner: ansi(138) None
group: ansi(131) None
count: ansi(138) gray(4)
dates: ansi(66) None
sparse: ansi(214) None
content_extract: ansi(29) None
content_match: ansi(34) None
device_id_major: ansi(138) None
device_id_sep: ansi(102) None
device_id_minor: ansi(138) None
git_branch: ansi(178) None
git_insertions: ansi(28) None
git_deletions: ansi(160) None
git_status_current: gray(5) None
git_status_modified: ansi(28) None
git_status_new: ansi(94) None bold
git_status_ignored: gray(17) None
git_status_conflicted: ansi(88) None
git_status_other: ansi(88) None
selected_line: None gray(6) / None gray(4)
char_match: Green None
file_error: Red None
flag_label: gray(15) gray(2)
flag_value: ansi(178) gray(2) bold
input: White gray(2) / gray(15) None
status_error: gray(22) ansi(124)
status_job: ansi(220) gray(5)
status_normal: gray(20) gray(4) / gray(2) gray(2)
status_italic: ansi(178) gray(4) / gray(2) gray(2)
status_bold: ansi(178) gray(4) bold / gray(2) gray(2)
status_code: ansi(229) gray(4) / gray(2) gray(2)
status_ellipsis: gray(19) gray(1) / gray(2) gray(2)
purpose_normal: gray(20) gray(2)
purpose_italic: ansi(178) gray(2)
purpose_bold: ansi(178) gray(2) bold
purpose_ellipsis: gray(20) gray(2)
scrollbar_track: gray(7) None / gray(4) None
scrollbar_thumb: gray(22) None / gray(14) None
help_paragraph: gray(20) None
help_bold: ansi(178) None bold
help_italic: ansi(229) None
help_code: gray(21) gray(3)
help_headers: ansi(178) None
help_table_border: ansi(239) None
preview: gray(20) gray(1) / gray(18) gray(2)
preview_title: gray(23) gray(2) / gray(21) gray(2)
preview_line_number: gray(12) gray(3)
preview_separator: gray(5) None
preview_match: None ansi(29)
hex_null: gray(8) None
hex_ascii_graphic: gray(18) None
hex_ascii_whitespace: ansi(143) None
hex_ascii_other: ansi(215) None
hex_non_ascii: ansi(167) None
staging_area_title: gray(22) gray(2) / gray(20) gray(3)
mode_command_mark: gray(5) ansi(204) bold
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
###############################################################
# Syntax Theme
#
# If you want to choose the theme used for preview, uncomment
# one of the following lines:
#
# syntax_theme: GitHub
# syntax_theme: SolarizedDark
# syntax_theme: SolarizedLight
syntax_theme: MochaDark
# syntax_theme: OceanDark
# syntax_theme: OceanLight
================================================
FILE: resources/default-conf/skins/dark-gruvbox.hjson
================================================
###############################################################
# A skin for a terminal with a dark background
# This skin uses RGB values so won't work for some
# terminals.
#
#
# (initially contributed by @basbebe)
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
default: rgb(235, 219, 178) none / rgb(189, 174, 147) none
tree: rgb(70, 70, 80) None / rgb(60, 60, 60) None
parent: rgb(235, 219, 178) none / rgb(189, 174, 147) none Italic
file: None None / None None Italic
directory: rgb(131, 165, 152) None Bold / rgb(131, 165, 152) None
exe: rgb(184, 187, 38) None
link: rgb(104, 157, 106) None
pruning: rgb(124, 111, 100) None Italic
perm__: None None
perm_r: rgb(215, 153, 33) None
perm_w: rgb(204, 36, 29) None
perm_x: rgb(152, 151, 26) None
owner: rgb(215, 153, 33) None Bold
group: rgb(215, 153, 33) None
count: rgb(69, 133, 136) rgb(50, 48, 47)
dates: rgb(168, 153, 132) None
sparse: rgb(250, 189,47) None
content_extract: ansi(29) None Italic
content_match: ansi(34) None Bold
git_branch: rgb(251, 241, 199) None
git_insertions: rgb(152, 151, 26) None
git_deletions: rgb(190, 15, 23) None
git_status_current: rgb(60, 56, 54) None
git_status_modified: rgb(152, 151, 26) None
git_status_new: rgb(104, 187, 38) None Bold
git_status_ignored: rgb(213, 196, 161) None
git_status_conflicted: rgb(204, 36, 29) None
git_status_other: rgb(204, 36, 29) None
selected_line: None rgb(60, 56, 54) / None rgb(50, 48, 47)
char_match: rgb(250, 189, 47) None
file_error: rgb(251, 73, 52) None
flag_label: rgb(189, 174, 147) None
flag_value: rgb(211, 134, 155) None Bold
input: rgb(251, 241, 199) None / rgb(189, 174, 147) None Italic
status_error: rgb(213, 196, 161) rgb(204, 36, 29)
status_job: rgb(250, 189, 47) rgb(60, 56, 54)
status_normal: None rgb(40, 38, 37) / None None
status_italic: rgb(211, 134, 155) rgb(40, 38, 37) Italic / None None
status_bold: rgb(211, 134, 155) rgb(40, 38, 37) Bold / None None
status_code: rgb(251, 241, 199) rgb(40, 38, 37) / None None
status_ellipsis: rgb(251, 241, 199) rgb(40, 38, 37) Bold / None None
purpose_normal: None None
purpose_italic: rgb(177, 98, 134) None Italic
purpose_bold: rgb(177, 98, 134) None Bold
purpose_ellipsis: None None
scrollbar_track: rgb(80, 73, 69) None / rgb(50, 48, 47) None
scrollbar_thumb: rgb(213, 196, 161) None / rgb(102, 92, 84) None
help_paragraph: None None
help_bold: rgb(214, 93, 14) None Bold
help_italic: rgb(211, 134, 155) None Italic
help_code: rgb(142, 192, 124) rgb(50, 48, 47)
help_headers: rgb(254, 128, 25) None Bold
help_table_border: rgb(80, 73, 69) None
preview_title: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(189, 174, 147) rgb(40, 40, 40)
preview: rgb(235, 219, 178) None / rgb(235, 219, 178) None
preview_line_number: rgb(124, 111, 100) rgb(40, 40, 40) / rgb(124, 111, 100) None
preview_separator: rgb(70, 70, 80) None / rgb(60, 60, 60) None
preview_match: None ansi(29) Bold
hex_null: rgb(189, 174, 147) None
hex_ascii_graphic: rgb(213, 196, 161) None
hex_ascii_whitespace: rgb(152, 151, 26) None
hex_ascii_other: rgb(254, 128, 25) None
hex_non_ascii: rgb(214, 93, 14) None
staging_area_title: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(189, 174, 147) rgb(40, 40, 40)
mode_command_mark: gray(5) ansi(204) Bold
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
================================================
FILE: resources/default-conf/skins/dark-orange.hjson
================================================
###############################################################
# A skin for a terminal with a dark background
#
# To create your own skin, copy this file, change the entries
# and import your skin file from the main conf file (look
# for "imports")
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
###############################################################
# Skin
# If you want to change the colors of broot,
# uncomment the following bloc and start messing
# with the various values.
# A skin entry value is made of two parts separated with a '/':
# The first one is the skin for the active panel.
# The second one, optional, is the skin for non active panels.
# You may find explanations and other skins on
# https://dystroy.org/broot/skins
###############################################################
skin: {
default: none none / gray(20) none
tree: ansi(94) None / gray(3) None
parent: gray(18) None / gray(13) None
file: gray(20) None / gray(15) None
directory: ansi(208) None Bold / ansi(172) None bold
exe: Cyan None
link: Magenta None
pruning: gray(12) None Italic
perm__: gray(5) None
perm_r: ansi(94) None
perm_w: ansi(132) None
perm_x: ansi(65) None
owner: ansi(138) None
group: ansi(131) None
count: ansi(136) gray(3)
dates: ansi(66) None
sparse: ansi(214) None
content_extract: ansi(29) None
content_match: ansi(34) None
git_branch: ansi(229) None
git_insertions: ansi(28) None
git_deletions: ansi(160) None
git_status_current: gray(5) None
git_status_modified: ansi(28) None
git_status_new: ansi(94) None Bold
git_status_ignored: gray(17) None
git_status_conflicted: ansi(88) None
git_status_other: ansi(88) None
selected_line: None gray(5) / None gray(4)
char_match: Yellow None
file_error: Red None
flag_label: gray(15) None
flag_value: ansi(208) None Bold
input: White None / gray(15) gray(2)
status_error: gray(22) ansi(124)
status_job: ansi(220) gray(5)
status_normal: gray(20) gray(3) / gray(2) gray(2)
status_italic: ansi(208) gray(3) / gray(2) gray(2)
status_bold: ansi(208) gray(3) Bold / gray(2) gray(2)
status_code: ansi(229) gray(3) / gray(2) gray(2)
status_ellipsis: gray(19) gray(1) / gray(2) gray(2)
purpose_normal: gray(20) gray(2)
purpose_italic: ansi(178) gray(2)
purpose_bold: ansi(178) gray(2) Bold
purpose_ellipsis: gray(20) gray(2)
scrollbar_track: gray(7) None / gray(4) None
scrollbar_thumb: gray(22) None / gray(14) None
help_paragraph: gray(20) None
help_bold: ansi(208) None Bold
help_italic: ansi(166) None
help_code: gray(21) gray(3)
help_headers: ansi(208) None
help_table_border: ansi(239) None
preview: gray(20) gray(1) / gray(18) gray(2)
preview_line_number: gray(12) gray(3)
preview_separator: ansi(94) None / gray(3) None
preview_match: None ansi(29)
hex_null: gray(11) None
hex_ascii_graphic: gray(18) None
hex_ascii_whitespace: ansi(143) None
hex_ascii_other: ansi(215) None
hex_non_ascii: ansi(167) None
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
###############################################################
# Syntax Theme
#
# If you want to choose the theme used for preview, uncomment
# one of the following lines:
#
# syntax_theme: GitHub
syntax_theme: SolarizedDark
# syntax_theme: SolarizedLight
# syntax_theme: MochaDark
# syntax_theme: OceanDark
# syntax_theme: OceanLight
================================================
FILE: resources/default-conf/skins/native-16.hjson
================================================
###############################################################
# 16 ANSI color theme. Colors in this theme are restricted from
# ANSI color 0 - 15. This will allow the theme to adapt to your
# terminal emulator's theme. Note that, for now, the preview
# mode does not yet support this theme because of syntect not
# having a 16 ansi color theme.
#
# More info at https://jeffkreeftmeijer.com/vim-16-color/
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
directory: ansi(12)
file: ansi(7)
pruning: ansi(8) none italic
selected_line: none ansi(0)
tree: ansi(8)
# Search
char_match: ansi(3) none underlined
parent: ansi(4) none bold
# File properties
exe: ansi(2)
link: ansi(13)
sparse: ansi(12)
# Prompt
input: ansi(6)
# Status bar
status_bold: ansi(7) ansi(8) bold
status_code: ansi(10) ansi(8)
status_ellipsis: ansi(7) ansi(8)
status_error: ansi(7) ansi(8)
status_italic: ansi(7) ansi(8) italic
status_job: ansi(7) ansi(8)
status_normal: ansi(7) ansi(8)
# Flag status
flag_label: ansi(6)
flag_value: ansi(14) none bold
# Background
default: none none
# Scrollbar
scrollbar_track: ansi(0)
scrollbar_thumb: ansi(3)
# Git
git_branch: ansi(13)
git_deletions: ansi(1)
git_insertions: ansi(2)
git_status_conflicted: ansi(1)
git_status_current: ansi(6)
git_status_ignored: ansi(8)
git_status_modified: ansi(3)
git_status_new: ansi(2) none bold
git_status_other: ansi(5)
# Staging area
staging_area_title: ansi(3)
# Documentation
help_bold: ansi(7) none bold
help_code: ansi(4)
help_headers: ansi(3)
help_italic: ansi(7) none italic
help_paragraph: ansi(7)
help_table_border: ansi(8)
# Device column
device_id_major: ansi(5)
device_id_minor: ansi(5)
device_id_sep: ansi(5)
# Counts column
count: ansi(13)
# Dates column
dates: ansi(6)
# Permissions column
group: ansi(3)
owner: ansi(3)
perm__: ansi(8)
perm_r: ansi(3)
perm_w: ansi(1)
perm_x: ansi(2)
# Hex preview
hex_null: ansi(8)
hex_ascii_graphic: ansi(2)
hex_ascii_whitespace: ansi(3)
hex_ascii_other: ansi(4)
hex_non_ascii: ansi(5)
# Preview
# preview: none
# preview_line_number: none
# preview_match: none
# preview_title: none
# Used for displaying errors
file_error: ansi(1)
# Content searches
content_extract: ansi(7)
content_match: ansi(3) none underlined
# Used in status line
purpose_bold: ansi(0) ansi(7) bold
purpose_ellipsis: ansi(0)
purpose_italic: ansi(0) ansi(7) italic
purpose_normal: ansi(0)
# Modal indicator
mode_command_mark: ansi(7) ansi(4)
# File system occupation
good_to_bad_0: ansi(2)
good_to_bad_1: ansi(2)
good_to_bad_2: ansi(2)
good_to_bad_3: ansi(2)
good_to_bad_4: ansi(2)
good_to_bad_5: ansi(1)
good_to_bad_6: ansi(1)
good_to_bad_7: ansi(1)
good_to_bad_8: ansi(1)
good_to_bad_9: ansi(1)
}
================================================
FILE: resources/default-conf/skins/solarized-dark.hjson
================================================
// contributed by [@danieltrautmann](https://github.com/danieltrautmann)
//
//
// The Solarized Dark skin uses RGB values, so it might not work well with some
// terminals
//
// Doc at https://dystroy.org/broot/skins/
skin: {
default: "rgb(131, 148, 150) rgb(0, 43, 54) / rgb(131, 148, 150) rgb(7, 54, 66)" // base0 base03 / base01 base02
tree: "rgb(88, 110, 117) none" // base01 default
file: "none none" // default default
directory: "rgb(38, 139, 210) none bold" // blue default bold
exe: "rgb(211, 1, 2) none" // red default
link: "rgb(211, 54, 130) none" // magenta default
pruning: "rgb(88, 110, 117) none italic" // base01 default italic
perm__: "rgb(88, 110, 117) none" // base01 default
perm_r: "none none" // default default
perm_w: "none none" // default default
perm_x: "none none" // default default
owner: "rgb(88, 110, 117) none" // base01 default
group: "rgb(88, 110, 117) none" // base01 default
sparse: "none none" // default default
git_branch: "rgb(147, 161, 161) none" // base1 default
git_insertions: "rgb(133, 153, 0) none" // green default
git_deletions: "rgb(211, 1, 2) none" // red default
git_status_current: "none none" // default default
git_status_modified: "rgb(181, 137, 0) none" // yellow default
git_status_new: "rgb(133, 153, 0) none" // green default
git_status_ignored: "rgb(88, 110, 117) none" // base01 default
git_status_conflicted: "rgb(211, 1, 2) none" // red default
git_status_other: "rgb(211, 1, 2) none" // red default
selected_line: "none rgb(7, 54, 66)" // default base02
char_match: "rgb(133, 153, 0) none underlined" // green default underlined
file_error: "rgb(203, 75, 22) none italic" // orange default italic
flag_label: "none none" // default default
flag_value: "rgb(181, 137, 0) none bold" // yellow default bold
input: "none none" // default default
status_error: "rgb(203, 75, 22) rgb(7, 54, 66)" // orange base02
status_job: "rgb(108, 113, 196) rgb(7, 54, 66) bold" // violet base02 bold
status_normal: "none rgb(7, 54, 66)" // default base02
status_italic: "rgb(181, 137, 0) rgb(7, 54, 66)" // yellow base02
status_bold: "rgb(147, 161, 161) rgb(7, 54, 66) bold" // base1 base02 bold
status_code: "rgb(108, 113, 196) rgb(7, 54, 66)" // violet base02
status_ellipsis: "none rgb(7, 54, 66)" // default base02
scrollbar_track: "rgb(7, 54, 66) none" // base02 default
scrollbar_thumb: "none none" // default default
help_paragraph: "none none" // default default
help_bold: "rgb(147, 161, 161) none bold" // base1 default bold
help_italic: "rgb(147, 161, 161) none italic" // base1 default italic
help_code: "rgb(147, 161, 161) rgb(7, 54, 66)" // base1 base02
help_headers: "rgb(181, 137, 0) none" // yellow default
help_table_border: "none none" // default default
preview_title: "gray(20) rgb(0, 43, 54)"
staging_area_title: "gray(22) rgb(0, 43, 54)"
good_to_bad_0: "ansi(28)" // green
good_to_bad_1: "ansi(29)"
good_to_bad_2: "ansi(29)"
good_to_bad_3: "ansi(29)"
good_to_bad_4: "ansi(29)"
good_to_bad_5: "ansi(100)"
good_to_bad_6: "ansi(136)"
good_to_bad_7: "ansi(172)"
good_to_bad_8: "ansi(166)"
good_to_bad_9: "ansi(196)" // red
}
================================================
FILE: resources/default-conf/skins/solarized-light.hjson
================================================
// contributed by [@danieltrautmann](https://github.com/danieltrautmann)
//
//
// The Solarized Light skin uses RGB values, so it might not work well with some
// terminals
//
// If you prefer to keep the background the same as your terminal background, change
// the "default" entry to
// default: "none none / rgb(147, 161, 161) none"
//
// Doc at https://dystroy.org/broot/skins/
skin: {
// base00 default / base1 base2
default: "rgb(101, 123, 131) none / rgb(147, 161, 161) none"
// base1 default
tree: "rgb(147, 161, 161) none"
// default default
file: "none none"
// blue default bold
directory: "rgb(38, 139, 210) none bold"
// red default
exe: "rgb(211, 1, 2) none"
// magenta default
link: "rgb(211, 54, 130) none"
// base1 default italic
pruning: "rgb(147, 161, 161) none italic"
// base1 default
perm__: "rgb(147, 161, 161) none"
// default default
perm_r: "none none"
// default default
perm_w: "none none"
// default default
perm_x: "none none"
// base1 default
owner: "rgb(147, 161, 161) none"
// base1 default
group: "rgb(147, 161, 161) none"
// default default
sparse: "none none"
// base01 default
git_branch: "rgb(88, 110, 117) none"
// green default
git_insertions: "rgb(133, 153, 0) none"
// red default
git_deletions: "rgb(211, 1, 2) none"
// default default
git_status_current: "none none"
// yellow default
git_status_modified: "rgb(181, 137, 0) none"
// green default
git_status_new: "rgb(133, 153, 0) none"
// base1 default
git_status_ignored: "rgb(147, 161, 161) none"
// red default
git_status_conflicted: "rgb(211, 1, 2) none"
// red default
git_status_other: "rgb(211, 1, 2) none"
// default base2
selected_line: "none rgb(238, 232, 213)"
// green default underlined
char_match: "rgb(133, 153, 0) none underlined"
// orange default italic
file_error: "rgb(203, 75, 22) none italic"
// default default
flag_label: "none none"
// yellow default bold
flag_value: "rgb(181, 137, 0) none bold"
// default default
input: "none none"
// orange base2
status_error: "rgb(203, 75, 22) rgb(238, 232, 213)"
// violet base2 bold
status_job: "rgb(108, 113, 196) rgb(238, 232, 213) bold"
// default base2
status_normal: "none rgb(238, 232, 213)"
// yellow base2
status_italic: "rgb(181, 137, 0) rgb(238, 232, 213)"
// base01 base2 bold
status_bold: "rgb(88, 110, 117) rgb(238, 232, 213) bold"
// violet base2
status_code: "rgb(108, 113, 196) rgb(238, 232, 213)"
// default base2
status_ellipsis: "none rgb(238, 232, 213)"
// base2 default
scrollbar_track: "rgb(238, 232, 213) none"
// default default
scrollbar_thumb: "none none"
// default default
help_paragraph: "none none"
// base01 default bold
help_bold: "rgb(88, 110, 117) none bold"
// base01 default italic
help_italic: "rgb(88, 110, 117) none italic"
// base01 base2
help_code: "rgb(88, 110, 117) rgb(238, 232, 213)"
// yellow default
help_headers: "rgb(181, 137, 0) none"
// default default
help_table_border: "none none"
preview_title: "rgb(147, 161, 161) rgb(238, 232, 213)"
preview: "rgb(101, 123, 131) rgb(253, 246, 227) / rgb(147, 161, 161) rgb(238, 232, 213)"
preview_line_number: "rgb(147, 161, 161) rgb(238, 232, 213)"
preview_separator: "rgb(147, 161, 161) rgb(238, 232, 213)"
preview_match: "None ansi(29)"
staging_area_title: "gray(22) rgb(253, 246, 227)"
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
================================================
FILE: resources/default-conf/skins/tokyo-night.hjson
================================================
###############################################################
# A skin for a terminal with a dark background
# This skin uses RGB values so won't work for some
# terminals.
#
# Created by hb-hello
# Based on the tokyo-night theme made by wixdaq - https://wixdaq.github.io/Tokyo-Night-Website/
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
default: rgb(169, 177, 214) None / rgb(192, 202, 245) rgb(32, 35, 48)
tree: rgb(54, 59, 84) None / rgb(43, 43, 59) None
parent: rgb(192, 202, 245) None / rgb(192, 202, 245) rgb(32, 35, 48) Italic
file: rgb(120, 124, 153) None / rgb(169, 177, 214) None Italic
directory: rgb(122, 162, 247) None Bold / rgb(97, 131, 187) None
exe: rgb(158, 206, 106) None
link: rgb(187, 154, 247) None
pruning: rgb(81, 89, 125) None Italic
# permissions
perm__: rgb(120, 124, 153) None
perm_r: rgb(65, 166, 181) None
perm_w: rgb(115, 218, 202) None
perm_x: rgb(187, 154, 247) None
owner: rgb(97, 131, 187) None Bold
group: rgb(97, 131, 187) None
count: rgb(65, 166, 181) rgb(16, 16, 20)
dates: rgb(120, 124, 153) None
sparse: rgb(224, 175, 104) None
content_extract: rgb(115, 218, 202) None Italic
content_match: rgb(122, 162, 247) None Bold
# git
git_branch: rgb(157, 124, 216) None
git_insertions: rgb(158, 206, 106) None
git_deletions: rgb(247, 118, 142) None
git_status_current: rgb(120, 124, 153) None
git_status_modified: rgb(224, 175, 104) None
git_status_new: rgb(115, 218, 202) None Bold
git_status_ignored: rgb(81, 86, 112) None
git_status_conflicted: rgb(219, 75, 75) None
git_status_other: rgb(187, 97, 107) None
# highlighting
selected_line: None rgb(32, 35, 48) / None rgb(30, 32, 46)
char_match: rgb(224, 175, 104) None
file_error: rgb(224, 175, 104) None
flag_label: rgb(120, 124, 153) None
flag_value: rgb(187, 154, 247) None Bold
input: rgb(169, 177, 214) rgb(20, 20, 27) / rgb(192, 202, 245) rgb(20, 20, 27) Italic
#status bar
status_error: rgb(192, 202, 245) rgb(219, 75, 75)
status_job: rgb(22, 22, 30) rgb(224, 175, 104)
status_normal: rgb(120, 124, 153) rgb(22, 22, 30) / None None
status_italic: rgb(187, 154, 247) rgb(22, 22, 30) Italic / None None
status_bold: rgb(187, 154, 247) rgb(22, 22, 30) Bold / None None
status_code: rgb(192, 202, 245) rgb(22, 22, 30) / None None
status_ellipsis: rgb(192, 202, 245) rgb(22, 22, 30) Bold / None None
purpose_normal: None None
purpose_italic: rgb(97, 131, 187) None Italic
purpose_bold: rgb(97, 131, 187) None Bold
purpose_ellipsis: None None
# scrollbar
scrollbar_track: rgb(54, 59, 84) None / rgb(16, 16, 20) None
scrollbar_thumb: rgb(169, 177, 214) None / rgb(120, 124, 153) None
#documentation
help_paragraph: None None
help_bold: rgb(255, 158, 100) None Bold
help_italic: rgb(187, 154, 247) None Italic
help_code: rgb(158, 206, 106) rgb(16, 16, 20)
help_headers: rgb(122, 162, 247) None Bold
help_table_border: rgb(43, 43, 59) None
preview_title: rgb(192, 202, 245) rgb(16, 16, 20) / rgb(169, 177, 214) rgb(16, 16, 20)
preview: rgb(169, 177, 214) None / rgb(169, 177, 214) None
preview_line_number: rgb(81, 89, 125) rgb(16, 16, 20) / rgb(81, 89, 125) None
preview_separator: rgb(54, 59, 84) None / rgb(43, 43, 59) None
preview_match: None rgb(224, 175, 104) Bold
hex_null: rgb(120, 124, 153) None
hex_ascii_graphic: rgb(169, 177, 214) None
hex_ascii_whitespace: rgb(81, 89, 125) None
hex_ascii_other: rgb(255, 158, 100) None
hex_non_ascii: rgb(219, 75, 75) None
staging_area_title: rgb(192, 202, 245) rgb(16, 16, 20) / rgb(169, 177, 214) rgb(16, 16, 20)
mode_command_mark: rgb(22, 22, 30) rgb(187, 154, 247) Bold
# file system occupation
good_to_bad_0: rgb(158, 206, 106)
good_to_bad_1: rgb(158, 206, 106)
good_to_bad_2: rgb(158, 206, 106)
good_to_bad_3: rgb(158, 206, 106)
good_to_bad_4: rgb(255, 158, 100)
good_to_bad_5: rgb(255, 158, 100)
good_to_bad_6: rgb(255, 158, 100)
good_to_bad_7: rgb(255, 158, 100)
good_to_bad_8: rgb(255, 158, 100)
good_to_bad_9: rgb(255, 158, 100)
}
================================================
FILE: resources/default-conf/skins/white.hjson
================================================
###############################################################
# A skin for a terminal with a white background
#
# To create your own skin, copy this file, change the entries
# and import your skin file from the main conf file (look
# for "imports")
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
syntax_theme: base16-ocean.light
skin: {
default: gray(1) None
tree: gray(7) None / gray(18) None
file: gray(3) None / gray(8) None
directory: ansi(25) None Bold / ansi(25) None
exe: ansi(130) None
link: Magenta None
pruning: gray(12) None Italic
perm__: gray(5) None
perm_r: ansi(94) None
perm_w: ansi(132) None
perm_x: ansi(65) None
owner: ansi(138) None
group: ansi(131) None
dates: ansi(66) None
sparse: ansi(214) None
git_branch: ansi(229) None
git_insertions: ansi(28) None
git_deletions: ansi(160) None
git_status_current: gray(5) None
git_status_modified: ansi(28) None
git_status_new: ansi(94) None Bold
git_status_ignored: gray(17) None
git_status_conflicted: ansi(88) None
git_status_other: ansi(88) None
selected_line: None gray(19) / None gray(21)
char_match: ansi(22) None
file_error: Red None
flag_label: gray(9) None
flag_value: ansi(166) None Bold
input: gray(1) None / gray(4) gray(20)
status_error: gray(22) ansi(124)
status_normal: gray(2) gray(20)
status_job: ansi(220) gray(5)
status_italic: ansi(166) gray(20)
status_bold: ansi(166) gray(20)
status_code: ansi(17) gray(20)
status_ellipsis: gray(19) gray(15)
purpose_normal: gray(20) gray(2)
purpose_italic: ansi(178) gray(2)
purpose_bold: ansi(178) gray(2) Bold
purpose_ellipsis: gray(20) gray(2)
scrollbar_track: gray(20) none
scrollbar_thumb: ansi(238) none
help_paragraph: gray(2) none
help_bold: ansi(202) none bold
help_italic: ansi(202) none italic
help_code: gray(5) gray(22)
help_headers: ansi(202) none
help_table_border: ansi(239) None
preview_title: gray(3) None / gray(5) None
preview: gray(5) gray(23) / gray(7) gray(23)
preview_line_number: gray(6) gray(20)
preview_separator: gray(7) None / gray(18) None
preview_match: None ansi(29) Underlined
hex_null: gray(15) None
hex_ascii_graphic: gray(2) None
hex_ascii_whitespace: ansi(143) None
hex_ascii_other: ansi(215) None
hex_non_ascii: ansi(167) None
staging_area_title: gray(8) None / gray(13) None
mode_command_mark: gray(15) ansi(204) Bold
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
================================================
FILE: resources/default-conf/verbs.hjson
================================================
###############################################################
# This file contains the verb definitions for broot
#
# Some verbs here are examples and not enabled by default: you
# need to uncomment them if you want to use them.
#
# Documentation at https://dystroy.org/broot/verbs/
###############################################################
verbs: [
# You should customize this standard opening of text files.
# If you edit text files in your terminal (vi, emacs, helix, eg.), then
# you'll find it convenient to change the 'key' from 'ctrl-e' to 'enter'.
#
# If $EDITOR isn't set on your computer, you should either set it using
# something similar to
# export EDITOR=/usr/local/bin/nvim
# or just replace it with your editor of choice in the 'execution'
# pattern.
# If your editor is able to open a file on a specific line, use {line}
# so that you may jump directly at the right line from a preview or
# a content search.
# Examples depending on your favourite editor:
# external: "nvim +{line} {file:space-separated}"
# external: "helix {file}:{line}"
{
invocation: edit
shortcut: e
key: ctrl-e
apply_to: text_file
external: "$EDITOR {file:space-separated}"
leave_broot: false
}
# Example 1: launching `tail -n` on the selected file (leaving broot)
# {
# name: tail_lines
# invocation: tl {lines_count}
# external: "tail -f -n {lines_count} {file}"
# }
# Example 2: creating a new file without leaving broot
# {
# name: touch
# invocation: touch {new_file}
# external: "touch {directory}/{new_file}"
# leave_broot: false
# }
# Zip selected file(s) into a new archive named <name>.zip
# This can be called on the staging area after having staged several
# files or directories
{
invocation: "zip {name}"
external: [
"zip"
"-r"
"{name:path-from-directory}.zip"
"{file:space-separated}"
]
leave_broot: false
working_dir: "{root}"
}
# A convenient shortcut to create a new text file in
# the current directory or below
{
invocation: create {subpath}
execution: "$EDITOR {directory}/{subpath}"
leave_broot: false
}
{
invocation: git_diff
shortcut: gd
leave_broot: false
execution: "git difftool -y {file}"
}
# On ctrl-b, propose the creation of a copy of the selection.
# While this might occasionally be useful, this verb is mostly here
# as an example to demonstrate rare standard groups like {file-stem}
# and {file-dot-extension} and the auto_exec verb property which
# allows verbs to stay unexecuted until you hit enter
{
invocation: "backup {version}"
key: ctrl-b
leave_broot: false
auto_exec: false
execution: "cp -r {file} {parent}/{file-stem}-{version}{file-dot-extension}"
}
# By default, `rm` does the system rm, and completely removes
# the file. If you prefer to have the file moved to the system
# trash, you may use the ':trash' internal with the verb below:
# {
# invocation: "rm"
# internal: "trash"
# leave_broot: false
# }
# This verb lets you launch a terminal on ctrl-T
# (on exit you'll be back in broot)
{
invocation: terminal
key: ctrl-t
execution: "$SHELL"
set_working_dir: true
leave_broot: false
}
# Scroll the rightest panel on alt-pagedown and alt-pageup,
# while keeping the focus on your current panel
{
key: alt-pagedown
internal: page_down
impacted_panel: right
}
{
key: alt-pageup
internal: page_up
impacted_panel: right
}
# Here's an example of a verb needing the shell capabilities.
# It copies all children of the currently selected directory
# to a destination you type.
# It uses a star, which needs the shell for expansion. That's
# why such verb must have the `from_shell: true` parameter.
# {
# invocation: "cpa {dest}"
# external: "cp -r {directory}/* {dest}"
# from_shell: true
# }
# Here's an example of a shortcut bringing you to your home directory
# {
# invocation: home
# key: ctrl-home
# execution: ":focus ~"
# }
# Here's going to the work-dir root of the current git repository
# {
# invocation: gtr
# execution: ":focus {git-root}"
# }
# A popular set of shortcuts for going up and down:
#
# {
# key: ctrl-k
# execution: ":line_up"
# }
# {
# key: ctrl-j
# execution: ":line_down"
# }
# {
# key: ctrl-u
# execution: ":page_up"
# }
# {
# key: ctrl-d
# execution: ":page_down"
# }
# If you develop using git, you might like to often switch
# to the git status filter:
# {
# key: alt-g
# execution: ":toggle_git_status"
# }
# You can reproduce the bindings of Norton Commander
# on copying or moving to the other panel:
# {
# key: F5
# external: "cp -r {file} {other-panel-directory}"
# leave_broot: false
# }
# {
# key: F6
# external: "mv {file} {other-panel-directory}"
# leave_broot: false
# }
]
================================================
FILE: resources/icons/nerdfont/README.md
================================================
# Nerd Fonts Icons
## Requirements
[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) installed either through a patched font or available as a fallback font.
## Configuration
In broot config file, set
```
icon_theme: nerdfont
```
## Limitations
These icons are limited by availability of symbols in Nerd Fonts, so this feature can only support a subset of filetypes available in `vscode` theme.
## Editing the Icon for a File:
If you want to find an icon for a file: go to https://www.nerdfonts.com/cheat-sheet and search for:
- a icon name like "file", which should return the multiple file icon results. Pick one you like and copy the icon code "ea7b". Copy it into the corresponding mapping prefixed with "0x" in ./data/*.rs. ( "default_file", 0xf15b ), //
- a icon code like "0xf15b" without the "0x" prefix. This should return the corresponding "" icon.
## Tips on editing these files in vi
1. Open ./icon_name_to_icon_code_point_map.rs
then in the same session, switch to file you want to edit
use C-n and C-y in edit mode
2. This plugin currently searches for lowercase, make everything so
3. Remember to run :Tabularize over ')' and ','. <a href="https://github.com/godlygeek/tabular?tab=readme-ov-file">The tabular Plugin</a>
4. :'<,'>!sort
5. `cargo run` in debug mode should figure out some problems.
================================================
FILE: resources/icons/nerdfont/data/double_extension_to_icon_name_map.rs
================================================
// SEE ./README on how to edit this file
[
( "adapter.js" , "file_type_nest_adapter_js" ),
( "adapter.ts" , "file_type_nest_adapter_ts" ),
( "component.dart" , "file_type_ng_component_dart" ),
( "component.js" , "file_type_ng_component_js2" ),
( "component.ts" , "file_type_ng_component_ts2" ),
( "container.dart" , "file_type_ng_smart_component_dart" ),
( "container.js" , "file_type_ng_smart_component_js2" ),
( "container.ts" , "file_type_ng_smart_component_ts2" ),
( "controller.js" , "file_type_nest_controller_js" ),
( "controller.ts" , "file_type_nest_controller_ts" ),
( "css.map" , "file_type_cssmap" ),
( "d.ts" , "file_type_typescriptdef_official" ),
( "decorator.js" , "file_type_nest_decorator_js" ),
( "decorator.ts" , "file_type_nest_decorator_ts" ),
( "directive.dart" , "file_type_ng_directive_dart" ),
( "directive.js" , "file_type_ng_directive_js2" ),
( "directive.ts" , "file_type_ng_directive_ts2" ),
( "eslintrc.js" , "file_type_eslint" ),
( "filter.js" , "file_type_nest_filter_js" ),
( "filter.ts" , "file_type_nest_filter_ts" ),
( "gateway.js" , "file_type_nest_gateway_js" ),
( "gateway.ts" , "file_type_nest_gateway_ts" ),
( "gradle.kts" , "file_type_gradle" ),
( "guard.js" , "file_type_nest_guard_js" ),
( "guard.ts" , "file_type_nest_guard_ts" ),
( "interceptor.dart" , "file_type_ng_interceptor_dart" ),
( "interceptor.js" , "file_type_nest_interceptor_js" ),
( "interceptor.ts" , "file_type_nest_interceptor_ts" ),
( "js.flow" , "file_type_flow" ),
( "js.map" , "file_type_jsmap" ),
( "js.snap" , "file_type_jest_snapshot" ),
( "middleware.js" , "file_type_nest_middleware_js" ),
( "middleware.ts" , "file_type_nest_middleware_ts" ),
( "module.js" , "file_type_nest_module_js" ),
( "module.ts" , "file_type_nest_module_ts" ),
( "page.dart" , "file_type_ng_smart_component_dart" ),
( "page.js" , "file_type_ng_smart_component_js2" ),
( "page.ts" , "file_type_ng_smart_component_ts2" ),
( "pipe.dart" , "file_type_ng_pipe_dart" ),
( "pipe.js" , "file_type_nest_pipe_js" ),
( "pipe.ts" , "file_type_nest_pipe_ts" ),
( "routing.dart" , "file_type_ng_routing_dart" ),
( "routing.js" , "file_type_ng_routing_js2" ),
( "routing.ts" , "file_type_ng_routing_ts2" ),
( "service.dart" , "file_type_ng_service_dart" ),
( "service.js" , "file_type_nest_service_js" ),
( "service.ts" , "file_type_nest_service_ts" ),
( "tar.gz" , "file_type_zip" ),
( "tar.xz" , "file_type_zip" ),
( "tar.zst" , "file_type_zip" ),
]
================================================
FILE: resources/icons/nerdfont/data/extension_to_icon_name_map.rs
================================================
// SEE ./README on how to edit this file
[
( "3g2" , "file_type_video" ),
( "3gp" , "file_type_video" ),
( "7z" , "file_type_zip2" ),
( "P" , "file_type_prolog" ),
( "a" , "file_type_binary" ),
( "aac" , "file_type_audio" ),
( "accda" , "file_type_access2" ),
( "accdb" , "file_type_access" ),
( "accdc" , "file_type_access2" ),
( "accde" , "file_type_access2" ),
( "accdp" , "file_type_access2" ),
( "accdr" , "file_type_access2" ),
( "accdt" , "file_type_access2" ),
( "accdu" , "file_type_access2" ),
( "act" , "file_type_audio" ),
( "ade" , "file_type_access2" ),
( "adp" , "file_type_access2" ),
( "afdesign" , "file_type_affinitydesigner" ),
( "affinitydesigner" , "file_type_affinitydesigner" ),
( "affinityphoto" , "file_type_affinityphoto" ),
( "affinitypublisher" , "file_type_affinitypublisher" ),
( "afphoto" , "file_type_affinityphoto" ),
( "afpub" , "file_type_affinitypublisher" ),
( "ai" , "file_type_ai2" ),
( "aiff" , "file_type_audio" ),
( "amr" , "file_type_audio" ),
( "amv" , "file_type_video" ),
( "ape" , "file_type_audio" ),
( "app" , "file_type_binary" ),
( "ascx" , "file_type_aspx" ),
( "asf" , "file_type_video" ),
( "aspx" , "file_type_aspx" ),
( "au" , "file_type_audio" ),
( "avi" , "file_type_video" ),
( "avif" , "file_type_avif" ),
( "awk" , "file_type_awk" ),
( "babelignore" , "file_type_babel2" ),
( "babelrc" , "file_type_babel2" ),
( "bazel" , "file_type_bazel" ),
( "bazelrc" , "file_type_bazel" ),
( "bb" , "file_type_blitzbasic" ),
( "bcmx" , "file_type_outlook" ),
( "bin" , "file_type_binary" ),
( "bithoundrc" , "file_type_bithound" ),
( "bmp" , "file_type_image" ),
( "boringignore" , "file_type_darcs" ),
( "bowerrc" , "file_type_bower" ),
( "browserslistrc" , "file_type_browserslist" ),
( "buckconfig" , "file_type_buckbuild" ),
( "bz" , "file_type_zip2" ),
( "bz2" , "file_type_zip2" ),
( "bzip2" , "file_type_zip2" ),
( "bzrignore" , "file_type_bazaar" ),
( "c" , "file_type_c" ),
( "cake" , "file_type_cake" ),
( "cargo-lock" , "file_type_rust" ),
( "cc" , "file_type_cpp" ),
( "cer" , "file_type_cert" ),
( "cfignore" , "file_type_cloudfoundry" ),
( "cjm" , "file_type_clojure" ),
( "cl" , "file_type_opencl" ),
( "class" , "file_type_class" ),
( "cljc" , "file_type_clojure" ),
( "cljs" , "file_type_clojurescript" ),
( "cma" , "file_type_binary" ),
( "cmi" , "file_type_binary" ),
( "cmo" , "file_type_binary" ),
( "cmx" , "file_type_binary" ),
( "cmxa" , "file_type_binary" ),
( "coffeelintignore" , "file_type_coffeelint" ),
( "condarc" , "file_type_conda" ),
( "cpp" , "file_type_cpp" ),
( "crec" , "file_type_lync" ),
( "crl" , "file_type_cert" ),
( "crt" , "file_type_cert" ),
( "cs" , "file_type_csharp" ),
( "csproj" , "file_type_csproj" ),
( "csr" , "file_type_cert" ),
( "css" , "file_type_css" ),
( "csslintrc" , "file_type_csslint" ),
( "csv" , "file_type_csv" ),
( "csx" , "file_type_csharp2" ),
( "cvsignore" , "file_type_cvs" ),
( "db" , "file_type_db" ),
( "db3" , "file_type_sqlite" ),
( "dct" , "file_type_audio" ),
( "der" , "file_type_cert" ),
( "dio" , "file_type_drawio" ),
( "divx" , "file_type_video" ),
( "djt" , "file_type_django" ),
( "dll" , "file_type_binary" ),
( "doc" , "file_type_word2" ),
( "docm" , "file_type_word2" ),
( "docx" , "file_type_word2" ),
( "doczrc" , "file_type_docz" ),
( "dojorc" , "file_type_dojo" ),
( "dot" , "file_type_word2" ),
( "dotm" , "file_type_word2" ),
( "dotx" , "file_type_word2" ),
( "drawio" , "file_type_drawio" ),
( "dss" , "file_type_audio" ),
( "dta" , "file_type_stata" ),
( "dvc" , "file_type_dvc" ),
( "dvf" , "file_type_audio" ),
( "eco" , "file_type_docpad" ),
( "editorconfig" , "file_type_editorconfig" ),
( "ejs" , "file_type_ejs" ),
( "el" , "file_type_emacs" ),
( "elc" , "file_type_emacs" ),
( "elm" , "file_type_elm" ),
( "ember-cli" , "file_type_ember" ),
( "enc" , "file_type_license" ),
( "ensime" , "file_type_ensime" ),
( "env" , "file_type_env" ),
( "eot" , "file_type_font" ),
( "eps" , "file_type_eps" ),
( "eskip" , "file_type_skipper" ),
( "eslintcache" , "file_type_eslint2" ),
( "eslintignore" , "file_type_eslint2" ),
( "eslintrc" , "file_type_eslint2" ),
( "exe" , "file_type_binary" ),
( "exp" , "file_type_tcl" ),
( "f4a" , "file_type_video" ),
( "f4b" , "file_type_video" ),
( "f4p" , "file_type_video" ),
( "f4v" , "file_type_video" ),
( "fbx" , "file_type_fbx" ),
( "fnl" , "file_type_fennel" ),
( "fig" , "file_type_matlab" ),
( "firebaserc" , "file_type_firebase" ),
( "fish" , "file_type_shell" ),
( "fla" , "file_type_fla" ),
( "flac" , "file_type_audio" ),
( "flooignore" , "file_type_floobits" ),
( "flowconfig" , "file_type_flow" ),
( "flutter-plugins" , "file_type_flutter" ),
( "flv" , "file_type_video" ),
( "fods" , "file_type_excel2" ),
( "fossaignore" , "file_type_fossa" ),
( "fs" , "file_type_fsharp" ),
( "fsproj" , "file_type_fsproj" ),
( "gemfile" , "file_type_bundler" ),
( "gif" , "file_type_image" ),
( "gitattributes" , "file_type_git" ),
( "gitconfig" , "file_type_git" ),
( "gitignore" , "file_type_git" ),
( "gitkeep" , "file_type_git" ),
( "gitmodules" , "file_type_git" ),
( "gmx" , "file_type_gamemaker" ),
( "go" , "file_type_go" ),
( "gqlconfig" , "file_type_graphql" ),
( "gradle" , "file_type_gradle2" ),
( "graphqlconfig" , "file_type_graphql_config" ),
( "gsm" , "file_type_audio" ),
( "gvimrc" , "file_type_vim" ),
( "gz" , "file_type_zip2" ),
( "h" , "file_type_cheader" ),
( "hgignore" , "file_type_mercurial" ),
( "hl" , "file_type_binary" ),
( "hpp" , "file_type_cppheader" ),
( "hs" , "file_type_haskell" ),
( "html" , "file_type_html" ),
( "htmlhintrc" , "file_type_htmlhint" ),
( "huskyrc" , "file_type_husky" ),
( "hxp" , "file_type_lime" ),
( "hxproj" , "file_type_haxedevelop" ),
( "ibc" , "file_type_idrisbin" ),
( "ico" , "file_type_image" ),
( "idr" , "file_type_idris" ),
( "ignore-glob" , "file_type_fossil" ),
( "iklax" , "file_type_audio" ),
( "ilk" , "file_type_binary" ),
( "inc" , "file_type_inc" ),
( "include" , "file_type_inc" ),
( "infopathxml" , "file_type_infopath" ),
( "ino" , "file_type_arduino" ),
( "ipkg" , "file_type_idrispkg" ),
( "ipynb" , "file_type_jupyter" ),
( "iuml" , "file_type_plantuml" ),
( "ivs" , "file_type_audio" ),
( "jade-lintrc" , "file_type_pug" ),
( "jar" , "file_type_jar" ),
( "java" , "file_type_java" ),
( "jestrc" , "file_type_jest" ),
( "jpeg" , "file_type_image" ),
( "jpg" , "file_type_image" ),
( "jpmignore" , "file_type_jpm" ),
( "js" , "file_type_js" ),
( "jsbeautify" , "file_type_jsbeautify" ),
( "jsbeautifyrc" , "file_type_jsbeautify" ),
( "jshintignore" , "file_type_jshint" ),
( "jshintrc" , "file_type_jshint" ),
( "json" , "file_type_json_official" ),
( "json-ld" , "file_type_jsonld" ),
( "json5" , "file_type_json5" ),
( "jsonld" , "file_type_jsonld" ),
( "jsp" , "file_type_jsp" ),
( "jss" , "file_type_jss" ),
( "jl" , "file_type_julia" ),
( "kdl" , "file_type_config" ),
( "key" , "file_type_key" ),
( "kit" , "file_type_codekit" ),
( "kiteignore" , "file_type_kite" ),
( "kt" , "file_type_kotlin" ),
( "laccdb" , "file_type_access2" ),
( "ldb" , "file_type_access2" ),
( "lib" , "file_type_binary" ),
( "licence" , "file_type_license" ),
( "lidr" , "file_type_idris" ),
( "lintstagedrc" , "file_type_lintstagedrc" ),
( "liquid" , "file_type_liquid" ),
( "lnk" , "file_type_lnk" ),
( "lock" , "emoji_type_lock" ),
( "log" , "file_type_log" ),
( "ls" , "file_type_livescript" ),
( "lua" , "file_type_lua" ),
( "lucee" , "file_type_cf2" ),
( "m2v" , "file_type_video" ),
( "m4a" , "file_type_audio" ),
( "m4b" , "file_type_audio" ),
( "m4p" , "file_type_audio" ),
( "m4v" , "file_type_video" ),
( "mailmap" , "file_type_git" ),
( "mam" , "file_type_access2" ),
( "manifest" , "file_type_manifest" ),
( "map" , "file_type_map" ),
( "maq" , "file_type_access2" ),
( "markdown" , "file_type_markdown" ),
( "master" , "file_type_layout" ),
( "md" , "file_type_markdown" ),
( "mdb" , "file_type_access2" ),
( "mdown" , "file_type_markdown" ),
( "mdw" , "file_type_access2" ),
( "mdx" , "file_type_mdx" ),
( "merlin" , "file_type_ocaml" ),
( "metadata" , "file_type_flutter" ),
( "mex" , "file_type_matlab" ),
( "mexn" , "file_type_matlab" ),
( "mexrs6" , "file_type_matlab" ),
( "mk3d" , "file_type_video" ),
( "mkv" , "file_type_video" ),
( "mmf" , "file_type_audio" ),
( "mn" , "file_type_matlab" ),
( "mo" , "file_type_poedit" ),
( "modernizr" , "file_type_modernizr" ),
( "mogg" , "file_type_audio" ),
( "mov" , "file_type_video" ),
( "mp2" , "file_type_video" ),
( "mp3" , "file_type_audio" ),
( "mp4" , "file_type_video" ),
( "mpc" , "file_type_audio" ),
( "mpe" , "file_type_video" ),
( "mpeg" , "file_type_video" ),
( "mpeg2" , "file_type_video" ),
( "mpg" , "file_type_video" ),
( "mpv" , "file_type_video" ),
( "msg" , "file_type_outlook" ),
( "mst" , "file_type_mustache" ),
( "msv" , "file_type_audio" ),
( "mtn-ignore" , "file_type_monotone" ),
( "mum" , "file_type_matlab" ),
( "mustache" , "file_type_mustache" ),
( "mx" , "file_type_matlab" ),
( "mx3" , "file_type_matlab" ),
( "mysql" , "file_type_mysql" ),
( "n" , "file_type_binary" ),
( "ndll" , "file_type_binary" ),
( "nix" , "file_type_nix" ),
( "njs" , "file_type_nunjucks" ),
( "njsproj" , "file_type_njsproj" ),
( "node-version" , "file_type_node2" ),
( "nowignore" , "file_type_zeit" ),
( "npmignore" , "file_type_npm" ),
( "npmrc" , "file_type_npm" ),
( "npy" , "file_type_numpy" ),
( "npz" , "file_type_numpy" ),
( "nsriignore" , "file_type_nsri" ),
( "nsrirc" , "file_type_nsri" ),
( "nsv" , "file_type_video" ),
( "nu" , "file_type_nushell" ),
( "nunj" , "file_type_nunjucks" ),
( "nupkg" , "file_type_nuget" ),
( "nuspec" , "file_type_nuget" ),
( "nvmrc" , "file_type_node2" ),
( "nycrc" , "file_type_nyc" ),
( "o" , "file_type_binary" ),
( "obj" , "file_type_binary" ),
( "ocrec" , "file_type_lync" ),
( "ods" , "file_type_excel2" ),
( "oft" , "file_type_outlook" ),
( "oga" , "file_type_audio" ),
( "ogg" , "file_type_audio" ),
( "ogv" , "file_type_video" ),
( "one" , "file_type_onenote" ),
( "onepkg" , "file_type_onenote" ),
( "onetoc" , "file_type_onenote" ),
( "onetoc2" , "file_type_onenote" ),
( "opencl" , "file_type_opencl" ),
( "opus" , "file_type_audio" ),
( "org" , "file_type_org" ),
( "otf" , "file_type_font" ),
( "otm" , "file_type_outlook" ),
( "ovpn" , "file_type_ovpn" ),
( "p12" , "file_type_cert" ),
( "p4ignore" , "file_type_helix" ),
( "p7b" , "file_type_cert" ),
( "p7r" , "file_type_cert" ),
( "pa" , "file_type_powerpoint2" ),
( "packages" , "file_type_flutter_package" ),
( "patch" , "file_type_patch" ),
( "pcd" , "file_type_pcl" ),
( "pck" , "file_type_plsql_package" ),
( "pdb" , "file_type_binary" ),
( "pde" , "file_type_arduino" ),
( "pdf" , "file_type_pdf2" ),
( "pem" , "file_type_key" ),
( "pex" , "file_type_xml" ),
( "pfa" , "file_type_font" ),
( "pfb" , "file_type_font" ),
( "pfx" , "file_type_cert" ),
( "pgsql" , "file_type_pgsql" ),
( "phar" , "file_type_php3" ),
( "php" , "file_type_php" ),
( "php1" , "file_type_php3" ),
( "php2" , "file_type_php3" ),
( "php3" , "file_type_php3" ),
( "php4" , "file_type_php3" ),
( "php5" , "file_type_php3" ),
( "php6" , "file_type_php3" ),
( "php_cs" , "file_type_phpcsfixer" ),
( "phps" , "file_type_php3" ),
( "phpsa" , "file_type_php3" ),
( "phpt" , "file_type_php3" ),
( "phpunit" , "file_type_phpunit" ),
( "phtml" , "file_type_php3" ),
( "pipfile" , "file_type_pip" ),
( "pkb" , "file_type_plsql_package_body" ),
( "pkg" , "file_type_package" ),
( "pkh" , "file_type_plsql_package_header" ),
( "pks" , "file_type_plsql_package_spec" ),
( "plantuml" , "file_type_plantuml" ),
( "plist" , "file_type_config" ),
( "png" , "file_type_image" ),
( "po" , "file_type_poedit" ),
( "policyfile" , "file_type_chef" ),
( "postcssrc" , "file_type_postcssconfig" ),
( "pot" , "file_type_powerpoint2" ),
( "potm" , "file_type_powerpoint2" ),
( "potx" , "file_type_powerpoint2" ),
( "ppa" , "file_type_powerpoint2" ),
( "ppam" , "file_type_powerpoint2" ),
( "pps" , "file_type_powerpoint2" ),
( "ppsm" , "file_type_powerpoint2" ),
( "ppsx" , "file_type_powerpoint2" ),
( "ppt" , "file_type_powerpoint2" ),
( "pptm" , "file_type_powerpoint2" ),
( "pptx" , "file_type_powerpoint2" ),
( "prettierignore" , "file_type_prettier" ),
( "prettierrc" , "file_type_prettier" ),
( "prisma" , "file_type_prisma" ),
( "pro" , "file_type_prolog" ),
( "procfile" , "file_type_procfile" ),
( "psd" , "file_type_photoshop2" ),
( "psd1" , "file_type_powershell_psd2" ),
( "psm1" , "file_type_powershell_psm2" ),
( "psmdcp" , "file_type_nuget" ),
( "pst" , "file_type_outlook" ),
( "pu" , "file_type_plantuml" ),
( "pub" , "file_type_publisher" ),
( "pug-lintrc" , "file_type_pug" ),
( "puml" , "file_type_plantuml" ),
( "puz" , "file_type_publisher" ),
( "py" , "file_type_python" ),
( "pyc" , "file_type_binary" ),
( "pyd" , "file_type_binary" ),
( "pyo" , "file_type_binary" ),
( "pyup" , "file_type_pyup" ),
( "q" , "file_type_q" ),
( "qbs" , "file_type_qbs" ),
( "qmldir" , "file_type_qmldir" ),
( "qt" , "file_type_video" ),
( "qvd" , "file_type_qlikview" ),
( "qvw" , "file_type_qlikview" ),
( "r" , "file_type_r" ),
( "ra" , "file_type_audio" ),
( "rake" , "file_type_rake" ),
( "rakefile" , "file_type_rake" ),
( "rar" , "file_type_zip2" ),
( "raw" , "file_type_audio" ),
( "rb" , "file_type_ruby" ),
( "re" , "file_type_reason" ),
( "reg" , "file_type_registry" ),
( "rego" , "file_type_rego" ),
( "rehypeignore" , "file_type_rehype" ),
( "rehyperc" , "file_type_rehype" ),
( "remarkignore" , "file_type_remark" ),
( "remarkrc" , "file_type_remark" ),
( "renovaterc" , "file_type_renovate" ),
( "retextignore" , "file_type_retext" ),
( "retextrc" , "file_type_retext" ),
( "rm" , "file_type_video" ),
( "rmvb" , "file_type_video" ),
( "rproj" , "file_type_rproj" ),
( "rs" , "file_type_rust" ),
( "rspec" , "file_type_rspec" ),
( "rt" , "file_type_reacttemplate" ),
( "rust-toolchain" , "file_type_rust_toolchain" ),
( "rwd" , "file_type_matlab" ),
( "sailsrc" , "file_type_sails" ),
( "sass" , "file_type_sass" ),
( "sbt" , "file_type_sbt" ),
( "scala" , "file_type_scala" ),
( "scpt" , "file_type_binary" ),
( "scptd" , "file_type_binary" ),
( "scssm" , "file_type_scss" ),
( "sentryclirc" , "file_type_sentry" ),
( "sequelizerc" , "file_type_sequelize" ),
( "sfd" , "file_type_font" ),
( "sh" , "file_type_shell" ),
( "sig" , "file_type_onenote" ),
( "sketch" , "file_type_sketch" ),
( "slddc" , "file_type_matlab" ),
( "sldm" , "file_type_powerpoint2" ),
( "sldx" , "file_type_powerpoint2" ),
( "sln" , "file_type_sln2" ),
( "sls" , "file_type_saltstack" ),
( "slx" , "file_type_matlab" ),
( "smv" , "file_type_matlab" ),
( "snyk" , "file_type_snyk" ),
( "so" , "file_type_binary" ),
( "solidarity" , "file_type_solidarity" ),
( "spe" , "file_type_spacengine" ),
( "sql" , "file_type_sql" ),
( "sqlite" , "file_type_sqlite" ),
( "sqlite3" , "file_type_sqlite" ),
( "src" , "file_type_cert" ),
( "sss" , "file_type_sss" ),
( "sst" , "file_type_cert" ),
( "stl" , "file_type_cert" ),
( "storyboard" , "file_type_storyboard" ),
( "stylelintcache" , "file_type_stylelint" ),
( "stylelintignore" , "file_type_stylelint" ),
( "stylelintrc" , "file_type_stylelint" ),
( "svg" , "file_type_svg" ),
( "svi" , "file_type_video" ),
( "svnignore" , "file_type_subversion" ),
( "swc" , "file_type_flash" ),
( "swf" , "file_type_flash" ),
( "swift" , "file_type_swift" ),
( "tar" , "file_type_zip2" ),
( "tcl" , "file_type_tcl" ),
( "texi" , "file_type_tex" ),
( "tf" , "file_type_terraform" ),
( "tfignore" , "file_type_tfs" ),
( "tfstate" , "file_type_terraform" ),
( "tgz" , "file_type_zip2" ),
( "tiff" , "file_type_image" ),
( "tikz" , "file_type_tex" ),
( "tlg" , "file_type_log" ),
( "tmlanguage" , "file_type_xml" ),
( "todo" , "file_type_todo" ),
( "toml" , "file_type_toml" ),
( "ts" , "file_type_typescript" ),
( "tst" , "file_type_test" ),
( "tt2" , "file_type_tt" ),
( "tta" , "file_type_audio" ),
( "ttf" , "file_type_font" ),
( "txt" , "file_type_text" ),
( "unibeautifyrc" , "file_type_unibeautify" ),
( "unity" , "file_type_shaderlab" ),
( "vagrantfile" , "file_type_vagrant" ),
( "vala" , "file_type_vala" ),
( "vapi" , "file_type_vapi" ),
( "vash" , "file_type_vash" ),
( "vbhtml" , "file_type_vbhtml" ),
( "vbproj" , "file_type_vbproj" ),
( "vcxproj" , "file_type_vcxproj" ),
( "vercelignore" , "file_type_zeit" ),
( "vimrc" , "file_type_vim" ),
( "vob" , "file_type_video" ),
( "vox" , "file_type_audio" ),
( "vscodeignore" , "file_type_vscode-insiders" ),
( "vsix" , "file_type_vsix" ),
( "vsixmanifest" , "file_type_vsixmanifest" ),
( "vuerc" , "file_type_vueconfig" ),
( "wasm" , "file_type_wasm" ),
( "watchmanconfig" , "file_type_watchmanconfig" ),
( "wav" , "file_type_audio" ),
( "webm" , "file_type_video" ),
( "webp" , "file_type_webp" ),
( "wll" , "file_type_word2" ),
( "wma" , "file_type_audio" ),
( "wmv" , "file_type_video" ),
( "woff" , "file_type_font" ),
( "woff2" , "file_type_font" ),
( "wxml" , "file_type_wxml" ),
( "wxss" , "file_type_wxss" ),
( "xcodeproj" , "file_type_xcode" ),
( "xfl" , "file_type_xfl" ),
( "xib" , "file_type_xib" ),
( "xlf" , "file_type_xliff" ),
( "xliff" , "file_type_xliff" ),
( "xls"
gitextract_ip4l8ksy/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ └── tests.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE
├── README.md
├── bacon.toml
├── benches/
│ ├── composite.rs
│ ├── fuzzy.rs
│ ├── path_normalization.rs
│ ├── shared/
│ │ ├── mod.rs
│ │ └── names.rs
│ └── toks.rs
├── build-all-targets.sh
├── build.rs
├── build.sh
├── features.md
├── man/
│ └── page
├── release.sh
├── resources/
│ ├── default-conf/
│ │ ├── conf.hjson
│ │ ├── skins/
│ │ │ ├── catppuccin-macchiato.hjson
│ │ │ ├── catppuccin-mocha.hjson
│ │ │ ├── dark-blue.hjson
│ │ │ ├── dark-gruvbox.hjson
│ │ │ ├── dark-orange.hjson
│ │ │ ├── native-16.hjson
│ │ │ ├── solarized-dark.hjson
│ │ │ ├── solarized-light.hjson
│ │ │ ├── tokyo-night.hjson
│ │ │ └── white.hjson
│ │ └── verbs.hjson
│ ├── icons/
│ │ ├── nerdfont/
│ │ │ ├── README.md
│ │ │ └── data/
│ │ │ ├── double_extension_to_icon_name_map.rs
│ │ │ ├── extension_to_icon_name_map.rs
│ │ │ ├── file_name_to_icon_name_map.rs
│ │ │ └── icon_name_to_icon_code_point_map.rs
│ │ └── vscode/
│ │ └── data/
│ │ ├── README
│ │ ├── double_extension_to_icon_name_map.rs
│ │ ├── extension_to_icon_name_map.rs
│ │ ├── file_name_to_icon_name_map.rs
│ │ └── icon_name_to_icon_code_point_map.rs
│ └── syntect/
│ └── README.md
├── rustfmt.toml
├── src/
│ ├── app/
│ │ ├── app.rs
│ │ ├── app_context.rs
│ │ ├── app_panels.rs
│ │ ├── app_state.rs
│ │ ├── cmd_context.rs
│ │ ├── cmd_result.rs
│ │ ├── display_context.rs
│ │ ├── mod.rs
│ │ ├── mode.rs
│ │ ├── panel.rs
│ │ ├── panel_id.rs
│ │ ├── panel_purpose.rs
│ │ ├── panel_reference.rs
│ │ ├── panel_state.rs
│ │ ├── sel_info.rs
│ │ ├── selection.rs
│ │ ├── standard_status.rs
│ │ ├── state_type.rs
│ │ └── status.rs
│ ├── browser/
│ │ ├── browser_state.rs
│ │ └── mod.rs
│ ├── cli/
│ │ ├── args.rs
│ │ ├── install_launch_args.rs
│ │ └── mod.rs
│ ├── command/
│ │ ├── command.rs
│ │ ├── completion.rs
│ │ ├── mod.rs
│ │ ├── panel_input.rs
│ │ ├── parts.rs
│ │ ├── scroll.rs
│ │ ├── sel.rs
│ │ ├── sequence.rs
│ │ └── trigger_type.rs
│ ├── conf/
│ │ ├── conf.rs
│ │ ├── default.rs
│ │ ├── default_flags.rs
│ │ ├── file_size.rs
│ │ ├── format.rs
│ │ ├── import.rs
│ │ ├── mod.rs
│ │ ├── special_handling_conf.rs
│ │ └── verb_conf.rs
│ ├── content_search/
│ │ ├── content_match.rs
│ │ ├── content_search_result.rs
│ │ ├── mod.rs
│ │ └── needle.rs
│ ├── content_type/
│ │ ├── extensions.rs
│ │ ├── magic_numbers.rs
│ │ └── mod.rs
│ ├── display/
│ │ ├── areas.rs
│ │ ├── cell_size.rs
│ │ ├── col.rs
│ │ ├── displayable_tree.rs
│ │ ├── flags_display.rs
│ │ ├── git_status_display.rs
│ │ ├── layout_instructions.rs
│ │ ├── luma.rs
│ │ ├── matched_string.rs
│ │ ├── mod.rs
│ │ ├── num_format.rs
│ │ ├── permissions.rs
│ │ ├── screen.rs
│ │ └── status_line.rs
│ ├── errors.rs
│ ├── file_sum/
│ │ ├── mod.rs
│ │ └── sum_computation.rs
│ ├── filesystems/
│ │ ├── filesystems_state.rs
│ │ ├── mod.rs
│ │ ├── mount_list.rs
│ │ └── mount_space_display.rs
│ ├── flag/
│ │ └── mod.rs
│ ├── git/
│ │ ├── ignore.rs
│ │ ├── mod.rs
│ │ ├── status.rs
│ │ └── status_computer.rs
│ ├── help/
│ │ ├── help_content.rs
│ │ ├── help_features.rs
│ │ ├── help_search_modes.rs
│ │ ├── help_state.rs
│ │ ├── help_verbs.rs
│ │ └── mod.rs
│ ├── hex/
│ │ ├── byte.rs
│ │ ├── hex_view.rs
│ │ └── mod.rs
│ ├── icon/
│ │ ├── font.rs
│ │ ├── icon_plugin.rs
│ │ └── mod.rs
│ ├── image/
│ │ ├── double_line.rs
│ │ ├── image_view.rs
│ │ ├── mod.rs
│ │ ├── source_image.rs
│ │ ├── svg.rs
│ │ └── zune_compat.rs
│ ├── keys.rs
│ ├── kitty/
│ │ ├── detect_support.rs
│ │ ├── image_renderer.rs
│ │ ├── mod.rs
│ │ └── terminal_esc.rs
│ ├── launchable.rs
│ ├── lib.rs
│ ├── main.rs
│ ├── net/
│ │ ├── client.rs
│ │ ├── message.rs
│ │ ├── mod.rs
│ │ └── server.rs
│ ├── path/
│ │ ├── anchor.rs
│ │ ├── closest.rs
│ │ ├── common.rs
│ │ ├── from.rs
│ │ ├── mod.rs
│ │ ├── normalize.rs
│ │ └── special_path.rs
│ ├── pattern/
│ │ ├── candidate.rs
│ │ ├── composite_pattern.rs
│ │ ├── content_pattern.rs
│ │ ├── content_regex_pattern.rs
│ │ ├── exact_pattern.rs
│ │ ├── fuzzy_pattern.rs
│ │ ├── input_pattern.rs
│ │ ├── mod.rs
│ │ ├── name_match.rs
│ │ ├── operator.rs
│ │ ├── pattern.rs
│ │ ├── pattern_object.rs
│ │ ├── pattern_parts.rs
│ │ ├── pos.rs
│ │ ├── regex_pattern.rs
│ │ ├── search_mode.rs
│ │ └── tok_pattern.rs
│ ├── permissions/
│ │ ├── mod.rs
│ │ └── permissions_unix.rs
│ ├── preview/
│ │ ├── dir_view.rs
│ │ ├── mod.rs
│ │ ├── preview.rs
│ │ ├── preview_state.rs
│ │ ├── preview_transformer.rs
│ │ └── zero_len_file_view.rs
│ ├── print.rs
│ ├── shell_install/
│ │ ├── bash.rs
│ │ ├── fish.rs
│ │ ├── mod.rs
│ │ ├── nushell.rs
│ │ ├── powershell.rs
│ │ ├── state.rs
│ │ └── util.rs
│ ├── skin/
│ │ ├── app_skin.rs
│ │ ├── cli_mad_skin.rs
│ │ ├── ext_colors.rs
│ │ ├── help_mad_skin.rs
│ │ ├── mod.rs
│ │ ├── panel_skin.rs
│ │ ├── purpose_mad_skin.rs
│ │ ├── skin_entry.rs
│ │ ├── status_mad_skin.rs
│ │ └── style_map.rs
│ ├── stage/
│ │ ├── filtered_stage.rs
│ │ ├── mod.rs
│ │ ├── stage.rs
│ │ ├── stage_state.rs
│ │ └── stage_sum.rs
│ ├── syntactic/
│ │ ├── mod.rs
│ │ ├── syntax_theme.rs
│ │ ├── syntaxer.rs
│ │ └── text_view.rs
│ ├── task_sync.rs
│ ├── terminal.rs
│ ├── trash/
│ │ ├── mod.rs
│ │ ├── trash_sort.rs
│ │ ├── trash_state.rs
│ │ └── trash_state_cols.rs
│ ├── tree/
│ │ ├── mod.rs
│ │ ├── sort.rs
│ │ ├── tree.rs
│ │ ├── tree_line.rs
│ │ ├── tree_line_type.rs
│ │ └── tree_options.rs
│ ├── tree_build/
│ │ ├── bid.rs
│ │ ├── bline.rs
│ │ ├── build_report.rs
│ │ ├── builder.rs
│ │ └── mod.rs
│ ├── tty/
│ │ ├── mod.rs
│ │ ├── tline.rs
│ │ ├── tline_builder.rs
│ │ ├── trange.rs
│ │ ├── tstring.rs
│ │ └── tty_view.rs
│ ├── verb/
│ │ ├── coarity.rs
│ │ ├── exec_pattern.rs
│ │ ├── execution_builder.rs
│ │ ├── external_execution.rs
│ │ ├── external_execution_mode.rs
│ │ ├── file_type_condition.rs
│ │ ├── internal.rs
│ │ ├── internal_execution.rs
│ │ ├── internal_focus.rs
│ │ ├── internal_path.rs
│ │ ├── internal_select.rs
│ │ ├── invocation_parser.rs
│ │ ├── mod.rs
│ │ ├── sequence_execution.rs
│ │ ├── verb.rs
│ │ ├── verb_arg_def.rs
│ │ ├── verb_description.rs
│ │ ├── verb_execution.rs
│ │ ├── verb_invocation.rs
│ │ ├── verb_store.rs
│ │ └── write.rs
│ └── watcher.rs
├── target.sh
├── tests/
│ └── search_strings.rs
├── version.sh
└── website/
├── .gitignore
├── README.md
├── ddoc.hjson
└── src/
├── README.md
├── common-problems.md
├── community.md
├── conf_file.md
├── conf_verbs.md
├── css/
│ ├── site.css
│ └── tab-langs.css
├── export.md
├── file-operations.md
├── help.md
├── icons.md
├── index.md
├── input.md
├── install-br.md
├── install.md
├── js/
│ ├── broot.js
│ └── tab-langs.js
├── launch.md
├── modal.md
├── navigation.md
├── panels.md
├── remote.md
├── skins.md
├── staging-area.md
├── trash.md
├── tree_view.md
├── tricks.md
└── verbs.md
SYMBOL INDEX (1573 symbols across 205 files)
FILE: benches/composite.rs
function bench_score_of_composite (line 19) | fn bench_score_of_composite(gb: &mut Bench) {
FILE: benches/fuzzy.rs
function bench_score_of_fuzzy (line 10) | fn bench_score_of_fuzzy(gb: &mut Bench) {
FILE: benches/path_normalization.rs
function bench_normalization (line 23) | fn bench_normalization(gb: &mut Bench) {
FILE: benches/toks.rs
function bench_score_of_toks (line 10) | fn bench_score_of_toks(gb: &mut Bench) {
FILE: build.rs
constant BUILD_MAN_PAGE (line 17) | pub const BUILD_MAN_PAGE: bool = false;
function write_completions_file (line 19) | fn write_completions_file<G: Generator + Copy, P: AsRef<OsStr>>(
function build_completion_scripts (line 32) | fn build_completion_scripts() {
function build_man_page (line 43) | fn build_man_page() -> std::io::Result<()> {
function main (line 56) | fn main() -> std::io::Result<()> {
FILE: src/app/app.rs
type App (line 52) | pub struct App {
method new (line 76) | pub fn new(con: &AppContext) -> Result<App, ProgramError> {
method apply_command (line 111) | fn apply_command(
method run (line 441) | pub fn run(
function clear_caches (line 620) | fn clear_caches() {
FILE: src/app/app_context.rs
type AppContext (line 44) | pub struct AppContext {
method from (line 167) | pub fn from(
method cmd (line 285) | pub fn cmd(&self) -> Option<&str> {
method initial_mode (line 296) | pub fn initial_mode(&self) -> Mode {
method default (line 308) | fn default() -> Self {
function are_true_colors_available (line 320) | fn are_true_colors_available() -> bool {
function initial_root_file (line 340) | fn initial_root_file(cli_args: &Args) -> Result<(PathBuf, Option<PathBuf...
function canonicalize_root (line 370) | fn canonicalize_root(root: &Path) -> io::Result<PathBuf> {
function canonicalize_root (line 375) | fn canonicalize_root(root: &Path) -> io::Result<PathBuf> {
function build_server_name (line 386) | fn build_server_name(args: &Args) -> Option<String> {
FILE: src/app/app_panels.rs
type AppPanelsAndInputs (line 32) | pub struct AppPanelsAndInputs {
method new (line 65) | pub fn new(con: &AppContext) -> Result<Self, ProgramError> {
method screen (line 96) | pub fn screen(&self) -> Screen {
method len (line 100) | pub fn len(&self) -> usize {
method set_terminal_size (line 107) | pub fn set_terminal_size(
method resize_all (line 117) | pub fn resize_all(
method state (line 137) | pub fn state(&self) -> &dyn PanelState {
method mut_state (line 140) | pub fn mut_state(&mut self) -> &mut dyn PanelState {
method get_other_panel_path (line 147) | pub fn get_other_panel_path(&self) -> Option<PathBuf> {
method push_state (line 172) | pub fn push_state(
method remove_state (line 186) | pub fn remove_state(
method panels (line 203) | pub fn panels(&self) -> &AppPanels {
method panel (line 206) | pub fn panel(&self) -> &Panel {
method mut_panel (line 209) | pub fn mut_panel(&mut self) -> &mut Panel {
method preview_panel_id (line 213) | pub fn preview_panel_id(&self) -> Option<PanelId> {
method stage_panel_id (line 216) | pub fn stage_panel_id(&self) -> Option<PanelId> {
method idx_by_ref (line 219) | pub fn idx_by_ref(
method has_preview_panel (line 226) | pub fn has_preview_panel(&self) -> bool {
method has_stage_panel (line 229) | pub fn has_stage_panel(&self) -> bool {
method active_panel_idx (line 232) | pub fn active_panel_idx(&self) -> usize {
method preview_panel_idx (line 235) | pub fn preview_panel_idx(&self) -> Option<usize> {
method panel_by_idx_unchecked (line 238) | pub fn panel_by_idx_unchecked(
method count_of_type (line 244) | pub fn count_of_type(
method new_panel (line 258) | pub fn new_panel(
method activate (line 307) | pub fn activate(
method focus_by_type (line 315) | pub fn focus_by_type(
method close (line 331) | pub fn close(
method close_first_non_tree (line 372) | pub fn close_first_non_tree(
method close_rightest_inactive_tree (line 388) | pub fn close_rightest_inactive_tree(
method clicked_panel_index (line 413) | pub fn clicked_panel_index(
method on_input_event (line 430) | pub fn on_input_event(
method app_cmd_context (line 445) | fn app_cmd_context<'c>(
method on_input_internal (line 459) | pub fn on_input_internal(
method apply_command (line 467) | pub fn apply_command<'c>(
method has_pending_task (line 491) | pub fn has_pending_task(&mut self) -> bool {
method do_pending_tasks (line 495) | pub fn do_pending_tasks(
method do_pending_task (line 520) | pub fn do_pending_task(
method refresh_active_panel (line 546) | pub fn refresh_active_panel(
method refresh_all_panels (line 556) | pub fn refresh_all_panels(
method refresh_input_status (line 565) | pub fn refresh_input_status(
method update_preview (line 595) | pub fn update_preview(
method input (line 617) | pub fn input(&mut self) -> &mut PanelInput {
method get_input_content (line 620) | pub fn get_input_content(&self) -> String {
method set_input_arg (line 624) | pub fn set_input_arg(
method do_input_escape (line 636) | pub fn do_input_escape(
method clear_input (line 645) | pub fn clear_input(&mut self) {
method clear_input_invocation (line 654) | pub fn clear_input_invocation(
method display_panels (line 673) | pub fn display_panels(
type AppPanels (line 51) | pub struct AppPanels {
method idx_by_type (line 746) | fn idx_by_type(
method idx_by_ref (line 754) | fn idx_by_ref(
method by_type (line 773) | fn by_type(
method by_ref (line 781) | fn by_ref(
method has_type (line 787) | fn has_type(
method state (line 794) | pub fn state(&self) -> &dyn PanelState {
method mut_state (line 797) | pub fn mut_state(&mut self) -> &mut dyn PanelState {
method state_by_ref (line 800) | pub fn state_by_ref(
FILE: src/app/app_state.rs
type AppState (line 8) | pub struct AppState {
method new (line 25) | pub fn new<P: Into<PathBuf>>(root: P) -> Self {
FILE: src/app/cmd_context.rs
type CmdContext (line 15) | pub struct CmdContext<'c> {
type AppCmdContext (line 22) | pub struct AppCmdContext<'c> {
type PanelCmdContext (line 32) | pub struct PanelCmdContext<'c> {
FILE: src/app/cmd_result.rs
type HDir (line 16) | pub enum HDir {
type CmdResult (line 22) | pub enum CmdResult {
method verb_not_found (line 59) | pub fn verb_not_found(text: &str) -> CmdResult {
method from_optional_browser_state (line 63) | pub fn from_optional_browser_state(
method new_state (line 89) | pub fn new_state(state: Box<dyn PanelState>) -> Self {
method error (line 95) | pub fn error<S: Into<String>>(message: S) -> Self {
method from (line 101) | fn from(launchable: Launchable) -> Self {
method fmt (line 107) | fn fmt(
FILE: src/app/display_context.rs
type DisplayContext (line 12) | pub struct DisplayContext<'c> {
FILE: src/app/mode.rs
type Mode (line 7) | pub enum Mode {
FILE: src/app/panel.rs
type Panel (line 25) | pub struct Panel {
method new (line 36) | pub fn new(
method set_error (line 55) | pub fn set_error(
method set_message (line 61) | pub fn set_message<S: Into<String>>(
method apply_command (line 70) | pub fn apply_command<'c>(
method do_pending_task (line 102) | pub fn do_pending_task(
method has_pending_task (line 114) | pub fn has_pending_task(&self) -> bool {
method push_state (line 118) | pub fn push_state(
method mut_state (line 125) | pub fn mut_state(&mut self) -> &mut dyn PanelState {
method state (line 133) | pub fn state(&self) -> &dyn PanelState {
method remove_state (line 142) | pub fn remove_state(&mut self) -> bool {
method write_status (line 151) | pub fn write_status(
method write_purpose (line 173) | pub fn write_purpose(
FILE: src/app/panel_id.rs
type PanelId (line 3) | pub struct PanelId(usize);
method from (line 6) | fn from(u: usize) -> Self {
method as_usize (line 14) | pub fn as_usize(&self) -> usize {
FILE: src/app/panel_purpose.rs
type PanelPurpose (line 5) | pub enum PanelPurpose {
method is_arg_edition (line 13) | pub fn is_arg_edition(self) -> bool {
method is_preview (line 17) | pub fn is_preview(self) -> bool {
FILE: src/app/panel_reference.rs
type PanelReference (line 22) | pub enum PanelReference {
method is_default (line 35) | pub fn is_default(&self) -> bool {
method fmt (line 41) | fn fmt(
method deserialize (line 82) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
type Err (line 56) | type Err = ConfError;
method from_str (line 57) | fn from_str(s: &str) -> Result<Self, Self::Err> {
method serialize (line 71) | fn serialize<S>(
FILE: src/app/panel_state.rs
type PanelState (line 28) | pub trait PanelState {
method get_type (line 29) | fn get_type(&self) -> PanelStateType;
method set_mode (line 31) | fn set_mode(
method get_mode (line 35) | fn get_mode(&self) -> Mode;
method clear_pending (line 38) | fn clear_pending(&mut self) {}
method on_click (line 40) | fn on_click(
method on_double_click (line 50) | fn on_double_click(
method on_pattern (line 60) | fn on_pattern(
method on_mode_verb (line 69) | fn on_mode_verb(
method on_internal (line 88) | fn on_internal(
method on_internal_generic (line 103) | fn on_internal_generic(
method stage (line 745) | fn stage(
method unstage (line 768) | fn unstage(
method toggle_stage (line 788) | fn toggle_stage(
method execute_verb (line 805) | fn execute_verb(
method execute_external (line 854) | fn execute_external(
method execute_sequence (line 884) | fn execute_sequence(
method on_command (line 922) | fn on_command(
method open_preview (line 987) | fn open_preview(
method tree_root (line 1025) | fn tree_root(&self) -> Option<&Path> {
method watchable_paths (line 1029) | fn watchable_paths(&self) -> Vec<PathBuf> {
method selected_path (line 1033) | fn selected_path(&self) -> Option<&Path>;
method selection (line 1035) | fn selection(&self) -> Option<Selection<'_>>;
method sel_info (line 1037) | fn sel_info<'c>(
method has_at_least_one_selection (line 1048) | fn has_at_least_one_selection(
method refresh (line 1055) | fn refresh(
method tree_options (line 1061) | fn tree_options(&self) -> TreeOptions;
method with_new_options (line 1068) | fn with_new_options(
method do_pending_task (line 1076) | fn do_pending_task(
method get_pending_task (line 1087) | fn get_pending_task(&self) -> Option<&'static str> {
method display (line 1091) | fn display(
method get_flags (line 1098) | fn get_flags(&self) -> Vec<Flag> {
method get_starting_input (line 1102) | fn get_starting_input(&self) -> String {
method set_selected_path (line 1106) | fn set_selected_path(
method no_verb_status (line 1115) | fn no_verb_status(
method get_status (line 1124) | fn get_status(
method get_verb_status (line 1176) | fn get_verb_status(
function get_arg (line 1207) | pub fn get_arg<T: Copy + FromStr>(
FILE: src/app/sel_info.rs
type SelInfo (line 15) | pub enum SelInfo<'s> {
function to_selections (line 22) | pub fn to_selections(&self) -> Vec<Selection<'a>> {
function from_path (line 39) | pub fn from_path(path: &'a Path) -> Self {
function count_paths (line 48) | pub fn count_paths(&self) -> usize {
function is_accepted_by (line 56) | pub fn is_accepted_by(
function common_stype (line 74) | pub fn common_stype(&self) -> Option<SelectionType> {
function one_sel (line 90) | pub fn one_sel(self) -> Option<Selection<'a>> {
function first_sel (line 97) | pub fn first_sel(self) -> Option<Selection<'a>> {
function one_path (line 110) | pub fn one_path(self) -> Option<&'a Path> {
function extension (line 114) | pub fn extension(&self) -> Option<&str> {
FILE: src/app/selection.rs
type LineNumber (line 19) | pub type LineNumber = usize;
type SelectionType (line 22) | pub enum SelectionType {
method respects (line 40) | pub fn respects(
method is_respected_by (line 47) | pub fn is_respected_by(
method from (line 59) | pub fn from(path: &Path) -> Self {
type Selection (line 31) | pub struct Selection<'s> {
function to_opener (line 71) | pub fn to_opener(
FILE: src/app/standard_status.rs
type StandardStatus (line 10) | pub struct StandardStatus {
method new (line 31) | pub fn new(verb_store: &VerbStore) -> Self {
method builder (line 87) | pub fn builder<'s>(
type StatusParts (line 98) | struct StatusParts<'b> {
function add (line 102) | fn add(
function addo (line 108) | fn addo(
function len (line 116) | fn len(&self) -> usize {
function to_status (line 122) | fn to_status(
type StandardStatusBuilder (line 152) | pub struct StandardStatusBuilder<'s> {
function new (line 163) | fn new(
function status (line 180) | pub fn status(self) -> Status {
FILE: src/app/state_type.rs
type PanelStateType (line 10) | pub enum PanelStateType {
FILE: src/app/status.rs
type Status (line 4) | pub struct Status {
method new (line 10) | pub fn new<S: Into<String>>(
method from_message (line 20) | pub fn from_message<S: Into<String>>(message: S) -> Status {
method from_error (line 27) | pub fn from_error<S: Into<String>>(message: S) -> Status {
FILE: src/browser/browser_state.rs
type BrowserState (line 24) | pub struct BrowserState {
method new (line 46) | pub fn new(
method search (line 77) | fn search(
method modified (line 88) | fn modified(
method root (line 108) | pub fn root(&self) -> &Path {
method page_height (line 112) | pub fn page_height(screen: Screen) -> usize {
method displayed_tree (line 118) | pub fn displayed_tree(&self) -> &Tree {
method displayed_tree_mut (line 124) | pub fn displayed_tree_mut(&mut self) -> &mut Tree {
method open_selection_stay_in_broot (line 128) | pub fn open_selection_stay_in_broot(
method go_to_parent (line 173) | pub fn go_to_parent(
type BrowserTask (line 33) | enum BrowserTask {
method tree_root (line 197) | fn tree_root(&self) -> Option<&Path> {
method get_type (line 201) | fn get_type(&self) -> PanelStateType {
method set_mode (line 205) | fn set_mode(
method get_mode (line 212) | fn get_mode(&self) -> Mode {
method get_pending_task (line 216) | fn get_pending_task(&self) -> Option<&'static str> {
method watchable_paths (line 229) | fn watchable_paths(&self) -> Vec<PathBuf> {
method selected_path (line 237) | fn selected_path(&self) -> Option<&Path> {
method selection (line 241) | fn selection(&self) -> Option<Selection<'_>> {
method tree_options (line 253) | fn tree_options(&self) -> TreeOptions {
method with_new_options (line 260) | fn with_new_options(
method clear_pending (line 281) | fn clear_pending(&mut self) {
method on_click (line 285) | fn on_click(
method on_double_click (line 296) | fn on_double_click(
method on_pattern (line 313) | fn on_pattern(
method on_internal (line 332) | fn on_internal(
method no_verb_status (line 713) | fn no_verb_status(
method do_pending_task (line 746) | fn do_pending_task(
method display (line 808) | fn display(
method refresh (line 824) | fn refresh(
method get_flags (line 846) | fn get_flags(&self) -> Vec<Flag> {
method get_starting_input (line 860) | fn get_starting_input(&self) -> String {
FILE: src/cli/args.rs
type Args (line 16) | pub struct Args {
type TriBool (line 212) | pub enum TriBool {
method unwrap_or_else (line 218) | pub fn unwrap_or_else<F>(
type CliShellInstallState (line 234) | pub enum CliShellInstallState {
type Err (line 240) | type Err = String;
method from_str (line 241) | fn from_str(state: &str) -> Result<Self, Self::Err> {
FILE: src/cli/install_launch_args.rs
type InstallLaunchArgs (line 14) | pub struct InstallLaunchArgs {
method from (line 20) | pub fn from(args: &Args) -> Result<Self, ProgramError> {
FILE: src/cli/mod.rs
function run (line 70) | pub fn run() -> Result<Option<Launchable>, ProgramError> {
function clear_resources (line 196) | fn clear_resources() {
function ask_authorization (line 202) | pub fn ask_authorization() -> io::Result<bool> {
FILE: src/command/command.rs
type Command (line 21) | pub enum Command {
method empty (line 62) | pub fn empty() -> Command {
method is_none (line 66) | pub fn is_none(&self) -> bool {
method triggered_verb (line 70) | pub fn triggered_verb<'v>(
method as_verb_invocation (line 80) | pub fn as_verb_invocation(&self) -> Option<&VerbInvocation> {
method from_parts (line 99) | pub fn from_parts(
method is_verb_invocated_from_input (line 124) | pub fn is_verb_invocated_from_input(&self) -> bool {
method from_raw (line 132) | pub fn from_raw(
method from_pattern (line 141) | pub fn from_pattern(pattern: &InputPattern) -> Self {
method default (line 147) | fn default() -> Command {
FILE: src/command/completion.rs
function common_start (line 20) | fn common_start<'l>(
type Completions (line 35) | pub enum Completions {
method from_list (line 47) | fn from_list(completions: Vec<String>) -> Self {
method for_wholes (line 69) | fn for_wholes(
method for_verb (line 89) | fn for_verb(
method list_for_path (line 112) | fn list_for_path(
method for_arg (line 156) | fn for_arg(
method for_theme_arg (line 181) | fn for_theme_arg(arg: &str) -> Self {
method for_path_arg (line 192) | fn for_path_arg(
method for_input (line 237) | pub fn for_input(
FILE: src/command/panel_input.rs
type PanelInput (line 34) | pub struct PanelInput {
method new (line 41) | pub fn new(area: Area) -> Self {
method set_content (line 49) | pub fn set_content(
method get_content (line 56) | pub fn get_content(&self) -> String {
method display (line 60) | pub fn display(
method on_event (line 87) | pub fn on_event(
method handle_input_related_verb (line 125) | fn handle_input_related_verb(
method on_internal (line 140) | pub fn on_internal(
method handle_input_related_internal (line 154) | fn handle_input_related_internal(
method enter_input_mode_with_key (line 217) | fn enter_input_mode_with_key(
method escape (line 242) | pub fn escape(
method auto_complete_verb (line 273) | fn auto_complete_verb(
method find_key_verb (line 340) | fn find_key_verb<'c>(
method on_mouse (line 383) | fn on_mouse(
method is_key_allowed_for_verb (line 414) | fn is_key_allowed_for_verb(
method on_key (line 431) | fn on_key(
FILE: src/command/parts.rs
type CommandParts (line 12) | pub struct CommandParts {
method fmt (line 19) | fn fmt(
method has_not_empty_verb_invocation (line 32) | pub fn has_not_empty_verb_invocation(&self) -> bool {
method from (line 37) | pub fn from<S: Into<String>>(raw: S) -> Self {
method split (line 139) | pub fn split(mut self) -> (Option<CommandParts>, Option<CommandParts>) {
function pp (line 175) | fn pp(a: &[&str]) -> PatternParts {
function check (line 183) | fn check(
function parse_empty (line 205) | fn parse_empty() {
function parse_just_semicolon (line 209) | fn parse_just_semicolon() {
function parse_no_pattern (line 213) | fn parse_no_pattern() {
function parse_pattern_and_invocation (line 217) | fn parse_pattern_and_invocation() {
function allow_extra_spaces_before_invocation (line 226) | fn allow_extra_spaces_before_invocation() {
function parse_pattern_between_slashes (line 248) | fn parse_pattern_between_slashes() {
function parse_pattern_with_space (line 262) | fn parse_pattern_with_space() {
function parse_pattern_with_slash (line 266) | fn parse_pattern_with_slash() {
function parse_fuzzy_pattern_searching_parenthesis (line 275) | fn parse_fuzzy_pattern_searching_parenthesis() {
function parse_regex_pattern_searching_parenthesis (line 279) | fn parse_regex_pattern_searching_parenthesis() {
function parse_composite_pattern (line 288) | fn parse_composite_pattern() {
function parse_unclosed_composite_pattern (line 306) | fn parse_unclosed_composite_pattern() {
function issue_592 (line 323) | fn issue_592() {
function allow_non_escaped_double_colon (line 335) | fn allow_non_escaped_double_colon() {
FILE: src/command/scroll.rs
type ScrollCommand (line 2) | pub enum ScrollCommand {
method to_lines (line 8) | pub fn to_lines(
method is_up (line 17) | pub fn is_up(self) -> bool {
method apply (line 24) | pub fn apply(
method is_thumb (line 34) | pub fn is_thumb(
FILE: src/command/sel.rs
function move_sel (line 4) | pub fn move_sel(
FILE: src/command/sequence.rs
type Sequence (line 19) | pub struct Sequence {
method local_separator (line 26) | pub fn local_separator() -> String {
method new (line 32) | pub fn new<S: Into<String>>(
method new_single (line 41) | pub fn new_single<S: Into<String>>(cmd: S) -> Self {
method new_local (line 47) | pub fn new_local(raw: String) -> Self {
method parse (line 58) | pub fn parse(
method has_selection_group (line 73) | pub fn has_selection_group(&self) -> bool {
method has_other_panel_group (line 76) | pub fn has_other_panel_group(&self) -> bool {
function add_commands (line 90) | fn add_commands(
FILE: src/command/trigger_type.rs
type TriggerType (line 8) | pub enum TriggerType<'v> {
FILE: src/conf/conf.rs
type Conf (line 57) | pub struct Conf {
method default_location (line 176) | pub fn default_location() -> PathBuf {
method from_default_location (line 190) | pub fn from_default_location() -> Result<Conf, ProgramError> {
method solve_conf_path (line 211) | pub fn solve_conf_path(
method read_file (line 230) | pub fn read_file(
FILE: src/conf/default.rs
function write_default_conf_in (line 18) | pub fn write_default_conf_in(dir: &Path) -> Result<(), io::Error> {
function find_files (line 42) | fn find_files<'d>(
function check_default_conf_files (line 61) | fn check_default_conf_files() {
FILE: src/conf/default_flags.rs
function parse_default_flags (line 11) | pub fn parse_default_flags(s: &str) -> Result<Args, ConfError> {
FILE: src/conf/file_size.rs
function parse_file_size (line 6) | pub fn parse_file_size(input: &str) -> Result<u64, String> {
function test_parse_file_size (line 41) | fn test_parse_file_size() {
function deserialize (line 48) | pub fn deserialize<'de, D>(d: D) -> Result<Option<u64>, D::Error>
FILE: src/conf/format.rs
type SerdeFormat (line 17) | pub enum SerdeFormat {
method key (line 26) | pub fn key(self) -> &'static str {
method from_key (line 32) | pub fn from_key(key: &str) -> Option<Self> {
method from_path (line 39) | pub fn from_path(path: &Path) -> Result<Self, ConfError> {
method read_string (line 48) | pub fn read_string<T>(
method read_file (line 67) | pub fn read_file<T>(path: &Path) -> Result<T, ProgramError>
FILE: src/conf/import.rs
type Import (line 9) | pub enum Import {
method applies (line 25) | pub fn applies(&self) -> bool {
method luma (line 28) | pub fn luma(&self) -> Option<&LumaCondition> {
method file (line 34) | pub fn file(&self) -> &str {
type DetailedImport (line 15) | pub struct DetailedImport {
FILE: src/conf/mod.rs
function app_dirs (line 35) | pub fn app_dirs() -> directories::ProjectDirs {
function env_conf_dir (line 41) | fn env_conf_dir() -> Option<PathBuf> {
function find_conf_dir (line 49) | fn find_conf_dir() -> PathBuf {
function find_conf_dir (line 54) | fn find_conf_dir() -> PathBuf {
function dir (line 87) | pub fn dir() -> &'static Path {
FILE: src/conf/special_handling_conf.rs
type SpecialPathsConf (line 12) | type SpecialPathsConf = HashMap<GlobConf, SpecialHandlingConf>;
type GlobConf (line 16) | pub struct GlobConf {
method to_glob (line 93) | pub fn to_glob(&self) -> Result<glob::Pattern, ConfError> {
type SpecialHandlingConf (line 22) | pub enum SpecialHandlingConf {
type SpecialHandlingShortcut (line 29) | pub enum SpecialHandlingShortcut {
method from (line 40) | fn from(shortcut: SpecialHandlingShortcut) -> Self {
method from (line 73) | fn from(conf: SpecialHandlingConf) -> Self {
type Error (line 82) | type Error = ConfError;
method try_from (line 83) | fn try_from(map: &SpecialPathsConf) -> Result<Self, ConfError> {
FILE: src/conf/verb_conf.rs
type VerbConf (line 17) | pub struct VerbConf {
FILE: src/content_search/content_match.rs
type ContentMatch (line 4) | pub struct ContentMatch {
method build (line 11) | pub fn build(
FILE: src/content_search/content_search_result.rs
type ContentSearchResult (line 3) | pub enum ContentSearchResult {
method is_found (line 15) | pub fn is_found(self) -> bool {
FILE: src/content_search/mod.rs
constant DEFAULT_MAX_FILE_SIZE (line 29) | pub const DEFAULT_MAX_FILE_SIZE: usize = 10 * 1024 * 1024;
function get_mmap (line 31) | pub fn get_mmap<P: AsRef<Path>>(hay_path: P) -> io::Result<Mmap> {
function get_mmap_if_suitable (line 40) | pub fn get_mmap_if_suitable<P: AsRef<Path>>(
function is_path_suitable (line 60) | pub fn is_path_suitable<P: AsRef<Path>>(
function line_count_at_pos (line 75) | pub fn line_count_at_pos<P: AsRef<Path>>(
FILE: src/content_search/needle.rs
type Needle (line 18) | pub struct Needle {
method fmt (line 27) | fn fmt(
method new (line 38) | pub fn new(
method is_empty (line 49) | pub fn is_empty(&self) -> bool {
method as_str (line 53) | pub fn as_str(&self) -> &str {
method find_naive_1 (line 58) | fn find_naive_1(
method find_naive_2 (line 69) | fn find_naive_2(
method find_naive_3 (line 91) | fn find_naive_3(
method find_naive_4 (line 117) | fn find_naive_4(
method find_naive_6 (line 136) | fn find_naive_6(
method is_at_pos (line 165) | fn is_at_pos(
method find_naive (line 181) | fn find_naive(
method search_mmap (line 210) | fn search_mmap(
method search (line 245) | pub fn search<P: AsRef<Path>>(
method get_match (line 258) | pub fn get_match<P: AsRef<Path>>(
function test_found (line 280) | fn test_found() -> Result<(), io::Error> {
FILE: src/content_type/extensions.rs
function is_known_binary (line 89) | pub fn is_known_binary(ext: &str) -> bool {
FILE: src/content_type/magic_numbers.rs
constant MIN_FILE_SIZE (line 16) | pub const MIN_FILE_SIZE: usize = 100;
function is_known_binary (line 85) | pub fn is_known_binary(bytes: &[u8]) -> bool {
function is_file_known_binary (line 125) | pub fn is_file_known_binary<P: AsRef<Path>>(path: P) -> io::Result<bool> {
FILE: src/content_type/mod.rs
function is_file_text (line 11) | pub fn is_file_text<P: AsRef<Path>>(path: P) -> io::Result<bool> {
function is_file_binary (line 19) | pub fn is_file_binary<P: AsRef<Path>>(path: P) -> io::Result<bool> {
FILE: src/display/areas.rs
type Areas (line 11) | pub struct Areas {
method create (line 31) | pub fn create(
method resize_all (line 67) | pub fn resize_all(
method compute_areas (line 87) | fn compute_areas(
method is_first (line 216) | pub fn is_first(&self) -> bool {
method is_last (line 219) | pub fn is_last(&self) -> bool {
constant MINIMAL_PANEL_HEIGHT (line 20) | const MINIMAL_PANEL_HEIGHT: u16 = 4;
constant MINIMAL_PANEL_WIDTH (line 21) | const MINIMAL_PANEL_WIDTH: u16 = 8;
constant MINIMAL_SCREEN_WIDTH (line 22) | const MINIMAL_SCREEN_WIDTH: u16 = 16;
type Slot (line 24) | enum Slot<'a> {
FILE: src/display/cell_size.rs
function cell_size_in_pixels (line 7) | pub fn cell_size_in_pixels() -> std::io::Result<(u32, u32)> {
function cell_size_in_pixels (line 47) | pub fn cell_size_in_pixels() -> std::io::Result<(u32, u32)> {
FILE: src/display/col.rs
constant COLS_COUNT (line 15) | const COLS_COUNT: usize = 10;
type Col (line 19) | pub enum Col {
method index_in (line 100) | pub fn index_in(
method needs_left_margin (line 112) | pub fn needs_left_margin(self) -> bool {
method is_visible (line 126) | pub fn is_visible(
type Cols (line 51) | pub type Cols = [Col; COLS_COUNT];
type Error (line 149) | type Error = ConfError;
method try_from (line 150) | fn try_from(cc: &ColsConf) -> Result<Self, Self::Error> {
type ColsConf (line 55) | pub enum ColsConf {
type Err (line 77) | type Err = ConfError;
method from_str (line 78) | fn from_str(s: &str) -> Result<Self, Self::Err> {
function parse_cols (line 161) | pub fn parse_cols(arr: &Vec<String>) -> Result<Cols, ConfError> {
function parse_cols_single_str (line 181) | pub fn parse_cols_single_str(s: &str) -> Result<Cols, ConfError> {
FILE: src/display/displayable_tree.rs
type DisplayableTree (line 59) | pub struct DisplayableTree<'a, 's, 't> {
function out_of_app (line 69) | pub fn out_of_app(
function label_style (line 91) | fn label_style(
function write_line_count (line 120) | fn write_line_count<W: Write>(
function write_line_device_id (line 138) | fn write_line_device_id<W: Write>(
function write_line_selection_mark (line 164) | fn write_line_selection_mark<W: Write>(
function write_line_size (line 177) | fn write_line_size<W: Write>(
function write_line_size_with_bar (line 193) | fn write_line_size_with_bar<W: Write>(
function write_line_git_status (line 220) | fn write_line_git_status<W: Write>(
function write_date (line 244) | fn write_date<W: Write>(
function write_branch (line 262) | fn write_branch<W: Write>(
function write_line_stage_mark (line 297) | fn write_line_stage_mark<W: Write>(
function write_line_label (line 311) | fn write_line_label<W: Write>(
function write_content_extract (line 387) | fn write_content_extract<W: Write>(
function write_root_line (line 409) | pub fn write_root_line<W: Write>(
function extend_line_bg (line 462) | pub fn extend_line_bg<W: Write>(
function write_on (line 479) | pub fn write_on<W: Write>(
FILE: src/display/flags_display.rs
function visible_width (line 12) | pub fn visible_width(flags: &[Flag]) -> u16 {
function write (line 22) | pub fn write(
FILE: src/display/git_status_display.rs
type GitStatusDisplay (line 10) | pub struct GitStatusDisplay<'a, 's> {
function from (line 20) | pub fn from(
function write (line 55) | pub fn write<W>(
FILE: src/display/layout_instructions.rs
type LayoutInstructions (line 9) | pub struct LayoutInstructions {
method push (line 75) | pub fn push(
type LayoutInstruction (line 15) | pub enum LayoutInstruction {
method is_moving_divider (line 63) | pub fn is_moving_divider(
type MoveDividerArgs (line 24) | pub struct MoveDividerArgs {
type Err (line 29) | type Err = &'static str;
method from_str (line 30) | fn from_str(s: &str) -> Result<Self, Self::Err> {
type SetPanelWidthArgs (line 44) | pub struct SetPanelWidthArgs {
type Err (line 49) | type Err = &'static str;
method from_str (line 50) | fn from_str(s: &str) -> Result<Self, Self::Err> {
FILE: src/display/luma.rs
type Luma (line 9) | pub enum Luma {
method read (line 27) | pub fn read() -> Self {
function luma (line 17) | pub fn luma() -> &'static Result<f32, terminal_light::TlError> {
type LumaCondition (line 38) | pub enum LumaCondition {
method is_verified (line 44) | pub fn is_verified(&self) -> bool {
method includes (line 52) | pub fn includes(
FILE: src/display/matched_string.rs
type MatchedString (line 18) | pub struct MatchedString<'a> {
function new (line 28) | pub fn new(
function split_on_last (line 47) | pub fn split_on_last(
function fill (line 74) | pub fn fill(
function width (line 82) | pub fn width(&self) -> usize {
function cut_left_to_fit (line 87) | pub fn cut_left_to_fit(
function queue_on (line 116) | pub fn queue_on<W>(
FILE: src/display/mod.rs
constant WIDE_STATUS (line 64) | pub const WIDE_STATUS: bool = true;
type W (line 67) | pub type W = std::io::BufWriter<std::io::Stderr>;
function writer (line 71) | pub fn writer() -> W {
FILE: src/display/num_format.rs
function format_count (line 2) | pub fn format_count(count: usize) -> String {
function test_format_count (line 14) | fn test_format_count() {
FILE: src/display/permissions.rs
type PermWriter (line 20) | pub struct PermWriter<'s> {
function new (line 27) | pub fn new(
function for_tree (line 39) | pub fn for_tree(
function write_mode (line 47) | fn write_mode<W: Write>(
function write_permissions (line 110) | pub fn write_permissions<W: Write>(
function user_group_max_lengths (line 137) | fn user_group_max_lengths(tree: &Tree) -> (usize, usize) {
FILE: src/display/screen.rs
type Screen (line 21) | pub struct Screen {
method new (line 27) | pub fn new(con: &AppContext) -> Result<Screen, ProgramError> {
method set_terminal_size (line 35) | pub fn set_terminal_size(
method read_size (line 47) | pub fn read_size(
method goto (line 56) | pub fn goto(
method clear_line (line 66) | pub fn clear_line(
method clear_area_to_right (line 75) | pub fn clear_area_to_right(
method clear_bottom_right_char (line 90) | pub fn clear_bottom_right_char(
FILE: src/display/status_line.rs
function write (line 23) | pub fn write(
function erase (line 63) | pub fn erase(
FILE: src/errors.rs
method is_permission_denied (line 41) | pub fn is_permission_denied(&self) -> bool {
type IoToShellInstallError (line 53) | pub trait IoToShellInstallError<Ok> {
method context (line 54) | fn context(
function context (line 60) | fn context(
FILE: src/file_sum/mod.rs
constant DEFAULT_THREAD_COUNT (line 23) | pub const DEFAULT_THREAD_COUNT: usize = 5;
function clear_cache (line 28) | pub fn clear_cache() {
type FileSum (line 35) | pub struct FileSum {
method new (line 43) | pub fn new(
method zero (line 57) | pub fn zero() -> Self {
method incr (line 61) | pub fn incr(&mut self) {
method from_file (line 67) | pub fn from_file(path: &Path) -> Self {
method from_dir (line 74) | pub fn from_dir(
method part_of_size (line 97) | pub fn part_of_size(
method to_count (line 108) | pub fn to_count(self) -> usize {
method to_seconds (line 113) | pub fn to_seconds(self) -> u32 {
method to_size (line 117) | pub fn to_size(self) -> u64 {
method to_valid_seconds (line 120) | pub fn to_valid_seconds(self) -> Option<i64> {
method is_sparse (line 130) | pub fn is_sparse(self) -> bool {
method add_assign (line 137) | fn add_assign(
FILE: src/file_sum/sum_computation.rs
type DirSummer (line 35) | struct DirSummer {
method new (line 52) | pub fn new(thread_count: usize) -> Self {
method compute_dir_sum (line 66) | pub fn compute_dir_sum(
type NodeId (line 44) | struct NodeId {
function compute_dir_sum (line 248) | pub fn compute_dir_sum(
function compute_file_sum (line 264) | pub fn compute_file_sum(path: &Path) -> FileSum {
function extract_seconds (line 289) | fn extract_seconds(md: &fs::Metadata) -> u32 {
function extract_seconds (line 294) | fn extract_seconds(md: &fs::Metadata) -> u32 {
function md_sum (line 305) | fn md_sum(md: &fs::Metadata) -> FileSum {
FILE: src/filesystems/filesystems_state.rs
type FilteredContent (line 34) | struct FilteredContent {
type FilesystemState (line 41) | pub struct FilesystemState {
method new (line 56) | pub fn new(
method count (line 99) | pub fn count(&self) -> usize {
method try_scroll (line 105) | pub fn try_scroll(
method move_line (line 120) | fn move_line(
method no_opt_selected_path (line 142) | fn no_opt_selected_path(&self) -> &Path {
method no_opt_selection (line 146) | fn no_opt_selection(&self) -> Selection<'_> {
method get_type (line 157) | fn get_type(&self) -> PanelStateType {
method set_mode (line 161) | fn set_mode(
method get_mode (line 168) | fn get_mode(&self) -> Mode {
method selected_path (line 172) | fn selected_path(&self) -> Option<&Path> {
method tree_options (line 176) | fn tree_options(&self) -> TreeOptions {
method with_new_options (line 180) | fn with_new_options(
method selection (line 191) | fn selection(&self) -> Option<Selection<'_>> {
method refresh (line 195) | fn refresh(
method on_pattern (line 203) | fn on_pattern(
method display (line 243) | fn display(
method on_internal (line 545) | fn on_internal(
method on_click (line 661) | fn on_click(
FILE: src/filesystems/mod.rs
function clear_cache (line 20) | pub fn clear_cache() {
FILE: src/filesystems/mount_list.rs
type MountList (line 12) | pub struct MountList {
method clear_cache (line 17) | pub fn clear_cache(&mut self) {
method load (line 21) | pub fn load(&mut self) -> Result<&Vec<Mount>, ProgramError> {
method get_by_device_id (line 46) | pub fn get_by_device_id(
FILE: src/filesystems/mount_space_display.rs
type MountSpaceDisplay (line 21) | pub struct MountSpaceDisplay<'m, 's> {
function from (line 28) | pub fn from(
function write (line 40) | pub fn write<W>(
FILE: src/flag/mod.rs
type Flag (line 3) | pub struct Flag {
FILE: src/git/ignore.rs
type Ignorer (line 30) | pub struct Ignorer {
method root_chain (line 193) | pub fn root_chain(
method deeper_chain (line 241) | pub fn deeper_chain(
method accepts (line 271) | pub fn accepts(
type IgnoreChain (line 34) | pub struct IgnoreChain {
method push (line 184) | pub fn push(
type IgnoreFile (line 40) | pub struct IgnoreFile {
method new (line 133) | pub fn new(
method global (line 157) | pub fn global(repo_dir: &Path) -> Option<IgnoreFile> {
type IgnoreRule (line 48) | struct IgnoreRule {
method fmt (line 57) | fn fmt(
method from (line 73) | fn from(
function find_global_ignore (line 167) | pub fn find_global_ignore() -> Option<PathBuf> {
function is_repo (line 304) | pub fn is_repo(root: &Path) -> bool {
FILE: src/git/mod.rs
function closest_repo_dir (line 27) | pub fn closest_repo_dir(mut path: &Path) -> Option<PathBuf> {
FILE: src/git/status.rs
constant INTERESTING (line 14) | const INTERESTING: Status = Status::from_bits_truncate(
type LineGitStatus (line 23) | pub struct LineGitStatus {
method from (line 28) | pub fn from(
method is_interesting (line 36) | pub fn is_interesting(self) -> bool {
type LineStatusComputer (line 44) | pub struct LineStatusComputer {
method from (line 48) | pub fn from(repo: &Repository) -> Option<Self> {
method line_status (line 65) | pub fn line_status(
method is_interesting (line 73) | pub fn is_interesting(
type TreeGitStatus (line 82) | pub struct TreeGitStatus {
method from (line 89) | pub fn from(repo: &Repository) -> Option<Self> {
FILE: src/git/status_computer.rs
function compute_tree_status (line 24) | fn compute_tree_status(root_path: &Path) -> ComputationResult<TreeGitSta...
function get_tree_status (line 53) | pub fn get_tree_status(
function clear_status_computer_cache (line 112) | pub fn clear_status_computer_cache() {
FILE: src/help/help_content.rs
function expander (line 83) | pub fn expander() -> TextTemplateExpander<'static, 'static> {
FILE: src/help/help_features.rs
function list (line 2) | pub fn list() -> Vec<(&'static str, &'static str)> {
FILE: src/help/help_search_modes.rs
type SearchModeHelp (line 8) | pub struct SearchModeHelp {
function search_mode_help (line 15) | pub fn search_mode_help(
FILE: src/help/help_state.rs
type HelpState (line 35) | pub struct HelpState {
method new (line 46) | pub fn new(
method get_type (line 70) | fn get_type(&self) -> PanelStateType {
method set_mode (line 74) | fn set_mode(
method get_mode (line 81) | fn get_mode(&self) -> Mode {
method selected_path (line 85) | fn selected_path(&self) -> Option<&Path> {
method tree_options (line 89) | fn tree_options(&self) -> TreeOptions {
method with_new_options (line 93) | fn with_new_options(
method selection (line 104) | fn selection(&self) -> Option<Selection<'_>> {
method refresh (line 113) | fn refresh(
method on_pattern (line 122) | fn on_pattern(
method display (line 132) | fn display(
method on_internal (line 223) | fn on_internal(
FILE: src/help/help_verbs.rs
type MatchingVerbRow (line 10) | pub struct MatchingVerbRow<'v> {
function name (line 20) | pub fn name(&self) -> &str {
function shortcut (line 29) | pub fn shortcut(&self) -> &str {
function matching_verb_rows (line 42) | pub fn matching_verb_rows<'v>(
FILE: src/hex/byte.rs
type ByteCategory (line 6) | pub enum ByteCategory {
type Byte (line 15) | pub struct Byte(u8);
method from (line 18) | fn from(u: u8) -> Self {
method category (line 24) | pub fn category(self) -> ByteCategory {
method style (line 38) | pub fn style(
method as_char (line 51) | pub fn as_char(self) -> char {
FILE: src/hex/hex_view.rs
type HexLine (line 34) | pub struct HexLine {
type HexView (line 39) | pub struct HexView {
method new (line 47) | pub fn new(path: PathBuf) -> io::Result<Self> {
method line_count (line 56) | pub fn line_count(&self) -> usize {
method try_scroll (line 59) | pub fn try_scroll(
method select_first (line 67) | pub fn select_first(&mut self) {
method select_last (line 70) | pub fn select_last(&mut self) {
method get_page (line 75) | pub fn get_page(
method display (line 107) | pub fn display(
method display_info (line 232) | pub fn display_info(
function is_thumb (line 258) | fn is_thumb(
FILE: src/icon/font.rs
type FontPlugin (line 7) | pub struct FontPlugin {
method sanity_check (line 17) | fn sanity_check(
method new (line 41) | pub fn new(
method handle_single_extension (line 82) | fn handle_single_extension(
method handle_file (line 95) | fn handle_file(
method handle_double_extension (line 107) | fn handle_double_extension(
method get_icon (line 123) | fn get_icon(
FILE: src/icon/icon_plugin.rs
type IconPlugin (line 3) | pub trait IconPlugin {
method get_icon (line 4) | fn get_icon(
FILE: src/icon/mod.rs
function icon_plugin (line 8) | pub fn icon_plugin(icon_set: &str) -> Option<Box<dyn IconPlugin + Send +...
FILE: src/image/double_line.rs
constant UPPER_HALF_BLOCK (line 22) | const UPPER_HALF_BLOCK: char = '▀';
type DoubleLine (line 30) | pub struct DoubleLine {
method new (line 37) | pub fn new(
method push (line 47) | pub fn push(
method is_empty (line 65) | pub fn is_empty(&self) -> bool {
method is_full (line 68) | pub fn is_full(&self) -> bool {
method write (line 71) | pub fn write(
FILE: src/image/image_view.rs
type DrawingInfo (line 39) | struct DrawingInfo {
method follows_in_place (line 45) | pub fn follows_in_place(
type CachedImage (line 56) | struct CachedImage {
type ImageView (line 64) | pub struct ImageView {
method new (line 73) | pub fn new(path: &Path) -> Result<Self, ProgramError> {
method display (line 83) | pub fn display(
method display_info (line 194) | pub fn display_info(
FILE: src/image/source_image.rs
type SourceImage (line 15) | pub enum SourceImage {
method new (line 21) | pub fn new(path: &Path) -> Result<Self, ProgramError> {
method dimensions (line 30) | pub fn dimensions(&self) -> (u32, u32) {
method fitting (line 39) | pub fn fitting(
function f32_to_u32 (line 65) | fn f32_to_u32(v: f32) -> u32 {
FILE: src/image/svg.rs
function compute_zoom (line 12) | fn compute_zoom(
function load (line 30) | pub fn load<P: Into<PathBuf>>(path: P) -> Result<usvg::Tree, SvgError> {
function render_tree (line 41) | pub fn render_tree(
function render (line 87) | pub fn render<P: Into<PathBuf>>(
FILE: src/image/zune_compat.rs
method from (line 10) | fn from(err: zune_image::errors::ImageErrors) -> Self {
method from (line 18) | fn from(err: image::ImageError) -> Self {
type DynamicImage (line 27) | pub enum DynamicImage {
method from_path_as_zune (line 35) | pub fn from_path_as_zune(path: &Path) -> Result<Self, ProgramError> {
method from_path (line 50) | pub fn from_path(path: &Path) -> Result<Self, ProgramError> {
method from_rgba8 (line 66) | pub fn from_rgba8(width: u32, height: u32, data: Vec<u8>) -> Result<Se...
method dimensions (line 82) | pub fn dimensions(&self) -> (u32, u32) {
method resize (line 92) | pub fn resize(&self, max_width: u32, max_height: u32) -> Result<Self, ...
method as_rgb8 (line 138) | pub fn as_rgb8(&self) -> Option<RgbImage> {
method as_rgba8 (line 151) | pub fn as_rgba8(&self) -> Option<RgbaImage> {
method to_rgb8 (line 164) | pub fn to_rgb8(&self) -> RgbImage {
method pixels (line 186) | pub fn pixels(&self) -> PixelIterator {
function resize_bilinear (line 219) | fn resize_bilinear(
type RgbImage (line 278) | pub enum RgbImage {
method as_raw (line 284) | pub fn as_raw(&self) -> Vec<u8> {
type RgbaImage (line 299) | pub enum RgbaImage {
method as_raw (line 305) | pub fn as_raw(&self) -> Vec<u8> {
method from_vec (line 319) | pub fn from_vec(width: u32, height: u32, data: Vec<u8>) -> Option<Self> {
type Rgba (line 331) | pub struct Rgba<T>(pub [T; 4]);
type Output (line 334) | type Output = T;
function index (line 335) | fn index(&self, index: usize) -> &Self::Output {
type PixelIterator (line 340) | pub enum PixelIterator {
type Item (line 355) | type Item = (u32, u32, Rgba<u8>);
method next (line 357) | fn next(&mut self) -> Option<Self::Item> {
FILE: src/keys.rs
function is_reserved (line 13) | pub fn is_reserved(key: KeyCombination) -> bool {
function is_key_only_modal (line 19) | pub fn is_key_only_modal(key: KeyCombination) -> bool {
FILE: src/kitty/detect_support.rs
function detect_kitty_graphics_protocol_display (line 13) | pub fn detect_kitty_graphics_protocol_display() -> KittyGraphicsDisplay {
function is_tmux (line 113) | pub fn is_tmux() -> bool {
function get_tmux_nest_count (line 130) | pub fn get_tmux_nest_count() -> u32 {
function is_ssh (line 140) | pub fn is_ssh() -> bool {
FILE: src/kitty/image_renderer.rs
type TransmissionMedium (line 73) | pub enum TransmissionMedium {
type KittyGraphicsDisplay (line 90) | pub enum KittyGraphicsDisplay {
type KittyImageRendererOptions (line 103) | pub struct KittyImageRendererOptions {
type ImageData (line 110) | enum ImageData {
method from (line 115) | fn from(img: &DynamicImage) -> Self {
method kitty_format (line 129) | fn kitty_format(&self) -> &'static str {
method bytes (line 135) | fn bytes(&self) -> Vec<u8> {
constant CHUNK_SIZE (line 145) | const CHUNK_SIZE: usize = 4096;
constant PLACHOLDER (line 148) | const PLACHOLDER: &str = "\u{10EEEE}";
constant DIACRITICS (line 151) | const DIACRITICS: &[&str] = &[
function div_ceil (line 192) | fn div_ceil(
type KittyImageRenderer (line 202) | pub struct KittyImageRenderer {
method new (line 468) | pub fn new(mut options: KittyImageRendererOptions) -> Option<Self> {
method delete_temp_files (line 495) | pub fn delete_temp_files(&mut self) {
method new_id (line 504) | fn new_id(&mut self) -> usize {
method is_path_png (line 509) | fn is_path_png(path: &Path) -> bool {
method print (line 517) | pub fn print(
method rendering_area (line 578) | fn rendering_area(
method rendering_dim (line 594) | fn rendering_dim(
type KittyImageData (line 212) | enum KittyImageData {
type KittyImage (line 218) | struct KittyImage {
method new (line 229) | fn new(
method print_placeholder_grid (line 257) | fn print_placeholder_grid(
method compress (line 293) | fn compress(data: &[u8]) -> Result<Vec<u8>, ProgramError> {
method print_with_chunks (line 300) | fn print_with_chunks(
method print_with_path (line 380) | fn print_with_path(
method print_with_png (line 434) | pub fn print_with_png(
method print_with_temp_file (line 447) | pub fn print_with_temp_file(
FILE: src/kitty/mod.rs
type KittyImageId (line 27) | pub type KittyImageId = usize;
function manager (line 37) | pub fn manager() -> &'static Mutex<KittyManager> {
type KittyManager (line 42) | pub struct KittyManager {
method renderer_if_tested (line 63) | pub fn renderer_if_tested(&mut self) -> Option<&mut KittyImageRenderer> {
method delete_temp_files (line 69) | pub fn delete_temp_files(&mut self) {
method renderer (line 74) | pub fn renderer(
method keep (line 101) | pub fn keep(
method try_print_image (line 113) | pub fn try_print_image(
method erase_images_before (line 138) | pub fn erase_images_before(
type RenderedImage (line 48) | struct RenderedImage {
type MaybeRenderer (line 54) | enum MaybeRenderer {
FILE: src/kitty/terminal_esc.rs
function get_esc_seq (line 1) | pub fn get_esc_seq(tmux_nest_count: u32) -> String {
function get_tmux_header (line 5) | pub fn get_tmux_header(tmux_nest_count: u32) -> String {
function get_tmux_tail (line 14) | pub fn get_tmux_tail(tmux_nest_count: u32) -> String {
FILE: src/launchable.rs
type Launchable (line 46) | pub enum Launchable {
method opener (line 100) | pub fn opener(path: PathBuf) -> Launchable {
method printer (line 103) | pub fn printer(to_print: String) -> Launchable {
method tree_printer (line 106) | pub fn tree_printer(
method program (line 121) | pub fn program(
method execute (line 141) | pub fn execute(
function resolve_env_variables (line 75) | fn resolve_env_variables(parts: Vec<String>) -> Vec<String> {
function try_set_current_dir (line 235) | pub fn try_set_current_dir(mut dir: &Path) -> bool {
FILE: src/main.rs
function main (line 3) | fn main() {
FILE: src/net/client.rs
type Client (line 10) | pub struct Client {
method new (line 15) | pub fn new(socket_name: &str) -> Self {
method send (line 20) | pub fn send(
FILE: src/net/message.rs
type Message (line 15) | pub enum Message {
method read (line 34) | pub fn read<BR: BufRead>(r: &mut BR) -> Result<Self, NetError> {
method write (line 47) | pub fn write<W: Write>(
function read_line (line 23) | fn read_line<BR: BufRead>(r: &mut BR) -> Result<String, NetError> {
FILE: src/net/mod.rs
function socket_file_path (line 11) | pub fn socket_file_path(server_name: &str) -> String {
function random_server_name (line 25) | pub fn random_server_name() -> String {
FILE: src/net/server.rs
type Server (line 21) | pub struct Server {
method new (line 26) | pub fn new(
method drop (line 93) | fn drop(&mut self) {
FILE: src/path/anchor.rs
type PathAnchor (line 2) | pub enum PathAnchor {
FILE: src/path/closest.rs
function closest_dir (line 7) | pub fn closest_dir(mut path: &Path) -> PathBuf {
FILE: src/path/common.rs
function longest_common_ancestor (line 6) | pub fn longest_common_ancestor(paths: &[PathBuf]) -> PathBuf {
FILE: src/path/from.rs
function untilde (line 16) | pub fn untilde(input: &str) -> PathBuf {
function path_from (line 30) | pub fn path_from<P: AsRef<Path> + std::fmt::Debug>(
function path_str_from (line 58) | pub fn path_str_from<P: AsRef<Path> + std::fmt::Debug>(
FILE: src/path/mod.rs
function path_has_ext (line 22) | pub fn path_has_ext<P: AsRef<Path>>(
FILE: src/path/normalize.rs
function normalize_path (line 17) | pub fn normalize_path<P: AsRef<Path>>(path: P) -> PathBuf {
function check (line 42) | fn check(
function test_path_normalization (line 58) | fn test_path_normalization() {
FILE: src/path/special_path.rs
type SpecialHandling (line 14) | pub struct SpecialHandling {
type Directive (line 25) | pub enum Directive {
type SpecialPath (line 33) | pub struct SpecialPath {
method new (line 118) | pub fn new(
method can_have_matches_in (line 124) | pub fn can_have_matches_in(
type SpecialPaths (line 39) | pub struct SpecialPaths {
method find (line 44) | pub fn find<P: AsRef<Path>>(
method show (line 54) | pub fn show(
method list (line 60) | pub fn list(
method sum (line 66) | pub fn sum(
method add_default (line 73) | pub fn add_default(
method add_defaults (line 90) | pub fn add_defaults(&mut self) {
method reduce (line 103) | pub fn reduce(
FILE: src/pattern/candidate.rs
type Candidate (line 10) | pub struct Candidate<'c> {
FILE: src/pattern/composite_pattern.rs
type CompositePattern (line 11) | pub struct CompositePattern {
method new (line 17) | pub fn new(expr: BeTree<PatternOperator, Pattern>) -> Self {
method is_content_search (line 25) | pub fn is_content_search(&self) -> bool {
method score_of_string (line 29) | pub fn score_of_string(
method score_of (line 63) | pub fn score_of(
method search_string (line 101) | pub fn search_string(
method search_content (line 142) | pub fn search_content(
method find_string (line 189) | pub fn find_string(
method find_content (line 220) | pub fn find_content(
method get_match_line_count (line 246) | pub fn get_match_line_count(
method has_real_scores (line 269) | pub fn has_real_scores(&self) -> bool {
method is_empty (line 276) | pub fn is_empty(&self) -> bool {
FILE: src/pattern/content_pattern.rs
type ContentExactPattern (line 12) | pub struct ContentExactPattern {
method fmt (line 17) | fn fmt(
method new (line 26) | pub fn new(
method as_str (line 35) | pub fn as_str(&self) -> &str {
method is_empty (line 39) | pub fn is_empty(&self) -> bool {
method to_regex_parts (line 43) | pub fn to_regex_parts(&self) -> (String, String) {
method score_of (line 47) | pub fn score_of(
method get_match_line_count (line 63) | pub fn get_match_line_count(
method get_content_match (line 74) | pub fn get_content_match(
FILE: src/pattern/content_regex_pattern.rs
type ContentRegexPattern (line 19) | pub struct ContentRegexPattern {
method fmt (line 26) | fn fmt(
method new (line 35) | pub fn new(
method is_empty (line 47) | pub fn is_empty(&self) -> bool {
method to_regex_parts (line 51) | pub fn to_regex_parts(&self) -> (String, String) {
method has_match (line 56) | fn has_match(
method score_of (line 68) | pub fn score_of(
method try_get_content_match (line 85) | pub fn try_get_content_match(
method try_get_match_line_count (line 105) | pub fn try_get_match_line_count(
method get_match_line_count (line 120) | pub fn get_match_line_count(
method get_content_match (line 127) | pub fn get_content_match(
FILE: src/pattern/exact_pattern.rs
constant BONUS_MATCH (line 22) | const BONUS_MATCH: i32 = 50_000;
constant BONUS_EXACT (line 23) | const BONUS_EXACT: i32 = 1_000;
constant BONUS_START (line 24) | const BONUS_START: i32 = 10;
constant BONUS_START_WORD (line 25) | const BONUS_START_WORD: i32 = 5;
constant BONUS_CANDIDATE_LENGTH (line 26) | const BONUS_CANDIDATE_LENGTH: i32 = -1;
constant BONUS_DISTANCE_FROM_START (line 27) | const BONUS_DISTANCE_FROM_START: i32 = -1;
type ExactPattern (line 31) | pub struct ExactPattern {
method fmt (line 37) | fn fmt(
method from (line 52) | pub fn from(pattern: &str) -> Self {
method is_empty (line 59) | pub fn is_empty(&self) -> bool {
method score (line 63) | fn score(
method find (line 85) | pub fn find(
method try_get_match_line_count (line 107) | pub fn try_get_match_line_count(
method get_match_line_count (line 124) | pub fn get_match_line_count(
method score_of (line 132) | pub fn score_of(
function is_word_separator (line 45) | fn is_word_separator(c: u8) -> bool {
FILE: src/pattern/fuzzy_pattern.rs
type CandChars (line 18) | type CandChars = SmallVec<[char; 32]>;
constant BONUS_MATCH (line 21) | const BONUS_MATCH: i32 = 50_000;
constant BONUS_EXACT (line 22) | const BONUS_EXACT: i32 = 1_000;
constant BONUS_START (line 23) | const BONUS_START: i32 = 10;
constant BONUS_START_WORD (line 24) | const BONUS_START_WORD: i32 = 5;
constant BONUS_CANDIDATE_LENGTH (line 25) | const BONUS_CANDIDATE_LENGTH: i32 = -1;
constant BONUS_MATCH_LENGTH (line 26) | const BONUS_MATCH_LENGTH: i32 = -10;
constant BONUS_NB_HOLES (line 27) | const BONUS_NB_HOLES: i32 = -30;
constant BONUS_SINGLED_CHAR (line 28) | const BONUS_SINGLED_CHAR: i32 = -15;
type FuzzyPattern (line 32) | pub struct FuzzyPattern {
method fmt (line 38) | fn fmt(
method from (line 62) | pub fn from(pat: &str) -> Self {
method is_empty (line 86) | pub fn is_empty(&self) -> bool {
method tight_match_from_index (line 90) | fn tight_match_from_index(
method find (line 182) | pub fn find(
method score_of (line 221) | pub fn score_of(
type MatchSearchResult (line 49) | enum MatchSearchResult {
function is_word_separator (line 55) | fn is_word_separator(c: char) -> bool {
function check_pos (line 238) | fn check_pos(
function check_match_pos (line 256) | fn check_match_pos() {
function check_ordering_for (line 312) | fn check_ordering_for(
function check_orderings (line 331) | fn check_orderings() {
function check_equivalences (line 371) | fn check_equivalences() {
function issue_746 (line 395) | fn issue_746() {
FILE: src/pattern/input_pattern.rs
type InputPattern (line 20) | pub struct InputPattern {
method none (line 35) | pub fn none() -> Self {
method new (line 41) | pub fn new(
method is_none (line 53) | pub fn is_none(&self) -> bool {
method is_some (line 56) | pub fn is_some(&self) -> bool {
method take (line 61) | pub fn take(&mut self) -> Self {
method as_option (line 64) | pub fn as_option(self) -> Option<Self> {
method tree_to_preview (line 69) | pub fn tree_to_preview(&self) -> Self {
method eq (line 26) | fn eq(
function test_tree_to_preview (line 103) | fn test_tree_to_preview() {
FILE: src/pattern/mod.rs
function build_regex (line 42) | pub fn build_regex(
FILE: src/pattern/name_match.rs
type NameMatch (line 9) | pub struct NameMatch {
method merge_with (line 15) | pub fn merge_with(self, other: Self) -> Self{
method wrap (line 48) | pub fn wrap(
method cut_after (line 77) | pub fn cut_after(
FILE: src/pattern/operator.rs
type PatternOperator (line 3) | pub enum PatternOperator {
FILE: src/pattern/pattern.rs
type Pattern (line 13) | pub enum Pattern {
method new (line 29) | pub fn new(
method object (line 77) | pub fn object(&self) -> PatternObject {
method search_string (line 99) | pub fn search_string(
method find_string (line 113) | pub fn find_string(
method search_content (line 129) | pub fn search_content(
method is_content_search (line 142) | pub fn is_content_search(&self) -> bool {
method find_content (line 153) | pub fn find_content(
method get_match_line_count (line 167) | pub fn get_match_line_count(
method score_of (line 179) | pub fn score_of(
method score_of_string (line 199) | pub fn score_of_string(
method is_some (line 219) | pub fn is_some(&self) -> bool {
method is_empty (line 225) | pub fn is_empty(&self) -> bool {
method has_real_scores (line 241) | pub fn has_real_scores(&self) -> bool {
FILE: src/pattern/pattern_object.rs
type PatternObject (line 7) | pub struct PatternObject {
type Output (line 14) | type Output = Self;
method bitor (line 15) | fn bitor(
method bitor_assign (line 28) | fn bitor_assign(
FILE: src/pattern/pattern_parts.rs
type PatternParts (line 6) | pub struct PatternParts {
method fmt (line 12) | fn fmt(
type Error (line 38) | type Error = &'static str;
method try_from (line 39) | fn try_from(a: &[&str]) -> Result<Self, Self::Error> {
method push (line 49) | pub fn push(
method is_between_slashes (line 56) | pub fn is_between_slashes(&self) -> bool {
method add_part (line 59) | pub fn add_part(&mut self) {
method is_empty (line 62) | pub fn is_empty(&self) -> bool {
method core (line 65) | pub fn core(&self) -> &str {
method mode (line 72) | pub fn mode(&self) -> Option<&String> {
method flags (line 79) | pub fn flags(&self) -> Option<&str> {
method default (line 29) | fn default() -> Self {
FILE: src/pattern/pos.rs
type Pos (line 4) | pub type Pos = SmallVec<[usize; 8]>;
FILE: src/pattern/regex_pattern.rs
type RegexPattern (line 12) | pub struct RegexPattern {
method fmt (line 18) | fn fmt(
method from (line 31) | pub fn from(
method find (line 41) | pub fn find(
method is_empty (line 57) | pub fn is_empty(&self) -> bool {
FILE: src/pattern/search_mode.rs
type SearchObject (line 16) | pub enum SearchObject {
type SearchKind (line 23) | pub enum SearchKind {
type SearchMode (line 33) | pub enum SearchMode {
method new (line 60) | fn new(
method prefix (line 87) | pub fn prefix(
method object (line 95) | pub fn object(self) -> SearchObject {
method kind (line 106) | pub fn kind(self) -> SearchKind {
type SearchModeMapEntry (line 125) | pub struct SearchModeMapEntry {
method parse (line 138) | pub fn parse(
type SearchModeMap (line 133) | pub struct SearchModeMap {
type Error (line 237) | type Error = ConfError;
method try_from (line 238) | fn try_from(map: &FxHashMap<String, String>) -> Result<Self, Self::Err...
method setm (line 248) | pub fn setm(
method set (line 262) | pub fn set(
method search_mode (line 268) | pub fn search_mode(
method key (line 285) | pub fn key(
method default (line 213) | fn default() -> Self {
FILE: src/pattern/tok_pattern.rs
type CandChars (line 14) | type CandChars = SmallVec<[char; 32]>;
constant BONUS_MATCH (line 19) | const BONUS_MATCH: i32 = 50_000;
constant BONUS_CANDIDATE_LENGTH (line 20) | const BONUS_CANDIDATE_LENGTH: i32 = -1;
function norm_chars (line 22) | pub fn norm_chars(s: &str) -> Box<[char]> {
type TokPattern (line 32) | pub struct TokPattern {
method new (line 44) | pub fn new(pattern: &str) -> Self {
method is_empty (line 74) | pub fn is_empty(&self) -> bool {
method find_ranges (line 80) | fn find_ranges(
method score_of_matching (line 122) | fn score_of_matching(
method find (line 130) | pub fn find(
method score_of (line 151) | pub fn score_of(
function check_pos (line 169) | fn check_pos(
function check_match_pos (line 187) | fn check_match_pos() {
function check_match (line 200) | fn check_match(
function test_separators (line 209) | fn test_separators() {
function test_match (line 222) | fn test_match() {
function test_tok_repetitions (line 231) | fn test_tok_repetitions() {
FILE: src/permissions/mod.rs
function supported (line 12) | pub fn supported() -> bool {
FILE: src/permissions/permissions_unix.rs
function supported (line 7) | pub fn supported() -> bool {
function user_name (line 11) | pub fn user_name(uid: u32) -> String {
function group_name (line 24) | pub fn group_name(gid: u32) -> String {
FILE: src/preview/dir_view.rs
type DirView (line 34) | pub struct DirView {
method new (line 39) | pub fn new(
method display (line 64) | pub fn display(
method display_info (line 85) | pub fn display_info(
method try_scroll (line 107) | pub fn try_scroll(
method try_select_y (line 117) | pub fn try_select_y(
method move_selection (line 123) | pub fn move_selection(
method select_first (line 132) | pub fn select_first(&mut self) {
method select_last (line 135) | pub fn select_last(&mut self) {
FILE: src/preview/mod.rs
type PreviewMode (line 17) | pub enum PreviewMode {
FILE: src/preview/preview.rs
type Preview (line 32) | pub enum Preview {
method new (line 45) | pub fn new(
method with_mode (line 69) | pub fn with_mode(
method dir (line 103) | pub fn dir(
method image (line 117) | pub fn image(path: &Path) -> Self {
method tty (line 125) | pub fn tty(path: &Path) -> Self {
method unfiltered_text (line 136) | pub fn unfiltered_text(
method unstyled_text (line 163) | pub fn unstyled_text(
method filtered (line 180) | pub fn filtered(
method hex (line 210) | pub fn hex(path: &Path) -> Self {
method is_partial (line 222) | pub fn is_partial(&self) -> bool {
method complete_loading (line 228) | pub fn complete_loading(
method get_mode (line 239) | pub fn get_mode(&self) -> Option<PreviewMode> {
method pattern (line 250) | pub fn pattern(&self) -> InputPattern {
method try_scroll (line 257) | pub fn try_scroll(
method is_filterable (line 269) | pub fn is_filterable(&self) -> bool {
method get_selected_line (line 273) | pub fn get_selected_line(&self) -> Option<String> {
method get_selected_line_number (line 279) | pub fn get_selected_line_number(&self) -> Option<LineNumber> {
method try_select_line_number (line 285) | pub fn try_select_line_number(
method unselect (line 294) | pub fn unselect(&mut self) {
method try_select_y (line 301) | pub fn try_select_y(
method move_selection (line 312) | pub fn move_selection(
method previous_match (line 328) | pub fn previous_match(&mut self) {
method next_match (line 335) | pub fn next_match(&mut self) {
method select_first (line 343) | pub fn select_first(&mut self) {
method select_last (line 352) | pub fn select_last(&mut self) {
method display (line 360) | pub fn display(
method display_info (line 398) | pub fn display_info(
FILE: src/preview/preview_state.rs
type PreviewState (line 40) | pub struct PreviewState {
method new (line 55) | pub fn new(
method preview_path (line 85) | pub fn preview_path(&self) -> &Path {
method vis_preview (line 91) | fn vis_preview(&self) -> &Preview {
method mut_preview (line 94) | fn mut_preview(&mut self) -> &mut Preview {
method set_mode (line 97) | fn set_mode(
method no_opt_selection (line 115) | fn no_opt_selection(&self) -> Selection<'_> {
method do_pending_search (line 134) | fn do_pending_search(
method get_type (line 161) | fn get_type(&self) -> PanelStateType {
method set_mode (line 165) | fn set_mode(
method get_mode (line 172) | fn get_mode(&self) -> Mode {
method get_pending_task (line 176) | fn get_pending_task(&self) -> Option<&'static str> {
method on_pattern (line 186) | fn on_pattern(
method do_pending_task (line 207) | fn do_pending_task(
method selected_path (line 222) | fn selected_path(&self) -> Option<&Path> {
method set_selected_path (line 226) | fn set_selected_path(
method selection (line 250) | fn selection(&self) -> Option<Selection<'_>> {
method tree_options (line 254) | fn tree_options(&self) -> TreeOptions {
method with_new_options (line 258) | fn with_new_options(
method refresh (line 269) | fn refresh(
method on_click (line 279) | fn on_click(
method display (line 293) | fn display(
method no_verb_status (line 348) | fn no_verb_status(
method on_internal (line 363) | fn on_internal(
method get_flags (line 479) | fn get_flags(&self) -> Vec<Flag> {
method get_starting_input (line 483) | fn get_starting_input(&self) -> String {
FILE: src/preview/preview_transformer.rs
type TransformerId (line 24) | pub struct TransformerId {
type PreviewTransformers (line 27) | pub struct PreviewTransformers {
method new (line 76) | pub fn new(transformer_confs: &[PreviewTransformerConf]) -> Result<Sel...
method transformer (line 89) | pub fn transformer(
method transform (line 95) | pub fn transform(
method find_transformer_for (line 117) | pub fn find_transformer_for(
type PreviewTransformerConf (line 33) | pub struct PreviewTransformerConf {
type PreviewTransformer (line 42) | pub struct PreviewTransformer {
method from_conf (line 143) | pub fn from_conf(conf: &PreviewTransformerConf) -> Result<Self, ConfEr...
method transform (line 182) | pub fn transform(
type ProcessInputKind (line 55) | pub enum ProcessInputKind {
type ProcessOutputKind (line 64) | pub enum ProcessOutputKind {
type PreviewTransform (line 69) | pub struct PreviewTransform {
function first_file_in_dir (line 272) | fn first_file_in_dir(dir: &Path) -> Result<Option<PathBuf>, PreviewTrans...
FILE: src/preview/zero_len_file_view.rs
type ZeroLenFileView (line 28) | pub struct ZeroLenFileView {
method new (line 33) | pub fn new(path: PathBuf) -> Self {
method display (line 36) | pub fn display(
FILE: src/print.rs
function print_string (line 26) | fn print_string(
function print_paths (line 38) | pub fn print_paths(
function relativize_path (line 57) | fn relativize_path(
function print_relative_paths (line 74) | pub fn print_relative_paths(
function print_tree (line 93) | pub fn print_tree(
FILE: src/shell_install/bash.rs
constant NAME (line 32) | const NAME: &str = "bash";
constant SOURCING_FILES (line 33) | const SOURCING_FILES: &[&str] = &[".bashrc", ".bash_profile", ".zshrc", ...
constant VERSION (line 34) | const VERSION: &str = "1";
constant BASH_FUNC (line 39) | const BASH_FUNC: &str = r#"
constant MD_NO_SOURCING (line 61) | const MD_NO_SOURCING: &str = r"
function get_script (line 67) | pub fn get_script() -> &'static str {
function get_link_path (line 72) | fn get_link_path() -> PathBuf {
function get_script_path (line 81) | fn get_script_path() -> PathBuf {
function get_sourcing_paths (line 92) | fn get_sourcing_paths() -> Vec<PathBuf> {
function install (line 125) | pub fn install(si: &mut ShellInstall) -> Result<(), ShellInstallError> {
FILE: src/shell_install/fish.rs
constant NAME (line 30) | const NAME: &str = "fish";
constant SCRIPT_FILENAME (line 31) | const SCRIPT_FILENAME: &str = "br.fish";
constant FISH_FUNC (line 33) | const FISH_FUNC: &str = r"
function get_script (line 53) | pub fn get_script() -> &'static str {
function get_fish_dir (line 58) | fn get_fish_dir() -> PathBuf {
function get_fish_functions_dir (line 72) | fn get_fish_functions_dir() -> PathBuf {
function get_link_path (line 81) | fn get_link_path() -> PathBuf {
function get_script_path (line 90) | fn get_script_path() -> PathBuf {
function install (line 102) | pub fn install(si: &mut ShellInstall) -> Result<(), ShellInstallError> {
FILE: src/shell_install/mod.rs
constant MD_INSTALL_REQUEST (line 27) | const MD_INSTALL_REQUEST: &str = r"
constant MD_UPGRADE_REQUEST (line 35) | const MD_UPGRADE_REQUEST: &str = r"
constant MD_INSTALL_CANCELLED (line 41) | const MD_INSTALL_CANCELLED: &str = r"
constant MD_PERMISSION_DENIED (line 51) | const MD_PERMISSION_DENIED: &str = r"
constant MD_INSTALL_DONE (line 58) | const MD_INSTALL_DONE: &str = r"
type ShellInstall (line 65) | pub struct ShellInstall {
method new (line 74) | pub fn new(force_install: bool) -> Self {
method print (line 86) | pub fn print(shell: &str) -> Result<(), ProgramError> {
method check (line 104) | pub fn check(&mut self) -> Result<(), ShellInstallError> {
method comment_error (line 150) | pub fn comment_error(
method remove (line 159) | pub fn remove(
method can_install (line 174) | fn can_install(&mut self) -> Result<bool, ShellInstallError> {
method can_upgrade (line 177) | fn can_upgrade(&mut self) -> Result<bool, ShellInstallError> {
method can_do (line 180) | fn can_do(
method write_script (line 208) | fn write_script(
method create_link (line 228) | fn create_link(
FILE: src/shell_install/nushell.rs
constant NAME (line 30) | const NAME: &str = "nushell";
constant VERSION (line 31) | const VERSION: &str = "7";
constant NU_FUNC (line 33) | const NU_FUNC: &str = r#"
function get_script (line 192) | pub fn get_script() -> &'static str {
function get_link_path (line 197) | fn get_link_path() -> PathBuf {
function get_nushell_dir (line 202) | fn get_nushell_dir() -> Option<PathBuf> {
function get_script_path (line 211) | fn get_script_path() -> PathBuf {
function install (line 224) | pub fn install(si: &mut ShellInstall) -> Result<(), ShellInstallError> {
FILE: src/shell_install/powershell.rs
constant NAME (line 33) | const NAME: &str = "powershell";
constant VERSION (line 34) | const VERSION: &str = "1";
constant PS_FUNC (line 36) | const PS_FUNC: &str = r#"
function get_script (line 61) | pub fn get_script() -> &'static str {
function get_link_path (line 66) | fn get_link_path() -> PathBuf {
function get_script_path (line 73) | fn get_script_path() -> PathBuf {
function get_profile (line 84) | fn get_profile(exe: &str) -> Option<PathBuf> {
function install (line 106) | pub fn install(si: &mut ShellInstall) -> Result<(), ShellInstallError> {
FILE: src/shell_install/state.rs
constant CURRENT_VERSION (line 16) | const CURRENT_VERSION: usize = 4;
constant REFUSED_FILE_CONTENT (line 18) | const REFUSED_FILE_CONTENT: &str = r"
constant INSTALLED_FILE_CONTENT (line 24) | const INSTALLED_FILE_CONTENT: &str = r"
type ShellInstallState (line 31) | pub enum ShellInstallState {
method from (line 39) | fn from(cs: cli::CliShellInstallState) -> Self {
method get_refused_path (line 49) | pub fn get_refused_path() -> PathBuf {
method get_installed_path (line 52) | pub fn get_installed_path(version: usize) -> PathBuf {
method detect (line 57) | pub fn detect() -> Self {
method remove (line 73) | pub fn remove(si: &ShellInstall) -> Result<(), ShellInstallError> {
method write (line 88) | pub fn write(
FILE: src/shell_install/util.rs
function file_contains_line (line 16) | pub fn file_contains_line(
function append_to_file (line 30) | pub fn append_to_file<S: AsRef<str>>(
FILE: src/skin/app_skin.rs
type AppSkin (line 9) | pub struct AppSkin {
method new (line 18) | pub fn new(
FILE: src/skin/cli_mad_skin.rs
function make_cli_mad_skin (line 11) | pub fn make_cli_mad_skin() -> MadSkin {
FILE: src/skin/ext_colors.rs
type ExtColorMap (line 13) | pub struct ExtColorMap {
method get (line 20) | pub fn get(
method set (line 26) | pub fn set(
type Error (line 40) | type Error = InvalidSkinError;
method try_from (line 41) | fn try_from(raw_map: &FxHashMap<String, String>) -> Result<Self, Self:...
FILE: src/skin/help_mad_skin.rs
function make_help_mad_skin (line 13) | pub fn make_help_mad_skin(skin: &StyleMap) -> MadSkin {
FILE: src/skin/mod.rs
function gray (line 31) | pub fn gray(mut level: u8) -> Option<Color> {
function rgb (line 40) | pub fn rgb(
function ansi (line 48) | pub fn ansi(v: u8) -> Option<Color> {
FILE: src/skin/panel_skin.rs
type PanelSkin (line 11) | pub struct PanelSkin {
method new (line 19) | pub fn new(styles: StyleMap) -> Self {
FILE: src/skin/purpose_mad_skin.rs
function make_purpose_mad_skin (line 12) | pub fn make_purpose_mad_skin(skin: &StyleMap) -> MadSkin {
FILE: src/skin/skin_entry.rs
type SkinEntry (line 20) | pub struct SkinEntry {
method new (line 26) | pub fn new(
method get_focused (line 32) | pub fn get_focused(&self) -> &CompoundStyle {
method get_unfocused (line 35) | pub fn get_unfocused(&self) -> &CompoundStyle {
method parse (line 47) | pub fn parse(s: &str) -> Result<Self, InvalidSkinError> {
method deserialize (line 56) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
FILE: src/skin/status_mad_skin.rs
type StatusMadSkinSet (line 12) | pub struct StatusMadSkinSet {
method from_skin (line 41) | pub fn from_skin(skin: &StyleMap) -> Self {
function make_normal_status_mad_skin (line 19) | fn make_normal_status_mad_skin(skin: &StyleMap) -> MadSkin {
function make_error_status_mad_skin (line 32) | fn make_error_status_mad_skin(skin: &StyleMap) -> MadSkin {
FILE: src/skin/style_map.rs
method queue_reset (line 125) | pub fn queue_reset<W: Write>(
method good_to_bad_color (line 134) | pub fn good_to_bad_color(
method fmt (line 243) | fn fmt(
FILE: src/stage/filtered_stage.rs
type FilteredStage (line 14) | pub struct FilteredStage {
method unfiltered (line 22) | pub fn unfiltered(stage: &Stage) -> Self {
method compute (line 26) | fn compute(
method filtered (line 65) | pub fn filtered(
method update (line 80) | pub fn update(
method set_pattern (line 94) | pub fn set_pattern(
method len (line 103) | pub fn len(&self) -> usize {
method path (line 106) | pub fn path<'s>(
method path_sel (line 116) | pub fn path_sel<'s>(
method pattern (line 124) | pub fn pattern(&self) -> &InputPattern {
method selection (line 127) | pub fn selection(&self) -> Option<usize> {
method has_selection (line 130) | pub fn has_selection(&self) -> bool {
method try_select_idx (line 133) | pub fn try_select_idx(
method selected_path (line 144) | pub fn selected_path<'s>(
method unselect (line 153) | pub fn unselect(&mut self) {
method unstage_selection (line 159) | pub fn unstage_selection(
method move_selection (line 175) | pub fn move_selection(
FILE: src/stage/stage.rs
type Stage (line 21) | pub struct Stage {
method contains (line 27) | pub fn contains(
method is_empty (line 33) | pub fn is_empty(&self) -> bool {
method add (line 37) | pub fn add(
method remove (line 50) | pub fn remove(
method remove_idx (line 62) | pub fn remove_idx(
method clear (line 71) | pub fn clear(&mut self) {
method paths (line 75) | pub fn paths(&self) -> &[PathBuf] {
method refresh (line 79) | pub fn refresh(&mut self) {
method len (line 86) | pub fn len(&self) -> usize {
method version (line 89) | pub fn version(&self) -> usize {
method compute_sum (line 92) | pub fn compute_sum(
method to_selections (line 112) | pub fn to_selections(&self) -> Vec<Selection<'_>> {
FILE: src/stage/stage_state.rs
type StageState (line 25) | pub struct StageState {
method new (line 41) | pub fn new(
method need_sum_computation (line 58) | fn need_sum_computation(&self) -> bool {
method try_scroll (line 62) | pub fn try_scroll(
method fix_scroll (line 71) | pub fn fix_scroll(&mut self) {
method write_title_line (line 78) | fn write_title_line(
method move_selection (line 129) | fn move_selection(
method get_type (line 148) | fn get_type(&self) -> PanelStateType {
method selected_path (line 152) | fn selected_path(&self) -> Option<&Path> {
method selection (line 156) | fn selection(&self) -> Option<Selection<'_>> {
method clear_pending (line 160) | fn clear_pending(&mut self) {
method do_pending_task (line 163) | fn do_pending_task(
method get_pending_task (line 176) | fn get_pending_task(&self) -> Option<&'static str> {
method sel_info (line 184) | fn sel_info<'c>(
method has_at_least_one_selection (line 200) | fn has_at_least_one_selection(
method tree_options (line 207) | fn tree_options(&self) -> TreeOptions {
method with_new_options (line 214) | fn with_new_options(
method on_click (line 241) | fn on_click(
method on_pattern (line 256) | fn on_pattern(
method display (line 267) | fn display(
method refresh (line 390) | fn refresh(
method set_mode (line 398) | fn set_mode(
method get_mode (line 405) | fn get_mode(&self) -> Mode {
method on_internal (line 409) | fn on_internal(
FILE: src/stage/stage_sum.rs
type StageSum (line 11) | pub struct StageSum {
method see_stage (line 19) | pub fn see_stage(
method is_up_to_date (line 27) | pub fn is_up_to_date(&self) -> bool {
method clear (line 30) | pub fn clear(&mut self) {
method compute (line 33) | pub fn compute(
method computed (line 49) | pub fn computed(&self) -> Option<FileSum> {
FILE: src/syntactic/syntax_theme.rs
method deserialize (line 75) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
FILE: src/syntactic/syntaxer.rs
type Syntaxer (line 23) | pub struct Syntaxer {
method available_themes (line 40) | pub fn available_themes(&self) -> std::collections::btree_map::Keys<'_...
method highlighter_for (line 44) | pub fn highlighter_for(
method default (line 28) | fn default() -> Self {
FILE: src/syntactic/text_view.rs
type Region (line 62) | pub struct Region {
method from_syntect (line 76) | pub fn from_syntect(region: &(Style, &str)) -> Self {
constant MAX_SIZE_FOR_STYLING (line 69) | const MAX_SIZE_FOR_STYLING: u64 = 2_000_000;
constant INITIAL_LOAD (line 73) | const INITIAL_LOAD: usize = 4_000_000;
type DisplayLine (line 88) | pub enum DisplayLine {
method line_number (line 119) | pub fn line_number(&self) -> Option<LineNumber> {
method is_match (line 125) | pub fn is_match(&self) -> bool {
type Line (line 94) | pub struct Line {
type TextView (line 106) | pub struct TextView {
method new (line 137) | pub fn new(
method is_partial (line 164) | pub fn is_partial(&self) -> bool {
method complete_loading (line 168) | pub fn complete_loading(
method read_lines (line 181) | fn read_lines(
method line_counts (line 300) | pub fn line_counts(&self) -> (usize, usize) {
method ensure_selection_is_visible (line 304) | fn ensure_selection_is_visible(&mut self) {
method padding (line 323) | fn padding(&self) -> usize {
method get_selected_line (line 327) | pub fn get_selected_line(&self) -> Option<String> {
method get_selected_line_number (line 345) | pub fn get_selected_line_number(&self) -> Option<LineNumber> {
method unselect (line 349) | pub fn unselect(&mut self) {
method try_select_y (line 352) | pub fn try_select_y(
method select_first (line 365) | pub fn select_first(&mut self) {
method select_last (line 371) | pub fn select_last(&mut self) {
method try_select_line_number (line 378) | pub fn try_select_line_number(
method move_selection (line 393) | pub fn move_selection(
method previous_match (line 406) | pub fn previous_match(&mut self) {
method next_match (line 417) | pub fn next_match(&mut self) {
method try_scroll (line 429) | pub fn try_scroll(
method max_line_number (line 457) | pub fn max_line_number(&self) -> Option<LineNumber> {
method get_content_line (line 466) | pub fn get_content_line(
method display (line 476) | pub fn display(
method info (line 621) | fn info(
method display_info (line 648) | pub fn display_info(
function is_thumb (line 666) | fn is_thumb(
function is_char_unprintable (line 677) | fn is_char_unprintable(c: char) -> bool {
function printable_line (line 688) | fn printable_line(line: &str) -> Cow<'_, str> {
function is_char_end_of_line (line 697) | fn is_char_end_of_line(c: char) -> bool {
FILE: src/task_sync.rs
type Either (line 14) | pub enum Either<A, B> {
type ComputationResult (line 20) | pub enum ComputationResult<V> {
function is_done (line 26) | pub fn is_done(&self) -> bool {
function is_not_computed (line 29) | pub fn is_not_computed(&self) -> bool {
function is_some (line 32) | pub fn is_some(&self) -> bool {
function is_none (line 35) | pub fn is_none(&self) -> bool {
type Dam (line 45) | pub struct Dam {
method from (line 51) | pub fn from(receiver: Receiver<TimedEvent>) -> Self {
method unlimited (line 57) | pub fn unlimited() -> Self {
method observer (line 68) | pub fn observer(&self) -> DamObserver {
method try_compute (line 80) | pub fn try_compute<V: Send + 'static, F: Send + 'static + FnOnce() -> ...
method select (line 94) | pub fn select<V>(
method has_event (line 119) | pub fn has_event(&self) -> bool {
method clear (line 124) | pub fn clear(&mut self) -> usize {
method next_event (line 138) | pub fn next_event(&mut self) -> Option<TimedEvent> {
method next (line 152) | pub fn next<T>(
type DamObserver (line 179) | pub struct DamObserver {
method from (line 183) | pub fn from(dam: &Dam) -> Self {
method has_event (line 191) | pub fn has_event(&self) -> bool {
type Computation (line 201) | pub enum Computation<V> {
FILE: src/terminal.rs
function update_title (line 13) | pub fn update_title(
function reset_title (line 25) | pub fn reset_title(
function set_title (line 35) | fn set_title(
function set_title_str (line 48) | fn set_title_str(
FILE: src/trash/mod.rs
function item_is_dir (line 16) | fn item_is_dir(item: &TrashItem) -> bool {
function item_unified_size (line 29) | fn item_unified_size(item: &TrashItem) -> Option<u64> {
FILE: src/trash/trash_sort.rs
function sort (line 8) | pub fn sort(
FILE: src/trash/trash_state.rs
type FilteredContent (line 36) | struct FilteredContent {
type TrashState (line 43) | pub struct TrashState {
method new (line 55) | pub fn new(
method modified (line 74) | fn modified(
method count (line 101) | pub fn count(&self) -> usize {
method try_scroll (line 107) | pub fn try_scroll(
method show_selection (line 134) | pub fn show_selection(&mut self) {
method move_line (line 150) | fn move_line(
method selected_item (line 189) | fn selected_item(&self) -> Option<&TrashItem> {
method selected_item_id (line 196) | fn selected_item_id(&self) -> Option<OsString> {
method select_item_by_id (line 199) | fn select_item_by_id(
method take_selected_item (line 206) | fn take_selected_item(&mut self) -> Option<TrashItem> {
method get_type (line 236) | fn get_type(&self) -> PanelStateType {
method set_mode (line 240) | fn set_mode(
method get_mode (line 247) | fn get_mode(&self) -> Mode {
method selected_path (line 253) | fn selected_path(&self) -> Option<&Path> {
method tree_options (line 257) | fn tree_options(&self) -> TreeOptions {
method with_new_options (line 261) | fn with_new_options(
method selection (line 276) | fn selection(&self) -> Option<Selection<'_>> {
method refresh (line 280) | fn refresh(
method on_pattern (line 295) | fn on_pattern(
method display (line 338) | fn display(
method on_internal (line 508) | fn on_internal(
method on_click (line 615) | fn on_click(
FILE: src/trash/trash_state_cols.rs
type TrashItemProperty (line 19) | pub enum TrashItemProperty {
method title (line 27) | pub fn title(self) -> &'static str {
method style (line 36) | pub fn style(
method value_of (line 52) | pub fn value_of(
method const_width (line 74) | pub fn const_width(self) -> bool {
method optimal_width (line 82) | pub fn optimal_width(
method column_constraints (line 96) | pub fn column_constraints(
function get_cols (line 111) | pub fn get_cols(
FILE: src/tree/sort.rs
type Sort (line 6) | pub enum Sort {
method prevent_deep_display (line 16) | pub fn prevent_deep_display(self) -> bool {
FILE: src/tree/tree.rs
type Tree (line 33) | pub struct Tree {
method refresh (line 46) | pub fn refresh(
method after_lines_changed (line 74) | pub fn after_lines_changed(&mut self) {
method is_empty (line 190) | pub fn is_empty(&self) -> bool {
method has_branch (line 194) | pub fn has_branch(
method move_selection (line 209) | pub fn move_selection(
method try_scroll (line 251) | pub fn try_scroll(
method try_select_y (line 284) | pub fn try_select_y(
method select_visible_line (line 296) | fn select_visible_line(
method make_selection_visible (line 312) | pub fn make_selection_visible(
method selected_line (line 326) | pub fn selected_line(&self) -> &TreeLine {
method root (line 329) | pub fn root(&self) -> &PathBuf {
method is_root_selected (line 332) | pub fn is_root_selected(&self) -> bool {
method try_select_best_match (line 336) | pub fn try_select_best_match(&mut self) {
method try_select_path (line 356) | pub fn try_select_path(
method try_select_first (line 371) | pub fn try_select_first(&mut self) -> bool {
method try_select_last (line 382) | pub fn try_select_last(
method try_select_previous_same_depth (line 396) | pub fn try_select_previous_same_depth(
method try_select_next_same_depth (line 413) | pub fn try_select_next_same_depth(
method try_select_previous_filtered (line 430) | pub fn try_select_previous_filtered<F>(
method try_select_next_filtered (line 455) | pub fn try_select_next_filtered<F>(
method has_dir_missing_sum (line 481) | pub fn has_dir_missing_sum(&self) -> bool {
method is_missing_git_status_computation (line 489) | pub fn is_missing_git_status_computation(&self) -> bool {
method fetch_regular_file_sums (line 495) | pub fn fetch_regular_file_sums(&mut self) {
method fetch_some_missing_dir_sum (line 511) | pub fn fetch_some_missing_dir_sum(
method sort_siblings (line 530) | fn sort_siblings(&mut self) {
method total_sum (line 565) | pub fn total_sum(&self) -> FileSum {
method add_lines_to_path (line 587) | fn add_lines_to_path(
method show_path (line 669) | pub fn show_path(
FILE: src/tree/tree_line.rs
type TreeLineId (line 32) | pub type TreeLineId = usize;
type TreeLine (line 36) | pub struct TreeLine {
method double_extension_from_name (line 124) | pub fn double_extension_from_name(name: &str) -> Option<&str> {
method extension_from_name (line 128) | pub fn extension_from_name(name: &str) -> Option<&str> {
method is_selectable (line 132) | pub fn is_selectable(&self) -> bool {
method is_dir (line 135) | pub fn is_dir(&self) -> bool {
method is_file (line 142) | pub fn is_file(&self) -> bool {
method is_of (line 145) | pub fn is_of(
method extension (line 155) | pub fn extension(&self) -> Option<&str> {
method selection_type (line 158) | pub fn selection_type(&self) -> SelectionType {
method as_selection (line 173) | pub fn as_selection(&self) -> Selection<'_> {
method mode (line 182) | pub fn mode(&self) -> Mode {
method device_id (line 189) | pub fn device_id(&self) -> lfs_core::DeviceId {
method device_id (line 193) | pub fn device_id(&self) -> Option<lfs_core::DeviceId> {
method mount (line 197) | pub fn mount(&self) -> Option<lfs_core::Mount> {
method is_exe (line 209) | pub fn is_exe(&self) -> bool {
method target (line 218) | pub fn target(&self) -> &Path {
method unprune (line 224) | pub fn unprune(&mut self) {
type TreeLineBuilder (line 56) | pub struct TreeLineBuilder {
method build (line 70) | pub fn build(
FILE: src/tree/tree_line_type.rs
constant MAX_LINK_CHAIN_LENGTH (line 14) | const MAX_LINK_CHAIN_LENGTH: usize = 128;
type TreeLineType (line 19) | pub enum TreeLineType {
method is_pruning (line 40) | pub fn is_pruning(&self) -> bool {
method resolve (line 44) | fn resolve(direct_target: &Path) -> io::Result<Self> {
method new (line 83) | pub fn new(
function read_link (line 31) | pub fn read_link(path: &Path) -> io::Result<PathBuf> {
FILE: src/tree/tree_options.rs
type TreeOptions (line 20) | pub struct TreeOptions {
method without_pattern (line 45) | pub fn without_pattern(&self) -> Self {
method needs_counts (line 71) | pub fn needs_counts(&self) -> bool {
method needs_dates (line 75) | pub fn needs_dates(&self) -> bool {
method needs_sizes (line 79) | pub fn needs_sizes(&self) -> bool {
method needs_sum (line 82) | pub fn needs_sum(&self) -> bool {
method set_date_time_format (line 87) | pub fn set_date_time_format(
method apply_config (line 95) | pub fn apply_config(
method apply_flags (line 117) | pub fn apply_flags(
method apply_launch_args (line 134) | pub fn apply_launch_args(
method default (line 233) | fn default() -> Self {
FILE: src/tree_build/bid.rs
type BId (line 7) | pub type BId = Id<BLine>;
type SortableBId (line 12) | pub struct SortableBId {
method eq (line 18) | fn eq(
method cmp (line 26) | fn cmp(
method partial_cmp (line 34) | fn partial_cmp(
FILE: src/tree_build/bline.rs
type BLine (line 24) | pub struct BLine {
method name (line 41) | pub fn name(&self) -> &str {
method from_root (line 48) | pub fn from_root(
method read_dir (line 81) | pub(crate) fn read_dir(&self) -> io::Result<fs::ReadDir> {
method can_enter (line 95) | pub fn can_enter(&self) -> bool {
FILE: src/tree_build/build_report.rs
type BuildReport (line 6) | pub struct BuildReport {
FILE: src/tree_build/builder.rs
type OsStrWin (line 50) | trait OsStrWin {
method as_bytes (line 51) | fn as_bytes(&self) -> &[u8];
method as_bytes (line 56) | fn as_bytes(&self) -> &[u8] {
type TreeBuilder (line 71) | pub struct TreeBuilder<'c> {
function from (line 87) | pub fn from(
function make_bline (line 141) | fn make_bline(
function load_children (line 246) | fn load_children(
function next_child (line 295) | fn next_child(
function gather_lines (line 316) | fn gather_lines(
function trim_excess (line 423) | fn trim_excess(
function make_tree_line (line 469) | fn make_tree_line(
function take_as_tree (line 507) | fn take_as_tree(
function build_tree (line 558) | pub fn build_tree(
function build_paths (line 571) | pub fn build_paths<F>(
FILE: src/tty/mod.rs
constant CSI_RESET (line 7) | pub const CSI_RESET: &str = "\u{1b}[0m";
constant CSI_BOLD (line 8) | pub const CSI_BOLD: &str = "\u{1b}[1m";
constant CSI_ITALIC (line 9) | pub const CSI_ITALIC: &str = "\u{1b}[3m";
function draw (line 29) | fn draw(
FILE: src/tty/tline.rs
type TLine (line 18) | pub struct TLine {
method change_range_style (line 23) | pub fn change_range_style(
method from_tty (line 68) | pub fn from_tty(tty: &str) -> Self {
method from_raw (line 80) | pub fn from_raw(raw: String) -> Self {
method to_raw (line 88) | pub fn to_raw(&self) -> String {
method bold (line 95) | pub fn bold(raw: String) -> Self {
method italic (line 103) | pub fn italic(raw: String) -> Self {
method add_tstring (line 111) | pub fn add_tstring<C: Into<String>, R: Into<String>>(
method draw (line 121) | pub fn draw(
method draw_in (line 132) | pub fn draw_in(
method is_blank (line 146) | pub fn is_blank(&self) -> bool {
method if_unstyled (line 150) | pub fn if_unstyled(&self) -> Option<&str> {
method has (line 160) | pub fn has(
FILE: src/tty/tline_builder.rs
type TLineBuilder (line 5) | pub struct TLineBuilder {
method read (line 10) | pub fn read(
method build (line 17) | pub fn build(mut self) -> TLine {
method take_tstring (line 23) | fn take_tstring(&mut self) {
method push_tstring (line 28) | fn push_tstring(
method print (line 42) | fn print(
method csi_dispatch (line 48) | fn csi_dispatch(
method execute (line 70) | fn execute(
method hook (line 75) | fn hook(
method put (line 83) | fn put(
method unhook (line 88) | fn unhook(&mut self) {}
method osc_dispatch (line 89) | fn osc_dispatch(
method esc_dispatch (line 95) | fn esc_dispatch(
FILE: src/tty/trange.rs
type TRange (line 3) | pub struct TRange {
FILE: src/tty/tstring.rs
type TString (line 17) | pub struct TString {
method new (line 22) | pub fn new<S1: Into<String>, S2: Into<String>>(
method push_csi (line 31) | pub fn push_csi(
method draw (line 48) | pub fn draw(
method draw_in (line 56) | pub fn draw_in(
method starts_with (line 69) | pub fn starts_with(
method split_off (line 76) | pub fn split_off(
method is_blank (line 85) | pub fn is_blank(&self) -> bool {
method is_styled (line 88) | pub fn is_styled(&self) -> bool {
method is_unstyled (line 91) | pub fn is_unstyled(&self) -> bool {
FILE: src/tty/tty_view.rs
type TtyView (line 41) | pub struct TtyView {
method new (line 51) | pub fn new(path: &Path) -> Result<Self, io::Error> {
method read_lines (line 65) | fn read_lines(&mut self) -> Result<(), io::Error> {
method ensure_selection_is_visible (line 92) | fn ensure_selection_is_visible(&mut self) {
method padding (line 111) | fn padding(&self) -> usize {
method unselect (line 115) | pub fn unselect(&mut self) {
method try_select_y (line 118) | pub fn try_select_y(
method select_first (line 131) | pub fn select_first(&mut self) {
method select_last (line 137) | pub fn select_last(&mut self) {
method move_selection (line 144) | pub fn move_selection(
method try_scroll (line 157) | pub fn try_scroll(
method display (line 185) | pub fn display(
method display_info (line 232) | pub fn display_info(
function is_thumb (line 256) | fn is_thumb(
FILE: src/verb/coarity.rs
type CommandCoarity (line 4) | pub enum CommandCoarity {
FILE: src/verb/exec_pattern.rs
type ExecPattern (line 14) | pub struct ExecPattern {
method from_string (line 19) | pub fn from_string(s: &str) -> Self {
method from_tokens (line 27) | pub fn from_tokens(tokens: Vec<String>) -> Self {
method tokens (line 30) | pub fn tokens(&self) -> &[String] {
method into_tokens (line 33) | pub fn into_tokens(self) -> Vec<String> {
method is_empty (line 36) | pub fn is_empty(&self) -> bool {
method has_selection_group (line 39) | pub fn has_selection_group(&self) -> bool {
method has_other_panel_group (line 42) | pub fn has_other_panel_group(&self) -> bool {
method to_internal_pattern (line 45) | pub fn to_internal_pattern(&self) -> Option<String> {
method visit_arg_defs (line 59) | pub fn visit_arg_defs(
method coarity (line 73) | pub fn coarity(&self) -> CommandCoarity {
method fmt (line 93) | fn fmt(
method deserialize (line 117) | fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, ...
method serialize (line 108) | fn serialize<S: Serializer>(
FILE: src/verb/execution_builder.rs
type ExecutionBuilder (line 22) | pub struct ExecutionBuilder<'b> {
type Target (line 44) | enum Target {
function without_invocation (line 53) | pub fn without_invocation(
function with_invocation (line 66) | pub fn with_invocation(
function get_arg_replacement (line 90) | fn get_arg_replacement(
function get_sel_name_standard_replacement (line 126) | fn get_sel_name_standard_replacement(
function get_sel_arg_replacement (line 219) | fn get_sel_arg_replacement(
function replace_args (line 248) | fn replace_args(
function invocation_with_default (line 273) | pub fn invocation_with_default(
function base_dir (line 300) | fn base_dir(&self) -> &Path {
function sequence (line 312) | pub fn sequence(
function string (line 348) | fn string(
function path (line 359) | pub fn path(
function shell_exec_string (line 374) | pub fn shell_exec_string(
function sel_shell_exec_string (line 387) | pub fn sel_shell_exec_string(
function exec_token (line 400) | pub fn exec_token(
function sel_exec_token (line 441) | pub fn sel_exec_token(
function path_to_string (line 460) | fn path_to_string<P: AsRef<Path>>(
function capture_if_total (line 483) | fn capture_if_total<'h>(
function fix_token_path (line 496) | fn fix_token_path<T: Into<String> + AsRef<str>>(token: T) -> String {
function check_build_execution_from_sel (line 529) | fn check_build_execution_from_sel(
function test_build_execution (line 558) | fn test_build_execution() {
FILE: src/verb/external_execution.rs
type ExternalExecution (line 22) | pub struct ExternalExecution {
method new (line 52) | pub fn new(
method with_working_dir (line 65) | pub fn with_working_dir(
method to_cmd_result (line 76) | pub fn to_cmd_result(
method working_dir_path (line 93) | fn working_dir_path(
method cmd_result_exec_from_parent_shell (line 113) | fn cmd_result_exec_from_parent_shell(
method cmd_result_exec_leave_broot (line 140) | fn cmd_result_exec_leave_broot(
method cmd_result_exec_stay_in_broot (line 161) | fn cmd_result_exec_stay_in_broot(
FILE: src/verb/external_execution_mode.rs
type ExternalExecutionMode (line 2) | pub enum ExternalExecutionMode {
method is_from_shell (line 14) | pub fn is_from_shell(self) -> bool {
method is_leave_broot (line 17) | pub fn is_leave_broot(self) -> bool {
method from_conf (line 21) | pub fn from_conf(
FILE: src/verb/file_type_condition.rs
type FileTypeCondition (line 19) | pub enum FileTypeCondition {
method is_default (line 30) | pub fn is_default(&self) -> bool {
method accepts_path (line 33) | pub fn accepts_path(
method accepts_line (line 49) | pub fn accepts_line(
method accepts_selection_type (line 67) | pub fn accepts_selection_type(
FILE: src/verb/internal.rs
method invocation_pattern (line 174) | pub fn invocation_pattern(self) -> &'static str {
method exec_pattern (line 192) | pub fn exec_pattern(self) -> &'static str {
method needs_selection (line 206) | pub fn needs_selection(
method is_input_related (line 215) | pub fn is_input_related(self) -> bool {
FILE: src/verb/internal_execution.rs
type InternalExecution (line 9) | pub struct InternalExecution {
method from_internal (line 26) | pub fn from_internal(internal: Internal) -> Self {
method from_internal_bang (line 33) | pub fn from_internal_bang(
method try_from (line 43) | pub fn try_from(invocation_str: &str) -> Result<Self, ConfError> {
method needs_selection (line 52) | pub fn needs_selection(&self) -> bool {
method has_merging_arg (line 55) | fn has_merging_arg(&self) -> bool {
method coarity (line 71) | pub fn coarity(&self) -> CommandCoarity {
method fmt (line 80) | fn fmt(
FILE: src/verb/internal_focus.rs
function on_path (line 24) | pub fn on_path(
function new_state_on_path (line 45) | pub fn new_state_on_path(
function new_panel_on_path (line 60) | pub fn new_panel_on_path(
function path_from_input (line 104) | fn path_from_input(
function get_status_markdown (line 160) | pub fn get_status_markdown(
function on_internal (line 183) | pub fn on_internal(
FILE: src/verb/internal_path.rs
function determine_path (line 23) | pub fn determine_path(
function path_from_input (line 74) | fn path_from_input(
function on_path (line 124) | pub fn on_path(
FILE: src/verb/internal_select.rs
function on_internal (line 17) | pub fn on_internal(
function on_path (line 42) | pub fn on_path(
FILE: src/verb/invocation_parser.rs
type InvocationParser (line 16) | pub struct InvocationParser {
method new (line 30) | pub fn new(invocation_str: &str) -> Result<Self, ConfError> {
method name (line 54) | pub fn name(&self) -> &str {
method get_unique_arg_def (line 58) | pub fn get_unique_arg_def(&self) -> Option<VerbArgDef> {
method get_unique_arg_anchor (line 62) | pub fn get_unique_arg_anchor(&self) -> PathAnchor {
method check_args (line 71) | pub fn check_args(
method parse (line 96) | pub fn parse(
FILE: src/verb/mod.rs
type VerbId (line 50) | pub type VerbId = usize;
function str_has_selection_group (line 52) | pub fn str_has_selection_group(s: &str) -> bool {
function str_has_other_panel_group (line 60) | pub fn str_has_other_panel_group(s: &str) -> bool {
FILE: src/verb/sequence_execution.rs
type SequenceExecution (line 6) | pub struct SequenceExecution {
FILE: src/verb/verb.rs
type Verb (line 33) | pub struct Verb {
method new (line 93) | pub fn new(
method with_key (line 134) | pub fn with_key(
method add_keys (line 141) | pub fn add_keys(
method no_doc (line 149) | pub fn no_doc(&mut self) -> &mut Self {
method with_name (line 153) | pub fn with_name(
method with_description (line 161) | pub fn with_description(
method with_shortcut (line 168) | pub fn with_shortcut(
method with_condition (line 175) | pub fn with_condition(
method needing_another_panel (line 182) | pub fn needing_another_panel(&mut self) -> &mut Self {
method with_auto_exec (line 186) | pub fn with_auto_exec(
method has_name (line 194) | pub fn has_name(
method check_args (line 204) | pub fn check_args(
method check_sel_args (line 229) | fn check_sel_args(
method get_status_markdown (line 248) | pub fn get_status_markdown(
method get_unique_arg_anchor (line 300) | pub fn get_unique_arg_anchor(&self) -> PathAnchor {
method get_internal (line 307) | pub fn get_internal(&self) -> Option<Internal> {
method is_internal (line 314) | pub fn is_internal(
method is_some_internal (line 321) | pub fn is_some_internal(
method is_sequence (line 328) | pub fn is_sequence(&self) -> bool {
method can_be_called_in_panel (line 332) | pub fn can_be_called_in_panel(
method accepts_extension (line 338) | pub fn accepts_extension(
method eq (line 84) | fn eq(
function check_verb_name (line 350) | pub fn check_verb_name(name: &str) -> Result<(), ConfError> {
FILE: src/verb/verb_arg_def.rs
type VerbArgDef (line 19) | pub struct VerbArgDef {
method from_capture (line 60) | pub fn from_capture(capture: &Captures<'_>) -> VerbArgDef {
method merging_flag (line 91) | pub fn merging_flag(&self) -> Option<VerbArgFlag> {
method has_flag (line 99) | pub fn has_flag(
method path_anchor (line 105) | pub fn path_anchor(&self) -> PathAnchor {
type VerbArgFlag (line 24) | pub enum VerbArgFlag {
method is_merging (line 33) | pub fn is_merging(&self) -> bool {
method merge_values (line 36) | pub fn merge_values(
method path_anchor (line 49) | pub fn path_anchor(&self) -> PathAnchor {
method fmt (line 133) | fn fmt(
type Err (line 117) | type Err = ConfError;
method from_str (line 118) | fn from_str(s: &str) -> Result<Self, Self::Err> {
FILE: src/verb/verb_description.rs
type VerbDescription (line 3) | pub struct VerbDescription {
method from_code (line 9) | pub fn from_code(content: String) -> Self {
method from_text (line 15) | pub fn from_text(content: String) -> Self {
FILE: src/verb/verb_execution.rs
type VerbExecution (line 8) | pub enum VerbExecution {
method fmt (line 24) | fn fmt(
FILE: src/verb/verb_invocation.rs
type VerbInvocation (line 7) | pub struct VerbInvocation {
method fmt (line 14) | fn fmt(
method new (line 31) | pub fn new<T: Into<String>>(
method is_empty (line 42) | pub fn is_empty(&self) -> bool {
method complete_name (line 46) | pub fn complete_name(&self) -> String {
method to_string_for_name (line 55) | pub fn to_string_for_name(
method from (line 97) | fn from(invocation: &str) -> Self {
function check_special_chars (line 154) | fn check_special_chars() {
function check_verb_invocation_parsing_empty_arg (line 202) | fn check_verb_invocation_parsing_empty_arg() {
function check_verb_invocation_parsing_post_bang (line 225) | fn check_verb_invocation_parsing_post_bang() {
function check_verb_invocation_parsing_empty_verb (line 238) | fn check_verb_invocation_parsing_empty_verb() {
function check_verb_invocation_parsing_oddities (line 261) | fn check_verb_invocation_parsing_oddities() {
FILE: src/verb/verb_store.rs
type VerbStore (line 33) | pub struct VerbStore {
method new (line 46) | pub fn new(conf: &mut Conf) -> Result<Self, ConfError> {
method add_builtin_verbs (line 71) | fn add_builtin_verbs(&mut self) -> Result<(), ConfError> {
method build_add_internal (line 358) | fn build_add_internal(
method add_internal (line 371) | fn add_internal(
method add_internal_with_args (line 378) | fn add_internal_with_args(
method add_internal_bang (line 394) | fn add_internal_bang(
method add_external (line 401) | fn add_external(
method add_verb (line 419) | pub fn add_verb(
method add_from_conf (line 432) | pub fn add_from_conf(
method unbind_key (line 556) | pub fn unbind_key(
method unbind_name (line 566) | pub fn unbind_name(
method search_sel_info (line 576) | pub fn search_sel_info<'v>(
method search_prefix (line 585) | pub fn search_prefix<'v>(
method search_sel_info_unique (line 595) | pub fn search_sel_info_unique<'v>(
method search (line 607) | pub fn search<'v>(
method key_desc_of_internal_stype (line 659) | pub fn key_desc_of_internal_stype(
method key_desc_of_internal (line 674) | pub fn key_desc_of_internal(
method verbs (line 686) | pub fn verbs(&self) -> &[Verb] {
method verb (line 690) | pub fn verb(
type PrefixSearchResult (line 39) | pub enum PrefixSearchResult<'v, T> {
function check_builtin_verbs (line 699) | fn check_builtin_verbs() {
FILE: src/verb/write.rs
function verb_write (line 18) | pub fn verb_write(
function verb_clear_output (line 35) | pub fn verb_clear_output(con: &AppContext) -> Result<CmdResult, ProgramE...
FILE: src/watcher.rs
constant DEBOUNCE_MAX_DELAY (line 25) | const DEBOUNCE_MAX_DELAY: std::time::Duration = std::time::Duration::fro...
type Watcher (line 37) | pub struct Watcher {
method new (line 44) | pub fn new(tx_seqs: channel::Sender<Sequence>) -> Self {
method send_refresh (line 79) | fn send_refresh(
method watch (line 95) | pub fn watch(
method make_notify_watcher (line 137) | fn make_notify_watcher(sender: channel::Sender<()>) -> Result<Recommen...
method stop_watching (line 178) | pub fn stop_watching(&mut self) -> Result<(), ProgramError> {
FILE: tests/search_strings.rs
function build_pattern (line 10) | fn build_pattern(s: &str) -> Pattern {
function check (line 21) | fn check(
function simple_fuzzy (line 34) | fn simple_fuzzy() {
function simple_exact (line 42) | fn simple_exact() {
function simple_regex (line 49) | fn simple_regex() {
function one_operator (line 59) | fn one_operator() {
function negation (line 68) | fn negation() {
function multiple_operators_no_parenthesis (line 82) | fn multiple_operators_no_parenthesis() {
function multiple_operators_with_parenthesis (line 98) | fn multiple_operators_with_parenthesis() {
FILE: website/src/js/tab-langs.js
function find_groups (line 5) | function find_groups(langs) {
function add_tabs (line 27) | function add_tabs(group) {
function group (line 54) | function group(...langs) {
Condensed preview — 290 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,576K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 17,
"preview": "github: [Canop]\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 106,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: 'bug'\nassignees: ''\n\n---\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 118,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: 'enhancement'\nassignees: ''\n\n---\n\n"
},
{
"path": ".github/workflows/tests.yml",
"chars": 317,
"preview": "name: Tests\n\non:\n push:\n branches: [ \"main\" ]\n pull_request:\n branches: [ \"main\" ]\n\nenv:\n CARGO_TERM_COLOR: alw"
},
{
"path": ".gitignore",
"chars": 273,
"preview": ".bacon-locations\n.ignore\n/*-deploy.sh\n/d.sh\n/.config\n/bench.sh\n/broot_*.zip\n/build\n/compile.sh\n/fix-win-toolchain.sh\n/gl"
},
{
"path": "CHANGELOG.md",
"chars": 62900,
"preview": "### v1.56.1 - 2026-03-20\n<a name=\"v1.56.1\"></a>\n- fix a typo in a verb in default conf\n\n### v1.56.0 - 2026-03-20\n<a name"
},
{
"path": "CONTRIBUTING.md",
"chars": 508,
"preview": "\nBefore you start, unless you're fixing a typo or proposing a trivial change, please\n\n- discuss the need and technical d"
},
{
"path": "Cargo.toml",
"chars": 4142,
"preview": "[package]\nname = \"broot\"\nversion = \"1.56.1\"\nauthors = [\"dystroy <denys.seguret@gmail.com>\"]\nrepository = \"https://github"
},
{
"path": "LICENSE",
"chars": 1062,
"preview": "MIT License\n\nCopyright (c) 2018 Canop\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof t"
},
{
"path": "README.md",
"chars": 8192,
"preview": "## Broot\n\n[![Tests][s3]][l3] [![MIT][s2]][l2] [![Latest Version][s1]][l1] [![Chat on Miaou][s4]][l4] [![Packaging status"
},
{
"path": "bacon.toml",
"chars": 2778,
"preview": "# This is a configuration file for the bacon tool\n# More info at https://github.com/Canop/bacon\n\ndefault_job = \"check\"\ne"
},
{
"path": "benches/composite.rs",
"chars": 920,
"preview": "mod shared;\n\nuse {\n broot::{\n command::CommandParts,\n pattern::*,\n },\n glassbench::*,\n};\n\n// this"
},
{
"path": "benches/fuzzy.rs",
"chars": 605,
"preview": "mod shared;\n\nuse {\n broot::pattern::FuzzyPattern,\n glassbench::*,\n};\n\nstatic PATTERNS: &[&str] = &[\"réveil\", \"AB\","
},
{
"path": "benches/path_normalization.rs",
"chars": 678,
"preview": "use {\n broot::path,\n glassbench::*,\n};\n\nstatic PATHS: &[&str] = &[\n \"/abc/test/../thing.png\",\n \"/abc/def/../"
},
{
"path": "benches/shared/mod.rs",
"chars": 30,
"preview": "mod names;\n\npub use names::*;\n"
},
{
"path": "benches/shared/names.rs",
"chars": 2133,
"preview": "pub static NAMES: &[&str] = &[\n \" brr ooT\",\n \"Réveillon\",\n \"dys\",\n \"test\",\n \" tetsesstteststt \",\n \"a r"
},
{
"path": "benches/toks.rs",
"chars": 619,
"preview": "mod shared;\n\nuse {\n broot::pattern::TokPattern,\n glassbench::*,\n};\n\nstatic PATTERNS: &[&str] = &[\"a\", \"réveil\", \"b"
},
{
"path": "build-all-targets.sh",
"chars": 4142,
"preview": "#WARNING: This script is NOT meant for normal installation, it's dedicated\n# to the compilation of all supported targets"
},
{
"path": "build.rs",
"chars": 2053,
"preview": "//! This file is executed during broot compilation.\n//! It builds shell completion scripts and the man page\n//!\n//! Note"
},
{
"path": "build.sh",
"chars": 537,
"preview": "# This script compiles broot for the local system\n#\n# After compilation, broot can be found in target/release\n#\n# If you"
},
{
"path": "features.md",
"chars": 1496,
"preview": "\nThis page defines the optional features which may be applied on compilation:\n\n* clipboard\n* trash\n* kitty-csi-check\n\nFe"
},
{
"path": "man/page",
"chars": 4626,
"preview": ".\\\" Manpage for broot\n.\\\" Some items starting with a # are replaced on build\n.TH broot 1 \"#date\" \"#version\" \"broot manpa"
},
{
"path": "release.sh",
"chars": 925,
"preview": "# build a new release of broot\n# This isn't used for normal compilation (see https://dystroy.org/broot for instruction)\n"
},
{
"path": "resources/default-conf/conf.hjson",
"chars": 10060,
"preview": "###############################################################\n# This configuration file lets you\n# - define new comman"
},
{
"path": "resources/default-conf/skins/catppuccin-macchiato.hjson",
"chars": 4767,
"preview": "###############################################################\n# A skin for a terminal with a dark background\n# This sk"
},
{
"path": "resources/default-conf/skins/catppuccin-mocha.hjson",
"chars": 4754,
"preview": "###############################################################\n# A skin for a terminal with a dark background\n# This sk"
},
{
"path": "resources/default-conf/skins/dark-blue.hjson",
"chars": 4131,
"preview": "###############################################################\n# A skin for a terminal with a dark background\n#\n# To cr"
},
{
"path": "resources/default-conf/skins/dark-gruvbox.hjson",
"chars": 3813,
"preview": "###############################################################\n# A skin for a terminal with a dark background\n# This sk"
},
{
"path": "resources/default-conf/skins/dark-orange.hjson",
"chars": 3802,
"preview": "###############################################################\n# A skin for a terminal with a dark background\n#\n# To cr"
},
{
"path": "resources/default-conf/skins/native-16.hjson",
"chars": 3146,
"preview": "###############################################################\n# 16 ANSI color theme. Colors in this theme are restrict"
},
{
"path": "resources/default-conf/skins/solarized-dark.hjson",
"chars": 5190,
"preview": "// contributed by [@danieltrautmann](https://github.com/danieltrautmann)\n// \n// \n// The Solarized Dark skin uses RGB val"
},
{
"path": "resources/default-conf/skins/solarized-light.hjson",
"chars": 3597,
"preview": "// contributed by [@danieltrautmann](https://github.com/danieltrautmann)\n// \n// \n// The Solarized Light skin uses RGB va"
},
{
"path": "resources/default-conf/skins/tokyo-night.hjson",
"chars": 4289,
"preview": "###############################################################\n# A skin for a terminal with a dark background\n# This sk"
},
{
"path": "resources/default-conf/skins/white.hjson",
"chars": 2658,
"preview": "###############################################################\n# A skin for a terminal with a white background\n#\n# To c"
},
{
"path": "resources/default-conf/verbs.hjson",
"chars": 5543,
"preview": "###############################################################\n# This file contains the verb definitions for broot\n#\n# "
},
{
"path": "resources/icons/nerdfont/README.md",
"chars": 1340,
"preview": "# Nerd Fonts Icons\n\n## Requirements\n\n[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) installed either through a pa"
},
{
"path": "resources/icons/nerdfont/data/double_extension_to_icon_name_map.rs",
"chars": 3895,
"preview": "// SEE ./README on how to edit this file\n[\n ( \"adapter.js\" , \"file_type_nest_adapter_js\" ),\n"
},
{
"path": "resources/icons/nerdfont/data/extension_to_icon_name_map.rs",
"chars": 36173,
"preview": "// SEE ./README on how to edit this file\n[\n( \"3g2\" , \"file_type_video\" ),\n( \"3gp\" "
},
{
"path": "resources/icons/nerdfont/data/file_name_to_icon_name_map.rs",
"chars": 13402,
"preview": "[\n ( \".scalafix.conf\" , \"file_type_config\" ),\n ( \".scalafmt.conf\" , \"fil"
},
{
"path": "resources/icons/nerdfont/data/icon_name_to_icon_code_point_map.rs",
"chars": 28796,
"preview": "// if you want to find an icon for a file: go to https://www.nerdfonts.com/cheat-sheet and search\n// for f07b in case of"
},
{
"path": "resources/icons/vscode/data/README",
"chars": 374,
"preview": "Tips on editing these files in vi\n\n1. Open ./icon_name_to_icon_code_point_map.rs\n then in the same session, switch to "
},
{
"path": "resources/icons/vscode/data/double_extension_to_icon_name_map.rs",
"chars": 341,
"preview": "// SEE ./README on how to edit this file\n[\n ( \"gradle.kts\" , \"file_type_gradle\" ),\n "
},
{
"path": "resources/icons/vscode/data/extension_to_icon_name_map.rs",
"chars": 50165,
"preview": "// SEE ./README on how to edit this file\n[\n( \"3g2\" , \"file_type_video\" ) ,\n( \"3gp\""
},
{
"path": "resources/icons/vscode/data/file_name_to_icon_name_map.rs",
"chars": 712,
"preview": "[\n ( \".scalafix.conf\" , \"file_type_config\" ),\n ( \".scalafmt.conf\" , \"file_type_config\" ),\n"
},
{
"path": "resources/icons/vscode/data/icon_name_to_icon_code_point_map.rs",
"chars": 27754,
"preview": "[\n( \"emoji_type_lock\", 0x1F512 ),\n( \"emoji_type_link\", 0x1F517 ),\n( \"default_file\", 0x100000 ),\n( \"default_folder_opened"
},
{
"path": "resources/syntect/README.md",
"chars": 772,
"preview": "\nBroot uses [syntect](https://crates.io/crates/syntect) for syntax highlighting in text files.\n\nThis (excellent) library"
},
{
"path": "rustfmt.toml",
"chars": 114,
"preview": "edition = \"2021\"\nversion = \"Two\"\nimports_layout = \"Vertical\"\nfn_params_layout = \"Vertical\"\nnewline_style = \"Unix\"\n"
},
{
"path": "src/app/app.rs",
"chars": 24761,
"preview": "use {\n super::*,\n crate::{\n browser::BrowserState,\n cli::TriBool,\n command::{\n Com"
},
{
"path": "src/app/app_context.rs",
"chars": 13608,
"preview": "use {\n super::*,\n crate::{\n app::Mode,\n cli::{\n Args,\n TriBool,\n },\n "
},
{
"path": "src/app/app_panels.rs",
"chars": 25714,
"preview": "use {\n super::*,\n crate::{\n browser::*,\n command::*,\n display::*,\n errors::ProgramErro"
},
{
"path": "src/app/app_state.rs",
"chars": 775,
"preview": "use {\n crate::stage::Stage,\n std::path::PathBuf,\n};\n\n/// global mutable state\n#[derive(Debug)]\npub struct AppState"
},
{
"path": "src/app/cmd_context.rs",
"chars": 1025,
"preview": "use {\n super::*,\n crate::{\n command::*,\n display::{\n Areas,\n Screen,\n }"
},
{
"path": "src/app/cmd_result.rs",
"chars": 4005,
"preview": "use {\n super::*,\n crate::{\n browser::BrowserState,\n command::Sequence,\n display::LayoutInstru"
},
{
"path": "src/app/display_context.rs",
"chars": 423,
"preview": "use {\n super::*,\n crate::{\n display::Screen,\n skin::PanelSkin,\n },\n termimad::Area,\n};\n\n/// sh"
},
{
"path": "src/app/mod.rs",
"chars": 693,
"preview": "mod app;\nmod app_context;\nmod app_panels;\nmod app_state;\nmod cmd_context;\nmod cmd_result;\nmod display_context;\nmod mode;"
},
{
"path": "src/app/mode.rs",
"chars": 272,
"preview": "use serde::Deserialize;\n\n/// modes are used when the application is configured to\n/// be \"modal\". If not, the only mode "
},
{
"path": "src/app/panel.rs",
"chars": 5677,
"preview": "use {\n super::*,\n crate::{\n command::*,\n display::{\n Areas,\n Screen,\n "
},
{
"path": "src/app/panel_id.rs",
"chars": 315,
"preview": "/// The unique identifiant of a panel\n#[derive(Debug, Clone, Copy, PartialEq)]\npub struct PanelId(usize);\n\nimpl From<usi"
},
{
"path": "src/app/panel_purpose.rs",
"chars": 450,
"preview": "use super::SelectionType;\n\n/// the possible special reason the panel was open\n#[derive(Debug, Clone, Copy)]\npub enum Pan"
},
{
"path": "src/app/panel_reference.rs",
"chars": 2298,
"preview": "use {\n crate::{\n app::PanelId,\n errors::ConfError,\n },\n lazy_regex::regex_switch,\n serde::{\n "
},
{
"path": "src/app/panel_state.rs",
"chars": 44503,
"preview": "use {\n super::*,\n crate::{\n command::*,\n display::*,\n errors::ProgramError,\n flag::Fla"
},
{
"path": "src/app/sel_info.rs",
"chars": 3945,
"preview": "use {\n super::{\n Selection,\n SelectionType,\n },\n crate::{\n stage::Stage,\n verb::Fil"
},
{
"path": "src/app/selection.rs",
"chars": 2448,
"preview": "use {\n super::{\n AppContext,\n CmdResult,\n },\n crate::{\n errors::ProgramError,\n laun"
},
{
"path": "src/app/standard_status.rs",
"chars": 8906,
"preview": "use {\n super::*,\n crate::verb::{\n Internal,\n VerbStore,\n },\n};\n\n/// All the precomputed status wh"
},
{
"path": "src/app/state_type.rs",
"chars": 507,
"preview": "use serde::{\n Deserialize,\n Serialize,\n};\n\n/// one of the types of state that you could\n/// find in a panel today\n"
},
{
"path": "src/app/status.rs",
"chars": 753,
"preview": "/// the status contains information written on the grey line\n/// near the bottom of the screen\n#[derive(Debug, Clone)]\n"
},
{
"path": "src/browser/browser_state.rs",
"chars": 32248,
"preview": "use {\n crate::{\n app::*,\n command::*,\n display::*,\n errors::{ProgramError, TreeBuildError"
},
{
"path": "src/browser/mod.rs",
"chars": 57,
"preview": "mod browser_state;\n\npub use browser_state::BrowserState;\n"
},
{
"path": "src/cli/args.rs",
"chars": 6329,
"preview": "// Warning: this module can't import broot's stuff due to its use in build.rs\nuse {\n clap::{\n Parser,\n "
},
{
"path": "src/cli/install_launch_args.rs",
"chars": 1297,
"preview": "use {\n crate::{\n cli::{\n Args,\n CliShellInstallState,\n },\n errors::Program"
},
{
"path": "src/cli/mod.rs",
"chars": 5949,
"preview": "//! this module manages reading and translating\n//! the arguments passed on launch of the application.\n\nmod args;\nmod in"
},
{
"path": "src/command/command.rs",
"chars": 3885,
"preview": "use {\n super::*,\n crate::{\n pattern::*,\n verb::{\n Internal,\n VerbId,\n "
},
{
"path": "src/command/completion.rs",
"chars": 8267,
"preview": "use {\n super::CommandParts,\n crate::{\n app::*,\n path::{\n self,\n PathAnchor,\n "
},
{
"path": "src/command/mod.rs",
"chars": 330,
"preview": "mod command;\nmod completion;\nmod panel_input;\nmod parts;\nmod scroll;\nmod sel;\nmod sequence;\nmod trigger_type;\n\npub use {"
},
{
"path": "src/command/panel_input.rs",
"chars": 18557,
"preview": "use {\n super::*,\n crate::{\n app::*,\n display::W,\n errors::ProgramError,\n keys,\n "
},
{
"path": "src/command/parts.rs",
"chars": 12179,
"preview": "use {\n crate::{\n pattern::*,\n verb::VerbInvocation,\n },\n bet::BeTree,\n std::fmt,\n};\n\n/// An in"
},
{
"path": "src/command/scroll.rs",
"chars": 1043,
"preview": "#[derive(Debug, Clone, Copy)]\npub enum ScrollCommand {\n Lines(i32),\n Pages(i32),\n}\n\nimpl ScrollCommand {\n pub f"
},
{
"path": "src/command/sel.rs",
"chars": 487,
"preview": "/// compute a new selection index for the given list len,\n/// taking into account whether we should cycle or not\n#[must_"
},
{
"path": "src/command/sequence.rs",
"chars": 4120,
"preview": "//! this mod achieves the transformation of a string containing\n//! one or several commands into a vec of parsed command"
},
{
"path": "src/command/trigger_type.rs",
"chars": 455,
"preview": "use crate::verb::Verb;\n\n/// This rather vague enum might be precised or removed. It\n/// serves today to characterize wh"
},
{
"path": "src/conf/conf.rs",
"chars": 9743,
"preview": "//! manage reading the verb shortcuts from the configuration file,\n//! initializing if if it doesn't yet exist\n\nuse {\n "
},
{
"path": "src/conf/default.rs",
"chars": 1961,
"preview": "use {\n include_dir::{\n Dir,\n DirEntry,\n include_dir,\n },\n std::{\n fs,\n io,\n "
},
{
"path": "src/conf/default_flags.rs",
"chars": 666,
"preview": "use {\n crate::{\n cli::Args,\n errors::ConfError,\n },\n clap::Parser,\n lazy_regex::*,\n};\n\n/// par"
},
{
"path": "src/conf/file_size.rs",
"chars": 1766,
"preview": "use ::serde::{\n Deserialize,\n de,\n};\n\npub fn parse_file_size(input: &str) -> Result<u64, String> {\n let s = inp"
},
{
"path": "src/conf/format.rs",
"chars": 2002,
"preview": "use {\n crate::errors::{\n ConfError,\n ProgramError,\n },\n deser_hjson,\n serde::de::DeserializeOw"
},
{
"path": "src/conf/import.rs",
"chars": 970,
"preview": "use {\n crate::display::LumaCondition,\n serde::Deserialize,\n};\n\n/// A file to import, with optionally a condition\n#"
},
{
"path": "src/conf/mod.rs",
"chars": 2536,
"preview": "use {\n crate::path::untilde,\n directories,\n once_cell::sync::Lazy,\n std::path::{\n Path,\n PathB"
},
{
"path": "src/conf/special_handling_conf.rs",
"chars": 3105,
"preview": "use {\n crate::{\n errors::ConfError,\n path::*,\n },\n directories::UserDirs,\n lazy_regex::*,\n "
},
{
"path": "src/conf/verb_conf.rs",
"chars": 1560,
"preview": "use {\n crate::{\n app::{\n PanelStateType,\n PanelReference,\n },\n verb::*,\n "
},
{
"path": "src/content_search/content_match.rs",
"chars": 1965,
"preview": "/// a displayable representation of where\n/// the needle was found, with some text around\n#[derive(Debug, Clone)]\npub st"
},
{
"path": "src/content_search/content_search_result.rs",
"chars": 445,
"preview": "/// result of a full text search\n#[derive(Debug, Clone, Copy, PartialEq)]\npub enum ContentSearchResult {\n /// the nee"
},
{
"path": "src/content_search/mod.rs",
"chars": 2394,
"preview": "mod content_match;\nmod content_search_result;\nmod needle;\n\npub use {\n crate::content_type::{\n self,\n ex"
},
{
"path": "src/content_search/needle.rs",
"chars": 8268,
"preview": "// Don't look here for search functions to reuse or even for efficient or proven tricks.\n// Benchmarks proved that the a"
},
{
"path": "src/content_type/extensions.rs",
"chars": 1668,
"preview": "use phf::{\n Set,\n phf_set,\n};\n\n/// a short list of extensions that shouldn't be searched\n/// by content\n///\n/// I"
},
{
"path": "src/content_type/magic_numbers.rs",
"chars": 4541,
"preview": "use {\n phf::{\n Set,\n phf_set,\n },\n std::{\n fs::File,\n io::{\n self,\n "
},
{
"path": "src/content_type/mod.rs",
"chars": 857,
"preview": "pub mod extensions;\npub mod magic_numbers;\n\nuse std::{\n io,\n path::Path,\n};\n\n/// Assuming the path is already chec"
},
{
"path": "src/display/areas.rs",
"chars": 8250,
"preview": "use {\n super::*,\n crate::app::Panel,\n termimad::Area,\n};\n\n/// the areas of the various parts of a panel. It's\n/"
},
{
"path": "src/display/cell_size.rs",
"chars": 1685,
"preview": "/// find and return the size of a cell (a char location) in pixels\n/// as (width, height).\n/// Many terminals don't fill"
},
{
"path": "src/display/col.rs",
"chars": 5137,
"preview": "use {\n crate::{\n app::AppState,\n errors::ConfError,\n tree::Tree,\n },\n serde::Deserialize,\n"
},
{
"path": "src/display/displayable_tree.rs",
"chars": 23537,
"preview": "use {\n super::{\n BRANCH_FILLING,\n Col,\n CropWriter,\n GitStatusDisplay,\n MatchedStr"
},
{
"path": "src/display/flags_display.rs",
"chars": 825,
"preview": "use {\n super::W,\n crate::{\n errors::ProgramError,\n flag::Flag,\n skin::PanelSkin,\n },\n};\n\n/"
},
{
"path": "src/display/git_status_display.rs",
"chars": 2490,
"preview": "use {\n super::CropWriter,\n crate::{\n errors::ProgramError,\n git::TreeGitStatus,\n skin::StyleM"
},
{
"path": "src/display/layout_instructions.rs",
"chars": 3095,
"preview": "use {\n lazy_regex::*,\n serde::Deserialize,\n std::str::FromStr,\n};\n\n#[derive(Debug, Clone, Default, Deserialize)"
},
{
"path": "src/display/luma.rs",
"chars": 1389,
"preview": "pub use {\n crokey::crossterm::tty::IsTty,\n once_cell::sync::Lazy,\n serde::Deserialize,\n};\n\n#[derive(Debug, Clon"
},
{
"path": "src/display/matched_string.rs",
"chars": 6026,
"preview": "use {\n super::{\n CropWriter,\n SPACE_FILLING,\n },\n crate::pattern::NameMatch,\n termimad::{\n "
},
{
"path": "src/display/mod.rs",
"chars": 1901,
"preview": "//! This module is where is defined whether broot\n//! writes on stdout, on stderr or elsewhere. It also provides helper\n"
},
{
"path": "src/display/num_format.rs",
"chars": 731,
"preview": "/// Format a number with commas as thousands separators\npub fn format_count(count: usize) -> String {\n let mut s = co"
},
{
"path": "src/display/permissions.rs",
"chars": 4481,
"preview": "use {\n super::CropWriter,\n crate::{\n errors::ProgramError,\n permissions,\n skin::StyleMap,\n "
},
{
"path": "src/display/screen.rs",
"chars": 2411,
"preview": "use {\n super::W,\n crate::{\n app::AppContext,\n errors::ProgramError,\n skin::PanelSkin,\n },\n"
},
{
"path": "src/display/status_line.rs",
"chars": 1875,
"preview": "use {\n super::{\n Screen,\n W,\n },\n crate::{\n app::Status,\n errors::ProgramError,\n "
},
{
"path": "src/errors.rs",
"chars": 7188,
"preview": "//! Definitions of custom errors used in broot\n\nuse {\n custom_error::custom_error,\n lazy_regex::regex,\n std::io"
},
{
"path": "src/file_sum/mod.rs",
"chars": 4137,
"preview": "/// compute consolidated data for directories: modified date, size, and count.\n/// A cache is used to avoid recomputing "
},
{
"path": "src/file_sum/sum_computation.rs",
"chars": 10983,
"preview": "use {\n super::FileSum,\n crate::{\n app::*,\n path::*,\n task_sync::Dam,\n },\n rayon::{\n "
},
{
"path": "src/filesystems/filesystems_state.rs",
"chars": 23953,
"preview": "use {\n super::*,\n crate::{\n app::*,\n browser::BrowserState,\n command::*,\n display::*,\n"
},
{
"path": "src/filesystems/mod.rs",
"chars": 505,
"preview": "//! The whole module is only available on linux and macos\n\nmod filesystems_state;\nmod mount_list;\nmod mount_space_displa"
},
{
"path": "src/filesystems/mount_list.rs",
"chars": 1529,
"preview": "use {\n crate::errors::ProgramError,\n lfs_core::{\n DeviceId,\n Mount,\n ReadOptions,\n rea"
},
{
"path": "src/filesystems/mount_space_display.rs",
"chars": 4452,
"preview": "use {\n crate::{\n display::cond_bg,\n errors::ProgramError,\n skin::StyleMap,\n },\n crokey::cr"
},
{
"path": "src/flag/mod.rs",
"chars": 153,
"preview": "/// Right now the flag is just a vessel for display.\n#[derive(Clone, Copy)]\npub struct Flag {\n pub name: &'static str"
},
{
"path": "src/git/ignore.rs",
"chars": 9647,
"preview": "//! Implements parsing and applying .gitignore and .ignore files.\n\n// TODO rename without the \"Git\" prefix, as it's not "
},
{
"path": "src/git/mod.rs",
"chars": 753,
"preview": "mod ignore;\nmod status;\nmod status_computer;\n\npub use {\n ignore::{\n IgnoreChain,\n Ignorer,\n },\n s"
},
{
"path": "src/git/status.rs",
"chars": 3006,
"preview": "use {\n git2::{\n self,\n Repository,\n Status,\n },\n rustc_hash::FxHashMap,\n std::path::{\n "
},
{
"path": "src/git/status_computer.rs",
"chars": 4286,
"preview": "use {\n super::TreeGitStatus,\n crate::{\n git,\n task_sync::{\n Computation,\n Comp"
},
{
"path": "src/help/help_content.rs",
"chars": 2356,
"preview": "use termimad::minimad::{\n TextTemplate,\n TextTemplateExpander,\n};\n\nstatic MD: &str = r\"\n\n# broot ${version}\n\n**bro"
},
{
"path": "src/help/help_features.rs",
"chars": 549,
"preview": "/// find the list of optional features which are enabled\npub fn list() -> Vec<(&'static str, &'static str)> {\n #[allo"
},
{
"path": "src/help/help_search_modes.rs",
"chars": 1978,
"preview": "use crate::{\n app::AppContext,\n pattern::*,\n};\n\n/// what should be shown for a `search_mode` in the help screen, a"
},
{
"path": "src/help/help_state.rs",
"chars": 8581,
"preview": "use {\n super::{\n SearchModeHelp,\n help_content,\n },\n crate::{\n app::*,\n command::{\n"
},
{
"path": "src/help/help_verbs.rs",
"chars": 2366,
"preview": "use crate::{\n app::AppContext,\n keys,\n pattern::*,\n verb::*,\n};\n\n/// what should be shown for a verb in the "
},
{
"path": "src/help/mod.rs",
"chars": 159,
"preview": "mod help_content;\nmod help_features;\nmod help_search_modes;\nmod help_state;\nmod help_verbs;\n\npub use {\n help_search_m"
},
{
"path": "src/hex/byte.rs",
"chars": 1575,
"preview": "use {\n crate::skin::StyleMap,\n termimad::CompoundStyle,\n};\n\npub enum ByteCategory {\n Null,\n AsciiGraphic,\n "
},
{
"path": "src/hex/hex_view.rs",
"chars": 8080,
"preview": "use {\n super::byte::Byte,\n crate::{\n command::ScrollCommand,\n display::{\n Screen,\n "
},
{
"path": "src/hex/mod.rs",
"chars": 52,
"preview": "mod byte;\nmod hex_view;\n\npub use hex_view::HexView;\n"
},
{
"path": "src/icon/font.rs",
"chars": 5141,
"preview": "use {\n super::*,\n crate::tree::TreeLineType,\n rustc_hash::FxHashMap,\n};\n\npub struct FontPlugin {\n icon_name_"
},
{
"path": "src/icon/icon_plugin.rs",
"chars": 224,
"preview": "use crate::tree::TreeLineType;\n\npub trait IconPlugin {\n fn get_icon(\n &self,\n tree_line_type: &TreeLine"
},
{
"path": "src/icon/mod.rs",
"chars": 1099,
"preview": "mod font;\nmod icon_plugin;\n\nuse font::FontPlugin;\n\npub use icon_plugin::IconPlugin;\n\npub fn icon_plugin(icon_set: &str) "
},
{
"path": "src/image/double_line.rs",
"chars": 2554,
"preview": "use {\n super::zune_compat::Rgba,\n crate::{\n display::W,\n errors::ProgramError,\n },\n crokey::cr"
},
{
"path": "src/image/image_view.rs",
"chars": 6222,
"preview": "use {\n super::{\n SourceImage,\n double_line::DoubleLine,\n zune_compat::DynamicImage,\n },\n c"
},
{
"path": "src/image/mod.rs",
"chars": 153,
"preview": "mod double_line;\nmod image_view;\nmod source_image;\nmod svg;\npub mod zune_compat;\n\npub use {\n image_view::ImageView,\n "
},
{
"path": "src/image/source_image.rs",
"chars": 1932,
"preview": "use {\n super::{\n svg,\n zune_compat::DynamicImage,\n },\n crate::errors::ProgramError,\n std::path"
},
{
"path": "src/image/svg.rs",
"chars": 2827,
"preview": "use {\n super::zune_compat::DynamicImage,\n crate::errors::SvgError,\n resvg::{\n tiny_skia,\n usvg,\n "
},
{
"path": "src/image/zune_compat.rs",
"chars": 13348,
"preview": "/// Compatibility layer supporting both zune-image (fast) and image crate (fallback)\nuse {\n crate::errors::ProgramErr"
},
{
"path": "src/keys.rs",
"chars": 714,
"preview": "use {\n crokey::*,\n crossterm::event::{\n KeyCode,\n KeyModifiers,\n },\n once_cell::sync::Lazy,\n};"
},
{
"path": "src/kitty/detect_support.rs",
"chars": 5388,
"preview": "use {\n crate::kitty::KittyGraphicsDisplay,\n cli_log::*,\n std::env,\n};\n\n/// Determine whether Kitty's graphics p"
},
{
"path": "src/kitty/image_renderer.rs",
"chars": 22478,
"preview": "use {\n super::{\n detect_support::{\n detect_kitty_graphics_protocol_display,\n get_tmux_ne"
},
{
"path": "src/kitty/mod.rs",
"chars": 5038,
"preview": "mod detect_support;\nmod image_renderer;\nmod terminal_esc;\n\npub use image_renderer::*;\n\nuse crate::display::cell_size_in_"
},
{
"path": "src/kitty/terminal_esc.rs",
"chars": 590,
"preview": "pub fn get_esc_seq(tmux_nest_count: u32) -> String {\n \"\\u{1b}\".repeat(2usize.pow(tmux_nest_count))\n}\n\npub fn get_tmux"
},
{
"path": "src/launchable.rs",
"chars": 7918,
"preview": "use {\n crate::{\n app::AppContext,\n display::{\n DisplayableTree,\n Screen,\n "
},
{
"path": "src/lib.rs",
"chars": 923,
"preview": "#[macro_use]\nextern crate cli_log;\n\npub mod app;\npub mod browser;\npub mod cli;\npub mod command;\npub mod conf;\npub mod co"
},
{
"path": "src/main.rs",
"chars": 779,
"preview": "use cli_log::*;\n\nfn main() {\n init_cli_log!();\n debug!(\"env::args(): {:#?}\", std::env::args().collect::<Vec<String"
},
{
"path": "src/net/client.rs",
"chars": 1123,
"preview": "use {\n super::Message,\n crate::errors::NetError,\n std::{\n io::BufReader,\n os::unix::net::UnixStre"
},
{
"path": "src/net/message.rs",
"chars": 1871,
"preview": "use {\n crate::{\n command::Sequence,\n errors::NetError,\n },\n std::io::{\n self,\n BufR"
},
{
"path": "src/net/mod.rs",
"chars": 884,
"preview": "mod client;\nmod message;\nmod server;\n\npub use {\n client::Client,\n message::Message,\n server::Server,\n};\n\npub fn"
},
{
"path": "src/net/server.rs",
"chars": 3359,
"preview": "use {\n super::Message,\n crate::{\n command::Sequence,\n errors::NetError,\n },\n std::{\n fs"
},
{
"path": "src/path/anchor.rs",
"chars": 137,
"preview": "#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]\npub enum PathAnchor {\n #[default]\n Unspecified,\n Parent,\n"
},
{
"path": "src/path/closest.rs",
"chars": 470,
"preview": "use std::path::{\n Path,\n PathBuf,\n};\n\n/// return the closest enclosing directory\npub fn closest_dir(mut path: &Pat"
},
{
"path": "src/path/common.rs",
"chars": 694,
"preview": "use std::path::{\n Components,\n PathBuf,\n};\n\npub fn longest_common_ancestor(paths: &[PathBuf]) -> PathBuf {\n mat"
},
{
"path": "src/path/from.rs",
"chars": 2067,
"preview": "use {\n super::*,\n directories::UserDirs,\n lazy_regex::*,\n std::path::{\n Path,\n PathBuf,\n },"
},
{
"path": "src/path/mod.rs",
"chars": 445,
"preview": "mod anchor;\nmod closest;\nmod common;\nmod from;\nmod normalize;\nmod special_path;\n\npub use {\n anchor::*,\n closest::*"
},
{
"path": "src/path/normalize.rs",
"chars": 2390,
"preview": "use std::path::{\n Component,\n Path,\n PathBuf,\n};\n\n/// Improve the path to try remove and solve .. token.\n///\n//"
},
{
"path": "src/path/special_path.rs",
"chars": 3033,
"preview": "use {\n glob,\n serde::Deserialize,\n std::path::Path,\n};\n\n///// Wrap a glob pattern to add the Deserialize trait\n"
},
{
"path": "src/pattern/candidate.rs",
"chars": 407,
"preview": "use {\n std::{\n path::Path,\n },\n};\n\n/// something which can be evaluated by a pattern to produce\n/// either "
},
{
"path": "src/pattern/composite_pattern.rs",
"chars": 10128,
"preview": "use {\n super::*,\n crate::content_search::ContentMatch,\n bet::*,\n smallvec::smallvec,\n std::path::Path,\n};"
},
{
"path": "src/pattern/content_pattern.rs",
"chars": 1835,
"preview": "use {\n super::*,\n crate::content_search::*,\n std::{\n fmt,\n path::Path,\n },\n};\n\n/// A pattern f"
},
{
"path": "src/pattern/content_regex_pattern.rs",
"chars": 3341,
"preview": "use {\n super::*,\n crate::content_search::*,\n lazy_regex::regex,\n std::{\n fmt,\n fs::File,\n "
},
{
"path": "src/pattern/exact_pattern.rs",
"chars": 3964,
"preview": "//! a simple exact pattern matcher for filename filtering / sorting.\n//! It's not meant for file contents but for small "
},
{
"path": "src/pattern/fuzzy_pattern.rs",
"chars": 12644,
"preview": "//! a fuzzy pattern matcher for filename filtering / sorting.\n//! It's not meant for file contents but for small strings"
},
{
"path": "src/pattern/input_pattern.rs",
"chars": 4491,
"preview": "use {\n super::*,\n crate::{\n app::AppContext,\n errors::PatternError,\n pattern::{\n P"
},
{
"path": "src/pattern/mod.rs",
"chars": 1358,
"preview": "mod candidate;\nmod composite_pattern;\nmod content_pattern;\nmod content_regex_pattern;\nmod exact_pattern;\nmod fuzzy_patte"
},
{
"path": "src/pattern/name_match.rs",
"chars": 2713,
"preview": "use {\n super::Pos,\n smallvec::SmallVec,\n};\n\n/// A NameMatch is a positive result of pattern matching inside\n/// a "
},
{
"path": "src/pattern/operator.rs",
"chars": 129,
"preview": "/// operators combining patterns\n#[derive(Debug, Clone, Copy, PartialEq)]\npub enum PatternOperator {\n And,\n Or,\n "
},
{
"path": "src/pattern/pattern.rs",
"chars": 9623,
"preview": "use {\n super::*,\n crate::{\n content_search::ContentMatch,\n errors::PatternError,\n },\n bet::BeT"
},
{
"path": "src/pattern/pattern_object.rs",
"chars": 782,
"preview": "use std::ops;\n\n/// on what the search applies\n/// (a composite pattern may apply to several topic\n/// hence the bools)\n#"
},
{
"path": "src/pattern/pattern_parts.rs",
"chars": 2099,
"preview": "use std::fmt;\n\n/// An intermediate parsed representation of the raw string making\n/// a pattern, with up to 3 parts (sea"
},
{
"path": "src/pattern/pos.rs",
"chars": 125,
"preview": "use smallvec::SmallVec;\n\n/// a vector of indexes of the matching characters (not bytes)\npub type Pos = SmallVec<[usize; "
},
{
"path": "src/pattern/regex_pattern.rs",
"chars": 1538,
"preview": "//! a filtering pattern using a regular expression\n\nuse {\n super::NameMatch,\n crate::errors::PatternError,\n laz"
},
{
"path": "src/pattern/search_mode.rs",
"chars": 9499,
"preview": "use {\n crate::{\n app::AppContext,\n errors::{\n ConfError,\n PatternError,\n }"
},
{
"path": "src/pattern/tok_pattern.rs",
"chars": 7482,
"preview": "use {\n super::NameMatch,\n secular,\n smallvec::{\n SmallVec,\n smallvec,\n },\n std::{\n c"
},
{
"path": "src/permissions/mod.rs",
"chars": 305,
"preview": "//////////////////// UNIX\n\n#[cfg(not(any(target_family = \"windows\", target_os = \"android\")))]\npub mod permissions_unix;\n"
},
{
"path": "src/permissions/permissions_unix.rs",
"chars": 1066,
"preview": "use {\n once_cell::sync::Lazy,\n rustc_hash::FxHashMap,\n std::sync::Mutex,\n};\n\npub fn supported() -> bool {\n t"
},
{
"path": "src/preview/dir_view.rs",
"chars": 3508,
"preview": "use {\n crate::{\n app::{\n AppContext,\n DisplayContext,\n },\n command::Scroll"
},
{
"path": "src/preview/mod.rs",
"chars": 641,
"preview": "mod dir_view;\nmod preview;\nmod preview_state;\nmod preview_transformer;\nmod zero_len_file_view;\n\npub use {\n dir_view::"
},
{
"path": "src/preview/preview.rs",
"chars": 13475,
"preview": "use {\n super::*,\n crate::{\n app::*,\n command::ScrollCommand,\n display::*,\n errors::Pro"
},
{
"path": "src/preview/preview_state.rs",
"chars": 16217,
"preview": "use {\n super::*,\n crate::{\n app::*,\n command::{\n Command,\n ScrollCommand,\n "
},
{
"path": "src/preview/preview_transformer.rs",
"chars": 9652,
"preview": "use {\n crate::{\n errors::*,\n preview::PreviewMode,\n },\n serde::Deserialize,\n std::{\n fs"
},
{
"path": "src/preview/zero_len_file_view.rs",
"chars": 1629,
"preview": "use {\n crate::{\n display::{\n Screen,\n W,\n },\n errors::ProgramError,\n "
},
{
"path": "src/print.rs",
"chars": 2864,
"preview": "//! functions printing a tree or a path\n\nuse {\n crate::{\n app::*,\n display::Screen,\n errors::Pro"
},
{
"path": "src/shell_install/bash.rs",
"chars": 5397,
"preview": "//! The goal of this mod is to ensure the launcher shell function\n//! is available for bash and zsh i.e. the `br` shell "
},
{
"path": "src/shell_install/fish.rs",
"chars": 3414,
"preview": "//! The goal of this mod is to ensure the launcher shell function\n//! is available for fish i.e. the `br` shell function"
},
{
"path": "src/shell_install/mod.rs",
"chars": 8163,
"preview": "mod bash;\nmod fish;\nmod nushell;\nmod powershell;\nmod state;\nmod util;\n\nuse {\n crate::{\n cli,\n errors::*"
},
{
"path": "src/shell_install/nushell.rs",
"chars": 13303,
"preview": "//! The goal of this mod is to ensure the launcher shell function\n//! is available for nushell i.e. the `br` shell funct"
},
{
"path": "src/shell_install/powershell.rs",
"chars": 4995,
"preview": "//! The goal of this mod is to ensure the launcher shell function\n//! is available for PowerShell i.e. the `br` shell fu"
},
{
"path": "src/shell_install/state.rs",
"chars": 3786,
"preview": "use {\n super::ShellInstall,\n crate::{\n cli,\n conf,\n errors::*,\n },\n std::{\n fs,\n"
},
{
"path": "src/shell_install/util.rs",
"chars": 1013,
"preview": "use {\n crate::errors::*,\n std::{\n fs::{\n self,\n OpenOptions,\n },\n io::{"
},
{
"path": "src/skin/app_skin.rs",
"chars": 1050,
"preview": "use {\n super::*,\n crate::conf::Conf,\n rustc_hash::FxHashMap,\n};\n\n/// all the skin things used by the broot appl"
},
{
"path": "src/skin/cli_mad_skin.rs",
"chars": 509,
"preview": "use {\n crokey::crossterm::style::Color,\n termimad::{\n MadSkin,\n gray,\n },\n};\n\n/// build a termima"
},
{
"path": "src/skin/ext_colors.rs",
"chars": 1223,
"preview": "use {\n crate::errors::InvalidSkinError,\n crokey::crossterm::style::Color,\n lazy_regex::*,\n rustc_hash::FxHas"
},
{
"path": "src/skin/help_mad_skin.rs",
"chars": 1112,
"preview": "use {\n super::StyleMap,\n termimad::{\n Alignment,\n LineStyle,\n MadSkin,\n },\n};\n\n/// build a"
},
{
"path": "src/skin/mod.rs",
"chars": 916,
"preview": "mod app_skin;\nmod cli_mad_skin;\nmod ext_colors;\nmod help_mad_skin;\nmod panel_skin;\nmod purpose_mad_skin;\nmod skin_entry;"
},
{
"path": "src/skin/panel_skin.rs",
"chars": 765,
"preview": "use {\n super::*,\n termimad::MadSkin,\n};\n\n/// the various skin things used in a panel.\n///\n/// There are normally t"
},
{
"path": "src/skin/purpose_mad_skin.rs",
"chars": 522,
"preview": "use {\n super::StyleMap,\n termimad::{\n Alignment,\n LineStyle,\n MadSkin,\n },\n};\n\n/// build a"
},
{
"path": "src/skin/skin_entry.rs",
"chars": 1871,
"preview": "//! Manage conversion of a user provided string\n//! defining foreground and background colors into\n//! a string with TTY"
}
]
// ... and 90 more files (download for full content)
About this extraction
This page contains the full source code of the Canop/broot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 290 files (1.4 MB), approximately 372.6k tokens, and a symbol index with 1573 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.