Showing preview only (1,760K chars total). Download the full file or copy to clipboard to get everything.
Repository: eza-community/eza
Branch: main
Commit: 744d1664ce30
Files: 744
Total size: 1.5 MB
Directory structure:
gitextract_t9nlug2r/
├── .config/
│ ├── cliff.toml
│ └── treefmt.nix
├── .envrc
├── .git-blame-ignore-revs
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── compilation_error.md
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ └── question.md
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── pull_request_template.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── apt.yml
│ ├── unit-tests.yml
│ ├── update-dependencies.sh
│ ├── update-dependencies.yaml
│ └── winget.yml
├── .gitignore
├── .pre-commit-config-non-nix.yaml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cargo.toml
├── INSTALL.md
├── LICENSE.txt
├── LICENSES/
│ ├── CC-BY-4.0.txt
│ ├── EUPL-1.2.txt
│ └── MIT.txt
├── README.md
├── REUSE.toml
├── SECURITY.md
├── TESTING.md
├── benches/
│ └── my_benchmark.rs
├── build.rs
├── completions/
│ ├── bash/
│ │ └── eza
│ ├── fish/
│ │ └── eza.fish
│ ├── nush/
│ │ └── eza.nu
│ ├── pwsh/
│ │ └── _eza.ps1
│ └── zsh/
│ └── _eza
├── deb.asc
├── deny.toml
├── devtools/
│ ├── deb-package.sh
│ ├── dir-generator.sh
│ ├── generate-timestamp-test-dir.sh
│ └── generate-trycmd-test.sh
├── docs/
│ ├── tapes/
│ │ └── demo.tape
│ └── theme.yml
├── flake.nix
├── justfile
├── man/
│ ├── eza.1.md
│ ├── eza_colors-explanation.5.md
│ └── eza_colors.5.md
├── nix/
│ ├── eza.nix
│ └── trycmd.nix
├── powertest.yaml
├── rust-toolchain.toml
├── snap/
│ └── snapcraft.yaml
├── src/
│ ├── fs/
│ │ ├── dir.rs
│ │ ├── dir_action.rs
│ │ ├── feature/
│ │ │ ├── git.rs
│ │ │ ├── mod.rs
│ │ │ └── xattr.rs
│ │ ├── fields.rs
│ │ ├── file.rs
│ │ ├── filter.rs
│ │ ├── mod.rs
│ │ ├── mounts/
│ │ │ ├── linux.rs
│ │ │ ├── macos.rs
│ │ │ └── mod.rs
│ │ └── recursive_size.rs
│ ├── info/
│ │ ├── filetype.rs
│ │ ├── mod.rs
│ │ └── sources.rs
│ ├── lib.rs
│ ├── logger.rs
│ ├── main.rs
│ ├── options/
│ │ ├── config.rs
│ │ ├── dir_action.rs
│ │ ├── error.rs
│ │ ├── file_name.rs
│ │ ├── filter.rs
│ │ ├── mod.rs
│ │ ├── parser.rs
│ │ ├── stdin.rs
│ │ ├── theme.rs
│ │ ├── vars.rs
│ │ └── view.rs
│ ├── output/
│ │ ├── cell.rs
│ │ ├── color_scale.rs
│ │ ├── details.rs
│ │ ├── escape.rs
│ │ ├── file_name.rs
│ │ ├── grid.rs
│ │ ├── grid_details.rs
│ │ ├── icons.rs
│ │ ├── lines.rs
│ │ ├── mod.rs
│ │ ├── render/
│ │ │ ├── blocks.rs
│ │ │ ├── filetype.rs
│ │ │ ├── flags.rs
│ │ │ ├── flags_bsd.rs
│ │ │ ├── flags_windows.rs
│ │ │ ├── git.rs
│ │ │ ├── groups.rs
│ │ │ ├── inode.rs
│ │ │ ├── links.rs
│ │ │ ├── mod.rs
│ │ │ ├── octal.rs
│ │ │ ├── permissions.rs
│ │ │ ├── permissions_unix.rs
│ │ │ ├── permissions_windows.rs
│ │ │ ├── securityctx.rs
│ │ │ ├── size.rs
│ │ │ ├── times.rs
│ │ │ └── users.rs
│ │ ├── table.rs
│ │ ├── time.rs
│ │ └── tree.rs
│ └── theme/
│ ├── default_theme.rs
│ ├── lsc.rs
│ ├── mod.rs
│ └── ui_styles.rs
└── tests/
├── cli_tests.rs
├── cmd/
│ ├── absolute_file_all.stderr
│ ├── absolute_file_all.stdout
│ ├── absolute_file_all.toml
│ ├── absolute_recurse_unix.stderr
│ ├── absolute_recurse_unix.stdout
│ ├── absolute_recurse_unix.toml
│ ├── absolute_unix.stderr
│ ├── absolute_unix.stdout
│ ├── absolute_unix.toml
│ ├── basic_all.stderr
│ ├── basic_all.stdout
│ ├── basic_all.toml
│ ├── classify-hyperlink-width-50_nix_local.stderr
│ ├── classify-hyperlink-width-50_nix_local.stdout
│ ├── follow-symlinks_unix.stderr
│ ├── follow-symlinks_unix.stdout
│ ├── follow-symlinks_unix.toml
│ ├── icons_all.stderr
│ ├── icons_all.stdout
│ ├── icons_all.toml
│ ├── long_icons_always.stderr
│ ├── long_icons_always.stdout
│ ├── long_icons_always.toml
│ ├── long_windows.stderr
│ ├── long_windows.stdout
│ ├── long_windows.toml
│ ├── tree_unix.stderr
│ ├── tree_unix.stdout
│ └── tree_unix.toml
├── gen/
│ ├── inexistant_file_unix.stderr
│ ├── inexistant_file_unix.stdout
│ ├── inexistant_file_unix.toml
│ ├── long_all_nix.stderr
│ ├── long_all_nix.stdout
│ ├── long_all_nix.toml
│ ├── long_binary_bytes_unix.stderr
│ ├── long_binary_bytes_unix.stdout
│ ├── long_binary_bytes_unix.toml
│ ├── long_blocksize_nix.stderr
│ ├── long_blocksize_nix.stdout
│ ├── long_blocksize_nix.toml
│ ├── long_extended_nix.stderr
│ ├── long_extended_nix.stdout
│ ├── long_extended_nix.toml
│ ├── long_file_size_unix.stderr
│ ├── long_file_size_unix.stdout
│ ├── long_file_size_unix.toml
│ ├── long_git_nix.stderr
│ ├── long_git_nix.stdout
│ ├── long_git_nix.toml
│ ├── long_git_repos_nix.stderr
│ ├── long_git_repos_nix.stdout
│ ├── long_git_repos_nix.toml
│ ├── long_git_repos_no_status_nix.stderr
│ ├── long_git_repos_no_status_nix.stdout
│ ├── long_git_repos_no_status_nix.toml
│ ├── long_grid_nix.stderr
│ ├── long_grid_nix.stdout
│ ├── long_grid_nix.toml
│ ├── long_header_nix.stderr
│ ├── long_header_nix.stdout
│ ├── long_header_nix.toml
│ ├── long_header_unix.stderr
│ ├── long_header_unix.stdout
│ ├── long_header_unix.toml
│ ├── long_icons_nix.stderr
│ ├── long_icons_nix.stdout
│ ├── long_icons_nix.toml
│ ├── long_links_recurse_unix.stderr
│ ├── long_links_recurse_unix.stdout
│ ├── long_links_recurse_unix.toml
│ ├── long_nix.stderr
│ ├── long_nix.stdout
│ ├── long_nix.toml
│ ├── long_octal_nix.stderr
│ ├── long_octal_nix.stdout
│ ├── long_octal_nix.toml
│ ├── long_recurse_with_level_unix.stderr
│ ├── long_recurse_with_level_unix.stdout
│ ├── long_recurse_with_level_unix.toml
│ ├── long_time_style_custom_non_recent_and_recent_nix.stderr
│ ├── long_time_style_custom_non_recent_and_recent_nix.stdout
│ ├── long_time_style_custom_non_recent_and_recent_nix.toml
│ ├── long_time_style_custom_non_recent_empty_nix.stdout
│ ├── long_time_style_custom_non_recent_empty_nix.toml
│ ├── long_time_style_custom_non_recent_none_nix.stdout
│ ├── long_time_style_custom_non_recent_none_nix.toml
│ ├── long_time_style_custom_non_recent_only_nix.stderr
│ ├── long_time_style_custom_non_recent_only_nix.stdout
│ ├── long_time_style_custom_non_recent_only_nix.toml
│ ├── long_time_style_custom_recent_empty_nix.stdout
│ ├── long_time_style_relative_nix.stderr
│ ├── long_time_style_relative_nix.stdout
│ ├── long_time_style_relative_nix.toml
│ ├── long_unix.stderr
│ ├── long_unix.stdout
│ ├── long_unix.toml
│ ├── only_dir_recursive_long_unix.stderr
│ ├── only_dir_recursive_long_unix.stdout
│ ├── only_dir_recursive_long_unix.toml
│ ├── only_dir_recursive_unix.stderr
│ ├── only_dir_recursive_unix.stdout
│ ├── only_dir_recursive_unix.toml
│ ├── only_dir_unix.stderr
│ ├── only_dir_unix.stdout
│ ├── only_dir_unix.toml
│ ├── only_file_unix.stderr
│ ├── only_file_unix.stdout
│ ├── only_file_unix.toml
│ ├── ptest_19a666ddec321ae2.stderr
│ ├── ptest_19a666ddec321ae2.stdout
│ ├── ptest_2dbc2104ddb934cd.stderr
│ ├── ptest_2dbc2104ddb934cd.stdout
│ ├── ptest_4b30f7de50929327.stderr
│ ├── ptest_4b30f7de50929327.stdout
│ ├── ptest_4b7165c936488151.stderr
│ ├── ptest_4b7165c936488151.stdout
│ ├── ptest_82a40fefd797654.stderr
│ ├── ptest_82a40fefd797654.stdout
│ ├── ptest_a920233617a69b55.stderr
│ ├── ptest_a920233617a69b55.stdout
│ ├── ptest_f90d48e69d70b41.stderr
│ ├── ptest_f90d48e69d70b41.stdout
│ ├── recursive_long_unix.stderr
│ ├── recursive_long_unix.stdout
│ ├── recursive_long_unix.toml
│ ├── recursive_unix.stderr
│ ├── recursive_unix.stdout
│ ├── recursive_unix.toml
│ ├── tree_long_unix.stderr
│ ├── tree_long_unix.stdout
│ ├── tree_long_unix.toml
│ ├── tree_unix.stderr
│ ├── tree_unix.stdout
│ └── tree_unix.toml
├── itest/
│ ├── a
│ ├── b
│ ├── c
│ ├── d
│ ├── e
│ ├── exa/
│ │ └── sssssssssssssssssssssssssggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss/
│ │ └── Makefile
│ ├── f
│ ├── g
│ ├── h
│ ├── i
│ ├── j
│ ├── k
│ ├── l
│ ├── m
│ ├── n
│ ├── o
│ ├── p
│ ├── q
│ └── vagrant/
│ ├── debug/
│ │ ├── .gitignore
│ │ └── a
│ ├── dev/
│ │ └── main.bf
│ └── log/
│ └── run/
│ ├── run.log.text
│ └── sps.log.text
└── ptests/
├── ptest_109771b99ff4bc2c.stderr
├── ptest_109771b99ff4bc2c.stdout
├── ptest_109771b99ff4bc2c.toml
├── ptest_10c50228fc1c6107.stderr
├── ptest_10c50228fc1c6107.stdout
├── ptest_10c50228fc1c6107.toml
├── ptest_1128756497bbcbce.stderr
├── ptest_1128756497bbcbce.stdout
├── ptest_1128756497bbcbce.toml
├── ptest_13234446d830648.stderr
├── ptest_13234446d830648.stdout
├── ptest_13234446d830648.toml
├── ptest_132ac9f159c3473e.stderr
├── ptest_132ac9f159c3473e.stdout
├── ptest_132ac9f159c3473e.toml
├── ptest_13c76530584f9804.stderr
├── ptest_13c76530584f9804.stdout
├── ptest_13c76530584f9804.toml
├── ptest_14c5df14f800bc28.stderr
├── ptest_14c5df14f800bc28.stdout
├── ptest_14c5df14f800bc28.toml
├── ptest_182085f8602ed2aa.stderr
├── ptest_182085f8602ed2aa.stdout
├── ptest_182085f8602ed2aa.toml
├── ptest_1889daad10054484.stderr
├── ptest_1889daad10054484.stdout
├── ptest_1889daad10054484.toml
├── ptest_19cf21a43f373b6.stderr
├── ptest_19cf21a43f373b6.stdout
├── ptest_19cf21a43f373b6.toml
├── ptest_1ab8279d631495b0.stderr
├── ptest_1ab8279d631495b0.stdout
├── ptest_1ab8279d631495b0.toml
├── ptest_1c1df011089efa5f.stderr
├── ptest_1c1df011089efa5f.stdout
├── ptest_1c1df011089efa5f.toml
├── ptest_1c990fbac951fdaf.stderr
├── ptest_1c990fbac951fdaf.stdout
├── ptest_1c990fbac951fdaf.toml
├── ptest_1e61d8c305ff6c48.stderr
├── ptest_1e61d8c305ff6c48.stdout
├── ptest_1e61d8c305ff6c48.toml
├── ptest_1ec7257c14635d03.stderr
├── ptest_1ec7257c14635d03.stdout
├── ptest_1ec7257c14635d03.toml
├── ptest_2092f19a0d4ea1a2.stderr
├── ptest_2092f19a0d4ea1a2.stdout
├── ptest_2092f19a0d4ea1a2.toml
├── ptest_2176b1b061cb7da2.stderr
├── ptest_2176b1b061cb7da2.stdout
├── ptest_2176b1b061cb7da2.toml
├── ptest_219303a91ed6056a.stderr
├── ptest_219303a91ed6056a.stdout
├── ptest_219303a91ed6056a.toml
├── ptest_219f7c8dfa0d0323.stderr
├── ptest_219f7c8dfa0d0323.stdout
├── ptest_219f7c8dfa0d0323.toml
├── ptest_2439b7d68089135b.stderr
├── ptest_2439b7d68089135b.stdout
├── ptest_2439b7d68089135b.toml
├── ptest_247e5acfcf9ba3a8.stderr
├── ptest_247e5acfcf9ba3a8.stdout
├── ptest_247e5acfcf9ba3a8.toml
├── ptest_283667fe5d9c3015.stderr
├── ptest_283667fe5d9c3015.stdout
├── ptest_283667fe5d9c3015.toml
├── ptest_2ba3ba45a3b3cc94.stderr
├── ptest_2ba3ba45a3b3cc94.stdout
├── ptest_2ba3ba45a3b3cc94.toml
├── ptest_2cccf6c2af490359.stderr
├── ptest_2cccf6c2af490359.stdout
├── ptest_2cccf6c2af490359.toml
├── ptest_2dcffc4f000d924e.stderr
├── ptest_2dcffc4f000d924e.stdout
├── ptest_2dcffc4f000d924e.toml
├── ptest_32870705e39ad648.stderr
├── ptest_32870705e39ad648.stdout
├── ptest_32870705e39ad648.toml
├── ptest_32e159e8f043025.stderr
├── ptest_32e159e8f043025.stdout
├── ptest_32e159e8f043025.toml
├── ptest_33a4632005ea6e7f.stderr
├── ptest_33a4632005ea6e7f.stdout
├── ptest_33a4632005ea6e7f.toml
├── ptest_3528aa3d0794ba5b.stderr
├── ptest_3528aa3d0794ba5b.stdout
├── ptest_3528aa3d0794ba5b.toml
├── ptest_36127172d1c48ad1.stderr
├── ptest_36127172d1c48ad1.stdout
├── ptest_36127172d1c48ad1.toml
├── ptest_365b1525fed70635.stderr
├── ptest_365b1525fed70635.stdout
├── ptest_365b1525fed70635.toml
├── ptest_36ff749946aa7b76.stderr
├── ptest_36ff749946aa7b76.stdout
├── ptest_36ff749946aa7b76.toml
├── ptest_38c83409ee57e2af.stderr
├── ptest_38c83409ee57e2af.stdout
├── ptest_38c83409ee57e2af.toml
├── ptest_391fb71023fbe78f.stderr
├── ptest_391fb71023fbe78f.stdout
├── ptest_391fb71023fbe78f.toml
├── ptest_39a4ecaff3909961.stderr
├── ptest_39a4ecaff3909961.stdout
├── ptest_39a4ecaff3909961.toml
├── ptest_39b4326562c3f75f.stderr
├── ptest_39b4326562c3f75f.stdout
├── ptest_39b4326562c3f75f.toml
├── ptest_3a8ed471ff49be49.stderr
├── ptest_3a8ed471ff49be49.stdout
├── ptest_3a8ed471ff49be49.toml
├── ptest_3b5b6fd2802ba8f9.stderr
├── ptest_3b5b6fd2802ba8f9.stdout
├── ptest_3b5b6fd2802ba8f9.toml
├── ptest_3bed5866e590e62a.stderr
├── ptest_3bed5866e590e62a.stdout
├── ptest_3bed5866e590e62a.toml
├── ptest_3f0c3a89d3fcf7d3.stderr
├── ptest_3f0c3a89d3fcf7d3.stdout
├── ptest_3f0c3a89d3fcf7d3.toml
├── ptest_3fe14fdeb5bf19de.stderr
├── ptest_3fe14fdeb5bf19de.stdout
├── ptest_3fe14fdeb5bf19de.toml
├── ptest_404fbc2fe3e5c85.stderr
├── ptest_404fbc2fe3e5c85.stdout
├── ptest_404fbc2fe3e5c85.toml
├── ptest_458d0cef9ea1a5b9.stderr
├── ptest_458d0cef9ea1a5b9.stdout
├── ptest_458d0cef9ea1a5b9.toml
├── ptest_469e79a86c2c874f.stderr
├── ptest_469e79a86c2c874f.stdout
├── ptest_469e79a86c2c874f.toml
├── ptest_4728f2d14d31f2ff.stderr
├── ptest_4728f2d14d31f2ff.stdout
├── ptest_4728f2d14d31f2ff.toml
├── ptest_4805a91da5df26.stderr
├── ptest_4805a91da5df26.stdout
├── ptest_4805a91da5df26.toml
├── ptest_4974d70325cb7550.stderr
├── ptest_4974d70325cb7550.stdout
├── ptest_4974d70325cb7550.toml
├── ptest_4b0ed60c44c669f.stderr
├── ptest_4b0ed60c44c669f.stdout
├── ptest_4b0ed60c44c669f.toml
├── ptest_4b30f7de50929327.stderr
├── ptest_4b30f7de50929327.stdout
├── ptest_4b30f7de50929327.toml
├── ptest_4b538407f6a872e8.stderr
├── ptest_4b538407f6a872e8.stdout
├── ptest_4b538407f6a872e8.toml
├── ptest_4b7165c936488151.stderr
├── ptest_4b7165c936488151.stdout
├── ptest_4b7165c936488151.toml
├── ptest_4e899e9b065acc8f.stderr
├── ptest_4e899e9b065acc8f.stdout
├── ptest_4e899e9b065acc8f.toml
├── ptest_4fd72fa9235ffc80.stderr
├── ptest_4fd72fa9235ffc80.stdout
├── ptest_4fd72fa9235ffc80.toml
├── ptest_4ff72fb4d6bc110e.stderr
├── ptest_4ff72fb4d6bc110e.stdout
├── ptest_4ff72fb4d6bc110e.toml
├── ptest_514bf873279385ba.stderr
├── ptest_514bf873279385ba.stdout
├── ptest_514bf873279385ba.toml
├── ptest_52961e9e4d3030fc.stderr
├── ptest_52961e9e4d3030fc.stdout
├── ptest_52961e9e4d3030fc.toml
├── ptest_55383760e4618c41.stderr
├── ptest_55383760e4618c41.stdout
├── ptest_55383760e4618c41.toml
├── ptest_56d755ade90650de.stderr
├── ptest_56d755ade90650de.stdout
├── ptest_56d755ade90650de.toml
├── ptest_5709b91eb3610886.stderr
├── ptest_5709b91eb3610886.stdout
├── ptest_5709b91eb3610886.toml
├── ptest_57a5aac99c0c821c.stderr
├── ptest_57a5aac99c0c821c.stdout
├── ptest_57a5aac99c0c821c.toml
├── ptest_581533c37ac03853.stderr
├── ptest_581533c37ac03853.stdout
├── ptest_581533c37ac03853.toml
├── ptest_585bdfd3218af4a0.stderr
├── ptest_585bdfd3218af4a0.stdout
├── ptest_585bdfd3218af4a0.toml
├── ptest_5ba3cfebbb42c1f9.stderr
├── ptest_5ba3cfebbb42c1f9.stdout
├── ptest_5ba3cfebbb42c1f9.toml
├── ptest_5bf846977eb5a96e.stderr
├── ptest_5bf846977eb5a96e.stdout
├── ptest_5bf846977eb5a96e.toml
├── ptest_5c5f8c58460e0026.stderr
├── ptest_5c5f8c58460e0026.stdout
├── ptest_5c5f8c58460e0026.toml
├── ptest_5d72b8a5ba66436b.stderr
├── ptest_5d72b8a5ba66436b.stdout
├── ptest_5d72b8a5ba66436b.toml
├── ptest_5eac3027be1d2909.stderr
├── ptest_5eac3027be1d2909.stdout
├── ptest_5eac3027be1d2909.toml
├── ptest_607792764dd84355.stderr
├── ptest_607792764dd84355.stdout
├── ptest_607792764dd84355.toml
├── ptest_62034c92edbb1244.stderr
├── ptest_62034c92edbb1244.stdout
├── ptest_62034c92edbb1244.toml
├── ptest_631e7c0eadc876e3.stderr
├── ptest_631e7c0eadc876e3.stdout
├── ptest_631e7c0eadc876e3.toml
├── ptest_66a65e6644555c05.stderr
├── ptest_66a65e6644555c05.stdout
├── ptest_66a65e6644555c05.toml
├── ptest_6796295d6420d03a.stderr
├── ptest_6796295d6420d03a.stdout
├── ptest_6796295d6420d03a.toml
├── ptest_69fb8da018a73af3.stderr
├── ptest_69fb8da018a73af3.stdout
├── ptest_69fb8da018a73af3.toml
├── ptest_6abf99c853aede16.stderr
├── ptest_6abf99c853aede16.stdout
├── ptest_6abf99c853aede16.toml
├── ptest_6d64a7584b621832.stderr
├── ptest_6d64a7584b621832.stdout
├── ptest_6d64a7584b621832.toml
├── ptest_6e6893c2c2254622.stderr
├── ptest_6e6893c2c2254622.stdout
├── ptest_6e6893c2c2254622.toml
├── ptest_6eabf01c1fcde44e.stderr
├── ptest_6eabf01c1fcde44e.stdout
├── ptest_6eabf01c1fcde44e.toml
├── ptest_7212f6096d7b2f6c.stderr
├── ptest_7212f6096d7b2f6c.stdout
├── ptest_7212f6096d7b2f6c.toml
├── ptest_74825603975f419c.stderr
├── ptest_74825603975f419c.stdout
├── ptest_74825603975f419c.toml
├── ptest_767aca4b412a3f3e.stderr
├── ptest_767aca4b412a3f3e.stdout
├── ptest_767aca4b412a3f3e.toml
├── ptest_79116932e9ca8b26.stderr
├── ptest_79116932e9ca8b26.stdout
├── ptest_79116932e9ca8b26.toml
├── ptest_7a449fd794fd3993.stderr
├── ptest_7a449fd794fd3993.stdout
├── ptest_7a449fd794fd3993.toml
├── ptest_7b9a096392df2be1.stderr
├── ptest_7b9a096392df2be1.stdout
├── ptest_7b9a096392df2be1.toml
├── ptest_7cad7af690128a39.stderr
├── ptest_7cad7af690128a39.stdout
├── ptest_7cad7af690128a39.toml
├── ptest_7d1cd636566df8cd.stderr
├── ptest_7d1cd636566df8cd.stdout
├── ptest_7d1cd636566df8cd.toml
├── ptest_80cd40f7a3947055.stderr
├── ptest_80cd40f7a3947055.stdout
├── ptest_80cd40f7a3947055.toml
├── ptest_818bdf865ff2e514.stderr
├── ptest_818bdf865ff2e514.stdout
├── ptest_818bdf865ff2e514.toml
├── ptest_825e60e73630f857.stderr
├── ptest_825e60e73630f857.stdout
├── ptest_825e60e73630f857.toml
├── ptest_83b42c3f144d78ba.stderr
├── ptest_83b42c3f144d78ba.stdout
├── ptest_83b42c3f144d78ba.toml
├── ptest_86f826124c5b4511.stderr
├── ptest_86f826124c5b4511.stdout
├── ptest_86f826124c5b4511.toml
├── ptest_8822968d21a463f5.stderr
├── ptest_8822968d21a463f5.stdout
├── ptest_8822968d21a463f5.toml
├── ptest_88f8528f0c592965.stderr
├── ptest_88f8528f0c592965.stdout
├── ptest_88f8528f0c592965.toml
├── ptest_89146337fb6b0967.stderr
├── ptest_89146337fb6b0967.stdout
├── ptest_89146337fb6b0967.toml
├── ptest_8becd3030ba5621c.stderr
├── ptest_8becd3030ba5621c.stdout
├── ptest_8becd3030ba5621c.toml
├── ptest_8cd9b0ae2930d704.stderr
├── ptest_8cd9b0ae2930d704.stdout
├── ptest_8cd9b0ae2930d704.toml
├── ptest_91d7b6efe549ede0.stderr
├── ptest_91d7b6efe549ede0.stdout
├── ptest_91d7b6efe549ede0.toml
├── ptest_91e89705f7a716a7.stderr
├── ptest_91e89705f7a716a7.stdout
├── ptest_91e89705f7a716a7.toml
├── ptest_94d98e7060506df0.stderr
├── ptest_94d98e7060506df0.stdout
├── ptest_94d98e7060506df0.toml
├── ptest_94ed50412bfc177f.stderr
├── ptest_94ed50412bfc177f.stdout
├── ptest_94ed50412bfc177f.toml
├── ptest_97958c59351ef010.stderr
├── ptest_97958c59351ef010.stdout
├── ptest_97958c59351ef010.toml
├── ptest_98d345bf337daf3f.stderr
├── ptest_98d345bf337daf3f.stdout
├── ptest_98d345bf337daf3f.toml
├── ptest_98e04e3185e9174c.stderr
├── ptest_98e04e3185e9174c.stdout
├── ptest_98e04e3185e9174c.toml
├── ptest_992337433f8c6594.stderr
├── ptest_992337433f8c6594.stdout
├── ptest_992337433f8c6594.toml
├── ptest_9ad652110670db05.stderr
├── ptest_9ad652110670db05.stdout
├── ptest_9ad652110670db05.toml
├── ptest_9b2a49fcb2a74cc7.stderr
├── ptest_9b2a49fcb2a74cc7.stdout
├── ptest_9b2a49fcb2a74cc7.toml
├── ptest_9c1d803a17fd05c9.stderr
├── ptest_9c1d803a17fd05c9.stdout
├── ptest_9c1d803a17fd05c9.toml
├── ptest_9d319b2ce5ecd989.stderr
├── ptest_9d319b2ce5ecd989.stdout
├── ptest_9d319b2ce5ecd989.toml
├── ptest_9ece18efb453f48d.stderr
├── ptest_9ece18efb453f48d.stdout
├── ptest_9ece18efb453f48d.toml
├── ptest_a139598e95d06a4b.stderr
├── ptest_a139598e95d06a4b.stdout
├── ptest_a139598e95d06a4b.toml
├── ptest_a689ab7558716dda.stderr
├── ptest_a689ab7558716dda.stdout
├── ptest_a689ab7558716dda.toml
├── ptest_a6bbf53a066c588e.stderr
├── ptest_a6bbf53a066c588e.stdout
├── ptest_a6bbf53a066c588e.toml
├── ptest_a71aaa46984bd23.stderr
├── ptest_a71aaa46984bd23.stdout
├── ptest_a71aaa46984bd23.toml
├── ptest_a78bf581d9095079.stderr
├── ptest_a78bf581d9095079.stdout
├── ptest_a78bf581d9095079.toml
├── ptest_a82ad7ec2e961f84.stderr
├── ptest_a82ad7ec2e961f84.stdout
├── ptest_a82ad7ec2e961f84.toml
├── ptest_a8c541050a307891.stderr
├── ptest_a8c541050a307891.stdout
├── ptest_a8c541050a307891.toml
├── ptest_aba07307b0f70090.stderr
├── ptest_aba07307b0f70090.stdout
├── ptest_aba07307b0f70090.toml
├── ptest_abc83ec759ddab6.stderr
├── ptest_abc83ec759ddab6.stdout
├── ptest_abc83ec759ddab6.toml
├── ptest_add56bbfa6f842d3.stderr
├── ptest_add56bbfa6f842d3.stdout
├── ptest_add56bbfa6f842d3.toml
├── ptest_af29d370729835d8.stderr
├── ptest_af29d370729835d8.stdout
├── ptest_af29d370729835d8.toml
├── ptest_b1cc7b6966ce28b3.stderr
├── ptest_b1cc7b6966ce28b3.stdout
├── ptest_b1cc7b6966ce28b3.toml
├── ptest_b20ec649e4099d19.stderr
├── ptest_b20ec649e4099d19.stdout
├── ptest_b20ec649e4099d19.toml
├── ptest_b4bb07ce512e09ba.stderr
├── ptest_b4bb07ce512e09ba.stdout
├── ptest_b4bb07ce512e09ba.toml
├── ptest_b86c3dd42089b8ae.stderr
├── ptest_b86c3dd42089b8ae.stdout
├── ptest_b86c3dd42089b8ae.toml
├── ptest_b8bfd122ac3a6a7f.stderr
├── ptest_b8bfd122ac3a6a7f.stdout
├── ptest_b8bfd122ac3a6a7f.toml
├── ptest_b9480d5b12bc2158.stderr
├── ptest_b9480d5b12bc2158.stdout
├── ptest_b9480d5b12bc2158.toml
├── ptest_bb087081fad71387.stderr
├── ptest_bb087081fad71387.stdout
├── ptest_bb087081fad71387.toml
├── ptest_bbfc26a93fbe15a7.stderr
├── ptest_bbfc26a93fbe15a7.stdout
├── ptest_bbfc26a93fbe15a7.toml
├── ptest_bc0980c681a1bf6e.stderr
├── ptest_bc0980c681a1bf6e.stdout
├── ptest_bc0980c681a1bf6e.toml
├── ptest_bc3ef3722b915c0a.stderr
├── ptest_bc3ef3722b915c0a.stdout
├── ptest_bc3ef3722b915c0a.toml
├── ptest_bda5e8cec0adaa3d.stderr
├── ptest_bda5e8cec0adaa3d.stdout
├── ptest_bda5e8cec0adaa3d.toml
├── ptest_c0b6a5f5211e052e.stderr
├── ptest_c0b6a5f5211e052e.stdout
├── ptest_c0b6a5f5211e052e.toml
├── ptest_c15429df79ff8a02.stderr
├── ptest_c15429df79ff8a02.stdout
├── ptest_c15429df79ff8a02.toml
├── ptest_c320d2ec8a647bec.stderr
├── ptest_c320d2ec8a647bec.stdout
├── ptest_c320d2ec8a647bec.toml
├── ptest_c5a06187ebc81e63.stderr
├── ptest_c5a06187ebc81e63.stdout
├── ptest_c5a06187ebc81e63.toml
├── ptest_caa4e824b02fa569.stderr
├── ptest_caa4e824b02fa569.stdout
├── ptest_caa4e824b02fa569.toml
├── ptest_cb765650e293bae4.stderr
├── ptest_cb765650e293bae4.stdout
├── ptest_cb765650e293bae4.toml
├── ptest_cf65adc4fe95ba6.stderr
├── ptest_cf65adc4fe95ba6.stdout
├── ptest_cf65adc4fe95ba6.toml
├── ptest_d1571a37ac82a799.stderr
├── ptest_d1571a37ac82a799.stdout
├── ptest_d1571a37ac82a799.toml
├── ptest_d604d143ec99b7fa.stderr
├── ptest_d604d143ec99b7fa.stdout
├── ptest_d604d143ec99b7fa.toml
├── ptest_d7c710df474a3770.stderr
├── ptest_d7c710df474a3770.stdout
├── ptest_d7c710df474a3770.toml
├── ptest_dbc0c8e8c3f9b147.stderr
├── ptest_dbc0c8e8c3f9b147.stdout
├── ptest_dbc0c8e8c3f9b147.toml
├── ptest_dc6b5f21bb23c27.stderr
├── ptest_dc6b5f21bb23c27.stdout
├── ptest_dc6b5f21bb23c27.toml
├── ptest_ddcc15459b874630.stderr
├── ptest_ddcc15459b874630.stdout
├── ptest_ddcc15459b874630.toml
├── ptest_ded586a10b97281e.stderr
├── ptest_ded586a10b97281e.stdout
├── ptest_ded586a10b97281e.toml
├── ptest_e4cf2a922377bee.stderr
├── ptest_e4cf2a922377bee.stdout
├── ptest_e4cf2a922377bee.toml
├── ptest_ee83bc6dc4504743.stderr
├── ptest_ee83bc6dc4504743.stdout
├── ptest_ee83bc6dc4504743.toml
├── ptest_f21d9a563d3e0f10.stderr
├── ptest_f21d9a563d3e0f10.stdout
├── ptest_f21d9a563d3e0f10.toml
├── ptest_f261ab10a0ea20f.stderr
├── ptest_f261ab10a0ea20f.stdout
├── ptest_f261ab10a0ea20f.toml
├── ptest_f2ea3bfaf96e639.stderr
├── ptest_f2ea3bfaf96e639.stdout
├── ptest_f2ea3bfaf96e639.toml
├── ptest_f33fd54762597c23.stderr
├── ptest_f33fd54762597c23.stdout
├── ptest_f33fd54762597c23.toml
├── ptest_f641eabbfb35f76f.stderr
├── ptest_f641eabbfb35f76f.stdout
├── ptest_f641eabbfb35f76f.toml
├── ptest_f79a790e130be075.stderr
├── ptest_f79a790e130be075.stdout
├── ptest_f79a790e130be075.toml
├── ptest_f90d48e69d70b41.stderr
├── ptest_f90d48e69d70b41.stdout
├── ptest_f90d48e69d70b41.toml
├── ptest_ffbdb9af2de10fa.stderr
├── ptest_ffbdb9af2de10fa.stdout
└── ptest_ffbdb9af2de10fa.toml
================================================
FILE CONTENTS
================================================
================================================
FILE: .config/cliff.toml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
# git-cliff ~ default configuration file
# https://git-cliff.org/docs/configuration
#
# Lines starting with "#" are comments.
# Configuration options are organized into tables and keys.
# See documentation for more information on available options.
[changelog]
# changelog header
header = """
<!--
SPDX-FileCopyrightText: 2024 Christina Sørensen
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
# Changelog\n
"""
# template for the changelog body
# https://tera.netlify.app/docs
body = """
{% if version %}\
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
## [unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | upper_first }}
{% for commit in commits %}
- {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
{% endfor %}
{% endfor %}\n
"""
# remove the leading and trailing whitespace from the template
trim = true
# changelog footer
footer = """
"""
[git]
# parse the commits based on https://www.conventionalcommits.org
conventional_commits = true
# filter out the commits that are not conventional
filter_unconventional = true
# process each line of a commit as an individual commit
split_commits = false
# regex for preprocessing the commit messages
commit_preprocessors = [
# { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/orhun/git-cliff/issues/${2}))"}, # replace issue numbers
]
# regex for parsing and grouping commits
commit_parsers = [
{ message = "^feat", group = "Features" },
{ message = "^fix", group = "Bug Fixes" },
{ message = "^docs", group = "Documentation" },
{ message = "^perf", group = "Performance" },
{ message = "^refactor", group = "Refactor" },
{ message = "^style", group = "Styling" },
{ message = "^test", group = "Testing" },
{ message = "^chore\\(release\\): prepare for", skip = true },
{ message = "^chore", group = "Miscellaneous Tasks" },
{ body = ".*security", group = "Security" },
]
# protect breaking changes from being skipped due to matching a skipping commit_parser
protect_breaking_commits = false
# filter out the commits that are not matched by commit parsers
filter_commits = false
# glob pattern for matching git tags
tag_pattern = "v[0-9]*"
# regex for skipping tags
skip_tags = "v0.1.0-beta.1"
# regex for ignoring tags
ignore_tags = ""
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "oldest"
# limit the number of commits included in the changelog.
# limit_commits = 42
================================================
FILE: .config/treefmt.nix
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
{
projectRootFile = "Cargo.toml";
programs = {
nixfmt.enable = true; # nix
statix.enable = true; # nix static analysis
deadnix.enable = true; # find dead nix code
# TODO https://github.com/numtide/treefmt-nix/issues/343
#rustfmt.enable = true; # rust
shellcheck.enable = true; # bash/shell
taplo.enable = true; # toml
yamlfmt.enable = true; # yaml
};
settings = {
formatter = {
shellcheck = {
includes = [
"*.sh"
"./completions/bash/eza"
];
excludes = [ ".envrc" ];
};
taplo.excludes = [ "tests/ptests/*.toml" ];
yamlfmt.excludes = [ "./powertest.yaml" ];
};
};
}
================================================
FILE: .envrc
================================================
if has nix; then
use flake .
fi
================================================
FILE: .git-blame-ignore-revs
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
# This file contains a list of commits that are not likely what you
# are looking for in a blame, such as mass reformatting or renaming.
# You can set this file as a default ignore file for blame by running
# the following command.
#
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
#
# To temporarily not use this file add
# --ignore-revs-file=""
# to your blame command.
#
# The ignoreRevsFile can't be set globally due to blame failing if the file isn't present.
# To not have to set the option in every repository it is needed in,
# save the following script in your path with the name "git-bblame"
# now you can run
# $ git bblame $FILE
# to use the .git-blame-ignore-revs file if it is present.
#
# #!/usr/bin/env bash
# repo_root=$(git rev-parse --show-toplevel)
# if [[ -e $repo_root/.git-blame-ignore-revs ]]; then
# git blame --ignore-revs-file="$repo_root/.git-blame-ignore-revs" $@
# else
# git blame $@
# fi
# treewide rustfmt https://github.com/eza-community/eza/pull/405
0e06409b07f060e3afe1c099c4c54e6504847ee0
# initial powertests https://github.com/eza-community/eza/pull/644/commits
2273e29bc006baeb76795ae40c7b8b76f61c6f26
4f949fc9bbb1e387b489ad841af56e7be448bef3
# Rustfmt related commits
29d009a439f43190ec617080e1afd96773264f81
be0c2d1ba1feebc9ed7b2f24b80619dbf8fdf143
313e602cde89b2ec8089b7588f57f4601579a249
2704e0a8499802b4b79f120349ac3bd41e02c208
c86edc54435a57466204bf41a0166c7b6f687aeb
# Rust edition 2024
37ec91db827823cf32068ab930ffc83b790800b6
================================================
FILE: .github/CODEOWNERS
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
# Lines starting with a '#' are comments.
# Each line is a file pattern followed by one or more owners.
# These owners will be the default owners for everything in the repository.
# * @global-owner1 @global-owner2
# The 'docs/*' pattern will match files like
# 'docs/getting-started.md' but not further nested files like
# 'docs/build-app/troubleshooting.md'.
# docs/* @doc-owner-team
# You can also use email addresses if the user isn't on GitHub.
# *.py admin@example.com
# You can use a '*' at the end of a pattern to match all files
# of a particular type.
# *.* @all-file-types-owner
# Order is important. The last matching pattern has the most precedence.
# This means if a pull request touches both *.js and *.css files,
# it will only request a review from @js-owner, not @css-owner.
# *.js @js-owner
# *.css @css-owner
================================================
FILE: .github/FUNDING.yml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
github: cafkafk
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Report a crash, runtime error, or invalid output in eza
title: 'bug: '
labels: errors
assignees: ''
---
If eza does something unexpected, or its output looks wrong, or it displays an error on the screen, or if it outright crashes, then please include the following information in your report:
- The version of eza being used (`eza --version`)
- The command-line arguments you are using
- Your shell and terminal
- Your operating system and hardware platform
If it’s a crash, please include the full text of the crash that gets printed to the screen. If you’re seeing unexpected behaviour, a screenshot of the issue will help a lot.
---
================================================
FILE: .github/ISSUE_TEMPLATE/compilation_error.md
================================================
---
name: Compilation error
about: Report a problem compiling eza
title: 'ci: '
labels: ''
assignees: ''
---
If eza fails to compile, or if there is a problem during the build process, then please include the following information in your report:
- The exact eza commit you are building (`git rev-parse --short HEAD`)
- The version of rustc you are compiling it with (`rustc --version`)
- Your operating system and hardware platform
- The Rust build target (the _exact_ output of `rustc --print cfg`)
If you are seeing compilation errors, please include the output of the build process.
---
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
#
# SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
# SPDX-FileCopyrightText: 2014 Benjamin Sago
# SPDX-License-Identifier: MIT
blank_issues_enabled: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Request a feature or enhancement to eza
title: 'feat: '
labels: ''
assignees: ''
---
================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question
about: Ask a question about eza
title: ''
labels: question
assignees: ''
---
This should be posted in Q&A in discussions
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
================================================
<!--- Provide a general summary of your changes in the Title above -->
<!--- Make sure you've read CONTRIBUTING.md and CODE_OF_CONDUCT.md -->
<!--- -->
<!--- If suggesting a major new feature or major change, please discuss it in an issue/discussions first -->
<!--- If fixing a bug, IDEALLY there should be an issue describing it with steps to reproduce -->
##### Description
<!--- Describe your changes in detail -->
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
<!--- Consider including potentially useful screenshots of your feature in action -->
##### How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->
================================================
FILE: .github/dependabot.yml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
#
# SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
# SPDX-FileCopyrightText: 2014 Benjamin Sago
# SPDX-License-Identifier: MIT
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "cargo" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
# Workflow files stored in the
# default location of `.github/workflows`
directory: "/"
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/apt.yml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
#
# SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
# SPDX-FileCopyrightText: 2014 Benjamin Sago
# SPDX-License-Identifier: MIT
name: Apt Installation
on:
schedule:
- cron: '0 0 * * *'
push:
branches: [main]
paths:
- 'deb.asc'
- '.github/workflows/apt.yml'
pull_request:
branches: [main]
paths:
- 'deb.asc'
- '.github/workflows/apt.yml'
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
jobs:
apt_installation:
runs-on: ubuntu-latest
steps:
- name: Install eza via apt repo
run: |
wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo tee /etc/apt/trusted.gpg.d/gierens.asc && \
echo "deb http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list && \
sudo apt update && \
sudo apt install -y eza
- name: Run eza
run: eza
- name: Open man page
run: man eza | cat
================================================
FILE: .github/workflows/unit-tests.yml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
name: Unit tests
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: --deny warnings
msrv: '1.90'
jobs:
security_audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: taiki-e/install-action@cargo-deny
- name: Scan for vulnerabilities
run: cargo deny check
check_if_pr:
runs-on: ubuntu-latest
outputs:
is_pr: ${{ steps.check.outputs.is_pr }}
steps:
- name: Check if it's a PR
id: check
run: |
if [ "${{ github.event_name }}" == "pull_request" ]; then
echo "is_pr=true" >> $GITHUB_OUTPUT
else
echo "is_pr=false" >> $GITHUB_OUTPUT
fi
no-merge-commits:
needs: check_if_pr
if: needs.check_if_pr.outputs.is_pr == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Run test
uses: NexusPHP/no-merge-commits@v2.2.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
conventional:
needs: [check_if_pr, no-merge-commits]
name: Conventional Commits
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: webiny/action-conventional-commits@v1.3.0
unit-tests:
needs: conventional
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.rust == 'nightly' }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [msrv, stable, beta, nightly]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- run: rustup toolchain install ${{ matrix.rust == 'msrv' && env.msrv || matrix.rust }} --profile minimal
- uses: Swatinem/rust-cache@v2
- name: Install cargo-hack
uses: nick-fields/retry@v3
with:
timeout_minutes: 5
max_attempts: 5
command: cargo install cargo-hack --locked
- name: Run rustfmt checks
run: cargo fmt --check
- name: Run clippy lints
if: ${{ matrix.os != 'windows-latest' }}
run: cargo clippy -- -D warnings
- name: Run unit tests
run: cargo hack test
unit-tests-freebsd:
needs: conventional
runs-on: ubuntu-22.04
timeout-minutes: 20
continue-on-error: ${{ matrix.rust == 'nightly' }}
strategy:
matrix:
rust: [msrv, stable, beta, nightly]
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Compile
uses: vmactions/freebsd-vm@v1
with:
release: '15.0'
usesh: true
prepare: |
pkg install -y curl git
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain ${{ matrix.rust == 'msrv' && env.msrv || matrix.rust }} --profile minimal -y
. ~/.cargo/env
cargo install cargo-hack
git config --global --add safe.directory /home/runner/work/eza/eza
run: |
set -e
. ~/.cargo/env
export CARGO_TERM_COLOR="always"
export RUSTFLAGS="--deny warnings"
cargo fmt --check
cargo clippy -- -D warnings
cargo hack test
unit-tests-netbsd:
needs: conventional
runs-on: ubuntu-22.04
timeout-minutes: 20
continue-on-error: ${{ matrix.rust == 'nightly' }}
strategy:
matrix:
rust: [msrv, stable, beta, nightly]
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Compile
uses: vmactions/netbsd-vm@v1
with:
release: '10.1'
usesh: true
prepare: |
PATH="/root/.cargo/bin:/usr/pkg/sbin:/usr/pkg/bin:$PATH"
PKG_PATH="https://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/10.1/All/"
export PATH PKG_PATH
/usr/sbin/pkg_add -uu curl git
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain ${{ matrix.rust == 'msrv' && env.msrv || matrix.rust }} --profile minimal -y
. ~/.cargo/env
cargo install cargo-hack
git config --global --add safe.directory /home/runner/work/eza/eza
run: |
set -e
. ~/.cargo/env
export CARGO_TERM_COLOR="always"
export RUSTFLAGS="--deny warnings"
cargo fmt --check
cargo clippy -- -D warnings
cargo hack test
unit-tests-openbsd:
needs: conventional
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Compile
uses: vmactions/openbsd-vm@v1
with:
release: '7.8'
usesh: true
prepare: |
pkg_add rust rust-rustfmt rust-clippy git
cargo install cargo-hack
git config --global --add safe.directory /home/runner/work/eza/eza
run: |
set -e
export CARGO_TERM_COLOR="always"
# Do not treat warnings as failure, since OpenBSD lags behind "rustup" versions.
# https://github.com/rust-lang/rustup/issues/2377
# https://github.com/rust-lang/rustup/issues/2168
# export RUSTFLAGS="--deny warnings"
cargo fmt --check
# cargo clippy -- -D warnings
cargo hack test
flake-check:
needs: conventional
name: Check Nix Flake
runs-on: ubuntu-latest
strategy:
matrix:
checks: [build, formatting, lint, pre-commit-check, test, trycmd]
target: [x86_64-linux]
steps:
- uses: actions/checkout@v6
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@v17
- name: Nix Flake Check
run: nix build .#checks.${{ matrix.target }}.${{ matrix.checks }} -L
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
flake-build:
needs: conventional
name: Build Nix package
# if cross compilation is desired add 'aarch64-linux', 'x86_64-darwin' and 'aarch64-darwin' and fix the flake to support cross compilation.
strategy:
matrix:
target: [x86_64-linux]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@v17
- name: Nix Build
run: nix build .#packages.${{ matrix.target }}.default -L
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/update-dependencies.sh
================================================
#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2025 Christina Sørensen
#
# SPDX-License-Identifier: EUPL-1.2
set -euo pipefail
commit_changes() {
local file_to_check="$1"
local commit_subject="$2"
local commit_body="$3"
# Check if the file has changes staged or unstaged
if ! git diff --quiet --exit-code "$file_to_check"; then
echo "$file_to_check has been updated. Committing changes."
git add "$file_to_check"
printf "%s\n\n%s" "$commit_subject" "$commit_body" | git commit -F -
else
echo "No changes to $file_to_check. Skipping commit."
fi
}
BRANCH_NAME="deps_update_$(date --iso-8601)"
if git rev-parse --verify "$BRANCH_NAME" >/dev/null 2>&1; then
echo "Branch '$BRANCH_NAME' already exists. Checking out."
git switch "$BRANCH_NAME"
else
git switch -c "$BRANCH_NAME"
fi
# 1. Update Cargo dependencies
echo "Checking for Cargo dependency updates..."
# Redirect stderr to stdout to capture cargo's output.
CARGO_OUTPUT=$(cargo update --recursive 2>&1)
UPDATED_CRATES=$(echo "$CARGO_OUTPUT" | grep 'Updating' || true)
commit_changes "Cargo.lock" "build(deps): cargo bump $(date --iso-8601)" "$UPDATED_CRATES"
# 2. Update Nix Flake dependencies
echo "Checking for Nix Flake dependency updates..."
# Use grep -A 2 to capture the 2 lines *after* the match.
FLAKE_OUTPUT=$(nix flake update 2>&1)
UPDATED_FLAKES=$(echo "$FLAKE_OUTPUT" | grep -A 2 'Updated input' || true)
commit_changes "flake.lock" "build(deps): flake bump $(date --iso-8601)" "$UPDATED_FLAKES"
echo "Dependency update process complete."
git status
================================================
FILE: .github/workflows/update-dependencies.yaml
================================================
# SPDX-FileCopyrightText: 2025 Christina Sørensen
#
# SPDX-License-Identifier: EUPL-1.2
name: "Automated Dependency Bump"
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * 4'
jobs:
update-and-create-pr:
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps:
- name: "Checkout repository"
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: "Install Nix"
uses: cachix/install-nix-action@v22
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: "Set up Git credentials"
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: "Run update script"
id: run_script
run: |
chmod +x .github/workflows/update-dependencies.sh
.github/workflows/update-dependencies.sh
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
echo "branch=${BRANCH_NAME}" >> $GITHUB_OUTPUT
- name: "Create Pull Request"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh pr create \
--title "build(deps): Automatic dependency updates for $(date --iso-8601)" \
--body "This PR was automatically generated by a GitHub Action to update crate and flake dependencies. Please review the changes and merge." \
--base main \
--head ${{ steps.run_script.outputs.branch }}
================================================
FILE: .github/workflows/winget.yml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
#
# SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
# SPDX-FileCopyrightText: 2014 Benjamin Sago
# SPDX-License-Identifier: MIT
name: Publish to Winget
on:
release:
types: [released]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: eza-community.eza
installers-regex: '-pc-windows-gnu\.zip$'
token: ${{ secrets.WINGET_TOKEN }}
================================================
FILE: .gitignore
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
# Nix Flake stuff
result
# Generated by nix-pre-commit-hooks
/.pre-commit-config.yaml
# Direnv
.direnv
# Rust stuff
target
# Vagrant stuff
.vagrant
*.log
# Compiled artifacts
# (see devtools/*-package-for-*.sh)
/eza-linux-x86_64
/eza-linux-x86_64-*.zip
/eza-macos-x86_64
/eza-macos-x86_64-*.zip
/eza_*.deb
/MD5SUMS
/SHA1SUMS
# Snap stuff
parts
prime
stage
*.snap
# VHS testing stuff
out.gif
tests/tmp
## Dynamically generated
tests/test_dir
# Miscenallous
.idea
================================================
FILE: .pre-commit-config-non-nix.yaml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
repos:
- repo: local
hooks:
- id: rust-linting
name: Rust linting
description: Run rustfmt on included files
entry: cargo fmt --
types: [file, rust]
language: system
- id: rust-clippy
name: Rust clippy
description: Run clippy on included files
pass_filenames: false
entry: cargo clippy --workspace --all-targets --all-features
types: [file, rust]
language: system
================================================
FILE: CHANGELOG.md
================================================
<!--
SPDX-FileCopyrightText: 2024 Christina Sørensen
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
# Changelog
## [0.23.4] - 2025-10-03
### Bug Fixes
- Update nixpkgs/cargo dependencies
## [0.23.3] - 2025-09-14
### Documentation
- Corrected "user_executable_file" option
### Features
- Update flake inputs
### Miscellaneous Tasks
- Update snapcraft manifest for core24
- Eza v0.23.3 changelogs, version bump
### Build
- Update cargo deps
## [0.23.2] - 2025-09-06
### Miscellaneous Tasks
- Eza v0.23.2 changelogs, version bump
### Styling
- Update nix style
### Build
- Update cargo
- Update flake
## [0.23.1] - 2025-08-31
### Bug Fixes
- Restore unsafe blocks for libc major/minor device id
- `cargo deb` metadata to `LICENSE.txt`
### Documentation
- Improve man page description of flags with default values
- "default behavior" means eza's default behavior, not an option's default value
### Features
- Added completion
### Miscellaneous Tasks
- Eza v0.23.1 changelogs, version bump
### Build
- Cargo bump 2025-07-19
- Flake bump 2025-07-19
## [0.23.0] - 2025-07-18
### Bug Fixes
- [**breaking**] Make --grid work when not in TTY
- [**breaking**] Stdin behavior
### Documentation
- Add `--smart-group` option to README
### Features
- Add icons for changelog and todo files
- Use CHANGES icon for CHANGELOG as well
### Miscellaneous Tasks
- Remove unused dependency
- Eza v0.23.0 changelogs, version bump
## [0.22.1] - 2025-07-12
### Bug Fixes
- Replace default_input_path check with "." check
### Documentation
- "cheks" should be "checks"
### Features
- [**breaking**] Define -d/--treat-dirs-as-files behavior, tests
- Refresh icon set with new glyphs and additions
### Miscellaneous Tasks
- Eza v0.22.0 changelogs, version bump
- Eza v0.22.1 changelogs, version bump
### Build
- Bump phf from 0.11.3 to 0.12.1
- Cargo bump 2025-07-03
- Flake bump 2025-07-03
- Bump windows-sys from 0.59.0 to 0.60.2
### Ci
- Automate dependency updates
## [0.21.6] - 2025-06-26
### Documentation
- Add missing --absolute option to man page
### Features
- Add prettier icon for `.prettierrc.{json,json5,toml,yaml,yml}`
### Miscellaneous Tasks
- Upgrade FreeBSD to 14.3-RELEASE in unit tests workflow
- Eza v0.21.6 changelogs, version bump
### Build
- Bump libc from 0.2.172 to 0.2.174
- Cargo bump 2025-06-26
- Flake bump 2025-06-26
## [0.21.5] - 2025-06-20
### Bug Fixes
- Use OpenBSD 7.7 that has MSRV, instead of 7.6
- Excessive open file descriptors
- Typo
- Impl desirable behaviour for unreadables
- Unreadables format style
- Clippy warnings
- Missing word in comment
### Miscellaneous Tasks
- Eza v0.21.5 changelogs, version bump
### Styling
- Fix various clippy warnings for rust 1.86
- Remove unnecessary semicolon
## [0.21.4] - 2025-05-30
### Bug Fixes
- Escape spaces in file path to make them work correctly
- List inside working dir with `--list-dirs` and no path passed
- Ignore incorrect Unicode path instead of crashing on Windows
### Miscellaneous Tasks
- Add Visual Studio icon for *.suo
- Add swift icon for *.xcplayground
- Add dropbox icon
- Eza v0.21.4 changelogs, version bump
### Refactor
- Clippy lints
### Styling
- Update formatting
### Build
- Flake bump 2025-05-29
- Cargo bump 2025-05-29
- 1.81 -> 1.82
## [0.21.3] - 2025-05-02
### Features
- Add support for .ipynb file icons
### Miscellaneous Tasks
- Eza v0.21.3 changelogs, version bump
### Styling
- Unbreak formatting
### Build
- Bump DeterminateSystems/nix-installer-action from 16 to 17
- Cargo bump 2025-05-01
- Flake bump 2025-05-01
## [0.21.2] - 2025-04-25
### Bug Fixes
- Make clippy work again
### Documentation
- Update Fedora install instructions for Fedora 42
- Specify perf improvements
### Features
- Remove dependency on once_cell
### Miscellaneous Tasks
- Add icon for '.stowrc' files
- Eza v0.21.2 changelogs, version bump
### Performance
- Use a hashmap when possible for file extension matching
### Styling
- Clean up glob matching code
### Build
- Bump uutils_term_grid from 0.6.0 to 0.7.0
## [0.21.1] - 2025-04-19
### Bug Fixes
- Don’t truncate branch name
- Hi extension icon wasnt working as it was in the wrong aray
### Documentation
- Update README.md
- Add crates.io link for README.md badge
### Miscellaneous Tasks
- Add MS DOS icon for *.com
- Add ruby icon for config.ru, Gemfile, Gemfile.lock, procfile, rake, rakefile and change ruby icon
- Add python icon for *.pxd and *.pyx
- Add markdown icon for *.mdx
- Add fsharp icon for *.f# and *.fsscript
- Add clojure icon for *.cljc and *.edn
- Eza v0.21.1 changelogs, version bump
### Build
- Flake bump 2025-04-19
- Cargo bump 2025-04-19
## [0.21.0] - 2025-03-31
### Bug Fixes
- Flake bump 2025-03-20
- Remove unnescesarry unsafe blocks for libc major/minor device id
- Unwrap -> expect on libc deviceid calls
- Formatting issue
- Fix unused PermissionsPlus fields
### Miscellaneous Tasks
- Eza v0.21.0 changelogs, version bump
### Build
- Cargo deps 2025-03-20
- [**breaking**] Change MSRV 1.78.0 -> 1.81.0
- Bump flake deps 2025-03-30
- Bump cargo deps 2025-03-30
## [0.20.24] - 2025-03-13
### Bug Fixes
- Make temp files visible on white background
### Documentation
- More precise temp files color description
### Features
- Add `.exercism` folder icon
- Add `.ocamlinit` icon
- Add `.opam` folder icon
### Miscellaneous Tasks
- Add gcloud icon for .gcloudignore
- Add vim icon for .gvimrc, _vimrc and _gvimrc
- Add fennel icon for ~/.fennelrc and ~/.config/fennel/fennelrc
- Eza v0.20.24 changelogs, version bump
### Build
- Bump once_cell from 1.20.3 to 1.21.0
- Bump terminal_size from 0.4.1 to 0.4.2
- Bump serde from 1.0.218 to 1.0.219
- Bump chrono from 0.4.39 to 0.4.40
## [0.20.23] - 2025-02-27
### Bug Fixes
- Add Pixi installation instructions
### Miscellaneous Tasks
- Eza v0.20.23 changelogs, version bump
### Build
- Bump libc from 0.2.169 to 0.2.170
- Bump serde from 1.0.217 to 1.0.218
- Bump log from 0.4.25 to 0.4.26
- Bump trycmd from 0.15.8 to 0.15.9
### Ci
- Remove magic nix cache
## [0.20.22] - 2025-02-20
### Features
- Add prettier icon for *.prettierignore
- Add icon for *.hrl
- Add photoshop icon for *.psb
- Add eslint icon for .eslintignore
- Add renovate icon for renovate.json
- Add elixir icon for *.eex, *.leex and mix.lock
### Miscellaneous Tasks
- Eza v0.20.22 changelogs, version bump
### Build
- Bump once_cell from 1.20.2 to 1.20.3
## [0.20.21] - 2025-02-13
### Bug Fixes
- Start publishing libgit arm builds
### Miscellaneous Tasks
- Eza v0.20.21 changelogs, version bump
### Build
- Add libgit alternative for arm builds
## [0.20.20] - 2025-02-07
### Bug Fixes
- Make `flake.lock` icon the nix logo
### Miscellaneous Tasks
- Eza v0.20.20 changelogs, version bump
## [0.20.19] - 2025-01-30
### Bug Fixes
- Update MSRV to 1.78 to solve rust malfunction
- Rustc false dead code positives
- Rustc false positives in tests
- Regression in theme config location, simplify path
- Wrong file name for Brewfile
### Documentation
- Add note regarding ci msrv update
### Features
- Add `.norg` icon
### Miscellaneous Tasks
- Eza v0.20.19 changelogs, version bump
### Build
- Bump dirs from 5.0.1 to 6.0.0
- Bump NexusPHP/no-merge-commits from 2.1.0 to 2.2.1
- Bump flake
- Bump cargo
### Ci
- Fix and unify msrv and add matrix to free/netbsd
## [0.20.18] - 2025-01-23
### Bug Fixes
- Support additional yaml file extension, clippy
### Miscellaneous Tasks
- Eza v0.20.18 changelogs, version bump
### Build
- Cargo bump 2025-01-23
- Flake bump 2025-01-23
### Ci
- Use rust 1.74 instead of latest via rustup
## [0.20.17] - 2025-01-16
### Features
- Add editorconfig icon for .editorconfig
### Miscellaneous Tasks
- Eza v0.20.17 changelogs, version bump
### Build
- Cargo bump 2025-01-16
- Flake bump 2025-01-16
## [0.20.16] - 2025-01-09
### Features
- Add brew icon for brewfile and brewfile.lock.json
### Miscellaneous Tasks
- Eza v0.20.16 changelogs, version bump
### Build
- Update flake inputs 2025-01-08
- Update cargo inputs 2025-01-08
- Bump git2 from 0.19.0 to 0.20.0
## [0.20.15] - 2025-01-02
### Features
- Add icons from nerd fonts 3.3.0 release & more
- Add new icons, extensive list
### Miscellaneous Tasks
- Eza v0.20.15 changelogs, version bump
### Build
- We switch to our own fork of natord
### Ci
- Bump FreeBSD / NetBSD versions.
## [0.20.14] - 2024-12-26
### Bug Fixes
- ...those pesky workflow targets
- Remove separate bsd tests
- Remove audit workflow
### Features
- Audit checks in main CI
### Miscellaneous Tasks
- Eza v0.20.14 changelogs, version bump
### Refactor
- Move eza, trycmd packages
- Move BSD unit tests to main flow
### Styling
- Format workflows
- Ci checks formatted
### Build
- Cargo 2024-12-25
### Ci
- Simplify
- Let's just always run em'
- Only run big checks on PRs to main
- Faster flake checks... maybe?
- Flakes on latest ubuntu
- Only do no-merge-commits on PR
## [0.20.13] - 2024-12-18
### Bug Fixes
- Pre-commit-hooks.nix trying to be too clever
- Remove stray description (originally from `--decay-mode`)
### Miscellaneous Tasks
- Eza v0.20.13 changelogs, version bump
### Build
- Update crate deps Mon Dec 16
- Update flake deps Mon Dec 16
### Ci
- Update to PRESENT DAY, PRESENT TIME
## [0.20.12] - 2024-12-11
### Bug Fixes
- Add unicode-3.0 license
- Use safe terminal_size_of
- Use terminal_size_of with borrowed raw handle
### Features
- Move MSRV to 1.74 and deep bump cargo deps
- Add Gleam lang icon
### Miscellaneous Tasks
- Eza v0.20.12 changelogs, version bump
### Testing
- Regen for 1.74
### Build
- Bump terminal_size from 0.3.0 to 0.4.1
### Ci
- Openbsd 7.4 -> 7.6
## [0.20.11] - 2024-12-05
### Bug Fixes
- Bump libc from 0.2.165 to 0.2.167
### Miscellaneous Tasks
- Eza v0.20.11 changelogs, version bump
## [0.20.10] - 2024-11-28
### Bug Fixes
- People dislike the phrasing "maintained" on hackernews
### Miscellaneous Tasks
- Eza v0.20.10 changelogs, version bump
### Build
- Bump libc from 0.2.164 to 0.2.165
## [0.20.9] - 2024-11-21
### Bug Fixes
- Remove newline after doc comment of `regen` recipe
### Miscellaneous Tasks
- Eza v0.20.9 changelogs, version bump
### Refactor
- List all recipes by default
- Group related recipes
### Build
- Bump libc from 0.2.162 to 0.2.164
- Bump DeterminateSystems/nix-installer-action from 15 to 16
## [0.20.8] - 2024-11-14
### Bug Fixes
- Cross-compiling by updating to libz-sys to 1.1.20
### Miscellaneous Tasks
- Eza v0.20.8 changelogs, version bump
### Build
- Bump palette from 0.7.5 to 0.7.6
- Bump libc from 0.2.161 to 0.2.162
- Bump serde from 1.0.214 to 1.0.215
## [0.20.7] - 2024-11-07
### Bug Fixes
- Palette v0.7.6 -> v0.7.5
### Miscellaneous Tasks
- Update package.exclude list in Cargo.toml
- Eza v0.20.7 changelogs, version bump
### Build
- Bump DeterminateSystems/nix-installer-action from 14 to 15
- Bump serde_norway from 0.9.38 to 0.9.39
- Bump trycmd from 0.15.7 to 0.15.8
## [0.20.6] - 2024-10-31
### Bug Fixes
- Changelog spelling
### Documentation
- Fix typo `--get-repos-no-status` to `--git-repos-no-status`
### Miscellaneous Tasks
- Eza v0.20.6 changelogs, version bump
### Build
- Bump serde from 1.0.210 to 1.0.214
## [0.20.5] - 2024-10-25
### Bug Fixes
- Ensure nested tree parts align under item name
- Remove depricated `chrono` `from_timestamp_opt`
### Miscellaneous Tasks
- Update generated test files
- Eza v0.20.5 changelogs, version bump
### Build
- Bump libc from 0.2.159 to 0.2.161
- Chrono v0.4.34 -> v0.4.38
## [0.20.4] - 2024-10-18
### Bug Fixes
- Filetype, coloring for executables and folder
### Miscellaneous Tasks
- Eza v0.20.4 changelogs, version bump
## [0.20.3] - 2024-10-17
### Bug Fixes
- Git cliff docs issue
### Miscellaneous Tasks
- Eza v0.20.3 changelogs, version bump
### Performance
- Reuse filetype from DirEntry
## [0.20.2] - 2024-10-09
### Bug Fixes
- Colors in old ms command prompt
- Bring help text in line with available flags
- Do not print parent filename with --absolute=on
### Miscellaneous Tasks
- Add fox installation option
- Eza v0.20.2 changelogs, version bump
### Build
- Bump once_cell from 1.20.1 to 1.20.2
## [0.20.1] - 2024-10-03
### Bug Fixes
- Release recipe
- Support passing multiple options for generate-trycmd-test.sh
- Move options into flags
- Rustfmt errors
### Documentation
- Fix cross-references
- Update file type colors
- Document that exit 13 == permission denied
### Features
- Update just, add more formats
- Recursively walk symlinks pointing at dirs
- Add --follow-symlinks option
- Add autocomplete for --follow-symlinks
- Show directories last
### Miscellaneous Tasks
- Eza v0.20.1 changelogs, version bump
### Testing
- Add cases for -T and --follow-symlinks
- Regenerate tests broken by line number changes
### Build
- Fix manual version
- Bump once_cell from 1.19.0 to 1.20.1
### Ci
- Remove flakehub, flakestry publish
## [0.20.0] - 2024-09-26
### Bug Fixes
- Flake trycmd bug
- Pre-commit-hook taplo bug
### Documentation
- Add link to eza-themes repository in readme
- Cargo install dir inaccurate
- Add x-cmd method to install eza
- Adding a testing infos file to guide everyone through tests
### Features
- Add `opml` file extension
- Add a regen rule
- [**breaking**] Relicensed to EUPL-1.2
### Miscellaneous Tasks
- Eza v0.20.0 changelogs, version bump
### Refactor
- Move some files to `.config`
- Release scripts use `.config`
- Relicense to EUPL-1.2
### Styling
- Switch to nixfmt rfc style, format tree
- Remove blank line
### Testing
- Regenerate integration tests
- Regenerate tests
### Build
- Darwin devShell resuse eza deps
- Ensure flake inputs aren't duplicated'
- Remove semnix deps
- Bump flake lock 2024-09-26
- Removed unused flake follows
- Add cargo to devShell
- Add clippy to devShell
- Use toolchain in devShell
- Bump libc from 0.2.158 to 0.2.159
- Bump unicode-width from 0.1.13 to 0.2.0
### Ci
- Full nix3 command output in logs
- Allow EUPL-1.2
- Unblock windows
## [0.19.4] - 2024-09-18
### Bug Fixes
- Remove non_alpha from percent encoding to fix hyprlinks
### Features
- Pass from serde_yaml to serde_norway
### Miscellaneous Tasks
- Eza v0.19.4 changelogs, version bump
## [0.19.3] - 2024-09-12
### Bug Fixes
- Convert empty space to %20 when render hyperlinks
- Split commit workflows and run no-merge-commits only on PRs
- Correct naming of commit related workflows
### Documentation
- Better version bump commit summary
### Features
- Add no-merge-commits job to commits workflow
### Miscellaneous Tasks
- Rename justfile
- Eza v0.19.3 changelogs, version bump
### Refactor
- Rename conventional-commits workflow to commits
### Build
- Bump DeterminateSystems/nix-installer-action from 13 to 14
- Bump DeterminateSystems/flake-checker-action from 8 to 9
- Bump actions/checkout from 3 to 4
- Bump libc from 0.2.155 to 0.2.158
- Bump nu-ansi-term from 0.50.0 to 0.50.1
## [0.19.2] - 2024-09-05
### Bug Fixes
- Remove unnecessary map and make clippy happy
- Adjust grid details for CI tests
- Imports and merge conflicts
- Rustfmt issues
- Clippy issues
- Revise UiStyles::plain to have no style at all
- Pr reviews fixes for theme file
- Selectively filter files when recursing #1101
- Fix typo in FromOverride<FileKinds> impl
- Add serde(default) to StyleOverride.foreground/background fields
### Documentation
- Add Flox to INSTALL.md
- Add ic for icon color to colors man page
- Add further documentation about theme file
### Features
- Add c++ module interfaces as source file types
- Add icon field to UiStyles
- Add ic key for UiStyles icon in set_exa
- Add None as icon value in UiStyles.default_theme
- Add icon function to FileNameColours trait
- Implement FileNameColours.icon for Theme
- Adjust FileName.paint to consider possible icon color
- Begin implementation of config file
- Allow writing default theme.yml file for eventual config file implementation
- Theme file configuration base
- Add IconOverrides struct and UiStyles.icon_overrides
- Add icon_override function to FileNameColours trait
- Implement FileNameColours.icon_override for Theme
- Handle icon overrides in FileName.paint
- Add example config for icon_overrides
- Rename UiStyles.icon_override to icons and add Style field
- Add shorthand aliases to StyleOverride variables
- Add custom deserialize_color and use in StyleOverride
- Outsource color_from_str function to make it testable
### Miscellaneous Tasks
- Release eza v0.19.2
### Refactor
- Simplify icon style setting in FileName.paint
- Make every setting optional with override layer
- Simplify sample theme.yml
- Formatting for rustfmt macro
### Styling
- Fix clippy issue in FileName.paint
- Apply rustfmt
- Simplify from_str_radix calls to please clippy
### Testing
- Add unit tests for color_from_str function
### Build
- Bump windows-sys from 0.52.0 to 0.59.0
### Ci
- Allow MPL-2.0
## [0.19.1] - 2024-08-28
### Bug Fixes
- FreeBSD build.
- Typo
### Miscellaneous Tasks
- Release eza v0.19.1
### Build
- Bump uzers from 0.12.0 to 0.12.1
## [0.19.0] - 2024-08-08
### Bug Fixes
- [**breaking**] Implement `EZA_GRID_ROWS` grid details view minimum rows threshold
### Miscellaneous Tasks
- Release eza v0.19.0
## [0.18.24] - 2024-08-03
### Bug Fixes
- 1.80 breakage from time crate
### Miscellaneous Tasks
- Release eza v0.18.24
### Build
- Bump time dependency
## [0.18.23] - 2024-07-25
### Bug Fixes
- Disable broken freebsd tests
### Documentation
- Clear up confusion around ls
### Miscellaneous Tasks
- Release eza v0.18.23
### Build
- Bump log from 0.4.21 to 0.4.22
- Bump DeterminateSystems/nix-installer-action from 12 to 13
- Bump plist from 1.6.1 to 1.7.0
## [0.18.22] - 2024-07-18
### Bug Fixes
- Use NaiveDateTime::from_timestamp_opt instead of panicky From impl
### Features
- Add non-nix pre-commit rustfmt and clippy hooks
### Miscellaneous Tasks
- Release eza v0.18.22
### Ci
- Bump FreeBSD version.
## [0.18.21] - 2024-07-01
### Bug Fixes
- Fix missing line breaks in _eza
### Miscellaneous Tasks
- Release eza v0.18.21
## [0.18.20] - 2024-06-27
### Features
- Add --no-|show-symlinks flags for filtering output
### Miscellaneous Tasks
- Release eza v0.18.20
## [0.18.19] - 2024-06-20
### Bug Fixes
- Ship release binaries
### Miscellaneous Tasks
- Release eza v0.18.19
### Build
- Bump git2 from 0.18.3 to 0.19.0
## [0.18.18] - 2024-06-13
### Features
- Extend deny check in audit workflow to all
- Add deny.toml and workflow file to audit workflow paths
- Run on all features by default
- Ask for shell and terminal in bug report template
### Miscellaneous Tasks
- Release eza v0.18.18
### Build
- Bump unicode-width from 0.1.12 to 0.1.13
- Bump DeterminateSystems/flake-checker-action from 7 to 8
- Bump DeterminateSystems/nix-installer-action from 11 to 12
## [0.18.17] - 2024-06-05
### Features
- Add icon for Nushell extension
### Miscellaneous Tasks
- Release eza v0.18.17
### Build
- Bump trycmd from 0.15.1 to 0.15.2
- Bump libc from 0.2.154 to 0.2.155
## [0.18.16] - 2024-05-16
### Bug Fixes
- Change windows-only imports to be windows-only
### Documentation
- Replace decay with color-scale
- Update INSTALL.md
- Fix typo in `INSTALL.md`
- Use 3 columns for packaging status badge
### Miscellaneous Tasks
- Release eza v0.18.16
### Build
- Bump DeterminateSystems/flake-checker-action from 5 to 7
- Bump DeterminateSystems/nix-installer-action from 10 to 11
## [0.18.15] - 2024-05-09
### Bug Fixes
- Correct command for latest tag in deb-package.sh
### Documentation
- Add how to find man pages in terminal and online. Partly fixes #967
- Correct heading levels in markdown
- Move heading out of collapsed section
- Add some keywords for benefit of ctrl-f
### Features
- Return to original commit at the end of deb-package.sh
- Add optional tag argument to deb-package.sh
### Miscellaneous Tasks
- Release eza v0.18.15
## [0.18.14] - 2024-05-02
### Features
- Add icon for "cron.minutely" directory
### Miscellaneous Tasks
- Release eza v0.18.14
### Build
- Bump uzers from 0.11.3 to 0.12.0
- Bump libc from 0.2.153 to 0.2.154
- Bump unicode-width from 0.1.11 to 0.1.12
- Bump palette from 0.7.5 to 0.7.6
## [0.18.13] - 2024-04-25
### Bug Fixes
- Allow unused imports for freebsd
- Checking for deref flag in file_name
### Features
- Add scheme filetype and icons
- Generate completion/manpage tarballs on release
### Miscellaneous Tasks
- Release eza v0.18.13
## [0.18.11] - 2024-04-19
### Bug Fixes
- Fix clippy lints
- Enable the rule only for NetBSD.
- Build aarch64, arm without libgit2
### Miscellaneous Tasks
- Release eza v0.18.11
### Ci
- Bump NetBSD version to 10.0
## [0.18.10] - 2024-04-11
### Bug Fixes
- Bump trycmd from 0.15.0 to 0.15.1
### Miscellaneous Tasks
- Release eza v0.18.10
### Build
- Bump nu-ansi-term from 0.49.0 to 0.50.0
## [0.18.9] - 2024-03-27
### Features
- Switch out ansiterm crate for nu_ansi_term
### Miscellaneous Tasks
- Release eza v0.18.9
### Build
- Bump DeterminateSystems/nix-installer-action from 9 to 10
- Bump plist from 1.6.0 to 1.6.1
- Bump rayon from 1.9.0 to 1.10.0
- Bump git2 from 0.18.2 to 0.18.3
## [0.18.8] - 2024-03-21
### Bug Fixes
- Avoid deprecation warnings
- Rustfmt issues
### Features
- Add fennel lang icon and associations
### Miscellaneous Tasks
- Release eza v0.18.8
## [0.18.7] - 2024-03-14
### Bug Fixes
- Bugfix to resolve absolute paths that are not symlinks
### Features
- Add filetype and icon for .hh extension
### Miscellaneous Tasks
- Release eza v0.18.7
## [0.18.6] - 2024-03-06
### Bug Fixes
- NetBSD did not have fflagstostr and as such did not build properly
- Fix total-size option
- Add fortran to source filetypes
- Fix absolute_path() for broken symlinks
- Update line numbers in panic messages in tests
### Features
- Add filetype and icon for age
- Adding icons for graphql extensions
- Add nim icons
- Use fsharp icon for fsproj files (similar to cs/csproj)
- Add new icons, diverse selection
- Adding more haskell related icons
- Adding more icons for docker specific files
- Adding more dockerfile icons
- Add --absolute flag
- Add shell completions for --absolute flag
### Miscellaneous Tasks
- Cleaning dirs
- Release eza v0.18.6
### Refactor
- Port grid and grid-details to new uutils-term-grid
### Testing
- Add integration tests and powertests for --absolute flag
- Add directory symlink to tests/itest/
### Build
- Bump log from 0.4.20 to 0.4.21
- Bump rayon from 1.8.1 to 1.9.0
### Ci
- Add NetBSD to CI.
- Fix warnings.
- Add FreeBSD to CI.
- Add OpenBSD to CI.
## [0.18.5] - 2024-02-29
### Bug Fixes
- Bump palette from 0.7.4 to 0.7.5
### Miscellaneous Tasks
- Release eza v0.18.5
## [0.18.4] - 2024-02-22
### Bug Fixes
- Classification width should be taken into account with -F=auto
### Miscellaneous Tasks
- Release eza v0.18.4
### Build
- Bump libc from 0.2.152 to 0.2.153
- Bump chrono from 0.4.33 to 0.4.34
- Bump trycmd from 0.14.20 to 0.15.0
## [0.18.3] - 2024-02-15
### Bug Fixes
- Duplicates in shell completions
### Documentation
- Add target arch to deb PPA installation for strict apt environments
### Miscellaneous Tasks
- Release eza v0.18.3
### Performance
- Do not pre-compute MountInfo to reduce readlink calls
### Refactor
- Use #[default] attribute instead of custom impl for enums
## [0.18.2] - 2024-02-08
### Bug Fixes
- Update libgit2 to 1.7.2
### Miscellaneous Tasks
- Release eza v0.18.2
## [0.18.1] - 2024-02-08
### Bug Fixes
- Change shasum for main commit
### Documentation
- Add manual installation section
### Miscellaneous Tasks
- Release eza v0.18.1
### Refactor
- Replace scoped_threadpool with rayon
### Build
- Add empty rustfmt to ensure project specific settings
- Bump libc from 0.2.151 to 0.2.152
- Bump nick-fields/retry from 2 to 3
- Bump palette from 0.7.3 to 0.7.4
- Bump webiny/action-conventional-commits from 1.2.0 to 1.3.0
## [0.18.0] - 2024-02-01
### Features
- [**breaking**] Add --classify=always,auto,never
### Miscellaneous Tasks
- Remove rustfmt config file that has a nightly only option in favor of rustfmt skip directive which is already in place
- Fix small typo in pull request template
- Release eza v0.18.0
### Refactor
- Change cast to coertion, remove rustfmt skip and clippy lint ignore directives
### Testing
- Regenerate classification related tests
### Build
- Change flake inputs
## [0.17.3] - 2024-01-25
### Bug Fixes
- Remove version testing
### Miscellaneous Tasks
- Avoid `unwrap()` by changing filter-then-map to `filter_map`
- Release eza v0.17.3
### Build
- Bump shlex from 1.2.0 to 1.3.0
- Bump chrono from 0.4.31 to 0.4.33
- Bump trycmd from 0.14.19 to 0.14.20
## [0.17.2] - 2024-01-20
### Bug Fixes
- Crash using --git-repos on unreadable dir
- Crash using --git-repos on unreadable dir
### Miscellaneous Tasks
- Release eza v0.17.2
### Build
- Add cargo-bump for releasing
## [0.17.1] - 2024-01-11
### Bug Fixes
- Offset widths in grid mode with utf8 filenames
- Format the code
- Unformat the code where needed
- Format the code correctly this time
- Redo everything from scratch
- Stack overflow when '-laaR' are used
- Stack overflow when '-laaR' is used
### Features
- Add Fortran icons
### Miscellaneous Tasks
- Adding blake3 to checksums
- Release eza v0.17.1
### Testing
- Regenerate version tests... and others
- Updated tests to fit new features
### Build
- Add b3sum to devshell deps
## [0.17.0] - 2023-12-13
### Bug Fixes
- Add color scale mode to the bash completions
- Add color scale mode to the fish completions
- Quote symbolic links correctly when their destinations contain spaces
### Documentation
- Modify documentation about custom time style
### Features
- Add BSD file flags
- Add Windows file attributes
- [**breaking**] Support different custom time style for non-recent/recent files
### Miscellaneous Tasks
- Release eza v0.17.0
### Testing
- Regen powertests
- Regenerate
- Add tests for non-recent/recent custom time style
- Update powertest expected help message output
### Build
- Update `flake.lock`
- Bump DeterminateSystems/nix-installer-action from 8 to 9
- Bump once_cell from 1.18.0 to 1.19.0
- Bump libc from 0.2.150 to 0.2.151
### Ci
- Remove labeler
## [0.16.3] - 2023-12-07
### Bug Fixes
- Add bare git_repos fn if feature git is disabled
- Fixing color of size unit
- Color-scale broked size for colors
### Miscellaneous Tasks
- Release eza v0.16.3
### Testing
- Fix powertests post-release
### Build
- Bump percent-encoding from 2.3.0 to 2.3.1
- Bump actions/labeler from 4 to 5
## [0.16.2] - 2023-11-30
### Bug Fixes
- Calculate width correctly when using grid icons & classify
- Fix the windows build
### Miscellaneous Tasks
- Release eza v0.16.2
### Testing
- Fix version tests
### Build
- Bump webiny/action-conventional-commits from 1.1.0 to 1.2.0
- Bump DeterminateSystems/nix-installer-action from 7 to 8
- Bump windows-sys from 0.48.0 to 0.52.0
## [0.16.1] - 2023-11-23
### Bug Fixes
- Don't panic with todo!() on inaccessible dir
- Don't panic if the btime of a file is Err
- Lifetime annotations and manpage/shell completion nits
- Reflow help
### Features
- Handle formatting and display of binary extended attributes.
- Add netbsd and freebsd support for extended attributes
### Miscellaneous Tasks
- Update flake inputs
- Release eza v0.16.1
### Testing
- Vars mocking
- Display and meta options
- Filtering and sorting
- Long view options
- Regenerate `--help` tests
### Build
- Sign release tags
## [0.16.0] - 2023-11-16
### Bug Fixes
- Fix cross compilation
- Snap requires a base
- Move `--smart-group` to long view options
- Colo[u]r-scale didn't have a base value
- Fix snapcraft.yaml formatting
### Documentation
- Add comments for bzip variants
- Added the fact that total-size is unix only
### Features
- Add some file extensions
- Abort on panic (saving 0.1 M)
- Add powertest
### Miscellaneous Tasks
- Ignore blame from #644
- Stabilize powertest version
- Release eza v0.16.0
### Testing
- Implements tests using the generated directory
- Powertests using generated testdirs
- Add hashed versions of powertests
## [0.15.3] - 2023-11-09
### Bug Fixes
- Changed quote in --almost-all completion
- [**breaking**] Remove Repo column when using --git-repos when no git repo
- Reformat `help.rs`
- Allow unused macro rule arms
### Documentation
- Improve CONTRIBUTING.md, README.md
- Improve README.md
- Introduce INSTALL.md
### Features
- Create EZA_ICONS_AUTO environment variable
- Create EZA_ICONS_AUTO environment variable
- Demo gif and gif generation recipe
- Add ocaml icon filetypes
- Add PRQL
- Add `--color-scale`
### Miscellaneous Tasks
- Add to CODEOWNERS file to make sure I get ping'd on files being touched
- Add myself to codeowners to watch modifications on parsing
- Improve the PR template
- Release eza v0.15.3
### Refactor
- Remove commented out test code
- Finalize `decay` -> `color_scale`
### Build
- Refactor flake
- Bump libc from 0.2.149 to 0.2.150
- Bump DeterminateSystems/nix-installer-action from 4 to 7
- Bump rustix from 0.38.13 to 0.38.21
### Ci
- Refactor pre-commit-hooks
- Refactor publish workflow
## [0.15.2] - 2023-11-02
### Bug Fixes
- Correct width when --no-quotes is used
- Clippy lint and add option to grid-details
- --smart-group only works for current user
### Features
- Add Typst to the recognized files
### Miscellaneous Tasks
- Release eza v0.15.2
### Refactor
- Replace `lazy_static` with `once_cell`
- Replace plain values with TextColours
### Testing
- Added more content to the dir generator
- Changed size of one of the files
## [0.15.1] - 2023-10-26
### Bug Fixes
- Only store top-level recursive dir size
- Changed windows methods
- Underscored unused windows variables
- Added device for filesystem to hashmap
- Don’t display target’s size if we’re not dereferencing
- Display offset for filenames with spaces
- Fix clippy warnings
- Fix doc-tests on RecursiveSize
- Fix dead_code warnings on Windows
### Documentation
- Fix doc-tests formatting and address other documentation review requests
### Features
- Add a new filetype for source code files
- Add a new icons for source code files and other files
- Support for displaying blocksize on directories
### Miscellaneous Tasks
- Release eza v0.15.1
### Refactor
- Move total-size calculations to File
- Add RecursiveSize type to simplify total-size calculation
## [0.15.0] - 2023-10-19
### Bug Fixes
- Reenable debug symbols in debug builds
- Fmt, windows, and nix fixes
- Reverted autofmt changes
- Updated match indents
- Changed flag name
- Clippy lint
- Merge conflict with main
### Documentation
- Correct color option spellings
- Added flag to readme
- Added flag to man
### Features
- Add option --smart-group
- Add completions, man for --smart-group
- Added recursive directory parser
- Added flag to completions
- Add icons=always,auto,never. dont display icons in a tty|piped
- Fix auto value for colors and icons + documentation
- [**breaking**] Remove --no-icons in favor of --icons=always,auto,never. default is auto
### Miscellaneous Tasks
- Upgrade to uutils_term_grid from unmaintained term_grid
- Release eza v0.15.0
### Build
- Bump DeterminateSystems/nix-installer-action from 5 to 6
### Ci
- Remove stalebot, is super annoying
- Adjust test case to icons=auto (no icons should show due to tty)
## [0.14.2] - 2023-10-12
### Bug Fixes
- Comment out redundant static musl build
- Refactor sed command to build manpages
- Update additional completions for help, almost-all, dereference
- Fix zsh completions
### Documentation
- Add missing options to man page and CLI --help info
### Features
- Add missing nu shell completions
- Adding the EZA_OVERRIDE_GIT env var
### Miscellaneous Tasks
- Release eza v0.14.2
### Refactor
- Use musl target for amd64 deb package
- Directly use one "big" awk command
### Styling
- Remove trailing spaces and trailing line
### Build
- Bump libc from 0.2.148 to 0.2.149
- Bump DeterminateSystems/nix-installer-action from 4 to 5
## [0.14.1] - 2023-10-08
### Bug Fixes
- Replace left-over exa in fish completion
- Diabling static linked binaries due to segfault
- Make os error 13 fail loud
- Root group not painted as expected when eza used by root
- Adjust change width calculations for hyperlink and classify
### Documentation
- Correct CONTRIBUTING.md on commit message type
- Fix typos
- Add zsh with homebrew part to completions section
- Installation on fedora updated
### Features
- Add basic nushell completion file
- Add codeowner for nu completions
- Readded musl static bin as it works
### Miscellaneous Tasks
- Release eza v0.14.1
### Refactor
- Align completions
- Do not match for numbers and remove single-use fn
- Consistent argument order
### Testing
- Classify-hyperlink test case for width 50
- Move classify tests to local
### Build
- Bump trycmd from 0.14.17 to 0.14.19
- Make checksums easier to copy-paste
- Improve release automation
- Fix version bump
- Fix double echo
- Automate gh release
- Add `codegen-units = 1` and remove `opt-level = 3`
- Add back `opt-level = 3`
### Ci
- Treat warnings as errors
## [0.14.0] - 2023-10-02
### Bug Fixes
- Ignore refs for blame
- Avoid unstable inner attributes
- Merge conflict with main
- Merge conflict with main
- Fix manpage generation of default package
- Changed dll icon
- Changed readme and Added README icon
- New R lang icon
- README is sorted and formatted
- Fix large_enum_variant warning with explanation
- Query stdout terminal size to see if the output gose to a tty.
- Use windows-specific API for terminal size query on windows
- Add `windows-sys` dependency for targeting windows
- Use `std::io::IsTerminal` to eliminate compatibility issue
- Terminal size query should only check `stdout`
- Prefix unused binding name with underscore
### Documentation
- Add completions + manpage for --no-quotes flag
- Leave nix install instructions open-ended
- Adding termux section
- Leave nix install instructions open-ended
- Added the new colors option to the man
- Documenting custom time-style
- Time-format supporting custom formats
- Updated man to add new colors
- Description of `--color` in README, manpage, and completions
- Change `color` to `colo[u]r` in the option description.
### Features
- Add rustfmt.toml file to prevent flags.rs fmt on save
- Add quotations around filenames with spaces. exa pr#1165
- Replace hardcoded version by version variable
- Add header to colors-explanation page
- Revise man rule to use for loop and insert version
- Adding the possibility to change git-repos colors
- [**breaking**] Separated root from other users
- New Rust icon
- Added bdf,psf icons
- Added lib icon
- Added Contacts,Favorites icons
- Added home icon
- Added fdmdownload icon
- Added statically linked binaries
### Miscellaneous Tasks
- Release 0.14.0
### Refactor
- Ignore options/flags.rs
- Renamed and reintended some code
- Reformatted a line
### Styling
- Format some parts correctly
### Build
- Bump unicode-width from 0.1.10 to 0.1.11
- Bump git2 from 0.18.0 to 0.18.1
- Temporarily disable aarch64-unknown-linux-gnu
- Name static binaries
## [0.13.1] - 2023-09-25
### Bug Fixes
- Typo `this` -> `that`
- Don’t show color when color is disabled
- Respect spec on Windows and make it for with Konsole
- Major and minor device on MacOS
- Linux uses u32 for major/minor device numbers
- Error for missed semicolon
- More than 3 bools in a struct
- Enable rustfmt by removing .rustfmt.toml which disables it
- Replace rustfmt::skip on expressions because experimental
- Remove unnecessary rustfmt::skip's in windows code
- Add src/options/flags.rs to rustfmt.excludes
- Left-over merge conflict in src/output/table
### Documentation
- Update README.md
- Update --mounts option to include MacOS
- Documenting --only-files
### Features
- Add EXA_COLOR bindings for un-themed items
- Add EZA_ environment variables with fallback to EXA_
- Listing files only using '--only-files' flag
- Add rustfmt check to unit-tests workflow
### Miscellaneous Tasks
- Add completion for --only-fies (zsh,fish)
- Release 0.13.1
### Refactor
- Fix rustfmt issues and place skips where needed
- Reorder unit-tests to fmt, clippy and tests
### Styling
- Formatted using treefmt
- Fix clippy warning after rustfmt
- Fix treefmt issues in options module
- Reapply rustfmt after rebase from main
### Testing
- Add unit tests for new style abbreviations
- Regen git_repos_no_status
- Test for listing files only
### Build
- Bump actions/checkout from 2 to 4
- Bump chrono from 0.4.30 to 0.4.31
- Bump timeago from 0.4.1 to 0.4.2
- Bump libc from 0.2.147 to 0.2.148
- Bump terminal_size from 0.2.6 to 0.3.0
### Ci
- Added formatters to treefmt
- Make various improvements
- Only apply labels when opening a PR
## [0.13.0] - 2023-09-18
### Bug Fixes
- Crate can't contain broken symlink
- Remove executable flag from fish completion file
- Use proc_mounts only on linux
- Hotfix harmful documentation
- Fix hyperlinks on Windows
- Needless_borrow
- Nix flake check also builds the package
- [**breaking**] Change number_huge and unit_huge to match the man page short codes
### Documentation
- Added instructions to install completions of eza to the readme
- Added cafkafk suggestions
- Fix codeblocks in zsh completions
- Update README.md
- Add Winget install info
- Link directly to space
- Document new file type two letter codes in man page
- Document filetypes theme and rename trait
- Update deb instructions to use keyring
- Fix chmod in deb installation instructions
- Add potential gpg install to deb installation instructions
- Add install instructions for Void Linux
- Document dimmed and italic style codes
- Document character style pairs in the code and match with man page
- Documentation of 'sn' and 'sb' conflicted with later docs
### Features
- Add completion files in deb packaging script
- Adds filtering for Windows hidden files
- Make file types themeable
- Lazy loading of a files extended attributes and absolute path
### Miscellaneous Tasks
- Augment gitter size in README
- Release 0.13.0
### Performance
- Add criterion for benchmarking
### Refactor
- Refactor just in crossfile
- DRY up justfile
- Ignore missing MSVC docker image
- Removed unused imports, mark mods as allow unused
- Format code
- Move ALL_MOUNTS to fs::mounts
- Migrate ALL_MOUNTS from lazy_static to OnceLock
- Rename FileType::Immediate to more obvious FileType::Build
### Testing
- Autogenerate testing dir
- Stabalised unit-tests.yml
- Autogenerate test dirs
- Generate device files
- Add unit tests that test both exa and ls style codes together
- Address variable names
### Build
- Set optlevel to 3
- Add musl binary for linux
- Fix checksums
- Add TODOs to targets
### Ci
- Add Winget Releaser workflow
- Add nix Flake check to flake.yml
- Removed nix build in favor of nix flake check
- Include bash completion script in treefmt and fixed shellcheck formatting in completion script
- Fix spelling attemps -> attempts
## [0.12.0] - 2023-09-14
### Bug Fixes
- RUSTSEC-2020-0071
- Expand `--all` help
- Generalize gitignore to ignore all eza deb packages
- Change trycmd config to use test/itest folder for testing
- Revert to old apt install command suggestion and add hint
- Canonicalize errors when the destination of a symbolic link is bad
- Handle other canonicalize errors in hyperlinks and git
- Fix windows build when canonicalize returns an error
- Is_some_and is an unstable Rust feature until 1.70
- Remove stray backslashes
- Exit 13 on os error 13
- Rewrite comment
- Improve trace strings
- Tracing typo
- Revert "Support for Windows Hidden Files"
- Shellcheck warnings
- Revert "Support for Windows Hidden Files"
- Shellcheck warnings
### Documentation
- Expand `--all` documentation
- Add gentoo
- Fix gentoo install
- Add MacPorts install info
- Add pthorpe92 gist
- Add docs for --git-repos & --git-repos-no-status
- Fix gpg armor flag for deb release in readme
- Add scoop install info
- Add Mac support for the --mount option in the man page
- Add SAFETY comments to unsafe code blocks
- Remove license from developemnt section
- Update rust badge
- Add better explanation of git repos + no status
- Remove color specifications. change unknown git repo status to `~`
- Fix missing color specification from man page
- Add missing man page for debian release
### Features
- Add audit workflow
- Add trycmd as dev-dependency
- Add minimal trycmd binary
- Add a few trycmd tests as example
- Add apt installation workflow
- Support --mount option on Mac
- Support --mount option on Mac
- Adds filtering on Windows hidden files
- Document and change output for --git-repos
- Add PERMISSION_DENIED exit code
- Adds filtering on Windows hidden files
- Adds filtering on Windows hidden files
- Added shellcheck to treefmt
- Adds filtering on Windows hidden files
### Miscellaneous Tasks
- Bump uzers to v0.11.3
- Bump chrono from 0.4.27 to 0.4.30
- Removal of xtests
- Removal of vagrant
- Remove deprecated devtools
- [**breaking**] MSRV 1.70
- Run spellcheck
- Release 0.12.0
### Refactor
- Over-engineer deb-package.sh
- Hide xtests folder
- Split trycmd into tests for all, unix and windows
- Limit unit-tests run on workflow change to unit-tests itself
- Add tracing to various code parts
- Make std::process::exit global
- Moved generateTest.sh to devtools/
- Renamed the file
### Revert
- "Support for Windows Hidden Files"
### Styling
- Remove TODO message on the absolute_path property
- Fix shellcheck issues in deb-package.sh
- Fix shellcheck issues in deb-package.sh
- Fix shellcheck issues in deb-package.sh
### Testing
- Remove vhs from flake
- Remove vhs-runner files
- Dump trycmd from nix sandbox
- Fix name of trydump
- Add trycmd
- Add nix feature
- Add example long tests for sandbox
- Set itests files to unix epoch
- Set itest files to unix epoch
- Refactor setting unix epoch
- Auto discard old definitions
- Fix test reference
- Add long_all_nix.toml
- Add long_blocksize_nix.toml
- Add long_extended_nix.toml
- Add long_git_nix.toml
- Add long_git_repos_nix.toml
- Add long_git_repos_no_status_nix.toml
- Add long_grid_nix.toml
- Add long_header_nix.toml
- Add long_icons_nix.toml
- Add long_octal_nix.toml
- Add long_time_style_relative_nix.toml
- Freeze nix tests
- Fix trydump when no files to delete
- Adding more content to test
- Modified unix and all tests
- Regenerate nix tests
- Convert windows tests with new itest dir
- Fixed windows tests being wrong
- Added a test generator
- Add more unix_tests
- Fixed unix tests to remove any distro specific
- Removed git test breaking on nix
- Remove non-deterministic test
### Build
- Add compression, checksum gen for bin
- Add deny.toml
- Update flake.lock, cargo.lock
- Remove org warnings
- Remove itest
- Update flake.lock
- Add itest, idump
- Make trycmd part of checks
### Ci
- Don't use nix feature on ci
- Fix windows build
- 1.65 -> 1.70
- Enforce conventional commits
- Enforce conventional commits
### Doc
- Remove xtests section from readme
- Add deprecation warning to xtests/readme
- Add deprecation warning to just xtest commands
- Add deprecation warning to vagrantfile
- Add guidelines for commit messages
## [0.11.1] - 2023-09-11
### Bug Fixes
- Add vendored-libgit2 feature to git2 dependency
- Filename escaping (last character lost sometimes, no hyperlink)
- Build for Windows with chrono
### Documentation
- Explain vendored-libgit2
- Add homebrew, misc fixes
- Fix code of conduct link
- Update archlinux
- Remove broken dependabot link
- Add informaton about lazy_static
- Add star history
- Add bright color options in man pages
- Add bright color support in readme changelog
### Features
- Add highlighting of mounted directories (Linux only)
- Mark `.git` as ignored, which hides it when using `--git-ignore`
- Expose git2 feature vendored-libgit2
- Add build commands to deb-package.sh
- Add bright colour options, change punctuation default
- Support the MSRV of Rust (1.65.0)
- Use chrono crate to handle datetime-related features
### Miscellaneous Tasks
- Bump actions/checkout from 3 to 4
- Release 0.11.1
### Testing
- Stabilize testing without sandbox
- Disable gif rendering
### Build
- Add release binaries
- Fix binary gen
- Add armhf binary
### Deps
- Change ansi_term to ansiterm from rustadopt
## [0.11.0] - 2023-09-04
### Bug Fixes
- Add windows implementation of is_empty_dir
- Re-align `--git-ignore` in help message
- Avoid direnv error if nix isn't installed
### Documentation
- Empty dir functions
- Document is_empty_dir functions
- Add function documentation for get_file_type and icon_for_file.
### Features
- Optimize checking for empty directories when a directory has subdirectories
- Use perfect hash tables for file types and icons
- Add backlog of icons from various exa pull requests and others
- Add backlog of icons from various exa issues
### Miscellaneous Tasks
- Bump git2 from 0.17.2 to 0.18.0
- Bump uzers from 0.11.1 to 0.11.2
- Bump DeterminateSystems/flake-checker-action from 4 to 5
- Bump DeterminateSystems/nix-installer-action from 3 to 4
- Bump glob from 0.3.0 to 0.3.1
- Bump actions/stale from 5 to 8
- Bump terminal_size from 0.1.16 to 0.2.6
- Bump timeago from 0.3.1 to 0.4.1
- Release 0.11.0
### Refactor
- Use phf macros instead of codegen to create icon and filetype tables
- Add constants for most of the commonly used icons
- Add constants for the rest of icons used multiple times
- Rename class FileExtension to FileTypeClassifier to better reflect the purpose
- Move get_file_type to FileType enum
### Styling
- Is_empty_dir() was put between the unix size() and windows size()
### Build
- Use rust stable
- Add unstable package
- Disable clippy check 'unreadable_literal' in generated files
## [0.10.9] - 2023-08-28
### Bug Fixes
- Respect git-repos flags
### Documentation
- Add badge for eza gitter/matrix room
- Fix matrix link
- Add ignored flags to readme
- Add ignored flags to manual
- Add ignored flags to help
- Add ignored flags to xtest
### Features
- `--no-git` option
### Miscellaneous Tasks
- Add funding.yml
- Release 0.10.9
### Tree-wide
- Fix Windows build
### Build
- Add convco to dev
### Ci
- Create flakehub-publish-tagged.yml
- Add workflow_dispatch to flakehub-pub
- Edit workflow_dispath
- Refactor workflow_dispath
- Refactor workflow_dispath
- Remove broken dispatch
- Add flakehub-backfill
- Add codeowners
- Add gierens as .deb codeowner
- Add windows to CI
## [0.10.8] - 2023-08-22
### Bug Fixes
- TextCell building of detailed grid view for hyperlink and icon options
- Block's Colours trait as for file sizes
- --blocksize completion, new description
- Option.views unit tests use --blocksize
- Add missing colon before -w/--width
- Replace exa by eza in help string
- Change exa to eza in invalid option error
- Add missing name section to eza_colors-explanation manpage
- Replace exa by eza in .gitignore
### Documentation
- Update issue templates
- Cafkafk -> eza-community
### Features
- Add git-ignored color/style option
- Add `just` and `pandoc` to devShell bc they are necessary for man
- Add `.envrc` so direnv automatically opens the nix dev environment
- Match folder icon to reflect contents
- Match folder icon to reflect contents
- --blocksize completion, new description
- Add script deb-package.sh
### Miscellaneous Tasks
- Bump git2 from 0.16.1 to 0.17.2
- Bump unicode-width from 0.1.8 to 0.1.10
- Bump libc from 0.2.93 to 0.2.147
- Bump num_cpus from 1.13.0 to 1.16.0
- Release 0.10.8
### Refactor
- Fs::fields::Blocks
- File::blocks() name, revise calculation
- Rendering Blocksize like file sizes
- Rename Blocks column to Blocksize
- Use -S/--blocksize and, var BLOCKSIZE
- Unit tests for output.render.blocks
- Flip if (as suggested/demanded by clippy)
- Migrate to uzers lib
### Build
- Add charm to nix develop
- Add tests/tmp to gitignore
- Add initial tape
- Add test runner sketch
- Add test runner to justfile
- Add out.gif to .gitignore
- Add run_tests NAME arg
- Add reference main.txt
- Add gen_test
- Fix typo
- Handle arbitrary NAMES
- Remove commented out code
- Fix code formatting
- Add vhs-runner main function
- Gen_test support automatic gen
- Automatic tape detection
- Add print_msg with ansi color
- Slight documentation/refactor
- Use ansi output on all output
- Disable vhs publish ad
- Add better tracing
- Remove defective sed
- Add color variables
- Add eza-long test
- Add itest testing dir
- Add parallel runner
### Ci
- Help text in xtests
- Nix flake check
- Add labeler for flake
- Add flake description
### Deps
- Change users depedency to uzers
### Doc
- Add git-ignore style/color information to manpage
- --blocksize, new description
- --blocksize, new description
- --blocksize, new description
- Add gpg public key for the deb repository
- Add section about debian and ubuntu installation
### Git
- Add deb package to .gitignore
## [0.10.7] - 2023-08-13
### Bug Fixes
- Respect GIT_CEILING_DIRECTORIES
- MacOS flake support
- Broken zsh completion syntax
### Features
- Add gitlab-ci.yml
- Improve icon for Earthfile
- Better.ps1, add .psd1, .psm1 icons
- Replace .bat icon by windows cli icon
- Use TeX icons and add .bib, .bst icon
- Use Ocaml logo, add .mli, .mll, .mly
- Add many more icons
- Add -w/--width to help string
- Add -w/--width to README
- Add -w/--width to flags
- Add -w/--width to manpage
- Fish -w/--width
- Zsh -w/--width
### Miscellaneous Tasks
- Add PR template
- Bump log from 0.4.14 to 0.4.20
- Release 0.10.7
### Refactor
- GIT_DIR handling
- Turn unused var into value
- Fix borrowed trait implements required
- Simplify format strings
- Consistent style
- Clippy::explicit_auto_deref
- Clippy::explicit_auto_deref
- Clippy::redundant_else
- Clippy::manual_map
- Clippy::semicolon_if_nothing_returned
- Clippy::extra_unused_lifetimes
- Allow clippy::wildcard_in_or_patterns
- Clippy::uninlined_format_args
- Allow Colours::new call with self
- Clippy::explicit_iter_loop
- Clippy::uninlined_format_args
- Clippy::needless_late_init
- Clippy::useless_conversion
- Clippy::implicit_clone
- Clippy::uninlined_format_args
- Clippy::into-iter-on-ref
- Clippy::semicolon_if_nothing_returned
- Clippy::into_iter_on_ref
- Clippy::needless_lifetimes
- Clippy::uninlined_format_args
- Trivial clippy lints
- Clippy::semicolon_if_nothing_returned
- Clippy::semicolon_if_nothing_returned
- Clippy::manual_let_else
- Clippy::semicolon_if_nothing_returned
- Clippy::semicolon_if_nothing_returned
- Clippy::uninlined_format_args
- Clippy::manual_let_else
- Clippy::manual_let_else
- Clippy::manual_let_else
- Clippy::manual_let_else
- Clippy::manual_let_else
- Fix trivial cast
- Clippy::needless-borrow
- TerminalWidth::deduce to -w/--width
### Ci
- Create pull_request_template.md
- Add clippy check
- Add dependabot updater
### Doc
- Create SECURITY.md
- Create CONTRIBUTING.md
## [0.10.6] - 2023-08-07
### Bug Fixes
- Rename eza-colors-explanation
- Exa -> eza in manpage
### Documentation
- Adding --git-repos to help.
### Features
- Use GIT_DIR env var to find the repo
- Add color explanations
### Miscellaneous Tasks
- Release 0.10.6
### Doc
- Add aur, nixpkgs installation
### Git
- Use GIT_DIR env var to find the repo
- Use open_from_env before discover
## [0.10.5] - 2023-08-03
### Bug Fixes
- Output wraps in terminal
- Respect icon spacing
### Miscellaneous Tasks
- Release 0.10.5
## [0.10.4] - 2023-08-02
### Bug Fixes
- Syntax error
### Features
- Added ".out" files for latex
- Add changelog generation
### Miscellaneous Tasks
- Release 0.10.4
## [0.10.3] - 2023-07-31
### Bug Fixes
- More JPG extensions
- Add compression icon to .tXX files #930
- Dereferencing linksfile size.
- Dereferencing links users.
- Dereferencing links groups.
- Dereferencing links permissions.
- Dereferencing links timestamps.
- Add Svelte icon
- Fish completion for -i/--inode option
- Typo
- Use eprintln instead
- Use stderr on no timezone info
- Bump openssl-src from 111.15.0+1.1.1k to 111.26.0+1.1.1u
- Bump openssl-src from 111.15.0+1.1.1k to 111.26.0+1.1.1u
- Changed bin name via cargo.toml
- Change man pages to reffer to new binary name
- Change completions to new binary name
- Change completion file names
- Change name to eza
- Bump git2 from 0.13.20 to 0.16.1
- Fixed grid bug
- Fixed grid bug
- Bump rust to 1.71.0
- Take -a and -A equally serious
- Changed default folder icon
- Add clippy as part of the toolchain
- Change license icon
- Change gpg icons to keys
- Add icon for ocaml (.ml extension)
- Better license icon
- Replace obsolete icons
- Add Emacs icon for .el and org-mode for .org
- Added icons for .rmeta
- Add icon support for .mjs, .cjs, .mts, .cts files
- Add webpack.config.cjs to immediate files list
- .ipynb icon comment
- Removed result
- Update --version info
- Sort is_immediate
- Add flake, autoconf, cargo lock
- Added trailing commas
- Update snapscraft.yaml
- Remove accidentally commited test files
### Feat
- Add JPF to image filetype
### Features
- Add support Typescript and ReasonML projects
- New Icons and CLI argument to suppress icons
- Add sty file
- Add julia file extension icon
- Add symlink dereferencing flag
- Add -X/--dereference completions
- Add -X/--dereference completions
- Symlinks report their target's valid size
- Update Cargo.toml to optimise binaries for size
- Add status for git repos
- Add selinux contexts support
- Add -o shorcut to --octal-permissions
- Hyperlink flag
- Update Cargo.toml to optimise binaries for size
- Add git-status-.* completions
- Zsh add git-status-.* completions
- Add git-status-.* completions
- Add Zig module icons
- Add icon for Vagrantfile
- Add git icon to .gitignore_global file
- Left align relative time
- Add support for --time-style=relative
- Add vim icon
- Add justfile
- Add pxm
- Add compressed types
- Add compressed icons
### Fixup
- Split prefix tests by property
### Improve
- Vim icon
### Makefile
- Be compatible with BSD and OS X
### Miscellaneous Tasks
- Update zoneinfo_compiled, datetime to 0.5
- Update users to 0.10
- PR feedback
- Bump to v0.10.2
- Bump to v0.10.3
- Update cargo lock
### Refactor
- Use shorthand fields
- Removed commented code
- Sorted file types, color table
### StatResult
- :Path -> Dir
### Styling
- Add icon for reStructuredText (src) files
### Testing
- Change to /usr/bin/env bash
### ToStr
- :to_str -> ToString::to_string
### Add
- Mp2 audio format icon
### Build
- Use binary name only
### Ci
- Remove unused .github files
- Remove unused .github files
- Create unit-tests.yml
- Create unit-tests.yml
- Add trivial nix flake
- Add treefmt, rust-toolchain, nixfmt
- Add .#test, .#clippy, .#check
- Add nix flake
- Change branch
- Bump rust to 1.71.0
- Automatically mark issues/PRs stale
- Run tests when building with nix
- Moving actions to dtolnay's version
- Update Cargo.toml
- Create labeler.yml
- Add snap to labeler.yml
- Add filetype.rs autolabel
### Details
- `filter` is only used when recursing
### Doc
- Add -X/--dereference flag
- Change name in README.md
- Add `nix run` to readme
- Fix flow issue
- Fix typos
- Add mandatory snowflake emoji
- Document nix flake development
- Document nix flakew
- Update README.md
- Update README.md
- Update README.md
- Update README.md
- Update README.md
- Readme change screenshot to eza
- Add CoC badge to readme
- Add CODE_OF_CONDUCT.md
- Add crates.io badge, license badge
- Fix links
- Update README.md
- Update README.md
### Documentation
- Add hint how to install exa on Android / Termux
### Git-feature
- Display if a file is updated but unmerged (conflicted)
### Icons
- Add Gentoo for .ebuild
### Io
- :Result -> IOResult
### Src/main.rs
- Remove clippy::unnested_or_patterns
### Vagrant
- Update apt before installing
================================================
FILE: CODE_OF_CONDUCT.md
================================================
<!--
SPDX-FileCopyrightText: 2014 Coraline Ada Ehmke
SPDX-License-Identifier: CC-BY-4.0
-->
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at:
matrix: @cafkafk:nixos.dev
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
<!--
SPDX-FileCopyrightText: 2023-2024 Christina Sørensen
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
# Contributing to eza
If you'd like to contribute to eza, there are several things you should make
sure to familiarize yourself with first.
- Code of conduct [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md)
- Requirement of conformance to [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
- Requirement of conformance to [Semantic Versioning](https://semver.org/)
- The [Security Policy](SECURITY.md)
- [Free and Open Source (FOSS) software](https://www.gnu.org/philosophy/free-sw.en.html)
## Hacking on eza
It is strongly recommended that you install Nix for hacking on eza. We leverage
nix as a way to easily test and distribute eza to many users, and it allows us
to provide multiple tools easily for developers. Instead of having to install
each dependency manually and setting up a development environment, Nix allows
you to use the same environment as the devs use.
Therefore, it is useful that you have a version of Nix installed with the
"experimental" feature flakes enabled. Further, to make hacking on eza as easy
as possible for yourself, you'd do yourself a favor to install
[direnv](https://direnv.net/).
When you enter the eza repository, if you have `direnv` installed, you'll be
prompted to allow it with `direnv allow`. Doing this will save you from having
to manually enter the development environment each time you open the folder. If
you don't have direnv installed however, you can run `nix develop` in a pinch,
to enter the direnv.
The development environment includes basic checks of conformance to conventional
commits, cargo clippy lints, and much more.
It also contains a pre-commit-hook making it a lot easier not to make potential
mistakes that will unnecessarily delay getting your PRs accepted. Most
importantly, it ensures your commits are conforming to conventional commits.
Some useful commands include:
- `nix flake check`: checks everything is correct.
- `nix build`: build eza.
- `nix build .#test`: runs eza's cargo tests
- `nix build .#clippy`: runs clippy on eza
- `nix fmt`: automatically formats your code as required by flake checks and
pre-commit-hooks.nix
- `just itest`: runs integration tests
**For non-nix users,**
There are traditional `pre-commit` hooks, which you can install with your system package manager or
`brew|pip install pre-commit`, and run `pre-commit install -c .pre-commit-config-non-nix.yaml` in the root of the repository.
Then these hooks will run automatically when you commit.
The [just](https://github.com/casey/just) command runner can be used to run some
helpful development commands, in a manner similar to `make`. Run `just --list`
to get an overview of what’s available.
To compile the manual pages, you will need [pandoc](https://pandoc.org/), which
the nix flake should have installed for you. The `just man` command will
compile the Markdown into manual pages, which it will place in the `target/man`
directory.
eza depends on [libgit2](https://github.com/rust-lang/git2-rs) for certain
features. If you’re unable to compile libgit2, you can opt out of Git support
by running `cargo build --no-default-features`. Again, the nix flake should
have taken care of this for you, if not, please file an issue.
If you intend to compile for musl, you will need to use the flag
`vendored-openssl` if you want to get the Git feature working. The full command
is `cargo build --release --target=x86_64-unknown-linux-musl --features
vendored-openssl,git`.
If you want more information on the tests please read:
[testing on eza](https://github.com/eza-community/eza/blob/main/TESTING.md)
## Creating a PR
First, use the pull request template.
Please make sure that the thing you worked on... actually works. Make sure to
also add how you ensured this in the PR description. Further, it's expected
that you do your best to check for regressions.
If your PR introduces a flag, you MUST:
- Add completions for bash, zsh, fish, nushell
- Add documentation to the man page
- Add your option to the help flag
- Add your option to the README.md
Before submitting, you SHOULD have run `nix flake check` and ensured that all
issues are addressed. For formatting issues, `nix fmt` will format the code for
you. Most clippy issues can be resolved with `cargo clippy --fix` (although it
might be educational to fix them yourself). If you have reuse issues, you can
run the following command to annotate your code:
Here are the absolute basics:
- your commit summary MUST follow conventional commits.
- your commits SHOULD be separated into small, logical chunks.
- reviewers may ask you to rebase your commits into more sensible chunks.
- your PR will need to pass CI and local `cargo test`.
- you may be asked to refactor parts of your code by reviewers.
Remember that no one here is an employee, and treat everyone with respect, as
the code of conduct specifies. Also remember to be patient if it takes a while
to get a response on your PR. Usually it doesn't, but there's only so many
hours in a day, and if possible, there would be no delay. The delay alone is
evidence of it's own necessity.
## Commit Messages
A common commit message contains at least a summary and reference with
closing action to the corresponding issue if any, and may also include a
description and signature.
### Summary
For you commit messages, please use the first line for a brief summary what
the commit changes. Try to stay within the 72 char limit and prepend what type
of change. See the following list for some guidance:
- feat: adds a new feature to eza
- feat(zsh): adds something to zsh completion
- refactor: revises parts of the code
- docs(readme): revise the README
- docs(man): revision of the man pages
- fix: bugfix in the code base
- fix(ci): bugfix in the continuous integration
- ...
Note that this list is not complete and there may be cases where a commit
could be characterized by different types, so just try to make your best
guess. This spares the maintainers a lot of work when merging your PR.
### Description
If you commit warrants it due to complexity or external information required
to follow it, you should add a more detailed description of the changes,
reasoning and also link external documentation if necessary. This description
should go two lines below the summary and except for links stay in the 80 char
limit.
### Issue Reference
If the commit resolves an issue add: `Resolves: #abc` where `abc` is the issue
number. In case of a bugfix you can also use `Fixes: #abc`.
### Signature
You may add a signature at the end two lines below the description or
issue reference.
### Example
Here is an example of a commit message for a breaking change that follows these rules:
```
fix(hyperlinks)!: TextCell building of detailed grid view, hyperlink, icon options
The hyperlink option adds an escape sequence which in the normal TextCell
creation also becomes part of the length calculation. This patch applies
the same logic the normal grid already did, by using the filenames bare
width when a hyperlink is embedded. It also respects the ShowIcons
option just like the normal grid view.
BREAKING CHANGE: The style codes for huge file and units where
documented to be `nt` and `ut` but the code was using `nh` and `uh`.
The code has been updated to match the documented style codes.
EXA_COLORS using style codes `nh` and `uh` will need to be updated to
use `nt` and `ut`.
Resolves: #129
Ref: #473, #319
Co-authored-by: 9glenda <plan9git@proton.me>
Signed-off-by: Christina Sørensen <christina@cafkafk.com>
```
### Additional Examples
- feat: add column selection
- fix(output): fix width issue with columns
- test(fs): add tests for filesystem metadata
- feat!: breaking change / feat(config)!: implement config file
- chore(deps): update dependencies
### Commit types
- build: Changes that affect the build system or external dependencies (example libgit2)
- ci: Changes to CI configuration files and scripts (example scopes: Nix, Vagrant, Docker)
- chore: Changes which do not change source code or tests (example: changes to the build process, auxiliary tools, libraries)
- docs: Documentation, README, completions, manpage only
- feat: A new feature
- fix: A bug fix
- perf: A code change that improves or addresses a performance issue
- refactor: A code change that neither fixes a bug nor adds a feature
- revert: Revert something
- style: Changes that do not affect the meaning of the code (example: clippy)
- test: Adding missing tests or correcting existing tests
================================================
FILE: Cargo.toml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
# SPDX-License-Identifier: EUPL-1.2
[package]
name = "eza"
description = "A modern replacement for ls"
authors = ["Christina Sørensen <christina@cafkafk.com>"]
categories = ["command-line-utilities"]
edition = "2024"
rust-version = "1.90"
exclude = [
"/docs/",
"/devtools/",
"/snap/",
"/tests/",
"/.config/",
"/.github/",
"/deb.asc",
"/deny.toml",
"/flake.*",
"/justfile",
"/powertest.yaml",
"/rust-toolchain.toml",
"/.envrc",
"/.gitignore",
"/.git-blame-ignore-revs",
"/.pre-commit-config-non-nix.yaml",
]
readme = "README.md"
homepage = "https://github.com/eza-community/eza"
license = "EUPL-1.2"
repository = "https://github.com/eza-community/eza"
version = "0.23.4"
[package.metadata.deb]
license-file = ["LICENSE.txt", "4"]
depends = "$auto"
extended-description = """
eza is a modern, maintained replacement for ls
"""
section = "utils"
priority = "optional"
assets = [
[
"target/release/eza",
"/usr/bin/eza",
"0755",
],
[
"target/release/../man/eza.1",
"/usr/share/man/man1/eza.1",
"0644",
],
[
"target/release/../man/eza_colors.5",
"/usr/share/man/man5/eza_colors.5",
"0644",
],
[
"target/release/../man/eza_colors-explanation.5",
"/usr/share/man/man5/eza_colors-explanation.5",
"0644",
],
[
"completions/bash/eza",
"/usr/share/bash-completion/completions/eza",
"0644",
],
[
"completions/zsh/_eza",
"/usr/share/zsh/site-functions/_eza",
"0644",
],
[
"completions/fish/eza.fish",
"/usr/share/fish/vendor_completions.d/eza.fish",
"0644",
],
]
[[bin]]
name = "eza"
[dependencies]
rayon = "1.10.0"
chrono = { version = "0.4.40", default-features = false, features = ["clock"] }
nu-ansi-term = { version = "0.50.1", features = [
"serde",
"derive_serde_style",
] }
glob = "0.3"
libc = "0.2"
locale = "0.2"
log = "0.4"
natord-plus-plus = "2.0"
path-clean = "1.0.1"
unit-prefix = "0.5.2"
# palette 0.7.6 is broken: https://github.com/eza-community/eza/pull/1207
palette = { version = "=0.7.5", default-features = false, features = ["std"] }
percent-encoding = "2.3.1"
phf = { version = "0.13.1", features = ["macros"] }
plist = { version = "1.7.0", default-features = false }
uutils_term_grid = "0.7.0"
terminal_size = "0.4.2"
timeago = { version = "0.6.0", default-features = false }
unicode-width = "0.2"
ansi-width = "0.1.0"
serde = { version = "1.0.219", features = ["derive"] }
dirs = "6.0.0"
serde_norway = "0.9"
backtrace = "0.3"
clap = { version = "4.5.38", features = ["cargo", "derive"] }
[dependencies.git2]
version = "0.20"
optional = true
default-features = false
[target.'cfg(target_os = "linux")'.dependencies]
proc-mounts = "0.3"
[target.'cfg(unix)'.dependencies]
uzers = "0.12.1"
[target.'cfg(target_os = "windows")'.dependencies]
windows-sys = { version = "0.61.2", features = [
"Win32_System_Console",
"Win32_Foundation",
] }
[build-dependencies]
chrono = { version = "0.4.40", default-features = false, features = ["clock"] }
[dev-dependencies]
criterion = { version = "0.8.2", features = ["html_reports"] }
trycmd = "1.0"
[features]
default = ["git"]
git = ["git2"]
vendored-openssl = ["git2/vendored-openssl"]
vendored-libgit2 = ["git2/vendored-libgit2"]
# Should only be used inside of flake.nix
nix = []
# Should only be used inside of flake.nix locally (not on CI)
nix-local = []
# Should only be used inside of flake.nix
# Shouldn't ever be used in CI (slow!)
powertest = []
nix-generated = []
# use LTO for smaller binaries (that take longer to build)
[profile.release]
lto = true
strip = true
opt-level = 3
codegen-units = 1
panic = 'abort'
[[bench]]
name = "my_benchmark"
harness = false
================================================
FILE: INSTALL.md
================================================
<!--
SPDX-FileCopyrightText: 2023-2024 Christina Sørensen
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
# Installation
eza is available for Windows, macOS and Linux.
### Cargo (crates.io)

If you already have a Rust environment set up, you can use the `cargo install` command:
cargo install eza
Cargo will build the `eza` binary and place it in your `CARGO_INSTALL_ROOT`.
For more details on installation location see [the cargo
book](https://doc.rust-lang.org/cargo/commands/cargo-install.html#description).
### Cargo (git)
If you already have a Rust environment set up, you can use the `cargo install` command in your local clone of the repo:
git clone https://github.com/eza-community/eza.git
cd eza
cargo install --path .
Cargo will build the `eza` binary and place it in `$HOME/.cargo`.
### Arch Linux
[](https://repology.org/project/eza/versions)
Eza is available in the [\[extra\]](https://archlinux.org/packages/extra/x86_64/eza/) repository of Arch Linux.
```bash
pacman -S eza
```
### Debian and Ubuntu
Eza is available from [deb.gierens.de](http://deb.gierens.de). The GPG public
key is in this repo under [deb.asc](/deb.asc).
First make sure you have the `gpg` command, and otherwise install it via:
```bash
sudo apt update
sudo apt install -y gpg
```
Then install eza via:
```bash
sudo mkdir -p /etc/apt/keyrings
wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo gpg --dearmor -o /etc/apt/keyrings/gierens.gpg
echo "deb [signed-by=/etc/apt/keyrings/gierens.gpg] http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list
sudo chmod 644 /etc/apt/keyrings/gierens.gpg /etc/apt/sources.list.d/gierens.list
sudo apt update
sudo apt install -y eza
```
_Note_: In strict apt environments, you may need to add the target: `echo "deb [arch=amd64 signed-by=...`
### Nix (Linux, MacOS)
[](https://repology.org/project/eza/versions)
> **Note**
> Installing packages imperatively isn't idiomatic Nix, as this can lead to [many issues](https://stop-using-nix-env.privatevoid.net/).
Eza is available from [Nixpkgs](https://github.com/NixOS/nixpkgs) and from the
flake in this repository.
For `nix profile` users:
```shell
nix profile install nixpkgs#eza
```
For `nix-env` users:
```shell
nix-env -i eza
```
**Declarative Nix Installations**
- Simple NixOS installation: [rfaulhaber/dotfiles](https://github.com/rfaulhaber/dotfiles/blob/a8d084d178efd0592b7ac02d34a450fb58913aca/nix/modules/programs/eza/default.nix#L15)
- Using the flake via NixOS: [hallettj/home.nix](https://github.com/hallettj/home.nix/blob/a8388483e5d78e110be73c5af0e7f0e3ca8f8aa3/flake.nix#L19)
- Using home-manager on NixOS: [Misterio77/nix-config](https://github.com/Misterio77/nix-config/blob/6867d66a2fe7899c608b9c8e5a8f9aee279d188b/home/misterio/features/cli/fish.nix#L6)
### Gentoo
[](https://repology.org/project/eza/versions)
On Gentoo, eza is available as a package [`sys-apps/eza`](https://packages.gentoo.org/packages/sys-apps/eza):
```bash
emerge --ask sys-apps/eza
```
### openSUSE
Eza is available at [openSUSE:Factory/eza](https://build.opensuse.org/package/show/openSUSE:Factory/eza):
```bash
zypper ar https://download.opensuse.org/tumbleweed/repo/oss/ factory-oss
zypper in eza
```
The preceding repository also contains the Bash, Fish, and Zsh completions.
### Fedora
[](https://repology.org/project/eza/versions)
> ⚠️ **Note:** As of **Fedora 42**, `eza` is **no longer available** in the official Fedora repositories due to the absence of an active maintainer.
>
> If you're using Fedora 42 or newer, consider one of these options:
>
> - **Use a pre-built binary** from the [Releases](https://github.com/eza-community/eza/releases) page
> - **Build from source** by following the [Cargo (git)](#cargo-git) instructions above
>
> 💬 Interested in helping? [Become a Fedora package maintainer](https://docs.fedoraproject.org/en-US/package-maintainers/) or reach out via [Matrix](https://matrix.to/#/#eza-community:gitter.im).
For Fedora versions **prior to 42**, `eza` is available in the official repository:
```bash
sudo dnf install eza
```
### Void Linux
[](https://repology.org/project/eza/versions)
Eza is available as the [eza](https://github.com/void-linux/void-packages/tree/master/srcpkgs/eza) package in the official Void Linux repository.
```bash
sudo xbps-install eza
```
### Termux
Eza is available as the [eza](https://github.com/termux/termux-packages/tree/master/packages/eza) package in the official Termux repository.
```bash
pkg install eza
```
### Manual (Linux)
Example is for x86_64 GNU, replaces the file names if downloading for a different arch.
```shell
wget -c https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz -O - | tar xz
sudo chmod +x eza
sudo chown root:root eza
sudo mv eza /usr/local/bin/eza
```
If `exa` was installed before, replace it with `eza`:
```shell
sudo rm -f /usr/local/bin/exa
sudo ln -s /usr/local/bin/eza /usr/local/bin/exa
```
### Pixi (Linux, MacOS, and Windows)
[](https://prefix.dev/channels/conda-forge/packages/eza)
Eza is available in the conda-forge repository and can be installed using [Pixi](https://pixi.sh/latest/):
```shell
pixi global install eza
```
### Brew (MacOS)
[](https://repology.org/project/eza/versions)
Eza is available from [Homebrew](https://formulae.brew.sh/formula/eza#default).
To install eza, run:
```shell
brew install eza
```
### MacPorts (macOS)
[](https://repology.org/project/eza/versions)
On macOS, eza is also available via [MacPorts](https://ports.macports.org/port/eza/).
To install eza, run:
```shell
sudo port install eza
```
### Winget (Windows)
[](https://repology.org/project/eza/versions)
Eza is available on Winget.
To install eza, run:
```shell
winget install eza-community.eza
```
### Scoop (Windows)
[](https://repology.org/project/eza/versions)
Eza is available from [Scoop](https://scoop.sh/#/apps?q=eza&id=a52070d25f94bbcc884f80bef53eb47ed1268198).
To install eza, run:
```shell
scoop install eza
```
### Flox (Linux, macOS, Windows WSL)
Eza is available from [Flox](https://flox.dev).
To install eza, run:
```shell
flox install eza
```
### X-CMD (Linux, macOS, Windows WSL, Windows GitBash)
Eza is available from [x-cmd](https://www.x-cmd.com).
To install eza, run:
```shell
x env use eza
# or
x eza
```
### fox (Linux, macOS)
Eza is available from [fox](https://www.getfox.sh/).
To install eza, run:
```shell
fox install eza
```
### Completions
#### For zsh:
> **Note**
> Change `~/.zshrc` to your preferred zsh config file.
##### Clone the repository:
```sh
git clone https://github.com/eza-community/eza.git
```
##### Add the completion path to your zsh configuration:
Replace `<path_to_eza>` with the actual path where you cloned the `eza` repository.
```sh
echo 'export FPATH="<path_to_eza>/completions/zsh:$FPATH"' >> ~/.zshrc
```
##### Reload your zsh configuration:
```sh
source ~/.zshrc
```
#### For zsh with homebrew:
In case zsh completions don't work out of the box with homebrew, add the
following to your `~/.zshrc`:
```bash
if type brew &>/dev/null; then
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
autoload -Uz compinit
compinit
fi
```
For reference:
- https://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh
- https://github.com/Homebrew/brew/issues/8984
================================================
FILE: LICENSE.txt
================================================
EUROPEAN UNION PUBLIC LICENCE v. 1.2
EUPL © the European Union 2007, 2016
This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined below) which is provided under the
terms of this Licence. Any use of the Work, other than as authorised under this Licence is prohibited (to the extent such
use is covered by a right of the copyright holder of the Work).
The Work is provided under the terms of this Licence when the Licensor (as defined below) has placed the following
notice immediately following the copyright notice for the Work:
Licensed under the EUPL
or has expressed by any other means his willingness to license under the EUPL.
1.Definitions
In this Licence, the following terms have the following meaning:
— ‘The Licence’:this Licence.
— ‘The Original Work’:the work or software distributed or communicated by the Licensor under this Licence, available
as Source Code and also as Executable Code as the case may be.
— ‘Derivative Works’:the works or software that could be created by the Licensee, based upon the Original Work or
modifications thereof. This Licence does not define the extent of modification or dependence on the Original Work
required in order to classify a work as a Derivative Work; this extent is determined by copyright law applicable in
the country mentioned in Article 15.
— ‘The Work’:the Original Work or its Derivative Works.
— ‘The Source Code’:the human-readable form of the Work which is the most convenient for people to study and
modify.
— ‘The Executable Code’:any code which has generally been compiled and which is meant to be interpreted by
a computer as a program.
— ‘The Licensor’:the natural or legal person that distributes or communicates the Work under the Licence.
— ‘Contributor(s)’:any natural or legal person who modifies the Work under the Licence, or otherwise contributes to
the creation of a Derivative Work.
— ‘The Licensee’ or ‘You’:any natural or legal person who makes any usage of the Work under the terms of the
Licence.
— ‘Distribution’ or ‘Communication’:any act of selling, giving, lending, renting, distributing, communicating,
transmitting, or otherwise making available, online or offline, copies of the Work or providing access to its essential
functionalities at the disposal of any other natural or legal person.
2.Scope of the rights granted by the Licence
The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, sublicensable licence to do the following, for
the duration of copyright vested in the Original Work:
— use the Work in any circumstance and for all usage,
— reproduce the Work,
— modify the Work, and make Derivative Works based upon the Work,
— communicate to the public, including the right to make available or display the Work or copies thereof to the public
and perform publicly, as the case may be, the Work,
— distribute the Work or copies thereof,
— lend and rent the Work or copies thereof,
— sublicense rights in the Work or copies thereof.
Those rights can be exercised on any media, supports and formats, whether now known or later invented, as far as the
applicable law permits so.
In the countries where moral rights apply, the Licensor waives his right to exercise his moral right to the extent allowed
by law in order to make effective the licence of the economic rights here above listed.
The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to any patents held by the Licensor, to the
extent necessary to make use of the rights granted on the Work under this Licence.
3.Communication of the Source Code
The Licensor may provide the Work either in its Source Code form, or as Executable Code. If the Work is provided as
Executable Code, the Licensor provides in addition a machine-readable copy of the Source Code of the Work along with
each copy of the Work that the Licensor distributes or indicates, in a notice following the copyright notice attached to
the Work, a repository where the Source Code is easily and freely accessible for as long as the Licensor continues to
distribute or communicate the Work.
4.Limitations on copyright
Nothing in this Licence is intended to deprive the Licensee of the benefits from any exception or limitation to the
exclusive rights of the rights owners in the Work, of the exhaustion of those rights or of other applicable limitations
thereto.
5.Obligations of the Licensee
The grant of the rights mentioned above is subject to some restrictions and obligations imposed on the Licensee. Those
obligations are the following:
Attribution right: The Licensee shall keep intact all copyright, patent or trademarks notices and all notices that refer to
the Licence and to the disclaimer of warranties. The Licensee must include a copy of such notices and a copy of the
Licence with every copy of the Work he/she distributes or communicates. The Licensee must cause any Derivative Work
to carry prominent notices stating that the Work has been modified and the date of modification.
Copyleft clause: If the Licensee distributes or communicates copies of the Original Works or Derivative Works, this
Distribution or Communication will be done under the terms of this Licence or of a later version of this Licence unless
the Original Work is expressly distributed only under this version of the Licence — for example by communicating
‘EUPL v. 1.2 only’. The Licensee (becoming Licensor) cannot offer or impose any additional terms or conditions on the
Work or Derivative Work that alter or restrict the terms of the Licence.
Compatibility clause: If the Licensee Distributes or Communicates Derivative Works or copies thereof based upon both
the Work and another work licensed under a Compatible Licence, this Distribution or Communication can be done
under the terms of this Compatible Licence. For the sake of this clause, ‘Compatible Licence’ refers to the licences listed
in the appendix attached to this Licence. Should the Licensee's obligations under the Compatible Licence conflict with
his/her obligations under this Licence, the obligations of the Compatible Licence shall prevail.
Provision of Source Code: When distributing or communicating copies of the Work, the Licensee will provide
a machine-readable copy of the Source Code or indicate a repository where this Source will be easily and freely available
for as long as the Licensee continues to distribute or communicate the Work.
Legal Protection: This Licence does not grant permission to use the trade names, trademarks, service marks, or names
of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and
reproducing the content of the copyright notice.
6.Chain of Authorship
The original Licensor warrants that the copyright in the Original Work granted hereunder is owned by him/her or
licensed to him/her and that he/she has the power and authority to grant the Licence.
Each Contributor warrants that the copyright in the modifications he/she brings to the Work are owned by him/her or
licensed to him/her and that he/she has the power and authority to grant the Licence.
Each time You accept the Licence, the original Licensor and subsequent Contributors grant You a licence to their contributions
to the Work, under the terms of this Licence.
7.Disclaimer of Warranty
The Work is a work in progress, which is continuously improved by numerous Contributors. It is not a finished work
and may therefore contain defects or ‘bugs’ inherent to this type of development.
For the above reason, the Work is provided under the Licence on an ‘as is’ basis and without warranties of any kind
concerning the Work, including without limitation merchantability, fitness for a particular purpose, absence of defects or
errors, accuracy, non-infringement of intellectual property rights other than copyright as stated in Article 6 of this
Licence.
This disclaimer of warranty is an essential part of the Licence and a condition for the grant of any rights to the Work.
8.Disclaimer of Liability
Except in the cases of wilful misconduct or damages directly caused to natural persons, the Licensor will in no event be
liable for any direct or indirect, material or moral, damages of any kind, arising out of the Licence or of the use of the
Work, including without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, loss
of data or any commercial damage, even if the Licensor has been advised of the possibility of such damage. However,
the Licensor will be liable under statutory product liability laws as far such laws apply to the Work.
9.Additional agreements
While distributing the Work, You may choose to conclude an additional agreement, defining obligations or services
consistent with this Licence. However, if accepting obligations, You may act only on your own behalf and on your sole
responsibility, not on behalf of the original Licensor or any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against such Contributor by
the fact You have accepted any warranty or additional liability.
10.Acceptance of the Licence
The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ placed under the bottom of a window
displaying the text of this Licence or by affirming consent in any other similar way, in accordance with the rules of
applicable law. Clicking on that icon indicates your clear and irrevocable acceptance of this Licence and all of its terms
and conditions.
Similarly, you irrevocably accept this Licence and all of its terms and conditions by exercising any rights granted to You
by Article 2 of this Licence, such as the use of the Work, the creation by You of a Derivative Work or the Distribution
or Communication by You of the Work or copies thereof.
11.Information to the public
In case of any Distribution or Communication of the Work by means of electronic communication by You (for example,
by offering to download the Work from a remote location) the distribution channel or media (for example, a website)
must at least provide to the public the information requested by the applicable law regarding the Licensor, the Licence
and the way it may be accessible, concluded, stored and reproduced by the Licensee.
12.Termination of the Licence
The Licence and the rights granted hereunder will terminate automatically upon any breach by the Licensee of the terms
of the Licence.
Such a termination will not terminate the licences of any person who has received the Work from the Licensee under
the Licence, provided such persons remain in full compliance with the Licence.
13.Miscellaneous
Without prejudice of Article 9 above, the Licence represents the complete agreement between the Parties as to the
Work.
If any provision of the Licence is invalid or unenforceable under applicable law, this will not affect the validity or
enforceability of the Licence as a whole. Such provision will be construed or reformed so as necessary to make it valid
and enforceable.
The European Commission may publish other linguistic versions or new versions of this Licence or updated versions of
the Appendix, so far this is required and reasonable, without reducing the scope of the rights granted by the Licence.
New versions of the Licence will be published with a unique version number.
All linguistic versions of this Licence, approved by the European Commission, have identical value. Parties can take
advantage of the linguistic version of their choice.
14.Jurisdiction
Without prejudice to specific agreement between parties,
— any litigation resulting from the interpretation of this License, arising between the European Union institutions,
bodies, offices or agencies, as a Licensor, and any Licensee, will be subject to the jurisdiction of the Court of Justice
of the European Union, as laid down in article 272 of the Treaty on the Functioning of the European Union,
— any litigation arising between other parties and resulting from the interpretation of this License, will be subject to
the exclusive jurisdiction of the competent court where the Licensor resides or conducts its primary business.
15.Applicable Law
Without prejudice to specific agreement between parties,
— this Licence shall be governed by the law of the European Union Member State where the Licensor has his seat,
resides or has his registered office,
— this licence shall be governed by Belgian law if the Licensor has no seat, residence or registered office inside
a European Union Member State.
Appendix
‘Compatible Licences’ according to Article 5 EUPL are:
— GNU General Public License (GPL) v. 2, v. 3
— GNU Affero General Public License (AGPL) v. 3
— Open Software License (OSL) v. 2.1, v. 3.0
— Eclipse Public License (EPL) v. 1.0
— CeCILL v. 2.0, v. 2.1
— Mozilla Public Licence (MPL) v. 2
— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
— Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for works other than software
— European Union Public Licence (EUPL) v. 1.1, v. 1.2
— Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+).
The European Commission may update this Appendix to later versions of the above licences without producing
a new version of the EUPL, as long as they provide the rights granted in Article 2 of this Licence and protect the
covered Source Code from exclusive appropriation.
All other changes or additions to this Appendix require the production of a new EUPL version.
================================================
FILE: LICENSES/CC-BY-4.0.txt
================================================
Creative Commons Attribution 4.0 International
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
Creative Commons Attribution 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 – Definitions.
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 – Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
3. Term. The term of this Public License is specified in Section 6(a).
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
5. Downstream recipients.
A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
Section 3 – License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified form), You must:
A. retain the following if it is supplied by the Licensor with the Licensed Material:
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
Section 4 – Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
Section 5 – Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 – Term and Termination.
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 – Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 – Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
Creative Commons may be contacted at creativecommons.org.
================================================
FILE: LICENSES/EUPL-1.2.txt
================================================
EUROPEAN UNION PUBLIC LICENCE v. 1.2
EUPL © the European Union 2007, 2016
This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined below) which is provided under the
terms of this Licence. Any use of the Work, other than as authorised under this Licence is prohibited (to the extent such
use is covered by a right of the copyright holder of the Work).
The Work is provided under the terms of this Licence when the Licensor (as defined below) has placed the following
notice immediately following the copyright notice for the Work:
Licensed under the EUPL
or has expressed by any other means his willingness to license under the EUPL.
1.Definitions
In this Licence, the following terms have the following meaning:
— ‘The Licence’:this Licence.
— ‘The Original Work’:the work or software distributed or communicated by the Licensor under this Licence, available
as Source Code and also as Executable Code as the case may be.
— ‘Derivative Works’:the works or software that could be created by the Licensee, based upon the Original Work or
modifications thereof. This Licence does not define the extent of modification or dependence on the Original Work
required in order to classify a work as a Derivative Work; this extent is determined by copyright law applicable in
the country mentioned in Article 15.
— ‘The Work’:the Original Work or its Derivative Works.
— ‘The Source Code’:the human-readable form of the Work which is the most convenient for people to study and
modify.
— ‘The Executable Code’:any code which has generally been compiled and which is meant to be interpreted by
a computer as a program.
— ‘The Licensor’:the natural or legal person that distributes or communicates the Work under the Licence.
— ‘Contributor(s)’:any natural or legal person who modifies the Work under the Licence, or otherwise contributes to
the creation of a Derivative Work.
— ‘The Licensee’ or ‘You’:any natural or legal person who makes any usage of the Work under the terms of the
Licence.
— ‘Distribution’ or ‘Communication’:any act of selling, giving, lending, renting, distributing, communicating,
transmitting, or otherwise making available, online or offline, copies of the Work or providing access to its essential
functionalities at the disposal of any other natural or legal person.
2.Scope of the rights granted by the Licence
The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, sublicensable licence to do the following, for
the duration of copyright vested in the Original Work:
— use the Work in any circumstance and for all usage,
— reproduce the Work,
— modify the Work, and make Derivative Works based upon the Work,
— communicate to the public, including the right to make available or display the Work or copies thereof to the public
and perform publicly, as the case may be, the Work,
— distribute the Work or copies thereof,
— lend and rent the Work or copies thereof,
— sublicense rights in the Work or copies thereof.
Those rights can be exercised on any media, supports and formats, whether now known or later invented, as far as the
applicable law permits so.
In the countries where moral rights apply, the Licensor waives his right to exercise his moral right to the extent allowed
by law in order to make effective the licence of the economic rights here above listed.
The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to any patents held by the Licensor, to the
extent necessary to make use of the rights granted on the Work under this Licence.
3.Communication of the Source Code
The Licensor may provide the Work either in its Source Code form, or as Executable Code. If the Work is provided as
Executable Code, the Licensor provides in addition a machine-readable copy of the Source Code of the Work along with
each copy of the Work that the Licensor distributes or indicates, in a notice following the copyright notice attached to
the Work, a repository where the Source Code is easily and freely accessible for as long as the Licensor continues to
distribute or communicate the Work.
4.Limitations on copyright
Nothing in this Licence is intended to deprive the Licensee of the benefits from any exception or limitation to the
exclusive rights of the rights owners in the Work, of the exhaustion of those rights or of other applicable limitations
thereto.
5.Obligations of the Licensee
The grant of the rights mentioned above is subject to some restrictions and obligations imposed on the Licensee. Those
obligations are the following:
Attribution right: The Licensee shall keep intact all copyright, patent or trademarks notices and all notices that refer to
the Licence and to the disclaimer of warranties. The Licensee must include a copy of such notices and a copy of the
Licence with every copy of the Work he/she distributes or communicates. The Licensee must cause any Derivative Work
to carry prominent notices stating that the Work has been modified and the date of modification.
Copyleft clause: If the Licensee distributes or communicates copies of the Original Works or Derivative Works, this
Distribution or Communication will be done under the terms of this Licence or of a later version of this Licence unless
the Original Work is expressly distributed only under this version of the Licence — for example by communicating
‘EUPL v. 1.2 only’. The Licensee (becoming Licensor) cannot offer or impose any additional terms or conditions on the
Work or Derivative Work that alter or restrict the terms of the Licence.
Compatibility clause: If the Licensee Distributes or Communicates Derivative Works or copies thereof based upon both
the Work and another work licensed under a Compatible Licence, this Distribution or Communication can be done
under the terms of this Compatible Licence. For the sake of this clause, ‘Compatible Licence’ refers to the licences listed
in the appendix attached to this Licence. Should the Licensee's obligations under the Compatible Licence conflict with
his/her obligations under this Licence, the obligations of the Compatible Licence shall prevail.
Provision of Source Code: When distributing or communicating copies of the Work, the Licensee will provide
a machine-readable copy of the Source Code or indicate a repository where this Source will be easily and freely available
for as long as the Licensee continues to distribute or communicate the Work.
Legal Protection: This Licence does not grant permission to use the trade names, trademarks, service marks, or names
of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and
reproducing the content of the copyright notice.
6.Chain of Authorship
The original Licensor warrants that the copyright in the Original Work granted hereunder is owned by him/her or
licensed to him/her and that he/she has the power and authority to grant the Licence.
Each Contributor warrants that the copyright in the modifications he/she brings to the Work are owned by him/her or
licensed to him/her and that he/she has the power and authority to grant the Licence.
Each time You accept the Licence, the original Licensor and subsequent Contributors grant You a licence to their contributions
to the Work, under the terms of this Licence.
7.Disclaimer of Warranty
The Work is a work in progress, which is continuously improved by numerous Contributors. It is not a finished work
and may therefore contain defects or ‘bugs’ inherent to this type of development.
For the above reason, the Work is provided under the Licence on an ‘as is’ basis and without warranties of any kind
concerning the Work, including without limitation merchantability, fitness for a particular purpose, absence of defects or
errors, accuracy, non-infringement of intellectual property rights other than copyright as stated in Article 6 of this
Licence.
This disclaimer of warranty is an essential part of the Licence and a condition for the grant of any rights to the Work.
8.Disclaimer of Liability
Except in the cases of wilful misconduct or damages directly caused to natural persons, the Licensor will in no event be
liable for any direct or indirect, material or moral, damages of any kind, arising out of the Licence or of the use of the
Work, including without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, loss
of data or any commercial damage, even if the Licensor has been advised of the possibility of such damage. However,
the Licensor will be liable under statutory product liability laws as far such laws apply to the Work.
9.Additional agreements
While distributing the Work, You may choose to conclude an additional agreement, defining obligations or services
consistent with this Licence. However, if accepting obligations, You may act only on your own behalf and on your sole
responsibility, not on behalf of the original Licensor or any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against such Contributor by
the fact You have accepted any warranty or additional liability.
10.Acceptance of the Licence
The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ placed under the bottom of a window
displaying the text of this Licence or by affirming consent in any other similar way, in accordance with the rules of
applicable law. Clicking on that icon indicates your clear and irrevocable acceptance of this Licence and all of its terms
and conditions.
Similarly, you irrevocably accept this Licence and all of its terms and conditions by exercising any rights granted to You
by Article 2 of this Licence, such as the use of the Work, the creation by You of a Derivative Work or the Distribution
or Communication by You of the Work or copies thereof.
11.Information to the public
In case of any Distribution or Communication of the Work by means of electronic communication by You (for example,
by offering to download the Work from a remote location) the distribution channel or media (for example, a website)
must at least provide to the public the information requested by the applicable law regarding the Licensor, the Licence
and the way it may be accessible, concluded, stored and reproduced by the Licensee.
12.Termination of the Licence
The Licence and the rights granted hereunder will terminate automatically upon any breach by the Licensee of the terms
of the Licence.
Such a termination will not terminate the licences of any person who has received the Work from the Licensee under
the Licence, provided such persons remain in full compliance with the Licence.
13.Miscellaneous
Without prejudice of Article 9 above, the Licence represents the complete agreement between the Parties as to the
Work.
If any provision of the Licence is invalid or unenforceable under applicable law, this will not affect the validity or
enforceability of the Licence as a whole. Such provision will be construed or reformed so as necessary to make it valid
and enforceable.
The European Commission may publish other linguistic versions or new versions of this Licence or updated versions of
the Appendix, so far this is required and reasonable, without reducing the scope of the rights granted by the Licence.
New versions of the Licence will be published with a unique version number.
All linguistic versions of this Licence, approved by the European Commission, have identical value. Parties can take
advantage of the linguistic version of their choice.
14.Jurisdiction
Without prejudice to specific agreement between parties,
— any litigation resulting from the interpretation of this License, arising between the European Union institutions,
bodies, offices or agencies, as a Licensor, and any Licensee, will be subject to the jurisdiction of the Court of Justice
of the European Union, as laid down in article 272 of the Treaty on the Functioning of the European Union,
— any litigation arising between other parties and resulting from the interpretation of this License, will be subject to
the exclusive jurisdiction of the competent court where the Licensor resides or conducts its primary business.
15.Applicable Law
Without prejudice to specific agreement between parties,
— this Licence shall be governed by the law of the European Union Member State where the Licensor has his seat,
resides or has his registered office,
— this licence shall be governed by Belgian law if the Licensor has no seat, residence or registered office inside
a European Union Member State.
Appendix
‘Compatible Licences’ according to Article 5 EUPL are:
— GNU General Public License (GPL) v. 2, v. 3
— GNU Affero General Public License (AGPL) v. 3
— Open Software License (OSL) v. 2.1, v. 3.0
— Eclipse Public License (EPL) v. 1.0
— CeCILL v. 2.0, v. 2.1
— Mozilla Public Licence (MPL) v. 2
— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
— Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for works other than software
— European Union Public Licence (EUPL) v. 1.1, v. 1.2
— Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+).
The European Commission may update this Appendix to later versions of the above licences without producing
a new version of the EUPL, as long as they provide the rights granted in Article 2 of this Licence and protect the
covered Source Code from exclusive appropriation.
All other changes or additions to this Appendix require the production of a new EUPL version.
================================================
FILE: LICENSES/MIT.txt
================================================
MIT License
Copyright (c) <year> <copyright holders>
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
================================================
<!--
SPDX-FileCopyrightText: 2023-2024 Christina Sørensen
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
<div align="center">
<div align="center" markdown="1">
<sup>Special thanks to:</sup>
<br>
<br>
<a href="https://www.warp.dev/eza">
<img alt="Warp sponsorship" width="400" src="https://github.com/user-attachments/assets/ab8dd143-b0fd-4904-bdc5-dd7ecac94eae">
</a>
### [Warp, the AI terminal for developers](https://www.warp.dev/eza)
[Available for MacOS, Linux, & Windows](https://www.warp.dev/eza)<br>
</div>
# eza
A modern replacement for ls.
<a href="https://matrix.to/#/#eza-community:gitter.im"><img alt="Gitter" src="https://img.shields.io/gitter/room/eza-community/eza?logo=element&link=https%3A%2F%2Fapp.gitter.im%2F%23%2Froom%2F%23eza%3Agitter.im&link=Gitter%20matrix%20room%20for%20Eza" width=200></a>
[](https://nixos.org)
[](CODE_OF_CONDUCT.md)
[](https://github.com/eza-community/eza/actions/workflows/unit-tests.yml)
[](https://crates.io/crates/eza)

</div>

---
**eza** is a modern alternative for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults.
It uses colours to distinguish file types and metadata.
It knows about symlinks, extended attributes, and Git.
And it’s **small**, **fast**, and just **one single binary**.
By deliberately making some decisions differently, eza attempts to be a more featureful, more user-friendly version of `ls`.
---
**eza** features not in exa (non-exhaustive):
- Fixes [“The Grid Bug”](https://github.com/eza-community/eza/issues/66#issuecomment-1656758327) introduced in exa 2021.
- Hyperlink support.
- Mount point details.
- Selinux context output.
- Git repo status output.
- Human readable relative dates.
- Several security fixes.
- Support for `bright` terminal colours.
- Many smaller bug fixes/changes!
- Configuration `theme.yml` file for customization of colors and icons.
...and like, so much more that it became exhausting to update this all the time.
Like seriously, we have a lot of good stuff.
---
<a id="try-it">
<h1>Try it!</h1>
</a>
### Nix ❄️
If you already have Nix setup with flake support, you can try out eza with the `nix run` command:
nix run github:eza-community/eza
Nix will build eza and run it.
If you want to pass arguments this way, use e.g. `nix run github:eza-community/eza -- -ol`.
# Installation
eza is available for Windows, macOS and Linux. Platform and distribution
specific installation instructions can be found in [INSTALL.md](INSTALL.md).
[](https://repology.org/project/eza/versions)
---
<a id="options">
<h1>Command-line options</h1>
</a>
eza’s options are almost, but not quite, entirely unlike `ls`’s. Quick overview:
## Display options
<details>
<summary>Click to expand</summary>
- **-1**, **--oneline**: display one entry per line
- **-G**, **--grid**: display entries as a grid (default)
- **-l**, **--long**: display extended details and attributes
- **-R**, **--recurse**: recurse into directories
- **-T**, **--tree**: recurse into directories as a tree
- **-x**, **--across**: sort the grid across, rather than downwards
- **-F**, **--classify=(when)**: display type indicator by file names (always, auto, never)
- **--colo[u]r=(when)**: when to use terminal colours (always, auto, never)
- **--colo[u]r-scale=(field)**: highlight levels of `field` distinctly(all, age, size)
- **--color-scale-mode=(mode)**: use gradient or fixed colors in --color-scale. valid options are `fixed` or `gradient`
- **--icons=(when)**: when to display icons (always, auto, never)
- **--hyperlink**: display entries as hyperlinks
- **--absolute=(mode)**: display entries with their absolute path (on, follow, off)
- **-w**, **--width=(columns)**: set screen width in columns
</details>
## Filtering options
<details>
<summary>Click to expand</summary>
- **-a**, **--all**: show hidden and 'dot' files
- **-d**, **--treat-dirs-as-files**: list directories like regular files
- **-L**, **--level=(depth)**: limit the depth of recursion
- **-r**, **--reverse**: reverse the sort order
- **-s**, **--sort=(field)**: which field to sort by
- **--group-directories-first**: list directories before other files
- **--group-directories-last**: list directories after other files
- **-D**, **--only-dirs**: list only directories
- **-f**, **--only-files**: list only files
- **--no-symlinks**: don't show symbolic links
- **--show-symlinks**: explicitly show links (with `--only-dirs`, `--only-files`, to show symlinks that match the filter)
- **--git-ignore**: ignore files mentioned in `.gitignore`
- **-I**, **--ignore-glob=(globs)**: glob patterns (pipe-separated) of files to ignore
Pass the `--all` option twice to also show the `.` and `..` directories.
</details>
## Long view options
<details>
<summary>Click to expand</summary>
These options are available when running with `--long` (`-l`):
- **-b**, **--binary**: list file sizes with binary prefixes
- **-B**, **--bytes**: list file sizes in bytes, without any prefixes
- **-g**, **--group**: list each file’s group
- **--smart-group**: only show group if it has a different name from owner
- **-h**, **--header**: add a header row to each column
- **-H**, **--links**: list each file’s number of hard links
- **-i**, **--inode**: list each file’s inode number
- **-m**, **--modified**: use the modified timestamp field
- **-M**, **--mounts**: Show mount details (Linux and MacOS only).
- **-S**, **--blocksize**: show size of allocated file system blocks
- **-t**, **--time=(field)**: which timestamp field to use
- **-u**, **--accessed**: use the accessed timestamp field
- **-U**, **--created**: use the created timestamp field
- **-X**, **--dereference**: dereference symlinks for file information
- **-Z**, **--context**: list each file’s security context
- **-@**, **--extended**: list each file’s extended attributes and sizes
- **--changed**: use the changed timestamp field
- **--git**: list each file’s Git status, if tracked or ignored
- **--git-repos**: list each directory’s Git status, if tracked
- **--git-repos-no-status**: list whether a directory is a Git repository, but not its status (faster)
- **--no-git**: suppress Git status (always overrides `--git`, `--git-repos`, `--git-repos-no-status`)
- **--time-style**: how to format timestamps. valid timestamp styles are ‘`default`’, ‘`iso`’, ‘`long-iso`’, ‘`full-iso`’, ‘`relative`’, or a custom style ‘`+<FORMAT>`’ (E.g., ‘`+%Y-%m-%d %H:%M`’ => ‘`2023-09-30 13:00`’. For more specifications on the format string, see the _`eza(1)` manual page_ and [chrono documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html).).
- **--total-size**: show recursive directory size
- **--no-permissions**: suppress the permissions field
- **-o**, **--octal-permissions**: list each file's permission in octal format
- **--no-filesize**: suppress the filesize field
- **--no-user**: suppress the user field
- **--no-time**: suppress the time field
- **--stdin**: read file names from stdin
Some of the options accept parameters:
- Valid **--colo\[u\]r** options are **always**, **automatic** (or **auto** for short), and **never**.
- Valid sort fields are **accessed**, **changed**, **created**, **extension**, **Extension**, **inode**, **modified**, **name**, **Name**, **size**, **type**, and **none**. Fields starting with a capital letter sort uppercase before lowercase. The modified field has the aliases **date**, **time**, and **newest**, while its reverse has the aliases **age** and **oldest**.
- Valid time fields are **modified**, **changed**, **accessed**, and **created**.
- Valid time styles are **default**, **iso**, **long-iso**, **full-iso**, and **relative**.
See the `man` pages for further documentation of usage. They are available
- online [in the repo](https://github.com/eza-community/eza/tree/main/man)
- in your terminal via `man eza`, as of version [`[0.18.13] - 2024-04-25`](https://github.com/eza-community/eza/blob/main/CHANGELOG.md#01813---2024-04-25)
</details>
## Custom Themes
<details>
<summary>Click to expand</summary>
**Eza** has recently added support for a `theme.yml` file, where you can specify all of the existing theme-ing options
available for the `LS_COLORS` and `EXA_COLORS` environment variables, as well as the option to specify different icons
for different file types and extensions. Any existing environment variables set will continue to work and will take
precedence for backwards compatibility.
#### **New** Pre-made themes
Check out the themes available in the official [eza-themes](https://github.com/eza-community/eza-themes) repository, or contribute your own.
An example theme file is available in `docs/theme.yml`, and needs to either be placed in a directory specified by the
environment variable `EZA_CONFIG_DIR`, or will looked for by default in `$XDG_CONFIG_HOME/eza`.
Full details are available on the [man page](https://github.com/eza-community/eza/tree/main/man/eza_colors-explanation.5.md) and an example theme file is included [here](https://github.com/eza-community/eza/tree/main/docs/theme.yml)
</details>
# Hacking on eza
If you wanna contribute to eza, firstly, you're expected to follow our
[code of conduct](https://github.com/eza-community/eza/blob/main/CODE_OF_CONDUCT.md).
After having understood the code of conduct, you can have a look at our
[CONTRIBUTING.md](https://github.com/eza-community/eza/blob/main/CONTRIBUTING.md)
for more info about actual hacking.
[](https://star-history.com/#eza-community/eza&Date)
================================================
FILE: REUSE.toml
================================================
# SPDX-FileCopyrightText: 2024 Christina Sørensen
#
# SPDX-License-Identifier: EUPL-1.2
version = 1
SPDX-PackageName = "eza"
SPDX-PackageSupplier = "Christina Sørensen <christina@cafkafk.com>"
[[annotations]]
path = "flake.lock"
precedence = "aggregate"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "Cargo.lock"
precedence = "aggregate"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = ".envrc"
precedence = "aggregate"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "tests/**"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "completions/**"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "man/**"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "deb.asc"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "devtools/**"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = "docs/**"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = ".github/**.md"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
# pre-commit-hooks.nix cause these to appear in commit check:(
[[annotations]]
path = ".cache/pre-commit/README"
precedence = "aggregate"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = ".cache/pre-commit/db.db"
precedence = "aggregate"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
[[annotations]]
path = ".gitconfig"
precedence = "aggregate"
SPDX-FileCopyrightText = "2024 Christina Sørensen"
SPDX-License-Identifier = "EUPL-1.2"
================================================
FILE: SECURITY.md
================================================
<!--
SPDX-FileCopyrightText: 2023-2024 Christina Sørensen
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
# Security Policy
## Supported Versions
This section shows which versions of eza are
currently being supported with security updates.
| Version | Supported |
| ------- | ------------------ |
| latest | :white_check_mark: |
| < 0.10.6 | :x: |
## Reporting a Vulnerability
Please email all vulnerabilities to christina@cafkafk.com, with PGP encryption and signature, and ideally send along plaintext public key or instructions on where to find public key (keyserver etc.).
================================================
FILE: TESTING.md
================================================
<!--
SPDX-FileCopyrightText: 2024 Christina Sørensen, Martin Fillon
SPDX-FileContributor: Christina Sørensen
SPDX-License-Identifier: EUPL-1.2
-->
# Testing eza
## Running tests
In order to run the tests in eza you need:
- [just](https://github.com/casey/just)
- [nix](https://nixos.org)
then either run:
- `just itest`
- `nix build -L trycmd-local`
## Modifying tests
In order to test your changes on eza, you will need to do one or multiple things in different cases.
You will need the additional tool
- [powertest](https://github.com/eza-community/powertest)
You will also need to modify the `devtools/dir-generator.sh` file if you want to add some test cases
### You added/modified an option
Please run `just regen` to regenerate powertesting. Then look into `tests/gen` or `tests/cmd` for any tests not passing
### You changed the output of eza
Please run `nix build -L trydump` or `just idump`
And lookout for any test no longer passing
================================================
FILE: benches/my_benchmark.rs
================================================
// SPDX-FileCopyrightText: 2024 Christina Sørensen
// SPDX-License-Identifier: EUPL-1.2
//
// SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
// SPDX-FileCopyrightText: 2014 Benjamin Sago
// SPDX-License-Identifier: MIT
use std::hint::black_box;
use criterion::{Criterion, criterion_group, criterion_main};
pub fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("logger", |b| {
b.iter(|| {
eza::logger::configure(black_box(std::env::var_os(eza::options::vars::EZA_DEBUG)));
});
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
================================================
FILE: build.rs
================================================
// SPDX-FileCopyrightText: 2024 Christina Sørensen
// SPDX-License-Identifier: EUPL-1.2
//
// SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
// SPDX-FileCopyrightText: 2014 Benjamin Sago
// SPDX-License-Identifier: MIT
/// The version string isn’t the simplest: we want to show the version,
/// current Git hash, and compilation date when building *debug* versions, but
/// just the version for *release* versions so the builds are reproducible.
///
/// This script generates the string from the environment variables that Cargo
/// adds (<http://doc.crates.io/environment-variables.html>) and runs `git` to
/// get the SHA1 hash. It then writes the string into a file, which exa then
/// includes at build-time.
///
/// - <https://stackoverflow.com/q/43753491/3484614>
/// - <https://crates.io/crates/vergen>
use std::env;
use std::fs::File;
use std::io::{self, Write};
use std::path::PathBuf;
use chrono::prelude::*;
/// The build script entry point.
fn main() -> io::Result<()> {
#![allow(clippy::write_with_newline)]
let tagline = "eza - A modern, maintained replacement for ls";
let url = "https://github.com/eza-community/eza";
let ver = if is_debug_build() {
format!(
"{}\nv{} \\1;31m(pre-release debug build!)\\0m\n\\1;4;34m{}\\0m",
tagline,
version_string(),
url
)
} else if is_development_version() {
format!(
"{}\nv{} [{}] built on {} \\1;31m(pre-release!)\\0m\n\\1;4;34m{}\\0m",
tagline,
version_string(),
git_hash(),
build_date(),
url
)
} else {
format!("{}\nv{}\n\\1;4;34m{}\\0m", tagline, version_string(), url)
};
// We need to create these files in the Cargo output directory.
let out = PathBuf::from(env::var("OUT_DIR").unwrap());
let path = &out.join("version_string.txt");
// Bland version text
let mut f =
File::create(path).unwrap_or_else(|_| panic!("{}", path.to_string_lossy().to_string()));
writeln!(f, "{}", strip_codes(&ver))?;
Ok(())
}
/// Removes escape codes from a string.
fn strip_codes(input: &str) -> String {
input
.replace("\\0m", "")
.replace("\\1;31m", "")
.replace("\\1;4;34m", "")
}
/// Retrieve the project’s current Git hash, as a string.
fn git_hash() -> String {
use std::process::Command;
String::from_utf8_lossy(
&Command::new("git")
.args(["rev-parse", "--short", "HEAD"])
.output()
.unwrap()
.stdout,
)
.trim()
.to_string()
}
/// Whether we should show pre-release info in the version string.
///
/// Both weekly releases and actual releases are --release releases,
/// but actual releases will have a proper version number.
fn is_development_version() -> bool {
cargo_version().ends_with("-pre") || env::var("PROFILE").unwrap() == "debug"
}
/// Whether we are building in debug mode.
fn is_debug_build() -> bool {
env::var("PROFILE").unwrap() == "debug"
}
/// Retrieves the [package] version in Cargo.toml as a string.
fn cargo_version() -> String {
env::var("CARGO_PKG_VERSION").unwrap()
}
/// Returns the version and build parameters string.
fn version_string() -> String {
let mut ver = cargo_version();
let feats = nonstandard_features_string();
if !feats.is_empty() {
ver.push_str(&format!(" [{}]", &feats));
}
ver
}
/// Finds whether a feature is enabled by examining the Cargo variable.
fn feature_enabled(name: &str) -> bool {
env::var(format!("CARGO_FEATURE_{name}"))
.map(|e| !e.is_empty())
.unwrap_or(false)
}
/// A comma-separated list of non-standard feature choices.
fn nonstandard_features_string() -> String {
let mut s = Vec::new();
if feature_enabled("GIT") {
s.push("+git");
} else {
s.push("-git");
}
s.join(", ")
}
/// Formats the current date as an ISO 8601 string.
fn build_date() -> String {
let now = Local::now();
now.date_naive().format("%Y-%m-%d").to_string()
}
================================================
FILE: completions/bash/eza
================================================
# shellcheck shell=bash
_eza() {
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
--help|-v|--version|--smart-group)
return
;;
--colour)
mapfile -t COMPREPLY < <(compgen -W 'always automatic auto never' -- "$cur")
return
;;
--icons)
mapfile -t COMPREPLY < <(compgen -W 'always automatic auto never' -- "$cur")
return
;;
-L|--level)
mapfile -t COMPREPLY < <(compgen -W '{0..9}' -- "$cur")
return
;;
-s|--sort)
mapfile -t COMPREPLY < <(compgen -W 'name filename Name Filename size filesize extension Extension date time modified changed accessed created type inode oldest newest age none --' -- "$cur")
return
;;
-t|--time)
mapfile -t COMPREPLY < <(compgen -W 'modified changed accessed created --' -- "$cur")
return
;;
--time-style)
mapfile -t COMPREPLY < <(compgen -W 'default iso long-iso full-iso relative +FORMAT --' -- "$cur")
return
;;
--color-scale)
mapfile -t COMPREPLY < <(compgen -W 'all age size --' -- "$cur")
return
;;
--color-scale-mode)
mapfile -t COMPREPLY < <(compgen -W 'fixed gradient --' -- "$cur")
return
;;
--absolute)
mapfile -t COMPREPLY < <(compgen -W 'on follow off --' -- "$cur")
return
;;
esac
case "$cur" in
# _parse_help doesn’t pick up short options when they are on the same line than long options
--*)
# colo[u]r isn’t parsed correctly so we filter these options out and add them by hand
parse_help=$(eza --help | grep -oE ' (--[[:alnum:]@-]+)' | tr -d ' ' | grep -v '\--colo')
completions=$(echo '--color --colour --color-scale --colour-scale --color-scale-mode --colour-scale-mode' "$parse_help")
mapfile -t COMPREPLY < <(compgen -W "$completions" -- "$cur")
;;
-*)
completions=$(eza --help | grep -oE ' (-[[:alnum:]@])' | tr -d ' ')
mapfile -t COMPREPLY < <(compgen -W "$completions" -- "$cur")
;;
*)
_filedir
;;
esac
} &&
complete -o filenames -o bashdefault -F _eza eza
================================================
FILE: completions/fish/eza.fish
================================================
# Meta-stuff
complete -c eza -s v -l version -d "Show version of eza"
complete -c eza -l help -d "Show list of command-line options"
# Display options
complete -c eza -s 1 -l oneline -d "Display one entry per line"
complete -c eza -s l -l long -d "Display extended file metadata as a table"
complete -c eza -s G -l grid -d "Display entries in a grid"
complete -c eza -s x -l across -d "Sort the grid across, rather than downwards"
complete -c eza -s R -l recurse -d "Recurse into directories"
complete -c eza -s T -l tree -d "Recurse into directories as a tree"
complete -c eza -s X -l dereference -d "Dereference symbolic links when displaying file information"
complete -c eza -s F -l classify -d "Display type indicator by file names"
complete -c eza -l color \
-l colour -d "When to use terminal colours" -x -a "
always\t'Always use colour'
auto\t'Use colour if standard output is a terminal'
automatic\t'Use colour if standard output is a terminal'
never\t'Never use colour'
"
complete -c eza -l color-scale \
-l colour-scale -d "Highlight levels 'field' distinctly" -x -a "
all\t''
age\t''
size\t''
"
complete -c eza -l color-scale-mode \
-l colour-scale-mode \
-d "Use gradient or fixed colors in --color-scale" -x -a "
fixed\t'Highlight based on fixed colors'
gradient\t'Highlight based \'field\' in relation to other files'
"
complete -c eza -l icons -d "When to display icons" -x -a "
always\t'Always display icons'
auto\t'Display icons if standard output is a terminal'
automatic\t'Display icons if standard output is a terminal'
never\t'Never display icons'
"
complete -c eza -l no-quotes -d "Don't quote file names with spaces"
complete -c eza -l hyperlink -d "Display entries as hyperlinks"
complete -c eza -l follow-symlinks -d "Drill down into symbolic links that point to directories"
complete -c eza -l absolute -d "Display entries with their absolute path" -x -a "
on\t'Show absolute path for listed entries'
follow\t'Show absolute path with followed symlinks'
off\t'Do not show the absolute path'
"
complete -c eza -l smart-group -d "Only show group if it has a different name from owner"
# Filtering and sorting options
complete -c eza -l group-directories-first -d "Sort directories before other files"
complete -c eza -l group-directories-last -d "Sort directories after other files"
complete -c eza -l git-ignore -d "Ignore files mentioned in '.gitignore'"
complete -c eza -s a -l all -d "Show hidden and 'dot' files. Use this twice to also show the '.' and '..' directories"
complete -c eza -s A -l almost-all -d "Equivalent to --all; included for compatibility with `ls -A`"
complete -c eza -s d -l treat-dirs-as-files -d "List directories like regular files"
complete -c eza -s L -l level -d "Limit the depth of recursion" -x -a "1 2 3 4 5 6 7 8 9"
complete -c eza -s w -l width -d "Limits column output of grid, 0 implies auto-width"
complete -c eza -s r -l reverse -d "Reverse the sort order"
complete -c eza -s s -l sort -d "Which field to sort by" -x -a "
accessed\t'Sort by file accessed time'
age\t'Sort by file modified time (newest first)'
changed\t'Sort by changed time'
created\t'Sort by file modified time'
date\t'Sort by file modified time'
ext\t'Sort by file extension'
Ext\t'Sort by file extension (uppercase first)'
extension\t'Sort by file extension'
Extension\t'Sort by file extension (uppercase first)'
filename\t'Sort by filename'
Filename\t'Sort by filename (uppercase first)'
inode\t'Sort by file inode'
modified\t'Sort by file modified time'
name\t'Sort by filename'
Name\t'Sort by filename (uppercase first)'
newest\t'Sort by file modified time (newest first)'
none\t'Do not sort files at all'
oldest\t'Sort by file modified time'
size\t'Sort by file size'
time\t'Sort by file modified time'
type\t'Sort by file type'
"
complete -c eza -s I -l ignore-glob -d "Ignore files that match these glob patterns" -r
complete -c eza -s D -l only-dirs -d "List only directories"
complete -c eza -s f -l only-files -d "List only files"
complete -c eza -l show-symlinks -d "Explicitly show symbolic links (For use with --only-dirs | --only-files)"
complete -c eza -l no-symlinks -d "Do not show symbolic links"
# Long view options
complete -c eza -s b -l binary -d "List file sizes with binary prefixes"
complete -c eza -s B -l bytes -d "List file sizes in bytes, without any prefixes"
complete -c eza -s g -l group -d "List each file's group"
complete -c eza -s h -l header -d "Add a header row to each column"
complete -c eza -s H -l links -d "List each file's number of hard links"
complete -c eza -s i -l inode -d "List each file's inode number"
complete -c eza -s S -l blocksize -d "List each file's size of allocated file system blocks"
complete -c eza -s t -l time -d "Which timestamp field to list" -x -a "
modified\t'Display modified time'
changed\t'Display changed time'
accessed\t'Display accessed time'
created\t'Display created time'
"
complete -c eza -s m -l modified -d "Use the modified timestamp field"
complete -c eza -s n -l numeric -d "List numeric user and group IDs."
complete -c eza -l changed -d "Use the changed timestamp field"
complete -c eza -s u -l accessed -d "Use the accessed timestamp field"
complete -c eza -s U -l created -d "Use the created timestamp field"
complete -c eza -l time-style -d "How to format timestamps" -x -a "
default\t'Use the default time style'
iso\t'Display brief ISO timestamps'
long-iso\t'Display longer ISO timestamps, up to the minute'
full-iso\t'Display full ISO timestamps, up to the nanosecond'
relative\t'Display relative timestamps'
+FORMAT\t'Use custom time style'
"
complete -c eza -l total-size -d "Show recursive directory size (unix only)"
complete -c eza -l no-permissions -d "Suppress the permissions field"
complete -c eza -s o -l octal-permissions -d "List each file's permission in octal format"
complete -c eza -l no-filesize -d "Suppress the filesize field"
complete -c eza -l no-user -d "Suppress the user field"
complete -c eza -l no-time -d "Suppress the time field"
complete -c eza -s M -l mounts -d "Show mount details"
complete -c eza -l stdin -d "When piping to eza. Read file names from stdin"
# Optional extras
complete -c eza -l git -d "List each file's Git status, if tracked"
complete -c eza -l no-git -d "Suppress Git status"
complete -c eza -l git-repos -d "List each git-repos status and branch name"
complete -c eza -l git-repos-no-status -d "List each git-repos branch name (much faster)"
complete -c eza -s '@' -l extended -d "List each file's extended attributes and sizes"
complete -c eza -s Z -l context -d "List each file's security context"
================================================
FILE: completions/nush/eza.nu
================================================
export extern "eza" [
--version(-v) # Show version of eza
--help # Show list of command-line options
--oneline(-1) # Display one entry per line
--long(-l) # Display extended file metadata as a table
--grid(-G) # Display entries in a grid
--across(-x) # Sort the grid across, rather than downwards
--recurse(-R) # Recurse into directories
--tree(-T) # Recurse into directories as a tree
--dereference(-X) # Dereference symbolic links when displaying file information
--classify(-F) # Display type indicator by file names
--color # When to use terminal colours
--colour # When to use terminal colours
--color-scale # Highlight levels of file sizes distinctly
--colour-scale # Highlight levels of file sizes distinctly
--color-scale-mode # Use gradient or fixed colors in --color-scale
--colour-scale-mode # Use gradient or fixed colors in --colour-scale
--icons # When to display icons
--no-quotes # Don't quote file names with spaces
--hyperlink # Display entries as hyperlinks
--absolute # Display entries with their absolute path
--follow-symlinks # Drill down into symbolic links that point to directories
--group-directories-first # Sort directories before other files
--group-directories-last # Sort directories after other files
--git-ignore # Ignore files mentioned in '.gitignore'
--all(-a) # Show hidden and 'dot' files. Use this twice to also show the '.' and '..' directories
--almost-all(-A) # Equivalent to --all; included for compatibility with `ls -A`
--treat-dirs-as-files(-d) # List directories like regular files
--level(-L): string # Limit the depth of recursion
--width(-w) # Limits column output of grid, 0 implies auto-width
--reverse(-r) # Reverse the sort order
--sort(-s) # Which field to sort by
--only-dirs(-D) # List only directories
--only-files(-f) # List only files
--show-symlinks # Explicitly show symbolic links (for use with --only-dirs | --only-files)
--no-symlinks # Do not show symbolic links
--binary(-b) # List file sizes with binary prefixes
--bytes(-B) # List file sizes in bytes, without any prefixes
--group(-g) # List each file's group
--header(-h) # Add a header row to each column
--links(-H) # List each file's number of hard links
--inode(-i) # List each file's inode number
--blocksize(-S) # List each file's size of allocated file system blocks
--time(-t) -d # Which timestamp field to list
--modified(-m) # Use the modified timestamp field
--numeric(-n) # List numeric user and group IDs.
--changed # Use the changed timestamp field
--accessed(-u) # Use the accessed timestamp field
--created(-U) # Use the created timestamp field
--time-style # How to format timestamps
--total-size # Show recursive directory size (unix only)
--no-permissions # Suppress the permissions field
--octal-permissions(-o) # List each file's permission in octal format
--no-filesize # Suppress the filesize field
--no-user # Suppress the user field
--no-time # Suppress the time field
--mounts(-M) # Show mount details
--git # List each file's Git status, if tracked
--no-git # Suppress Git status
--git-repos # List each git-repos status and branch name
--git-repos-no-status # List each git-repos branch name (much faster)
--extended(-@) # List each file's extended attributes and sizes
--context(-Z) # List each file's security context
--smart-group # Only show group if it has a different name from owner
--stdin # When piping to eza. Read file paths from stdin
]
================================================
FILE: completions/pwsh/_eza.ps1
================================================
using namespace System.Management.Automation
using namespace System.Management.Automation.Language
Register-ArgumentCompleter -Native -CommandName 'eza' -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
$ArrayWhen = @('always', 'auto', 'never')
$ArraySort = @('name', 'extension', 'size', 'type', 'created', 'modified', 'accessed', 'changed', 'inode', 'none')
$ArrayColorScaleMode = @('fixed', 'gradient')
$ArrayColorScale = @('all', 'age', 'size')
$ArrayAbsolute = @('on', 'follow', 'off')
$ArrayTime = @('modified', 'accessed', 'created')
$ArrayTimeStyle = @('default', 'iso', 'long-iso', 'full-iso', 'relative', '+%Y-%m-%d %H:%M', '+%Y.%m.%d %H:$M:$s')
$commandElements = $commandAst.CommandElements
$command = @(
'eza'
for ($i = 1; $i -lt $commandElements.Count; $i++) {
$element = $commandElements[$i]
if ($element -isnot [StringConstantExpressionAst] -or
$element.StringConstantType -ne [StringConstantType]::BareWord -or
$element.Value -eq $wordToComplete) {
break
}
$element.Value
}) -join ';'
$completions = @(switch -Wildcard ($command) {
'*;--help' {
break
}
'*;--version' {
break
}
'*;--absolute' {
$ArrayAbsolute |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--sort' {
$ArraySort |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--color-scale' {
$ArrayColorScale |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--color-scale-mode' {
$ArrayColorScaleMode |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*--long;*--time-style' {
$ArrayTimeStyle |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*--long;*--time' {
$ArrayTime |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--classify' {
$ArrayWhen |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--color' {
$ArrayWhen |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--icons' {
$ArrayWhen |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--all' {
[CompletionResult]::new('--show-symlinks' ,'listfilessyl' , [CompletionResultType]::ParameterName, 'explicitly show symbolic links (for use with --only-dirs | --only-files)')
[CompletionResult]::new('--no-symlinks' ,'listfilessyl' , [CompletionResultType]::ParameterName, 'do not show symbolic links')
break
}
'*long*' {
# [CompletionResult]::new('-b' ,'binary' , [CompletionResultType]::ParameterName, 'list file sizes with binary prefixes')
[CompletionResult]::new('--binary' ,'binary' , [CompletionResultType]::ParameterName, 'list file sizes with binary prefixes')
# [CompletionResult]::new('-B' ,'bytes' , [CompletionResultType]::ParameterName, 'list file sizes in bytes, without any prefixes')
[CompletionResult]::new('--bytes' ,'bytes' , [CompletionResultType]::ParameterName, 'list file sizes in bytes, without any prefixes')
# [CompletionResult]::new('-g' ,'group' , [CompletionResultType]::ParameterName, 'list each file''s group')
[CompletionResult]::new('--smart-group' ,'smart-group' , [CompletionResultType]::ParameterName, 'only show group if it has a different name from owner')
[CompletionResult]::new('--group' ,'group' , [CompletionResultType]::ParameterName, 'list each file''s group')
# [CompletionResult]::new('-h' ,'header' , [CompletionResultType]::ParameterName, 'add a header row to each column')
[CompletionResult]::new('--header' ,'header' , [CompletionResultType]::ParameterName, 'add a header row to each column')
# [CompletionResult]::new('-H' ,'links' , [CompletionResultType]::ParameterName, 'list each file''s number of hard links')
[CompletionResult]::new('--links' ,'links' , [CompletionResultType]::ParameterName, 'list each file''s number of hard links')
# [CompletionResult]::new('-i' ,'inode' , [CompletionResultType]::ParameterName, 'list each file''s inode number')
[CompletionResult]::new('--inode' ,'inode' , [CompletionResultType]::ParameterName, 'list each file''s inode number')
# [CompletionResult]::new('-M' ,'mounts' , [CompletionResultType]::ParameterName, 'show mount details (Linux and Mac only)')
# [CompletionResult]::new('--mounts' ,'mounts' , [CompletionResultType]::ParameterName, 'show mount details (Linux and Mac only)')
# [CompletionResult]::new('-n' ,'numeric' , [CompletionResultType]::ParameterName, 'list numeric user and group IDs')
[CompletionResult]::new('--numeric' ,'numeric' , [CompletionResultType]::ParameterName, 'list numeric user and group IDs')
# [CompletionResult]::new('-O' ,'flags' , [CompletionResultType]::ParameterName, 'list file flags (Mac, BSD, and Windows only)')
[CompletionResult]::new('--flags' ,'flags' , [CompletionResultType]::ParameterName, 'list file flags (Mac, BSD, and Windows only)')
# [CompletionResult]::new('-S' ,'blocksize' , [CompletionResultType]::ParameterName, 'show size of allocated file system blocks')
[CompletionResult]::new('--blocksize' ,'blocksize' , [CompletionResultType]::ParameterName, 'show size of allocated file system blocks')
# [CompletionResult]::new('-t' ,'time' , [CompletionResultType]::ParameterName, 'which timestamp field to list (modified, accessed, created)')
[CompletionResult]::new('--time' ,'time' , [CompletionResultType]::ParameterName, 'which timestamp field to list (modified, accessed, created)')
# [CompletionResult]::new('-m' ,'modified' , [CompletionResultType]::ParameterName, 'use the modified timestamp field')
[CompletionResult]::new('--modified' ,'modified' , [CompletionResultType]::ParameterName, 'use the modified timestamp field')
# [CompletionResult]::new('-u' ,'accessed' , [CompletionResultType]::ParameterName, 'use the accessed timestamp field')
[CompletionResult]::new('--accessed' ,'accessed' , [CompletionResultType]::ParameterName, 'use the accessed timestamp field')
# [CompletionResult]::new('-U' ,'created' , [CompletionResultType]::ParameterName, 'use the created timestamp field')
[CompletionResult]::new('--changed' ,'changed' , [CompletionResultType]::ParameterName, 'use the changed timestamp field')
[CompletionResult]::new('--created' ,'created' , [CompletionResultType]::ParameterName, 'use the created timestamp field')
[CompletionResult]::new('--time-style' ,'time-style' , [CompletionResultType]::ParameterName, 'how to format timestamps (default, iso, long-iso,full-iso, relative, or a custom style ''+<FORMAT>'' like ''+%Y-%m-%d %H:%M'')')
# [CompletionResult]::new('--total-size' ,'total-size' , [CompletionResultType]::ParameterName, 'show the size of a directory as the size of all files and directories inside (unix only)')
# [CompletionResult]::new('-o' ,'octal-permissions' , [CompletionResultType]::ParameterName, 'list each file''s permission in octal format')
[CompletionResult]::new('--no-permissions' ,'no-permissions' , [CompletionResultType]::ParameterName, 'suppress the permissions field')
[CompletionResult]::new('--octal-permissions' ,'octal-permissions' , [CompletionResultType]::ParameterName, 'list each file''s permission in octal format')
[CompletionResult]::new('--no-filesize' ,'no-filesize' , [CompletionResultType]::ParameterName, 'suppress the filesize field')
[CompletionResult]::new('--no-user' ,'no-user' , [CompletionResultType]::ParameterName, 'suppress the user field')
[CompletionResult]::new('--no-time' ,'no-time' , [CompletionResultType]::ParameterName, 'suppress the time field')
[CompletionResult]::new('--stdin' ,'stdin' , [CompletionResultType]::ParameterName, 'read file names from stdin, one per line or other separator specified in environment')
[CompletionResult]::new('--git' ,'git' , [CompletionResultType]::ParameterName, 'list each file''s Git status, if tracked or ignored')
[CompletionResult]::new('--no-git' ,'no-git' , [CompletionResultType]::ParameterName, 'suppress Git status (always overrides -git, --git-repos, --git-repos-no-status)')
[CompletionResult]::new('--git-repos' ,'git-repos' , [CompletionResultType]::ParameterName, 'list root of git-tree status')
[CompletionResult]::new('--git-repos-no-status' ,'git-repos-no-status' , [CompletionResultType]::ParameterName, 'list each git-repos branch name (much faster)')
break
}
default {
# [CompletionResult]::new('-?' ,'help' , [CompletionResultType]::ParameterName, 'show list of command-line options')
[CompletionResult]::new('--help' ,'help' , [CompletionResultType]::ParameterName, 'show list of command-line options')
# [CompletionResult]::new('-v' ,'version' , [CompletionResultType]::ParameterName, 'show version of eza')
[CompletionResult]::new('--version' ,'version' , [CompletionResultType]::ParameterName, 'show version of eza')
# [CompletionResult]::new('-1' ,'oneline' , [CompletionResultType]::ParameterName, 'display one entry per line')
[CompletionResult]::new('--onelin
gitextract_t9nlug2r/
├── .config/
│ ├── cliff.toml
│ └── treefmt.nix
├── .envrc
├── .git-blame-ignore-revs
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── compilation_error.md
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ └── question.md
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── pull_request_template.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── apt.yml
│ ├── unit-tests.yml
│ ├── update-dependencies.sh
│ ├── update-dependencies.yaml
│ └── winget.yml
├── .gitignore
├── .pre-commit-config-non-nix.yaml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cargo.toml
├── INSTALL.md
├── LICENSE.txt
├── LICENSES/
│ ├── CC-BY-4.0.txt
│ ├── EUPL-1.2.txt
│ └── MIT.txt
├── README.md
├── REUSE.toml
├── SECURITY.md
├── TESTING.md
├── benches/
│ └── my_benchmark.rs
├── build.rs
├── completions/
│ ├── bash/
│ │ └── eza
│ ├── fish/
│ │ └── eza.fish
│ ├── nush/
│ │ └── eza.nu
│ ├── pwsh/
│ │ └── _eza.ps1
│ └── zsh/
│ └── _eza
├── deb.asc
├── deny.toml
├── devtools/
│ ├── deb-package.sh
│ ├── dir-generator.sh
│ ├── generate-timestamp-test-dir.sh
│ └── generate-trycmd-test.sh
├── docs/
│ ├── tapes/
│ │ └── demo.tape
│ └── theme.yml
├── flake.nix
├── justfile
├── man/
│ ├── eza.1.md
│ ├── eza_colors-explanation.5.md
│ └── eza_colors.5.md
├── nix/
│ ├── eza.nix
│ └── trycmd.nix
├── powertest.yaml
├── rust-toolchain.toml
├── snap/
│ └── snapcraft.yaml
├── src/
│ ├── fs/
│ │ ├── dir.rs
│ │ ├── dir_action.rs
│ │ ├── feature/
│ │ │ ├── git.rs
│ │ │ ├── mod.rs
│ │ │ └── xattr.rs
│ │ ├── fields.rs
│ │ ├── file.rs
│ │ ├── filter.rs
│ │ ├── mod.rs
│ │ ├── mounts/
│ │ │ ├── linux.rs
│ │ │ ├── macos.rs
│ │ │ └── mod.rs
│ │ └── recursive_size.rs
│ ├── info/
│ │ ├── filetype.rs
│ │ ├── mod.rs
│ │ └── sources.rs
│ ├── lib.rs
│ ├── logger.rs
│ ├── main.rs
│ ├── options/
│ │ ├── config.rs
│ │ ├── dir_action.rs
│ │ ├── error.rs
│ │ ├── file_name.rs
│ │ ├── filter.rs
│ │ ├── mod.rs
│ │ ├── parser.rs
│ │ ├── stdin.rs
│ │ ├── theme.rs
│ │ ├── vars.rs
│ │ └── view.rs
│ ├── output/
│ │ ├── cell.rs
│ │ ├── color_scale.rs
│ │ ├── details.rs
│ │ ├── escape.rs
│ │ ├── file_name.rs
│ │ ├── grid.rs
│ │ ├── grid_details.rs
│ │ ├── icons.rs
│ │ ├── lines.rs
│ │ ├── mod.rs
│ │ ├── render/
│ │ │ ├── blocks.rs
│ │ │ ├── filetype.rs
│ │ │ ├── flags.rs
│ │ │ ├── flags_bsd.rs
│ │ │ ├── flags_windows.rs
│ │ │ ├── git.rs
│ │ │ ├── groups.rs
│ │ │ ├── inode.rs
│ │ │ ├── links.rs
│ │ │ ├── mod.rs
│ │ │ ├── octal.rs
│ │ │ ├── permissions.rs
│ │ │ ├── permissions_unix.rs
│ │ │ ├── permissions_windows.rs
│ │ │ ├── securityctx.rs
│ │ │ ├── size.rs
│ │ │ ├── times.rs
│ │ │ └── users.rs
│ │ ├── table.rs
│ │ ├── time.rs
│ │ └── tree.rs
│ └── theme/
│ ├── default_theme.rs
│ ├── lsc.rs
│ ├── mod.rs
│ └── ui_styles.rs
└── tests/
├── cli_tests.rs
├── cmd/
│ ├── absolute_file_all.stderr
│ ├── absolute_file_all.stdout
│ ├── absolute_file_all.toml
│ ├── absolute_recurse_unix.stderr
│ ├── absolute_recurse_unix.stdout
│ ├── absolute_recurse_unix.toml
│ ├── absolute_unix.stderr
│ ├── absolute_unix.stdout
│ ├── absolute_unix.toml
│ ├── basic_all.stderr
│ ├── basic_all.stdout
│ ├── basic_all.toml
│ ├── classify-hyperlink-width-50_nix_local.stderr
│ ├── classify-hyperlink-width-50_nix_local.stdout
│ ├── follow-symlinks_unix.stderr
│ ├── follow-symlinks_unix.stdout
│ ├── follow-symlinks_unix.toml
│ ├── icons_all.stderr
│ ├── icons_all.stdout
│ ├── icons_all.toml
│ ├── long_icons_always.stderr
│ ├── long_icons_always.stdout
│ ├── long_icons_always.toml
│ ├── long_windows.stderr
│ ├── long_windows.stdout
│ ├── long_windows.toml
│ ├── tree_unix.stderr
│ ├── tree_unix.stdout
│ └── tree_unix.toml
├── gen/
│ ├── inexistant_file_unix.stderr
│ ├── inexistant_file_unix.stdout
│ ├── inexistant_file_unix.toml
│ ├── long_all_nix.stderr
│ ├── long_all_nix.stdout
│ ├── long_all_nix.toml
│ ├── long_binary_bytes_unix.stderr
│ ├── long_binary_bytes_unix.stdout
│ ├── long_binary_bytes_unix.toml
│ ├── long_blocksize_nix.stderr
│ ├── long_blocksize_nix.stdout
│ ├── long_blocksize_nix.toml
│ ├── long_extended_nix.stderr
│ ├── long_extended_nix.stdout
│ ├── long_extended_nix.toml
│ ├── long_file_size_unix.stderr
│ ├── long_file_size_unix.stdout
│ ├── long_file_size_unix.toml
│ ├── long_git_nix.stderr
│ ├── long_git_nix.stdout
│ ├── long_git_nix.toml
│ ├── long_git_repos_nix.stderr
│ ├── long_git_repos_nix.stdout
│ ├── long_git_repos_nix.toml
│ ├── long_git_repos_no_status_nix.stderr
│ ├── long_git_repos_no_status_nix.stdout
│ ├── long_git_repos_no_status_nix.toml
│ ├── long_grid_nix.stderr
│ ├── long_grid_nix.stdout
│ ├── long_grid_nix.toml
│ ├── long_header_nix.stderr
│ ├── long_header_nix.stdout
│ ├── long_header_nix.toml
│ ├── long_header_unix.stderr
│ ├── long_header_unix.stdout
│ ├── long_header_unix.toml
│ ├── long_icons_nix.stderr
│ ├── long_icons_nix.stdout
│ ├── long_icons_nix.toml
│ ├── long_links_recurse_unix.stderr
│ ├── long_links_recurse_unix.stdout
│ ├── long_links_recurse_unix.toml
│ ├── long_nix.stderr
│ ├── long_nix.stdout
│ ├── long_nix.toml
│ ├── long_octal_nix.stderr
│ ├── long_octal_nix.stdout
│ ├── long_octal_nix.toml
│ ├── long_recurse_with_level_unix.stderr
│ ├── long_recurse_with_level_unix.stdout
│ ├── long_recurse_with_level_unix.toml
│ ├── long_time_style_custom_non_recent_and_recent_nix.stderr
│ ├── long_time_style_custom_non_recent_and_recent_nix.stdout
│ ├── long_time_style_custom_non_recent_and_recent_nix.toml
│ ├── long_time_style_custom_non_recent_empty_nix.stdout
│ ├── long_time_style_custom_non_recent_empty_nix.toml
│ ├── long_time_style_custom_non_recent_none_nix.stdout
│ ├── long_time_style_custom_non_recent_none_nix.toml
│ ├── long_time_style_custom_non_recent_only_nix.stderr
│ ├── long_time_style_custom_non_recent_only_nix.stdout
│ ├── long_time_style_custom_non_recent_only_nix.toml
│ ├── long_time_style_custom_recent_empty_nix.stdout
│ ├── long_time_style_relative_nix.stderr
│ ├── long_time_style_relative_nix.stdout
│ ├── long_time_style_relative_nix.toml
│ ├── long_unix.stderr
│ ├── long_unix.stdout
│ ├── long_unix.toml
│ ├── only_dir_recursive_long_unix.stderr
│ ├── only_dir_recursive_long_unix.stdout
│ ├── only_dir_recursive_long_unix.toml
│ ├── only_dir_recursive_unix.stderr
│ ├── only_dir_recursive_unix.stdout
│ ├── only_dir_recursive_unix.toml
│ ├── only_dir_unix.stderr
│ ├── only_dir_unix.stdout
│ ├── only_dir_unix.toml
│ ├── only_file_unix.stderr
│ ├── only_file_unix.stdout
│ ├── only_file_unix.toml
│ ├── ptest_19a666ddec321ae2.stderr
│ ├── ptest_19a666ddec321ae2.stdout
│ ├── ptest_2dbc2104ddb934cd.stderr
│ ├── ptest_2dbc2104ddb934cd.stdout
│ ├── ptest_4b30f7de50929327.stderr
│ ├── ptest_4b30f7de50929327.stdout
│ ├── ptest_4b7165c936488151.stderr
│ ├── ptest_4b7165c936488151.stdout
│ ├── ptest_82a40fefd797654.stderr
│ ├── ptest_82a40fefd797654.stdout
│ ├── ptest_a920233617a69b55.stderr
│ ├── ptest_a920233617a69b55.stdout
│ ├── ptest_f90d48e69d70b41.stderr
│ ├── ptest_f90d48e69d70b41.stdout
│ ├── recursive_long_unix.stderr
│ ├── recursive_long_unix.stdout
│ ├── recursive_long_unix.toml
│ ├── recursive_unix.stderr
│ ├── recursive_unix.stdout
│ ├── recursive_unix.toml
│ ├── tree_long_unix.stderr
│ ├── tree_long_unix.stdout
│ ├── tree_long_unix.toml
│ ├── tree_unix.stderr
│ ├── tree_unix.stdout
│ └── tree_unix.toml
├── itest/
│ ├── a
│ ├── b
│ ├── c
│ ├── d
│ ├── e
│ ├── exa/
│ │ └── sssssssssssssssssssssssssggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss/
│ │ └── Makefile
│ ├── f
│ ├── g
│ ├── h
│ ├── i
│ ├── j
│ ├── k
│ ├── l
│ ├── m
│ ├── n
│ ├── o
│ ├── p
│ ├── q
│ └── vagrant/
│ ├── debug/
│ │ ├── .gitignore
│ │ └── a
│ ├── dev/
│ │ └── main.bf
│ └── log/
│ └── run/
│ ├── run.log.text
│ └── sps.log.text
└── ptests/
├── ptest_109771b99ff4bc2c.stderr
├── ptest_109771b99ff4bc2c.stdout
├── ptest_109771b99ff4bc2c.toml
├── ptest_10c50228fc1c6107.stderr
├── ptest_10c50228fc1c6107.stdout
├── ptest_10c50228fc1c6107.toml
├── ptest_1128756497bbcbce.stderr
├── ptest_1128756497bbcbce.stdout
├── ptest_1128756497bbcbce.toml
├── ptest_13234446d830648.stderr
├── ptest_13234446d830648.stdout
├── ptest_13234446d830648.toml
├── ptest_132ac9f159c3473e.stderr
├── ptest_132ac9f159c3473e.stdout
├── ptest_132ac9f159c3473e.toml
├── ptest_13c76530584f9804.stderr
├── ptest_13c76530584f9804.stdout
├── ptest_13c76530584f9804.toml
├── ptest_14c5df14f800bc28.stderr
├── ptest_14c5df14f800bc28.stdout
├── ptest_14c5df14f800bc28.toml
├── ptest_182085f8602ed2aa.stderr
├── ptest_182085f8602ed2aa.stdout
├── ptest_182085f8602ed2aa.toml
├── ptest_1889daad10054484.stderr
├── ptest_1889daad10054484.stdout
├── ptest_1889daad10054484.toml
├── ptest_19cf21a43f373b6.stderr
├── ptest_19cf21a43f373b6.stdout
├── ptest_19cf21a43f373b6.toml
├── ptest_1ab8279d631495b0.stderr
├── ptest_1ab8279d631495b0.stdout
├── ptest_1ab8279d631495b0.toml
├── ptest_1c1df011089efa5f.stderr
├── ptest_1c1df011089efa5f.stdout
├── ptest_1c1df011089efa5f.toml
├── ptest_1c990fbac951fdaf.stderr
├── ptest_1c990fbac951fdaf.stdout
├── ptest_1c990fbac951fdaf.toml
├── ptest_1e61d8c305ff6c48.stderr
├── ptest_1e61d8c305ff6c48.stdout
├── ptest_1e61d8c305ff6c48.toml
├── ptest_1ec7257c14635d03.stderr
├── ptest_1ec7257c14635d03.stdout
├── ptest_1ec7257c14635d03.toml
├── ptest_2092f19a0d4ea1a2.stderr
├── ptest_2092f19a0d4ea1a2.stdout
├── ptest_2092f19a0d4ea1a2.toml
├── ptest_2176b1b061cb7da2.stderr
├── ptest_2176b1b061cb7da2.stdout
├── ptest_2176b1b061cb7da2.toml
├── ptest_219303a91ed6056a.stderr
├── ptest_219303a91ed6056a.stdout
├── ptest_219303a91ed6056a.toml
├── ptest_219f7c8dfa0d0323.stderr
├── ptest_219f7c8dfa0d0323.stdout
├── ptest_219f7c8dfa0d0323.toml
├── ptest_2439b7d68089135b.stderr
├── ptest_2439b7d68089135b.stdout
├── ptest_2439b7d68089135b.toml
├── ptest_247e5acfcf9ba3a8.stderr
├── ptest_247e5acfcf9ba3a8.stdout
├── ptest_247e5acfcf9ba3a8.toml
├── ptest_283667fe5d9c3015.stderr
├── ptest_283667fe5d9c3015.stdout
├── ptest_283667fe5d9c3015.toml
├── ptest_2ba3ba45a3b3cc94.stderr
├── ptest_2ba3ba45a3b3cc94.stdout
├── ptest_2ba3ba45a3b3cc94.toml
├── ptest_2cccf6c2af490359.stderr
├── ptest_2cccf6c2af490359.stdout
├── ptest_2cccf6c2af490359.toml
├── ptest_2dcffc4f000d924e.stderr
├── ptest_2dcffc4f000d924e.stdout
├── ptest_2dcffc4f000d924e.toml
├── ptest_32870705e39ad648.stderr
├── ptest_32870705e39ad648.stdout
├── ptest_32870705e39ad648.toml
├── ptest_32e159e8f043025.stderr
├── ptest_32e159e8f043025.stdout
├── ptest_32e159e8f043025.toml
├── ptest_33a4632005ea6e7f.stderr
├── ptest_33a4632005ea6e7f.stdout
├── ptest_33a4632005ea6e7f.toml
├── ptest_3528aa3d0794ba5b.stderr
├── ptest_3528aa3d0794ba5b.stdout
├── ptest_3528aa3d0794ba5b.toml
├── ptest_36127172d1c48ad1.stderr
├── ptest_36127172d1c48ad1.stdout
├── ptest_36127172d1c48ad1.toml
├── ptest_365b1525fed70635.stderr
├── ptest_365b1525fed70635.stdout
├── ptest_365b1525fed70635.toml
├── ptest_36ff749946aa7b76.stderr
├── ptest_36ff749946aa7b76.stdout
├── ptest_36ff749946aa7b76.toml
├── ptest_38c83409ee57e2af.stderr
├── ptest_38c83409ee57e2af.stdout
├── ptest_38c83409ee57e2af.toml
├── ptest_391fb71023fbe78f.stderr
├── ptest_391fb71023fbe78f.stdout
├── ptest_391fb71023fbe78f.toml
├── ptest_39a4ecaff3909961.stderr
├── ptest_39a4ecaff3909961.stdout
├── ptest_39a4ecaff3909961.toml
├── ptest_39b4326562c3f75f.stderr
├── ptest_39b4326562c3f75f.stdout
├── ptest_39b4326562c3f75f.toml
├── ptest_3a8ed471ff49be49.stderr
├── ptest_3a8ed471ff49be49.stdout
├── ptest_3a8ed471ff49be49.toml
├── ptest_3b5b6fd2802ba8f9.stderr
├── ptest_3b5b6fd2802ba8f9.stdout
├── ptest_3b5b6fd2802ba8f9.toml
├── ptest_3bed5866e590e62a.stderr
├── ptest_3bed5866e590e62a.stdout
├── ptest_3bed5866e590e62a.toml
├── ptest_3f0c3a89d3fcf7d3.stderr
├── ptest_3f0c3a89d3fcf7d3.stdout
├── ptest_3f0c3a89d3fcf7d3.toml
├── ptest_3fe14fdeb5bf19de.stderr
├── ptest_3fe14fdeb5bf19de.stdout
├── ptest_3fe14fdeb5bf19de.toml
├── ptest_404fbc2fe3e5c85.stderr
├── ptest_404fbc2fe3e5c85.stdout
├── ptest_404fbc2fe3e5c85.toml
├── ptest_458d0cef9ea1a5b9.stderr
├── ptest_458d0cef9ea1a5b9.stdout
├── ptest_458d0cef9ea1a5b9.toml
├── ptest_469e79a86c2c874f.stderr
├── ptest_469e79a86c2c874f.stdout
├── ptest_469e79a86c2c874f.toml
├── ptest_4728f2d14d31f2ff.stderr
├── ptest_4728f2d14d31f2ff.stdout
├── ptest_4728f2d14d31f2ff.toml
├── ptest_4805a91da5df26.stderr
├── ptest_4805a91da5df26.stdout
├── ptest_4805a91da5df26.toml
├── ptest_4974d70325cb7550.stderr
├── ptest_4974d70325cb7550.stdout
├── ptest_4974d70325cb7550.toml
├── ptest_4b0ed60c44c669f.stderr
├── ptest_4b0ed60c44c669f.stdout
├── ptest_4b0ed60c44c669f.toml
├── ptest_4b30f7de50929327.stderr
├── ptest_4b30f7de50929327.stdout
├── ptest_4b30f7de50929327.toml
├── ptest_4b538407f6a872e8.stderr
├── ptest_4b538407f6a872e8.stdout
├── ptest_4b538407f6a872e8.toml
├── ptest_4b7165c936488151.stderr
├── ptest_4b7165c936488151.stdout
├── ptest_4b7165c936488151.toml
├── ptest_4e899e9b065acc8f.stderr
├── ptest_4e899e9b065acc8f.stdout
├── ptest_4e899e9b065acc8f.toml
├── ptest_4fd72fa9235ffc80.stderr
├── ptest_4fd72fa9235ffc80.stdout
├── ptest_4fd72fa9235ffc80.toml
├── ptest_4ff72fb4d6bc110e.stderr
├── ptest_4ff72fb4d6bc110e.stdout
├── ptest_4ff72fb4d6bc110e.toml
├── ptest_514bf873279385ba.stderr
├── ptest_514bf873279385ba.stdout
├── ptest_514bf873279385ba.toml
├── ptest_52961e9e4d3030fc.stderr
├── ptest_52961e9e4d3030fc.stdout
├── ptest_52961e9e4d3030fc.toml
├── ptest_55383760e4618c41.stderr
├── ptest_55383760e4618c41.stdout
├── ptest_55383760e4618c41.toml
├── ptest_56d755ade90650de.stderr
├── ptest_56d755ade90650de.stdout
├── ptest_56d755ade90650de.toml
├── ptest_5709b91eb3610886.stderr
├── ptest_5709b91eb3610886.stdout
├── ptest_5709b91eb3610886.toml
├── ptest_57a5aac99c0c821c.stderr
├── ptest_57a5aac99c0c821c.stdout
├── ptest_57a5aac99c0c821c.toml
├── ptest_581533c37ac03853.stderr
├── ptest_581533c37ac03853.stdout
├── ptest_581533c37ac03853.toml
├── ptest_585bdfd3218af4a0.stderr
├── ptest_585bdfd3218af4a0.stdout
├── ptest_585bdfd3218af4a0.toml
├── ptest_5ba3cfebbb42c1f9.stderr
├── ptest_5ba3cfebbb42c1f9.stdout
├── ptest_5ba3cfebbb42c1f9.toml
├── ptest_5bf846977eb5a96e.stderr
├── ptest_5bf846977eb5a96e.stdout
├── ptest_5bf846977eb5a96e.toml
├── ptest_5c5f8c58460e0026.stderr
├── ptest_5c5f8c58460e0026.stdout
├── ptest_5c5f8c58460e0026.toml
├── ptest_5d72b8a5ba66436b.stderr
├── ptest_5d72b8a5ba66436b.stdout
├── ptest_5d72b8a5ba66436b.toml
├── ptest_5eac3027be1d2909.stderr
├── ptest_5eac3027be1d2909.stdout
├── ptest_5eac3027be1d2909.toml
├── ptest_607792764dd84355.stderr
├── ptest_607792764dd84355.stdout
├── ptest_607792764dd84355.toml
├── ptest_62034c92edbb1244.stderr
├── ptest_62034c92edbb1244.stdout
├── ptest_62034c92edbb1244.toml
├── ptest_631e7c0eadc876e3.stderr
├── ptest_631e7c0eadc876e3.stdout
├── ptest_631e7c0eadc876e3.toml
├── ptest_66a65e6644555c05.stderr
├── ptest_66a65e6644555c05.stdout
├── ptest_66a65e6644555c05.toml
├── ptest_6796295d6420d03a.stderr
├── ptest_6796295d6420d03a.stdout
├── ptest_6796295d6420d03a.toml
├── ptest_69fb8da018a73af3.stderr
├── ptest_69fb8da018a73af3.stdout
├── ptest_69fb8da018a73af3.toml
├── ptest_6abf99c853aede16.stderr
├── ptest_6abf99c853aede16.stdout
├── ptest_6abf99c853aede16.toml
├── ptest_6d64a7584b621832.stderr
├── ptest_6d64a7584b621832.stdout
├── ptest_6d64a7584b621832.toml
├── ptest_6e6893c2c2254622.stderr
├── ptest_6e6893c2c2254622.stdout
├── ptest_6e6893c2c2254622.toml
├── ptest_6eabf01c1fcde44e.stderr
├── ptest_6eabf01c1fcde44e.stdout
├── ptest_6eabf01c1fcde44e.toml
├── ptest_7212f6096d7b2f6c.stderr
├── ptest_7212f6096d7b2f6c.stdout
├── ptest_7212f6096d7b2f6c.toml
├── ptest_74825603975f419c.stderr
├── ptest_74825603975f419c.stdout
├── ptest_74825603975f419c.toml
├── ptest_767aca4b412a3f3e.stderr
├── ptest_767aca4b412a3f3e.stdout
├── ptest_767aca4b412a3f3e.toml
├── ptest_79116932e9ca8b26.stderr
├── ptest_79116932e9ca8b26.stdout
├── ptest_79116932e9ca8b26.toml
├── ptest_7a449fd794fd3993.stderr
├── ptest_7a449fd794fd3993.stdout
├── ptest_7a449fd794fd3993.toml
├── ptest_7b9a096392df2be1.stderr
├── ptest_7b9a096392df2be1.stdout
├── ptest_7b9a096392df2be1.toml
├── ptest_7cad7af690128a39.stderr
├── ptest_7cad7af690128a39.stdout
├── ptest_7cad7af690128a39.toml
├── ptest_7d1cd636566df8cd.stderr
├── ptest_7d1cd636566df8cd.stdout
├── ptest_7d1cd636566df8cd.toml
├── ptest_80cd40f7a3947055.stderr
├── ptest_80cd40f7a3947055.stdout
├── ptest_80cd40f7a3947055.toml
├── ptest_818bdf865ff2e514.stderr
├── ptest_818bdf865ff2e514.stdout
├── ptest_818bdf865ff2e514.toml
├── ptest_825e60e73630f857.stderr
├── ptest_825e60e73630f857.stdout
├── ptest_825e60e73630f857.toml
├── ptest_83b42c3f144d78ba.stderr
├── ptest_83b42c3f144d78ba.stdout
├── ptest_83b42c3f144d78ba.toml
├── ptest_86f826124c5b4511.stderr
├── ptest_86f826124c5b4511.stdout
├── ptest_86f826124c5b4511.toml
├── ptest_8822968d21a463f5.stderr
├── ptest_8822968d21a463f5.stdout
├── ptest_8822968d21a463f5.toml
├── ptest_88f8528f0c592965.stderr
├── ptest_88f8528f0c592965.stdout
├── ptest_88f8528f0c592965.toml
├── ptest_89146337fb6b0967.stderr
├── ptest_89146337fb6b0967.stdout
├── ptest_89146337fb6b0967.toml
├── ptest_8becd3030ba5621c.stderr
├── ptest_8becd3030ba5621c.stdout
├── ptest_8becd3030ba5621c.toml
├── ptest_8cd9b0ae2930d704.stderr
├── ptest_8cd9b0ae2930d704.stdout
├── ptest_8cd9b0ae2930d704.toml
├── ptest_91d7b6efe549ede0.stderr
├── ptest_91d7b6efe549ede0.stdout
├── ptest_91d7b6efe549ede0.toml
├── ptest_91e89705f7a716a7.stderr
├── ptest_91e89705f7a716a7.stdout
├── ptest_91e89705f7a716a7.toml
├── ptest_94d98e7060506df0.stderr
├── ptest_94d98e7060506df0.stdout
├── ptest_94d98e7060506df0.toml
├── ptest_94ed50412bfc177f.stderr
├── ptest_94ed50412bfc177f.stdout
├── ptest_94ed50412bfc177f.toml
├── ptest_97958c59351ef010.stderr
├── ptest_97958c59351ef010.stdout
├── ptest_97958c59351ef010.toml
├── ptest_98d345bf337daf3f.stderr
├── ptest_98d345bf337daf3f.stdout
├── ptest_98d345bf337daf3f.toml
├── ptest_98e04e3185e9174c.stderr
├── ptest_98e04e3185e9174c.stdout
├── ptest_98e04e3185e9174c.toml
├── ptest_992337433f8c6594.stderr
├── ptest_992337433f8c6594.stdout
├── ptest_992337433f8c6594.toml
├── ptest_9ad652110670db05.stderr
├── ptest_9ad652110670db05.stdout
├── ptest_9ad652110670db05.toml
├── ptest_9b2a49fcb2a74cc7.stderr
├── ptest_9b2a49fcb2a74cc7.stdout
├── ptest_9b2a49fcb2a74cc7.toml
├── ptest_9c1d803a17fd05c9.stderr
├── ptest_9c1d803a17fd05c9.stdout
├── ptest_9c1d803a17fd05c9.toml
├── ptest_9d319b2ce5ecd989.stderr
├── ptest_9d319b2ce5ecd989.stdout
├── ptest_9d319b2ce5ecd989.toml
├── ptest_9ece18efb453f48d.stderr
├── ptest_9ece18efb453f48d.stdout
├── ptest_9ece18efb453f48d.toml
├── ptest_a139598e95d06a4b.stderr
├── ptest_a139598e95d06a4b.stdout
├── ptest_a139598e95d06a4b.toml
├── ptest_a689ab7558716dda.stderr
├── ptest_a689ab7558716dda.stdout
├── ptest_a689ab7558716dda.toml
├── ptest_a6bbf53a066c588e.stderr
├── ptest_a6bbf53a066c588e.stdout
├── ptest_a6bbf53a066c588e.toml
├── ptest_a71aaa46984bd23.stderr
├── ptest_a71aaa46984bd23.stdout
├── ptest_a71aaa46984bd23.toml
├── ptest_a78bf581d9095079.stderr
├── ptest_a78bf581d9095079.stdout
├── ptest_a78bf581d9095079.toml
├── ptest_a82ad7ec2e961f84.stderr
├── ptest_a82ad7ec2e961f84.stdout
├── ptest_a82ad7ec2e961f84.toml
├── ptest_a8c541050a307891.stderr
├── ptest_a8c541050a307891.stdout
├── ptest_a8c541050a307891.toml
├── ptest_aba07307b0f70090.stderr
├── ptest_aba07307b0f70090.stdout
├── ptest_aba07307b0f70090.toml
├── ptest_abc83ec759ddab6.stderr
├── ptest_abc83ec759ddab6.stdout
├── ptest_abc83ec759ddab6.toml
├── ptest_add56bbfa6f842d3.stderr
├── ptest_add56bbfa6f842d3.stdout
├── ptest_add56bbfa6f842d3.toml
├── ptest_af29d370729835d8.stderr
├── ptest_af29d370729835d8.stdout
├── ptest_af29d370729835d8.toml
├── ptest_b1cc7b6966ce28b3.stderr
├── ptest_b1cc7b6966ce28b3.stdout
├── ptest_b1cc7b6966ce28b3.toml
├── ptest_b20ec649e4099d19.stderr
├── ptest_b20ec649e4099d19.stdout
├── ptest_b20ec649e4099d19.toml
├── ptest_b4bb07ce512e09ba.stderr
├── ptest_b4bb07ce512e09ba.stdout
├── ptest_b4bb07ce512e09ba.toml
├── ptest_b86c3dd42089b8ae.stderr
├── ptest_b86c3dd42089b8ae.stdout
├── ptest_b86c3dd42089b8ae.toml
├── ptest_b8bfd122ac3a6a7f.stderr
├── ptest_b8bfd122ac3a6a7f.stdout
├── ptest_b8bfd122ac3a6a7f.toml
├── ptest_b9480d5b12bc2158.stderr
├── ptest_b9480d5b12bc2158.stdout
├── ptest_b9480d5b12bc2158.toml
├── ptest_bb087081fad71387.stderr
├── ptest_bb087081fad71387.stdout
├── ptest_bb087081fad71387.toml
├── ptest_bbfc26a93fbe15a7.stderr
├── ptest_bbfc26a93fbe15a7.stdout
├── ptest_bbfc26a93fbe15a7.toml
├── ptest_bc0980c681a1bf6e.stderr
├── ptest_bc0980c681a1bf6e.stdout
├── ptest_bc0980c681a1bf6e.toml
├── ptest_bc3ef3722b915c0a.stderr
├── ptest_bc3ef3722b915c0a.stdout
├── ptest_bc3ef3722b915c0a.toml
├── ptest_bda5e8cec0adaa3d.stderr
├── ptest_bda5e8cec0adaa3d.stdout
├── ptest_bda5e8cec0adaa3d.toml
├── ptest_c0b6a5f5211e052e.stderr
├── ptest_c0b6a5f5211e052e.stdout
├── ptest_c0b6a5f5211e052e.toml
├── ptest_c15429df79ff8a02.stderr
├── ptest_c15429df79ff8a02.stdout
├── ptest_c15429df79ff8a02.toml
├── ptest_c320d2ec8a647bec.stderr
├── ptest_c320d2ec8a647bec.stdout
├── ptest_c320d2ec8a647bec.toml
├── ptest_c5a06187ebc81e63.stderr
├── ptest_c5a06187ebc81e63.stdout
├── ptest_c5a06187ebc81e63.toml
├── ptest_caa4e824b02fa569.stderr
├── ptest_caa4e824b02fa569.stdout
├── ptest_caa4e824b02fa569.toml
├── ptest_cb765650e293bae4.stderr
├── ptest_cb765650e293bae4.stdout
├── ptest_cb765650e293bae4.toml
├── ptest_cf65adc4fe95ba6.stderr
├── ptest_cf65adc4fe95ba6.stdout
├── ptest_cf65adc4fe95ba6.toml
├── ptest_d1571a37ac82a799.stderr
├── ptest_d1571a37ac82a799.stdout
├── ptest_d1571a37ac82a799.toml
├── ptest_d604d143ec99b7fa.stderr
├── ptest_d604d143ec99b7fa.stdout
├── ptest_d604d143ec99b7fa.toml
├── ptest_d7c710df474a3770.stderr
├── ptest_d7c710df474a3770.stdout
├── ptest_d7c710df474a3770.toml
├── ptest_dbc0c8e8c3f9b147.stderr
├── ptest_dbc0c8e8c3f9b147.stdout
├── ptest_dbc0c8e8c3f9b147.toml
├── ptest_dc6b5f21bb23c27.stderr
├── ptest_dc6b5f21bb23c27.stdout
├── ptest_dc6b5f21bb23c27.toml
├── ptest_ddcc15459b874630.stderr
├── ptest_ddcc15459b874630.stdout
├── ptest_ddcc15459b874630.toml
├── ptest_ded586a10b97281e.stderr
├── ptest_ded586a10b97281e.stdout
├── ptest_ded586a10b97281e.toml
├── ptest_e4cf2a922377bee.stderr
├── ptest_e4cf2a922377bee.stdout
├── ptest_e4cf2a922377bee.toml
├── ptest_ee83bc6dc4504743.stderr
├── ptest_ee83bc6dc4504743.stdout
├── ptest_ee83bc6dc4504743.toml
├── ptest_f21d9a563d3e0f10.stderr
├── ptest_f21d9a563d3e0f10.stdout
├── ptest_f21d9a563d3e0f10.toml
├── ptest_f261ab10a0ea20f.stderr
├── ptest_f261ab10a0ea20f.stdout
├── ptest_f261ab10a0ea20f.toml
├── ptest_f2ea3bfaf96e639.stderr
├── ptest_f2ea3bfaf96e639.stdout
├── ptest_f2ea3bfaf96e639.toml
├── ptest_f33fd54762597c23.stderr
├── ptest_f33fd54762597c23.stdout
├── ptest_f33fd54762597c23.toml
├── ptest_f641eabbfb35f76f.stderr
├── ptest_f641eabbfb35f76f.stdout
├── ptest_f641eabbfb35f76f.toml
├── ptest_f79a790e130be075.stderr
├── ptest_f79a790e130be075.stdout
├── ptest_f79a790e130be075.toml
├── ptest_f90d48e69d70b41.stderr
├── ptest_f90d48e69d70b41.stdout
├── ptest_f90d48e69d70b41.toml
├── ptest_ffbdb9af2de10fa.stderr
├── ptest_ffbdb9af2de10fa.stdout
└── ptest_ffbdb9af2de10fa.toml
SYMBOL INDEX (1183 symbols across 64 files)
FILE: benches/my_benchmark.rs
function criterion_benchmark (line 11) | pub fn criterion_benchmark(c: &mut Criterion) {
FILE: build.rs
function main (line 26) | fn main() -> io::Result<()> {
function strip_codes (line 65) | fn strip_codes(input: &str) -> String {
function git_hash (line 73) | fn git_hash() -> String {
function is_development_version (line 91) | fn is_development_version() -> bool {
function is_debug_build (line 96) | fn is_debug_build() -> bool {
function cargo_version (line 101) | fn cargo_version() -> String {
function version_string (line 106) | fn version_string() -> String {
function feature_enabled (line 118) | fn feature_enabled(name: &str) -> bool {
function nonstandard_features_string (line 125) | fn nonstandard_features_string() -> String {
function build_date (line 138) | fn build_date() -> String {
FILE: src/fs/dir.rs
type Dir (line 25) | pub struct Dir {
method new (line 39) | pub fn new(path: PathBuf) -> Self {
method read (line 51) | pub fn read(&mut self) -> io::Result<&Self> {
method read_dir (line 68) | pub fn read_dir(path: PathBuf) -> io::Result<Self> {
method files (line 80) | pub fn files<'dir, 'ig>(
method contains (line 102) | pub fn contains(&self, path: &Path) -> bool {
method join (line 108) | pub fn join(&self, child: &Path) -> PathBuf {
type Files (line 115) | pub struct Files<'dir, 'ig> {
function parent (line 141) | fn parent(&self) -> PathBuf {
function next_visible_file (line 152) | fn next_visible_file(&mut self) -> Option<File<'dir>> {
type DotsNext (line 201) | enum DotsNext {
type Item (line 213) | type Item = File<'dir>;
method next (line 215) | fn next(&mut self) -> Option<Self::Item> {
type DotFilter (line 240) | pub enum DotFilter {
method shows_dotfiles (line 254) | fn shows_dotfiles(self) -> bool {
method dots (line 263) | fn dots(self) -> DotsNext {
FILE: src/fs/dir_action.rs
type DirAction (line 29) | pub enum DirAction {
method recurse_options (line 47) | pub fn recurse_options(self) -> Option<RecurseOptions> {
method treat_dirs_as_files (line 56) | pub fn treat_dirs_as_files(self) -> bool {
type RecurseOptions (line 67) | pub struct RecurseOptions {
method is_too_deep (line 80) | pub fn is_too_deep(self, depth: usize) -> bool {
FILE: src/fs/feature/git.rs
type GitCache (line 25) | pub struct GitCache {
method has_anything_for (line 35) | pub fn has_anything_for(&self, index: &Path) -> bool {
method get (line 40) | pub fn get(&self, index: &Path, prefix_lookup: bool) -> f::Git {
method from_iter (line 51) | fn from_iter<I>(iter: I) -> Self
type GitRepo (line 108) | pub struct GitRepo {
method search (line 152) | fn search(&self, index: &Path, prefix_lookup: bool) -> f::Git {
method has_workdir (line 170) | fn has_workdir(&self, path: &Path) -> bool {
method has_path (line 175) | fn has_path(&self, path: &Path) -> bool {
method discover (line 183) | fn discover(path: PathBuf, flags: git2::RepositoryOpenFlags) -> Result...
type GitContents (line 128) | enum GitContents {
method inner_repo (line 214) | fn inner_repo(self) -> git2::Repository {
function repo_to_statuses (line 227) | fn repo_to_statuses(repo: &git2::Repository, workdir: &Path) -> Git {
function get_path_from_status_entry (line 252) | fn get_path_from_status_entry(e: &StatusEntry<'_>) -> Option<PathBuf> {
type Git (line 273) | struct Git {
method status (line 281) | fn status(&self, index: &Path, prefix_lookup: bool) -> f::Git {
method file_status (line 292) | fn file_status(&self, file: &Path) -> f::Git {
method dir_status (line 317) | fn dir_status(&self, dir: &Path) -> f::Git {
function reorient (line 343) | fn reorient(path: &Path) -> PathBuf {
function reorient (line 356) | fn reorient(path: &Path) -> PathBuf {
function working_tree_status (line 368) | fn working_tree_status(status: git2::Status) -> f::GitStatus {
function index_status (line 384) | fn index_status(status: git2::Status) -> f::GitStatus {
function current_branch (line 396) | fn current_branch(repo: &git2::Repository) -> Option<String> {
function from_path (line 416) | pub fn from_path(dir: &Path, status: bool) -> Self {
FILE: src/fs/feature/mod.rs
type GitCache (line 19) | pub struct GitCache;
method from_iter (line 22) | fn from_iter<I>(_iter: I) -> Self
method has_anything_for (line 31) | pub fn has_anything_for(&self, _index: &Path) -> bool {
method get (line 35) | pub fn get(&self, _index: &Path, _prefix_lookup: bool) -> f::Git {
function from_path (line 41) | pub fn from_path(_dir: &Path, _status: bool) -> Self {
FILE: src/fs/feature/xattr.rs
constant ENABLED (line 16) | pub const ENABLED: bool = cfg!(any(
type Attribute (line 24) | pub struct Attribute {
type FileAttributes (line 29) | pub trait FileAttributes {
method attributes (line 30) | fn attributes(&self) -> io::Result<Vec<Attribute>>;
method symlink_attributes (line 31) | fn symlink_attributes(&self) -> io::Result<Vec<Attribute>>;
method attributes (line 41) | fn attributes(&self) -> io::Result<Vec<Attribute>> {
method symlink_attributes (line 45) | fn symlink_attributes(&self) -> io::Result<Vec<Attribute>> {
method attributes (line 57) | fn attributes(&self) -> io::Result<Vec<Attribute>> {
method symlink_attributes (line 61) | fn symlink_attributes(&self) -> io::Result<Vec<Attribute>> {
function get_options (line 89) | fn get_options(follow_symlinks: bool) -> c_int {
function list_xattr (line 98) | pub(super) fn list_xattr(
function get_xattr (line 109) | pub(super) fn get_xattr(
function list_xattr (line 128) | pub(super) fn list_xattr(
function get_xattr (line 144) | pub(super) fn get_xattr(
function list_xattr (line 170) | fn list_xattr(
function get_xattr (line 186) | fn get_xattr(
function list_system_xattr (line 203) | pub(super) fn list_system_xattr(
function list_user_xattr (line 218) | pub(super) fn list_user_xattr(
function get_system_xattr (line 233) | pub(super) fn get_system_xattr(
function get_user_xattr (line 250) | pub(super) fn get_user_xattr(
function split_attribute_list (line 271) | fn split_attribute_list(buffer: &[u8]) -> Vec<OsString> {
function split_attribute_list (line 283) | fn split_attribute_list(buffer: &[u8]) -> Vec<OsString> {
function get_loop (line 306) | fn get_loop<F: Fn(*mut u8, usize) -> ssize_t>(f: F) -> io::Result<Option...
function list_attributes (line 337) | fn list_attributes(
function get_attribute (line 355) | fn get_attribute(
function get_attribute (line 393) | fn get_attribute(
function get_selinux_attribute (line 418) | fn get_selinux_attribute(path: &CStr, follow_symlinks: bool) -> io::Resu...
function attributes (line 436) | pub fn attributes(path: &Path, follow_symlinks: bool) -> io::Result<Vec<...
function get_namespace_attributes (line 463) | fn get_namespace_attributes(
function attributes (line 491) | pub fn attributes(path: &Path, follow_symlinks: bool) -> io::Result<Vec<...
constant ATTRIBUTE_VALUE_MAX_HEX_LENGTH (line 529) | const ATTRIBUTE_VALUE_MAX_HEX_LENGTH: usize = 16;
method fmt (line 534) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
type AttributeDisplay (line 557) | struct AttributeDisplay {
function custom_attr_display (line 563) | fn custom_attr_display(attribute: &Attribute) -> Option<String> {
constant ATTRIBUTE_DISPLAYS (line 577) | const ATTRIBUTE_DISPLAYS: &[AttributeDisplay] = &[
constant ATTRIBUTE_DISPLAYS (line 589) | const ATTRIBUTE_DISPLAYS: &[AttributeDisplay] = &[];
function display_lastuseddate (line 594) | fn display_lastuseddate(attribute: &Attribute) -> Option<String> {
function format_macl (line 613) | fn format_macl(value: &[u8]) -> String {
function display_macl (line 648) | fn display_macl(attribute: &Attribute) -> Option<String> {
type BorrowedWriter (line 668) | struct BorrowedWriter<'a> {
function write (line 673) | fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
function flush (line 677) | fn flush(&mut self) -> io::Result<()> {
function write_all (line 681) | fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
function custom_value_display (line 686) | fn custom_value_display(value: &[u8]) -> Option<String> {
function plist_value_display (line 695) | fn plist_value_display(value: &[u8]) -> Option<String> {
FILE: src/fs/fields.rs
type gid_t (line 25) | pub type gid_t = u32;
type ino_t (line 29) | pub type ino_t = u64;
type nlink_t (line 33) | pub type nlink_t = u64;
type uid_t (line 37) | pub type uid_t = u32;
type flag_t (line 40) | pub type flag_t = u32;
type Type (line 51) | pub enum Type {
method is_regular_file (line 64) | pub fn is_regular_file(self) -> bool {
type Permissions (line 73) | pub struct Permissions {
type Attributes (line 95) | pub struct Attributes {
type PermissionsPlus (line 108) | pub struct PermissionsPlus {
type OctalPermissions (line 122) | pub struct OctalPermissions {
type Links (line 134) | pub struct Links {
type Inode (line 147) | pub struct Inode(pub ino_t);
type Blocksize (line 152) | pub enum Blocksize {
type User (line 164) | pub struct User(pub uid_t);
type Group (line 169) | pub struct Group(pub gid_t);
type Size (line 174) | pub enum Size {
type DeviceIDs (line 204) | pub struct DeviceIDs {
type GitStatus (line 213) | pub enum GitStatus {
type Git (line 244) | pub struct Git {
method default (line 251) | fn default() -> Self {
type SecurityContextType (line 259) | pub enum SecurityContextType<'a> {
type SecurityContext (line 264) | pub struct SecurityContext<'a> {
type SubdirGitRepoStatus (line 270) | pub enum SubdirGitRepoStatus {
type SubdirGitRepo (line 277) | pub struct SubdirGitRepo {
method default (line 283) | fn default() -> Self {
type Flags (line 293) | pub struct Flags(pub flag_t);
FILE: src/fs/file.rs
type File (line 56) | pub struct File<'dir> {
function from_args (line 122) | pub fn from_args<PD, FN>(
function new_aa (line 175) | fn new_aa(
function new_aa_current (line 213) | pub fn new_aa_current(parent_dir: &'dir Dir, total_size: bool) -> File<'...
function new_aa_parent (line 218) | pub fn new_aa_parent(path: PathBuf, parent_dir: &'dir Dir, total_size: b...
function filename (line 226) | pub fn filename(path: &Path) -> String {
function ext (line 244) | fn ext(path: &Path) -> Option<String> {
function gather_extended_attributes (line 251) | fn gather_extended_attributes(&self) -> Vec<Attribute> {
function filetype (line 274) | fn filetype(&self) -> Option<&std::fs::FileType> {
function metadata (line 280) | pub fn metadata(&self) -> Result<&std::fs::Metadata, &io::Error> {
function extended_attributes (line 290) | pub fn extended_attributes(&self) -> &Vec<Attribute> {
function is_directory (line 296) | pub fn is_directory(&self) -> bool {
function points_to_directory (line 301) | pub fn points_to_directory(&self) -> bool {
function to_dir (line 319) | pub fn to_dir(&self) -> Dir {
function read_dir (line 330) | pub fn read_dir(&self) -> io::Result<Dir> {
function is_file (line 337) | pub fn is_file(&self) -> bool {
function is_executable_file (line 345) | pub fn is_executable_file(&self) -> bool {
function is_link (line 357) | pub fn is_link(&self) -> bool {
function is_pipe (line 363) | pub fn is_pipe(&self) -> bool {
function is_char_device (line 369) | pub fn is_char_device(&self) -> bool {
function is_block_device (line 375) | pub fn is_block_device(&self) -> bool {
function is_socket (line 381) | pub fn is_socket(&self) -> bool {
function absolute_path (line 386) | pub fn absolute_path(&self) -> Option<&PathBuf> {
function is_mount_point (line 405) | pub fn is_mount_point(&self) -> bool {
function mount_point_info (line 414) | pub fn mount_point_info(&self) -> Option<&MountedFs> {
function reorient_target_path (line 424) | fn reorient_target_path(&self, path: &Path) -> PathBuf {
function link_target (line 446) | pub fn link_target(&self) -> FileTarget<'dir> {
function link_target_recurse (line 499) | pub fn link_target_recurse(&self) -> FileTarget<'dir> {
function links (line 518) | pub fn links(&self) -> f::Links {
function inode (line 529) | pub fn inode(&self) -> f::Inode {
function blocksize (line 535) | pub fn blocksize(&self) -> f::Blocksize {
function user (line 559) | pub fn user(&self) -> Option<f::User> {
function group (line 571) | pub fn group(&self) -> Option<f::Group> {
function size (line 593) | pub fn size(&self) -> f::Size {
function size (line 637) | pub fn size(&self) -> f::Size {
function recursive_directory_size (line 649) | fn recursive_directory_size(&self) -> RecursiveSize {
function recursive_directory_size (line 690) | fn recursive_directory_size(&self) -> RecursiveSize {
function length (line 697) | pub fn length(&self) -> u64 {
function is_recursive_size (line 704) | pub fn is_recursive_size(&self) -> bool {
function is_empty_dir (line 718) | pub fn is_empty_dir(&self) -> bool {
function is_empty_dir (line 741) | pub fn is_empty_dir(&self) -> bool {
function is_empty_directory (line 757) | fn is_empty_directory(&self) -> bool {
function systemtime_to_naivedatetime (line 773) | fn systemtime_to_naivedatetime(st: SystemTime) -> Option<NaiveDateTime> {
function modified_time (line 784) | pub fn modified_time(&self) -> Option<NaiveDateTime> {
function changed_time (line 799) | pub fn changed_time(&self) -> Option<NaiveDateTime> {
function changed_time (line 815) | pub fn changed_time(&self) -> Option<NaiveDateTime> {
function accessed_time (line 820) | pub fn accessed_time(&self) -> Option<NaiveDateTime> {
function created_time (line 834) | pub fn created_time(&self) -> Option<NaiveDateTime> {
function type_char (line 851) | pub fn type_char(&self) -> f::Type {
function type_char (line 872) | pub fn type_char(&self) -> f::Type {
function permissions (line 884) | pub fn permissions(&self) -> Option<f::Permissions> {
function attributes (line 917) | pub fn attributes(&self) -> Option<f::Attributes> {
function security_context (line 934) | pub fn security_context(&self) -> f::SecurityContext<'_> {
function security_context (line 954) | pub fn security_context(&self) -> f::SecurityContext<'_> {
function flags (line 968) | pub fn flags(&self) -> f::Flags {
function flags (line 987) | pub fn flags(&self) -> f::Flags {
function flags (line 999) | pub fn flags(&self) -> f::Flags {
function as_ref (line 1005) | fn as_ref(&self) -> &File<'a> {
type FileTarget (line 1011) | pub enum FileTarget<'dir> {
function is_broken (line 1032) | pub fn is_broken(&self) -> bool {
type Mode (line 1044) | pub type Mode = u32;
constant USER_READ (line 1046) | pub const USER_READ: Mode = libc::S_IRUSR as Mode;
constant USER_WRITE (line 1047) | pub const USER_WRITE: Mode = libc::S_IWUSR as Mode;
constant USER_EXECUTE (line 1048) | pub const USER_EXECUTE: Mode = libc::S_IXUSR as Mode;
constant GROUP_READ (line 1050) | pub const GROUP_READ: Mode = libc::S_IRGRP as Mode;
constant GROUP_WRITE (line 1051) | pub const GROUP_WRITE: Mode = libc::S_IWGRP as Mode;
constant GROUP_EXECUTE (line 1052) | pub const GROUP_EXECUTE: Mode = libc::S_IXGRP as Mode;
constant OTHER_READ (line 1054) | pub const OTHER_READ: Mode = libc::S_IROTH as Mode;
constant OTHER_WRITE (line 1055) | pub const OTHER_WRITE: Mode = libc::S_IWOTH as Mode;
constant OTHER_EXECUTE (line 1056) | pub const OTHER_EXECUTE: Mode = libc::S_IXOTH as Mode;
constant STICKY (line 1058) | pub const STICKY: Mode = libc::S_ISVTX as Mode;
constant SETGID (line 1059) | pub const SETGID: Mode = libc::S_ISGID as Mode;
constant SETUID (line 1060) | pub const SETUID: Mode = libc::S_ISUID as Mode;
function extension (line 1069) | fn extension() {
function dotfile (line 1074) | fn dotfile() {
function no_extension (line 1079) | fn no_extension() {
function file (line 1090) | fn file() {
function no_path (line 1095) | fn no_path() {
function here (line 1100) | fn here() {
function there (line 1105) | fn there() {
function everywhere (line 1110) | fn everywhere() {
function topmost (line 1116) | fn topmost() {
FILE: src/fs/filter.rs
type FileFilterFlags (line 19) | pub enum FileFilterFlags {
type FileFilter (line 61) | pub struct FileFilter {
method filter_child_files (line 99) | pub fn filter_child_files(&self, is_recurse: bool, files: &mut Vec<Fil...
method filter_argument_files (line 131) | pub fn filter_argument_files(&self, files: &mut Vec<File<'_>>) {
method sort_files (line 136) | pub fn sort_files<'a, F>(&self, files: &mut [F])
type SortField (line 166) | pub enum SortField {
method compare_files (line 264) | pub fn compare_files(self, a: &File<'_>, b: &File<'_>) -> Ordering {
method strip_dot (line 312) | fn strip_dot(n: &str) -> &str {
type SortCase (line 246) | pub enum SortCase {
type IgnorePatterns (line 324) | pub struct IgnorePatterns {
method from_iter (line 329) | fn from_iter<I>(iter: I) -> Self
method parse_from_iter (line 342) | pub fn parse_from_iter<'a, I: IntoIterator<Item = &'a str>>(
method empty (line 369) | pub fn empty() -> Self {
method is_ignored (line 376) | fn is_ignored(&self, file: &str) -> bool {
type GitIgnore (line 383) | pub enum GitIgnore {
function empty_matches_nothing (line 396) | fn empty_matches_nothing() {
function ignores_a_glob (line 403) | fn ignores_a_glob() {
function ignores_an_exact_filename (line 411) | fn ignores_an_exact_filename() {
function ignores_both (line 419) | fn ignores_both() {
FILE: src/fs/mounts/linux.rs
function mounts (line 11) | pub fn mounts() -> Result<Vec<MountedFs>, Error> {
FILE: src/fs/mounts/macos.rs
function mounts (line 16) | pub fn mounts() -> Result<Vec<MountedFs>, Error> {
FILE: src/fs/mounts/mod.rs
type MountedFs (line 23) | pub struct MountedFs {
type Error (line 31) | pub enum Error {
method fmt (line 43) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
function all_mounts (line 64) | pub(super) fn all_mounts() -> &'static HashMap<PathBuf, MountedFs> {
FILE: src/fs/recursive_size.rs
type RecursiveSize (line 11) | pub enum RecursiveSize {
method is_none (line 41) | pub const fn is_none(&self) -> bool {
method unwrap_bytes_or (line 58) | pub const fn unwrap_bytes_or(self, default: u64) -> u64 {
method map_or (line 79) | pub fn map_or<U, F>(self, default: U, f: F) -> U
FILE: src/info/filetype.rs
type FileType (line 21) | pub enum FileType {
method get_file_type (line 418) | pub(crate) fn get_file_type(file: &File<'_>) -> Option<FileType> {
constant FILENAME_TYPES (line 38) | const FILENAME_TYPES: Map<&'static str, FileType> = phf_map! {
constant EXTENSION_TYPES (line 92) | const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
FILE: src/info/sources.rs
function get_source_files (line 20) | pub fn get_source_files(&self) -> Vec<PathBuf> {
FILE: src/logger.rs
function configure (line 15) | pub fn configure<T: AsRef<OsStr>>(ev: Option<T>) {
type Logger (line 36) | struct Logger;
method enabled (line 41) | fn enabled(&self, _: &log::Metadata<'_>) -> bool {
method log (line 45) | fn log(&self, record: &log::Record<'_>) {
method flush (line 60) | fn flush(&self) {
constant GLOBAL_LOGGER (line 38) | const GLOBAL_LOGGER: &Logger = &Logger;
function level (line 65) | fn level(level: log::Level) -> ANSIString<'static> {
FILE: src/main.rs
function main (line 37) | fn main() {
type Exa (line 118) | pub struct Exa<'args> {
type LiveVars (line 149) | struct LiveVars;
method get (line 151) | fn get(&self, name: &'static str) -> Option<OsString> {
function git_options (line 158) | fn git_options(options: &Options, args: &[&OsStr]) -> Option<GitCache> {
function git_repos (line 167) | fn git_repos(_options: &Options, _args: &[&OsStr]) -> bool {
function get_files_in_dir (line 172) | fn get_files_in_dir(paths: &mut Vec<PathBuf>, path: PathBuf) {
function git_repos (line 189) | fn git_repos(options: &Options, args: &[&OsStr]) -> bool {
function run (line 226) | pub fn run(mut self) -> io::Result<i32> {
function print_dirs (line 272) | fn print_dirs(
function print_files (line 389) | fn print_files(&mut self, dir: Option<&Dir>, mut files: Vec<File<'_>>) -...
constant SUCCESS (line 522) | pub const SUCCESS: i32 = 0;
constant RUNTIME_ERROR (line 525) | pub const RUNTIME_ERROR: i32 = 1;
constant OPTIONS_ERROR (line 528) | pub const OPTIONS_ERROR: i32 = 3;
constant PERMISSION_DENIED (line 531) | pub const PERMISSION_DENIED: i32 = 13;
FILE: src/options/config.rs
type ThemeConfig (line 19) | pub struct ThemeConfig {
method from_path (line 621) | pub fn from_path(path: PathBuf) -> Self {
method to_theme (line 625) | pub fn to_theme(&self) -> Option<UiStyles> {
method default (line 25) | fn default() -> Self {
type FromOverride (line 35) | trait FromOverride<T>: Sized {
method from (line 36) | fn from(value: T, default: Self) -> Self;
function from (line 43) | fn from(value: Option<S>, default: Option<T>) -> Option<T> {
function color_from_str (line 54) | fn color_from_str(s: &str) -> Option<Color> {
function deserialize_color (line 126) | fn deserialize_color<'de, D>(deserializer: D) -> Result<Option<Color>, D...
type StyleOverride (line 132) | pub struct StyleOverride {
method from (line 179) | fn from(value: StyleOverride, default: Self) -> Self {
type IconStyleOverride (line 219) | pub struct IconStyleOverride {
function from (line 225) | fn from(value: char, _default: char) -> char {
method from (line 231) | fn from(value: IconStyleOverride, default: Self) -> Self {
type FileNameStyleOverride (line 240) | pub struct FileNameStyleOverride {
method from (line 246) | fn from(value: FileNameStyleOverride, default: Self) -> Self {
function from (line 260) | fn from(value: HashMap<R, S>, default: HashMap<R, T>) -> HashMap<R, T> {
type FileKindsOverride (line 275) | pub struct FileKindsOverride {
method from (line 289) | fn from(value: FileKindsOverride, default: Self) -> Self {
type PermissionsOverride (line 307) | pub struct PermissionsOverride {
method from (line 328) | fn from(value: PermissionsOverride, default: Self) -> Self {
type SizeOverride (line 358) | pub struct SizeOverride {
method from (line 376) | fn from(value: SizeOverride, default: Self) -> Self {
type UsersOverride (line 396) | pub struct UsersOverride {
method from (line 406) | fn from(value: UsersOverride, default: Self) -> Self {
type LinksOverride (line 420) | pub struct LinksOverride {
method from (line 426) | fn from(value: LinksOverride, default: Self) -> Self {
type GitOverride (line 436) | pub struct GitOverride {
method from (line 447) | fn from(value: GitOverride, default: Self) -> Self {
type GitRepoOverride (line 462) | pub struct GitRepoOverride {
method from (line 470) | fn from(value: GitRepoOverride, default: Self) -> Self {
type SELinuxContextOverride (line 481) | pub struct SELinuxContextOverride {
method from (line 490) | fn from(value: SELinuxContextOverride, default: Self) -> Self {
type SecurityContextOverride (line 503) | pub struct SecurityContextOverride {
method from (line 509) | fn from(value: SecurityContextOverride, default: Self) -> Self {
type FileTypeOverride (line 519) | pub struct FileTypeOverride {
method from (line 534) | fn from(value: FileTypeOverride, default: Self) -> Self {
type UiStylesOverride (line 553) | pub struct UiStylesOverride {
method from (line 584) | fn from(value: UiStylesOverride, default: Self) -> Self {
function parse_none_color_from_string (line 639) | fn parse_none_color_from_string() {
function parse_default_color_from_string (line 646) | fn parse_default_color_from_string() {
function parse_fixed_color_from_string (line 653) | fn parse_fixed_color_from_string() {
function parse_long_hex_color_from_string (line 660) | fn parse_long_hex_color_from_string() {
function parse_short_hex_color_from_string (line 667) | fn parse_short_hex_color_from_string() {
function parse_color_code_from_string (line 674) | fn parse_color_code_from_string() {
FILE: src/options/dir_action.rs
method deduce (line 21) | pub fn deduce(
method deduce (line 60) | pub fn deduce(matches: &ArgMatches, tree: bool) -> Self {
function deduce_dir_action_list (line 74) | fn deduce_dir_action_list() {
function deduce_recurse_options_level (line 82) | fn deduce_recurse_options_level() {
function deduce_recurse_options_no_level (line 93) | fn deduce_recurse_options_no_level() {
function deduce_dir_action_as_file (line 104) | fn deduce_dir_action_as_file() {
function deduce_dir_action_recurse (line 112) | fn deduce_dir_action_recurse() {
function deduce_dir_action_tree (line 123) | fn deduce_dir_action_tree() {
function deduce_dir_action_tree_level (line 134) | fn deduce_dir_action_tree_level() {
function deduce_dir_action_tree_level_conflict (line 145) | fn deduce_dir_action_tree_level_conflict() {
function deduce_dir_action_recurse_as_file_conflict (line 153) | fn deduce_dir_action_recurse_as_file_conflict() {
function deduce_dir_action_tree_as_file_conflict (line 158) | fn deduce_dir_action_tree_as_file_conflict() {
FILE: src/options/error.rs
type OptionsError (line 13) | pub enum OptionsError {
method from (line 55) | fn from(error: glob::PatternError) -> Self {
method fmt (line 70) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type NumberSource (line 46) | pub enum NumberSource {
method fmt (line 61) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
FILE: src/options/file_name.rs
method deduce (line 16) | pub fn deduce<V: Vars>(
method deduce (line 41) | fn deduce(matches: &ArgMatches) -> Self {
method deduce (line 51) | pub fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Result<Self, O...
method get_width (line 65) | fn get_width<V: Vars>(vars: &V) -> Result<u32, OptionsError> {
method deduce (line 87) | pub fn deduce(matches: &ArgMatches) -> Self {
method deduce (line 97) | fn deduce(matches: &ArgMatches) -> Self {
function deduce_classify_file_indicators (line 120) | fn deduce_classify_file_indicators() {
function deduce_classify_just_filenames (line 128) | fn deduce_classify_just_filenames() {
function deduce_quote_style_no_quotes (line 136) | fn deduce_quote_style_no_quotes() {
function deduce_quote_style_quote_spaces (line 144) | fn deduce_quote_style_quote_spaces() {
function deduce_embed_hyperlinks_on (line 152) | fn deduce_embed_hyperlinks_on() {
function deduce_embed_hyperlinks_off (line 160) | fn deduce_embed_hyperlinks_off() {
function deduce_show_icons_never_no_arg (line 168) | fn deduce_show_icons_never_no_arg() {
function deduce_show_icons_never_no_arg_env (line 176) | fn deduce_show_icons_never_no_arg_env() {
function deduce_show_icon_always (line 186) | fn deduce_show_icon_always() {
function deduce_show_icons_never (line 194) | fn deduce_show_icons_never() {
function deduce_show_icons_auto (line 202) | fn deduce_show_icons_auto() {
function deduce_show_icons_error (line 210) | fn deduce_show_icons_error() {
function deduce_show_icons_width (line 219) | fn deduce_show_icons_width() {
function deduce_show_icons_width_error (line 229) | fn deduce_show_icons_width_error() {
function deduce_options (line 250) | fn deduce_options() {
FILE: src/options/filter.rs
method deduce (line 20) | pub fn deduce(matches: &ArgMatches, strict: bool) -> Result<Self, Option...
method default (line 82) | fn default() -> Self {
method deduce (line 99) | pub fn deduce(matches: &ArgMatches, strict: bool) -> Result<Self, Option...
method deduce (line 126) | pub fn deduce(matches: &ArgMatches) -> Result<Self, OptionsError> {
method deduce (line 147) | pub fn deduce(matches: &ArgMatches) -> Self {
function deduce_git_ignore_off (line 164) | fn deduce_git_ignore_off() {
function deduce_git_ignore_on (line 169) | fn deduce_git_ignore_on() {
function deduce_ignore_patterns_empty (line 177) | fn deduce_ignore_patterns_empty() {
function deduce_ignore_patterns_one (line 185) | fn deduce_ignore_patterns_one() {
function deduce_ignore_patterns_error (line 196) | fn deduce_ignore_patterns_error() {
function deduce_dot_filter_just_files (line 206) | fn deduce_dot_filter_just_files() {
function deduce_dot_filter_dotfiles (line 214) | fn deduce_dot_filter_dotfiles() {
function deduce_dot_filter_dotfiles_and_dots (line 222) | fn deduce_dot_filter_dotfiles_and_dots() {
function deduce_dot_filter_tree_all_all (line 230) | fn deduce_dot_filter_tree_all_all() {
function deduce_dot_filter_all_all (line 238) | fn deduce_dot_filter_all_all() {
function deduce_dot_filter_almost_all (line 246) | fn deduce_dot_filter_almost_all() {
function deduce_sort_field_default (line 254) | fn deduce_sort_field_default() {
function deduce_sort_field_name (line 262) | fn deduce_sort_field_name() {
function deduce_sort_field_name_case (line 270) | fn deduce_sort_field_name_case() {
function deduce_sort_field_name_mix_hidden (line 278) | fn deduce_sort_field_name_mix_hidden() {
function deduce_sort_field_name_mix_hidden_case (line 286) | fn deduce_sort_field_name_mix_hidden_case() {
function deduce_sort_field_size (line 294) | fn deduce_sort_field_size() {
function deduce_sort_field_extension (line 302) | fn deduce_sort_field_extension() {
function deduce_sort_field_extension_case (line 310) | fn deduce_sort_field_extension_case() {
function deduce_sort_field_date (line 318) | fn deduce_sort_field_date() {
function deduce_sort_field_time (line 326) | fn deduce_sort_field_time() {
function deduce_sort_field_age (line 334) | fn deduce_sort_field_age() {
function deduce_sort_field_old (line 342) | fn deduce_sort_field_old() {
function deduce_sort_field_ch (line 350) | fn deduce_sort_field_ch() {
function deduce_sort_field_acc (line 358) | fn deduce_sort_field_acc() {
function deduce_sort_field_cr (line 366) | fn deduce_sort_field_cr() {
function deduce_sort_field_err (line 374) | fn deduce_sort_field_err() {
function deduce_file_filter_default (line 379) | fn deduce_file_filter_default() {
function deduce_file_filter_reverse (line 395) | fn deduce_file_filter_reverse() {
function deduce_file_filter_only_dirs (line 411) | fn deduce_file_filter_only_dirs() {
function deduce_file_filter_only_files (line 427) | fn deduce_file_filter_only_files() {
FILE: src/options/mod.rs
type Options (line 104) | pub struct Options {
method should_scan_for_git (line 130) | pub fn should_scan_for_git(&self) -> bool {
method deduce (line 154) | pub fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Result<Self,...
FILE: src/options/parser.rs
constant SORT_FIELDS_HELP (line 16) | const SORT_FIELDS_HELP: &str = "[default: name] [possible values:
constant TIME_FIELDS_HELP (line 21) | const TIME_FIELDS_HELP: &str = "[possible values:
constant FORMAT_STYLE_FIELDS_HELP (line 24) | const FORMAT_STYLE_FIELDS_HELP: &str = "[possible values:
function get_command (line 27) | pub fn get_command() -> clap::Command {
type ShowWhen (line 154) | pub enum ShowWhen {
method value_variants (line 162) | fn value_variants<'a>() -> &'a [Self] {
method to_possible_value (line 166) | fn to_possible_value(&self) -> Option<clap::builder::PossibleValue> {
method from_str (line 177) | fn from_str(s: &str, _ignore_case: bool) -> Result<Self, String> {
type ColorScaleArgs (line 188) | pub enum ColorScaleArgs {
type ColorScaleModeArgs (line 195) | pub enum ColorScaleModeArgs {
method value_variants (line 201) | fn value_variants<'a>() -> &'a [Self] {
method to_possible_value (line 222) | fn to_possible_value(&self) -> Option<PossibleValue> {
type TimeArgs (line 252) | pub enum TimeArgs {
method value_variants (line 260) | fn value_variants<'a>() -> &'a [Self] {
method to_possible_value (line 264) | fn to_possible_value(&self) -> Option<clap::builder::PossibleValue> {
type TimeFormatParser (line 276) | pub struct TimeFormatParser;
type Value (line 286) | type Value = TimeFormat;
method parse_ref (line 288) | fn parse_ref(
type Parser (line 279) | type Parser = TimeFormatParser;
method value_parser (line 280) | fn value_parser() -> Self::Parser {
method value_variants (line 302) | fn value_variants<'a>() -> &'a [Self] {
method to_possible_value (line 306) | fn to_possible_value(&self) -> Option<clap::builder::PossibleValue> {
function mock_cli (line 319) | pub fn mock_cli<I, T>(itr: I) -> clap::ArgMatches
function mock_cli_try (line 327) | pub fn mock_cli_try<I, T>(itr: I) -> Result<clap::ArgMatches, clap::erro...
function deduce_files (line 336) | fn deduce_files() {
FILE: src/options/stdin.rs
type FilesInput (line 16) | pub enum FilesInput {
method deduce (line 22) | pub fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Self {
FILE: src/options/theme.rs
method deduce (line 18) | pub fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Self {
method deduce (line 39) | fn deduce<V: Vars>(vars: &V) -> Option<Self> {
method deduce (line 68) | fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Self {
method deduce (line 83) | fn deduce<V: Vars>(vars: &V) -> Self {
function deduce_definitions (line 101) | fn deduce_definitions() {
function deduce_definitions_colors (line 116) | fn deduce_definitions_colors() {
function deduce_use_colors_no_color_env (line 133) | fn deduce_use_colors_no_color_env() {
function deduce_use_colors_no_color_arg (line 146) | fn deduce_use_colors_no_color_arg() {
function deduce_use_colors_always (line 158) | fn deduce_use_colors_always() {
function deduce_use_colors_auto (line 170) | fn deduce_use_colors_auto() {
FILE: src/options/vars.rs
type Vars (line 81) | pub trait Vars {
method get (line 82) | fn get(&self, name: &'static str) -> Option<OsString>;
method get_with_fallback (line 85) | fn get_with_fallback(&self, name: &'static str, fallback: &'static str...
method source (line 92) | fn source(&self, name: &'static str, fallback: &'static str) -> Option...
method get (line 106) | fn get(&self, _name: &'static str) -> Option<OsString> {
method get (line 126) | fn get(&self, name: &'static str) -> Option<OsString> {
type MockVars (line 112) | pub struct MockVars {
method set (line 152) | pub fn set(&mut self, var: &'static str, value: &OsString) {
function set_test (line 170) | fn set_test() {
FILE: src/options/view.rs
method deduce (line 27) | pub fn deduce<V: Vars>(
method deduce (line 59) | pub fn deduce<V: Vars>(
method strict_check_long_flags (line 112) | fn strict_check_long_flags(matches: &ArgMatches) -> Result<(), OptionsEr...
function deduce (line 146) | fn deduce(matches: &ArgMatches) -> Self {
function deduce_tree (line 154) | fn deduce_tree<V: Vars>(matches: &ArgMatches, vars: &V) -> Self {
function deduce_long (line 166) | fn deduce_long<V: Vars>(
method deduce (line 192) | fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Result<Self, Optio...
method deduce (line 214) | fn deduce<V: Vars>(vars: &V) -> Result<Self, OptionsError> {
method deduce (line 236) | fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Result<Self, Optio...
method deduce (line 255) | fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Result<Self, Optio...
method deduce (line 310) | fn deduce(matches: &ArgMatches) -> Self {
constant FORMAT_STYLE_FIELDS (line 322) | const FORMAT_STYLE_FIELDS: [&str; 6] = [
method try_from_str (line 333) | pub fn try_from_str(value: &str) -> Result<Self, String> {
method deduce (line 405) | fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Self {
method deduce (line 419) | fn deduce(matches: &ArgMatches) -> Self {
method deduce (line 429) | fn deduce(matches: &ArgMatches) -> Self {
method deduce (line 449) | fn deduce(matches: &ArgMatches) -> Result<Self, OptionsError> {
method deduce (line 502) | pub fn deduce<V: Vars>(matches: &ArgMatches, vars: &V) -> Self {
function deduce_time_types_no_time (line 557) | fn deduce_time_types_no_time() {
function deduce_time_types_default (line 568) | fn deduce_time_types_default() {
function deduce_time_types_modified_word (line 576) | fn deduce_time_types_modified_word() {
function deduce_time_types_accessed_word (line 587) | fn deduce_time_types_accessed_word() {
function deduce_time_types_changed_word (line 599) | fn deduce_time_types_changed_word() {
function deduce_time_types_created_word (line 611) | fn deduce_time_types_created_word() {
function deduce_time_types_modified (line 623) | fn deduce_time_types_modified() {
function deduce_time_types_accessed (line 634) | fn deduce_time_types_accessed() {
function deduce_time_types_changed (line 646) | fn deduce_time_types_changed() {
function deduce_time_types_created (line 658) | fn deduce_time_types_created() {
function deduce_group_format_on (line 670) | fn deduce_group_format_on() {
function deduce_group_format_off (line 678) | fn deduce_group_format_off() {
function deduce_user_format_on (line 686) | fn deduce_user_format_on() {
function deduce_user_format_off (line 694) | fn deduce_user_format_off() {
function deduce_size_format_off (line 699) | fn deduce_size_format_off() {
function deduce_user_format_bytes (line 707) | fn deduce_user_format_bytes() {
function deduce_user_format_binary (line 715) | fn deduce_user_format_binary() {
function deduce_grid_options (line 723) | fn deduce_grid_options() {
function deduce_time_style_iso_env (line 731) | fn deduce_time_style_iso_env() {
function deduce_time_style_iso_arg (line 741) | fn deduce_time_style_iso_arg() {
function deduce_time_style_long_iso_env (line 750) | fn deduce_time_style_long_iso_env() {
function deduce_time_style_long_iso_arg (line 760) | fn deduce_time_style_long_iso_arg() {
function deduce_time_style_full_iso_env (line 769) | fn deduce_time_style_full_iso_env() {
function deduce_time_style_full_iso_arg (line 779) | fn deduce_time_style_full_iso_arg() {
function deduce_time_style_relative_env (line 788) | fn deduce_time_style_relative_env() {
function deduce_time_style_relative_arg (line 798) | fn deduce_time_style_relative_arg() {
function deduce_time_style_custom_env (line 807) | fn deduce_time_style_custom_env() {
function deduce_time_style_custom_arg (line 820) | fn deduce_time_style_custom_arg() {
function deduce_time_style_non_recent_and_recent (line 834) | fn deduce_time_style_non_recent_and_recent() {
function deduce_color_scale_size_age_luminance_40_gradient (line 848) | fn deduce_color_scale_size_age_luminance_40_gradient() {
function deduce_color_scale_size_luminance_60_gradient (line 864) | fn deduce_color_scale_size_luminance_60_gradient() {
function deduce_color_scale_age_luminance_60_fixed (line 879) | fn deduce_color_scale_age_luminance_60_fixed() {
function deduce_color_scale_size_age_luminance_99_fixed (line 897) | fn deduce_color_scale_size_age_luminance_99_fixed() {
function deduce_mode_grid (line 920) | fn deduce_mode_grid() {
function deduce_mode_grid_across (line 933) | fn deduce_mode_grid_across() {
function deduce_details_options_tree (line 945) | fn deduce_details_options_tree() {
function deduce_details_options_tree_mounts (line 962) | fn deduce_details_options_tree_mounts() {
function deduce_details_options_tree_xattr (line 979) | fn deduce_details_options_tree_xattr() {
function deduce_details_options_tree_secattr (line 996) | fn deduce_details_options_tree_secattr() {
function deduce_details_long_strict_across (line 1013) | fn deduce_details_long_strict_across() {
function deduce_details_long_strict_one_line (line 1025) | fn deduce_details_long_strict_one_line() {
function deduce_terminal_width_automatic (line 1037) | fn deduce_terminal_width_automatic() {
function deduce_terminal_width_set_arg (line 1045) | fn deduce_terminal_width_set_arg() {
function deduce_terminal_width_set_env (line 1053) | fn deduce_terminal_width_set_env() {
function deduce_terminal_width_set_env_bad (line 1063) | fn deduce_terminal_width_set_env_bad() {
FILE: src/output/cell.rs
type TextCell (line 26) | pub struct TextCell {
method paint (line 45) | pub fn paint(style: Style, text: String) -> Self {
method paint_str (line 57) | pub fn paint_str(style: Style, text: &'static str) -> Self {
method blank (line 72) | pub fn blank(style: Style) -> Self {
method add_spaces (line 82) | pub fn add_spaces(&mut self, count: usize) {
method push (line 90) | pub fn push(&mut self, string: ANSIString<'static>, extra_width: usize) {
method append (line 96) | pub fn append(&mut self, other: Self) {
type Target (line 35) | type Target = TextCellContents;
method deref (line 37) | fn deref(&self) -> &Self::Target {
type TextCellContents (line 135) | pub struct TextCellContents(Vec<ANSIString<'static>>);
method from (line 138) | fn from(strings: Vec<ANSIString<'static>>) -> Self {
method strings (line 158) | pub fn strings(&self) -> ANSIStrings<'_> {
method width (line 164) | pub fn width(&self) -> DisplayWidth {
method promote (line 173) | pub fn promote(self) -> TextCell {
type Target (line 144) | type Target = [ANSIString<'static>];
method deref (line 146) | fn deref(&self) -> &Self::Target {
type DisplayWidth (line 195) | pub struct DisplayWidth(usize);
method from (line 198) | fn from(input: &'a str) -> Self {
method from (line 204) | fn from(width: usize) -> Self {
type Output (line 232) | type Output = Self;
method add (line 234) | fn add(self, rhs: usize) -> Self::Output {
type Target (line 210) | type Target = usize;
method deref (line 212) | fn deref(&self) -> &Self::Target {
method deref_mut (line 218) | fn deref_mut(&mut self) -> &mut Self::Target {
type Output (line 224) | type Output = Self;
method add (line 226) | fn add(self, rhs: Self) -> Self::Output {
method sum (line 240) | fn sum<I>(iter: I) -> Self
function empty_string (line 253) | fn empty_string() {
function test_string (line 259) | fn test_string() {
function addition (line 265) | fn addition() {
function addition_usize (line 272) | fn addition_usize() {
FILE: src/output/color_scale.rs
type ColorScaleOptions (line 17) | pub struct ColorScaleOptions {
method default (line 25) | fn default() -> Self {
type ColorScaleMode (line 36) | pub enum ColorScaleMode {
type ColorScaleInformation (line 42) | pub struct ColorScaleInformation {
method from_color_scale (line 54) | pub fn from_color_scale(
method adjust_style (line 89) | pub fn adjust_style(&self, mut style: Style, value: f32, range: Option...
method apply_time_gradient (line 106) | pub fn apply_time_gradient(&self, style: Style, file: &File<'_>, time_...
function update_information_recursively (line 122) | fn update_information_recursively(
type Extremes (line 193) | pub struct Extremes {
method update (line 199) | fn update(maybe_value: Option<f32>, maybe_range: &mut Option<Extremes>) {
function adjust_luminance (line 221) | fn adjust_luminance(color: Colour, x: f32, min_l: f32) -> Colour {
FILE: src/output/details.rs
type Options (line 104) | pub struct Options {
type Render (line 129) | pub struct Render<'a> {
type Egg (line 153) | struct Egg<'a> {
function as_ref (line 162) | fn as_ref(&self) -> &File<'a> {
function render (line 168) | pub fn render<W: Write>(mut self, w: &mut W) -> io::Result<()> {
function show_xattr_hint (line 235) | pub fn show_xattr_hint(&self, file: &File<'_>) -> bool {
function add_files_to_table (line 249) | fn add_files_to_table<'dir>(
function render_header (line 407) | pub fn render_header(&self, header: TableRow) -> Row {
function render_error (line 415) | fn render_error(&self, error: &io::Error, tree: TreeParams, path: Option...
function render_xattr (line 434) | fn render_xattr(&self, xattr: &Attribute, tree: TreeParams) -> Row {
function iterate_with_table (line 447) | pub fn iterate_with_table(&'a self, table: Table<'a>, rows: Vec<Row>) ->...
function iterate (line 458) | pub fn iterate(&'a self, rows: Vec<Row>) -> Iter {
type Row (line 467) | pub struct Row {
type TableIter (line 485) | pub struct TableIter<'a> {
type Item (line 495) | type Item = TextCell;
method next (line 497) | fn next(&mut self) -> Option<Self::Item> {
type Iter (line 517) | pub struct Iter {
type Item (line 524) | type Item = TextCell;
method next (line 526) | fn next(&mut self) -> Option<Self::Item> {
FILE: src/output/escape.rs
function escape (line 11) | pub fn escape(
constant HYPERLINK_ESCAPE_CHARS (line 48) | const HYPERLINK_ESCAPE_CHARS: &AsciiSet = &CONTROLS.add(b' ');
constant HYPERLINK_OPENING_START (line 49) | const HYPERLINK_OPENING_START: &str = "\x1B]8;;";
constant HYPERLINK_OPENING_END (line 50) | const HYPERLINK_OPENING_END: &str = "\x1B\x5C";
constant HYPERLINK_CLOSING (line 52) | pub const HYPERLINK_CLOSING: &str = "\x1B]8;;\x1B\x5C";
function get_hyperlink_start_tag (line 54) | pub fn get_hyperlink_start_tag(abs_path: &str) -> String {
function hyperlink_start_tag_escape_spaces (line 69) | fn hyperlink_start_tag_escape_spaces() {
FILE: src/output/file_name.rs
type Options (line 23) | pub struct Options {
method for_file (line 46) | pub fn for_file<'a, 'dir, C>(
type LinkStyle (line 69) | enum LinkStyle {
type Classify (line 82) | pub enum Classify {
type MountStyle (line 98) | enum MountStyle {
type ShowIcons (line 109) | pub enum ShowIcons {
type EmbedHyperlinks (line 123) | pub enum EmbedHyperlinks {
type Absolute (line 130) | pub enum Absolute {
type QuoteStyle (line 138) | pub enum QuoteStyle {
type FileName (line 149) | pub struct FileName<'a, 'dir, C> {
function with_link_paths (line 172) | pub fn with_link_paths(mut self) -> Self {
function with_mount_details (line 182) | pub fn with_mount_details(mut self, enable: bool) -> Self {
function paint (line 200) | pub fn paint(&self) -> TextCellContents {
function add_parent_bits (line 341) | fn add_parent_bits(&self, bits: &mut Vec<ANSIString<'_>>, parent: &Path) {
function classify_char (line 369) | pub(crate) fn classify_char(&self, file: &File<'_>) -> Option<&'static s...
function classify_char (line 386) | pub(crate) fn classify_char(&self, file: &File<'_>) -> Option<&'static s...
function escaped_file_name (line 408) | fn escaped_file_name<'unused>(
function display_name (line 443) | fn display_name(&self) -> String {
function style (line 465) | pub fn style(&self) -> Style {
function bare_utf8_width (line 495) | pub fn bare_utf8_width(&self) -> usize {
type Colours (line 501) | pub trait Colours: FiletypeColours {
method symlink_path (line 504) | fn symlink_path(&self) -> Style;
method normal_arrow (line 507) | fn normal_arrow(&self) -> Style;
method broken_symlink (line 512) | fn broken_symlink(&self) -> Style;
method broken_filename (line 515) | fn broken_filename(&self) -> Style;
method control_char (line 518) | fn control_char(&self) -> Style;
method broken_control_char (line 522) | fn broken_control_char(&self) -> Style;
method executable_file (line 525) | fn executable_file(&self) -> Style;
method mount_point (line 528) | fn mount_point(&self) -> Style;
method colour_file (line 530) | fn colour_file(&self, file: &File<'_>) -> Style;
method style_override (line 532) | fn style_override(&self, file: &File<'_>) -> Option<FileNameStyle>;
FILE: src/output/grid.rs
type Options (line 17) | pub struct Options {
method direction (line 23) | pub fn direction(self) -> Direction {
type Render (line 32) | pub struct Render<'a> {
function render (line 42) | pub fn render<W: Write>(mut self, w: &mut W) -> io::Result<()> {
FILE: src/output/grid_details.rs
type Options (line 26) | pub struct Options {
method to_details_options (line 33) | pub fn to_details_options(&self) -> &DetailsOptions {
type RowThreshold (line 46) | pub enum RowThreshold {
type Render (line 55) | pub struct Render<'a> {
function details_for_column (line 100) | fn details_for_column(&self) -> DetailsRender<'a> {
function render (line 119) | pub fn render<W: Write>(mut self, w: &mut W) -> io::Result<()> {
function make_table (line 244) | fn make_table(&mut self, options: &'a TableOptions) -> Table<'a> {
FILE: src/output/icons.rs
type Icons (line 13) | struct Icons;
constant AUDIO (line 17) | const AUDIO: char = '\u{f001}';
constant BINARY (line 18) | const BINARY: char = '\u{eae8}';
constant BOOK (line 19) | const BOOK: char = '\u{e28b}';
constant CALENDAR (line 20) | const CALENDAR: char = '\u{eab0}';
constant CACHE (line 21) | const CACHE: char = '\u{f49b}';
constant CAD (line 22) | const CAD: char = '\u{f0eeb}';
constant CLOCK (line 23) | const CLOCK: char = '\u{f43a}';
constant COMPRESSED (line 24) | const COMPRESSED: char = '\u{f410}';
constant CONFIG (line 25) | const CONFIG: char = '\u{f107b}';
constant CSS3 (line 26) | const CSS3: char = '\u{e749}';
constant DATABASE (line 27) | const DATABASE: char = '\u{f1c0}';
constant DIFF (line 28) | const DIFF: char = '\u{f440}';
constant DISK_IMAGE (line 29) | const DISK_IMAGE: char = '\u{e271}';
constant DOCKER (line 30) | const DOCKER: char = '\u{e650}';
constant DOCUMENT (line 31) | const DOCUMENT: char = '\u{f1c2}';
constant DOWNLOAD (line 32) | const DOWNLOAD: char = '\u{f01da}';
constant EDA_SCH (line 33) | const EDA_SCH: char = '\u{f0b45}';
constant EDA_PCB (line 34) | const EDA_PCB: char = '\u{eabe}';
constant EMACS (line 35) | const EMACS: char = '\u{e632}';
constant ESLINT (line 36) | const ESLINT: char = '\u{e655}';
constant FILE (line 37) | const FILE: char = '\u{f15b}';
constant FILE_3D (line 38) | const FILE_3D: char = '\u{f01a7}';
constant FOLDER (line 39) | const FOLDER: char = '\u{e5ff}';
constant FOLDER_BUILD (line 40) | const FOLDER_BUILD: char = '\u{f19fc}';
constant FOLDER_CONFIG (line 41) | const FOLDER_CONFIG: char = '\u{e5fc}';
constant FOLDER_EXERCISM (line 42) | const FOLDER_EXERCISM: char = '\u{ebe5}';
constant FOLDER_GIT (line 43) | const FOLDER_GIT: char = '\u{e5fb}';
constant FOLDER_GITHUB (line 44) | const FOLDER_GITHUB: char = '\u{e5fd}';
constant FOLDER_HIDDEN (line 45) | const FOLDER_HIDDEN: char = '\u{f179e}';
constant FOLDER_KEY (line 46) | const FOLDER_KEY: char = '\u{f08ac}';
constant FOLDER_NPM (line 47) | const FOLDER_NPM: char = '\u{e5fa}';
constant FOLDER_OCAML (line 48) | const FOLDER_OCAML: char = '\u{e67a}';
constant FOLDER_OPEN (line 49) | const FOLDER_OPEN: char = '\u{f115}';
constant FILE_UNKNOW (line 50) | const FILE_UNKNOW: char = '\u{f086f}';
constant FONT (line 51) | const FONT: char = '\u{f031}';
constant FREECAD (line 52) | const FREECAD: char = '\u{f336}';
constant GIMP (line 53) | const GIMP: char = '\u{f338}';
constant GIST_SECRET (line 54) | const GIST_SECRET: char = '\u{eafa}';
constant GIT (line 55) | const GIT: char = '\u{f02a2}';
constant GODOT (line 56) | const GODOT: char = '\u{e65f}';
constant GRADLE (line 57) | const GRADLE: char = '\u{e660}';
constant GRAPH (line 58) | const GRAPH: char = '\u{f1049}';
constant GRAPHQL (line 59) | const GRAPHQL: char = '\u{e662}';
constant GRUNT (line 60) | const GRUNT: char = '\u{e611}';
constant GTK (line 61) | const GTK: char = '\u{f362}';
constant GULP (line 62) | const GULP: char = '\u{e610}';
constant HTML5 (line 63) | const HTML5: char = '\u{f13b}';
constant IMAGE (line 64) | const IMAGE: char = '\u{f1c5}';
constant INFO (line 65) | const INFO: char = '\u{f129}';
constant INTELLIJ (line 66) | const INTELLIJ: char = '\u{e7b5}';
constant JSON (line 67) | const JSON: char = '\u{e60b}';
constant KEY (line 68) | const KEY: char = '\u{eb11}';
constant KDENLIVE (line 69) | const KDENLIVE: char = '\u{f33c}';
constant KEYPASS (line 70) | const KEYPASS: char = '\u{f23e}';
constant KICAD (line 71) | const KICAD: char = '\u{f34c}';
constant KRITA (line 72) | const KRITA: char = '\u{f33d}';
constant LANG_ARDUINO (line 73) | const LANG_ARDUINO: char = '\u{f34b}';
constant LANG_ASSEMBLY (line 74) | const LANG_ASSEMBLY: char = '\u{e637}';
constant LANG_C (line 75) | const LANG_C: char = '\u{e61e}';
constant LANG_CPP (line 76) | const LANG_CPP: char = '\u{e61d}';
constant LANG_CSHARP (line 77) | const LANG_CSHARP: char = '\u{f031b}';
constant LANG_D (line 78) | const LANG_D: char = '\u{e7af}';
constant LANG_ELIXIR (line 79) | const LANG_ELIXIR: char = '\u{e62d}';
constant LANG_FENNEL (line 80) | const LANG_FENNEL: char = '\u{e6af}';
constant LANG_FORTRAN (line 81) | const LANG_FORTRAN: char = '\u{f121a}';
constant LANG_FSHARP (line 82) | const LANG_FSHARP: char = '\u{e7a7}';
constant LANG_GLEAM (line 83) | const LANG_GLEAM: char = '\u{f09a5}';
constant LANG_GO (line 84) | const LANG_GO: char = '\u{e65e}';
constant LANG_GROOVY (line 85) | const LANG_GROOVY: char = '\u{e775}';
constant LANG_HASKELL (line 86) | const LANG_HASKELL: char = '\u{e777}';
constant LANG_HDL (line 87) | const LANG_HDL: char = '\u{f035b}';
constant LANG_HOLYC (line 88) | const LANG_HOLYC: char = '\u{f00a2}';
constant LANG_JAVA (line 89) | const LANG_JAVA: char = '\u{e256}';
constant LANG_JAVASCRIPT (line 90) | const LANG_JAVASCRIPT: char = '\u{e74e}';
constant LANG_KOTLIN (line 91) | const LANG_KOTLIN: char = '\u{e634}';
constant LANG_LUA (line 92) | const LANG_LUA: char = '\u{e620}';
constant LANG_NIM (line 93) | const LANG_NIM: char = '\u{e677}';
constant LANG_OCAML (line 94) | const LANG_OCAML: char = '\u{e67a}';
constant LANG_PERL (line 95) | const LANG_PERL: char = '\u{e67e}';
constant LANG_PHP (line 96) | const LANG_PHP: char = '\u{e73d}';
constant LANG_PYTHON (line 97) | const LANG_PYTHON: char = '\u{e606}';
constant LANG_R (line 98) | const LANG_R: char = '\u{e68a}';
constant LANG_RUBY (line 99) | const LANG_RUBY: char = '\u{e739}';
constant LANG_RUBYRAILS (line 100) | const LANG_RUBYRAILS: char = '\u{e73b}';
constant LANG_RUST (line 101) | const LANG_RUST: char = '\u{e68b}';
constant LANG_SASS (line 102) | const LANG_SASS: char = '\u{e603}';
constant LANG_SCHEME (line 103) | const LANG_SCHEME: char = '\u{e6b1}';
constant LANG_STYLUS (line 104) | const LANG_STYLUS: char = '\u{e600}';
constant LANG_TEX (line 105) | const LANG_TEX: char = '\u{e69b}';
constant LANG_TYPESCRIPT (line 106) | const LANG_TYPESCRIPT: char = '\u{e628}';
constant LANG_V (line 107) | const LANG_V: char = '\u{e6ac}';
constant LIBRARY (line 108) | const LIBRARY: char = '\u{eb9c}';
constant LICENSE (line 109) | const LICENSE: char = '\u{f02d}';
constant LOCK (line 110) | const LOCK: char = '\u{f023}';
constant LOG (line 111) | const LOG: char = '\u{f18d}';
constant MAKE (line 112) | const MAKE: char = '\u{e673}';
constant MARKDOWN (line 113) | const MARKDOWN: char = '\u{f48a}';
constant MUSTACHE (line 114) | const MUSTACHE: char = '\u{e60f}';
constant NEWS (line 115) | const NEWS: char = '\u{f1ea}';
constant NODEJS (line 116) | const NODEJS: char = '\u{e718}';
constant NOTEBOOK (line 117) | const NOTEBOOK: char = '\u{e678}';
constant NPM (line 118) | const NPM: char = '\u{e71e}';
constant OS_ANDROID (line 119) | const OS_ANDROID: char = '\u{e70e}';
constant OS_APPLE (line 120) | const OS_APPLE: char = '\u{f179}';
constant OS_LINUX (line 121) | const OS_LINUX: char = '\u{f17c}';
constant OS_WINDOWS (line 122) | const OS_WINDOWS: char = '\u{f17a}';
constant OS_WINDOWS_CMD (line 123) | const OS_WINDOWS_CMD: char = '\u{ebc4}';
constant PLAYLIST (line 124) | const PLAYLIST: char = '\u{f0cb9}';
constant POWERSHELL (line 125) | const POWERSHELL: char = '\u{ebc7}';
constant PRIVATE_KEY (line 126) | const PRIVATE_KEY: char = '\u{f0306}';
constant PUBLIC_KEY (line 127) | const PUBLIC_KEY: char = '\u{f0dd6}';
constant QT (line 128) | const QT: char = '\u{f375}';
constant RAZOR (line 129) | const RAZOR: char = '\u{f1fa}';
constant REACT (line 130) | const REACT: char = '\u{e7ba}';
constant README (line 131) | const README: char = '\u{f00ba}';
constant SHEET (line 132) | const SHEET: char = '\u{f1c3}';
constant SHELL (line 133) | const SHELL: char = '\u{f1183}';
constant SHELL_CMD (line 134) | const SHELL_CMD: char = '\u{f489}';
constant SHIELD_CHECK (line 135) | const SHIELD_CHECK: char = '\u{f0565}';
constant SHIELD_KEY (line 136) | const SHIELD_KEY: char = '\u{f0bc4}';
constant SHIELD_LOCK (line 137) | const SHIELD_LOCK: char = '\u{f099d}';
constant SIGNED_FILE (line 138) | const SIGNED_FILE: char = '\u{f19c3}';
constant SLIDE (line 139) | const SLIDE: char = '\u{f1c4}';
constant SQLITE (line 140) | const SQLITE: char = '\u{e7c4}';
constant SUBLIME (line 141) | const SUBLIME: char = '\u{e7aa}';
constant SUBTITLE (line 142) | const SUBTITLE: char = '\u{f0a16}';
constant TCL (line 143) | const TCL: char = '\u{f06d3}';
constant TERRAFORM (line 144) | const TERRAFORM: char = '\u{f1062}';
constant TEXT (line 145) | const TEXT: char = '\u{f15c}';
constant TODO (line 146) | const TODO: char = '\u{f0ae}';
constant TYPST (line 147) | const TYPST: char = '\u{f37f}';
constant TMUX (line 148) | const TMUX: char = '\u{ebc8}';
constant TOML (line 149) | const TOML: char = '\u{e6b2}';
constant TRANSLATION (line 150) | const TRANSLATION: char = '\u{f05ca}';
constant UNITY (line 151) | const UNITY: char = '\u{e721}';
constant VECTOR (line 152) | const VECTOR: char = '\u{f0559}';
constant VIDEO (line 153) | const VIDEO: char = '\u{f03d}';
constant VIM (line 154) | const VIM: char = '\u{e7c5}';
constant WRENCH (line 155) | const WRENCH: char = '\u{f0ad}';
constant XML (line 156) | const XML: char = '\u{f05c0}';
constant XORG (line 157) | const XORG:char = '\u{f369}';
constant YAML (line 158) | const YAML: char = '\u{e8eb}';
constant YARN (line 159) | const YARN: char = '\u{e6a7}';
constant DIRECTORY_ICONS (line 164) | const DIRECTORY_ICONS: Map<&'static str, char> = phf_map! {
constant FILENAME_ICONS (line 209) | const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
constant EXTENSION_ICONS (line 484) | const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
function iconify_style (line 1118) | pub fn iconify_style(style: Style) -> Style {
function icon_for_file (line 1128) | pub fn icon_for_file(file: &File<'_>) -> char {
FILE: src/output/lines.rs
type Render (line 18) | pub struct Render<'a> {
function render (line 26) | pub fn render<W: Write>(mut self, w: &mut W) -> io::Result<()> {
function render_file (line 36) | fn render_file<'f>(&self, file: &'f File<'a>) -> TextCellContents {
FILE: src/output/mod.rs
type View (line 28) | pub struct View {
type Mode (line 40) | pub enum Mode {
type TerminalWidth (line 49) | pub enum TerminalWidth {
method actual_terminal_width (line 59) | pub fn actual_terminal_width(self) -> Option<usize> {
FILE: src/output/render/blocks.rs
function render (line 16) | pub fn render<C: Colours>(
type Colours (line 73) | pub trait Colours {
method blocksize (line 74) | fn blocksize(&self, prefix: Option<Prefix>) -> Style;
method unit (line 75) | fn unit(&self, prefix: Option<Prefix>) -> Style;
method no_blocksize (line 76) | fn no_blocksize(&self) -> Style;
method blocksize (line 96) | fn blocksize(&self, _prefix: Option<Prefix>) -> Style { Fixed(66).norm...
method unit (line 97) | fn unit(&self, _prefix: Option<Prefix>) -> Style { Fixed(77).bold...
method no_blocksize (line 98) | fn no_blocksize(&self) -> Style { Black.italic() }
type TestColours (line 92) | struct TestColours;
function directory (line 102) | fn directory() {
function file_decimal (line 116) | fn file_decimal() {
function file_binary (line 134) | fn file_binary() {
function file_bytes (line 152) | fn file_bytes() {
FILE: src/output/render/filetype.rs
function render (line 12) | pub fn render<C: Colours>(self, colours: &C) -> ANSIString<'static> {
type Colours (line 27) | pub trait Colours {
method normal (line 28) | fn normal(&self) -> Style;
method directory (line 29) | fn directory(&self) -> Style;
method pipe (line 30) | fn pipe(&self) -> Style;
method symlink (line 31) | fn symlink(&self) -> Style;
method block_device (line 32) | fn block_device(&self) -> Style;
method char_device (line 33) | fn char_device(&self) -> Style;
method socket (line 34) | fn socket(&self) -> Style;
method special (line 35) | fn special(&self) -> Style;
FILE: src/output/render/flags.rs
function render (line 15) | pub fn render(self, style: Style, _format: FlagsFormat) -> TextCell {
FILE: src/output/render/flags_bsd.rs
function fflagstostr (line 19) | fn fflagstostr(flags: libc::c_ulong) -> *const libc::c_char;
function flags_to_string (line 24) | fn flags_to_string(flags: libc::c_ulong, def: *const libc::c_char) -> *c...
function wrapper_flags_to_string (line 29) | fn wrapper_flags_to_string(flags: f::flag_t) -> String {
function render (line 60) | pub fn render(self, style: Style, _format: FlagsFormat) -> TextCell {
FILE: src/output/render/flags_windows.rs
constant FILE_ATTRIBUTE_READONLY (line 13) | const FILE_ATTRIBUTE_READONLY: u32 = 0x0000_0001;
constant FILE_ATTRIBUTE_HIDDEN (line 14) | const FILE_ATTRIBUTE_HIDDEN: u32 = 0x0000_0002;
constant FILE_ATTRIBUTE_SYSTEM (line 15) | const FILE_ATTRIBUTE_SYSTEM: u32 = 0x0000_0004;
constant FILE_ATTRIBUTE_ARCHIVE (line 16) | const FILE_ATTRIBUTE_ARCHIVE: u32 = 0x0000_0020;
constant FILE_ATTRIBUTE_TEMPORARY (line 17) | const FILE_ATTRIBUTE_TEMPORARY: u32 = 0x0000_0100;
constant FILE_ATTRIBUTE_COMPRESSED (line 18) | const FILE_ATTRIBUTE_COMPRESSED: u32 = 0x0000_0800;
constant FILE_ATTRIBUTE_OFFLINE (line 19) | const FILE_ATTRIBUTE_OFFLINE: u32 = 0x0000_1000;
constant FILE_ATTRIBUTE_NOT_CONTENT_INDEXED (line 20) | const FILE_ATTRIBUTE_NOT_CONTENT_INDEXED: u32 = 0x0000_2000;
constant FILE_ATTRIBUTE_ENCRYPTED (line 21) | const FILE_ATTRIBUTE_ENCRYPTED: u32 = 0x0000_4000;
constant FILE_ATTRIBUTE_NO_SCRUB_DATA (line 22) | const FILE_ATTRIBUTE_NO_SCRUB_DATA: u32 = 0x0002_0000;
constant FILE_ATTRIBUTE_PINNED (line 23) | const FILE_ATTRIBUTE_PINNED: u32 = 0x0008_0000;
constant FILE_ATTRIBUTE_UNPINNED (line 24) | const FILE_ATTRIBUTE_UNPINNED: u32 = 0x0010_0000;
constant FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS (line 25) | const FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS: u32 = 0x0040_0000;
type Attribute (line 27) | struct Attribute {
constant ATTRIBUTES (line 33) | const ATTRIBUTES: [Attribute; 13] = [
function flags_to_bsd_string (line 101) | fn flags_to_bsd_string(flags: f::flag_t) -> String {
function flags_to_windows_string (line 117) | fn flags_to_windows_string(flags: f::flag_t) -> String {
function render (line 134) | pub fn render(self, style: Style, format: FlagsFormat) -> TextCell {
FILE: src/output/render/git.rs
function render (line 13) | pub fn render(self, colours: &dyn Colours) -> TextCell {
function render (line 22) | fn render(self, colours: &dyn Colours) -> ANSIString<'static> {
type Colours (line 37) | pub trait Colours {
method not_modified (line 38) | fn not_modified(&self) -> Style;
method new (line 42) | fn new(&self) -> Style;
method modified (line 43) | fn modified(&self) -> Style;
method deleted (line 44) | fn deleted(&self) -> Style;
method renamed (line 45) | fn renamed(&self) -> Style;
method type_change (line 46) | fn type_change(&self) -> Style;
method ignored (line 47) | fn ignored(&self) -> Style;
method conflicted (line 48) | fn conflicted(&self) -> Style;
method not_modified (line 110) | fn not_modified(&self) -> Style {
method new (line 113) | fn new(&self) -> Style {
method modified (line 116) | fn modified(&self) -> Style {
method deleted (line 119) | fn deleted(&self) -> Style {
method renamed (line 122) | fn renamed(&self) -> Style {
method type_change (line 125) | fn type_change(&self) -> Style {
method ignored (line 128) | fn ignored(&self) -> Style {
method conflicted (line 131) | fn conflicted(&self) -> Style {
function render (line 52) | pub fn render(self, colours: &dyn RepoColours) -> TextCell {
function render (line 81) | pub fn render(self, colours: &dyn RepoColours) -> ANSIString<'static> {
type RepoColours (line 90) | pub trait RepoColours {
method branch_main (line 91) | fn branch_main(&self) -> Style;
method branch_other (line 92) | fn branch_other(&self) -> Style;
method no_repo (line 93) | fn no_repo(&self) -> Style;
method git_clean (line 94) | fn git_clean(&self) -> Style;
method git_dirty (line 95) | fn git_dirty(&self) -> Style;
type TestColours (line 107) | struct TestColours;
function git_blank (line 137) | fn git_blank() {
function git_new_changed (line 152) | fn git_new_changed() {
FILE: src/output/render/groups.rs
type Render (line 15) | pub trait Render {
method render (line 16) | fn render<C: Colours, U: Users + Groups>(
method render (line 27) | fn render<C: Colours, U: Users + Groups>(
type Colours (line 76) | pub trait Colours {
method yours (line 77) | fn yours(&self) -> Style;
method not_yours (line 78) | fn not_yours(&self) -> Style;
method no_group (line 79) | fn no_group(&self) -> Style;
method root_group (line 80) | fn root_group(&self) -> Style;
method yours (line 101) | fn yours(&self) -> Style { Fixed(80).normal() }
method not_yours (line 102) | fn not_yours(&self) -> Style { Fixed(81).normal() }
method no_group (line 103) | fn no_group(&self) -> Style { Black.italic() }
method root_group (line 104) | fn root_group(&self) -> Style { Fixed(82).normal() }
type TestColours (line 97) | struct TestColours;
function named (line 108) | fn named() {
function unnamed (line 140) | fn unnamed() {
function primary (line 169) | fn primary() {
function secondary (line 190) | fn secondary() {
function overflow (line 213) | fn overflow() {
function smart (line 230) | fn smart() {
FILE: src/output/render/inode.rs
function render (line 14) | pub fn render(self, style: Style) -> TextCell {
function blocklessness (line 27) | fn blocklessness() {
FILE: src/output/render/links.rs
function render (line 18) | pub fn render<C: Colours>(&self, colours: &C, numeric: &NumericLocale) -...
type Colours (line 30) | pub trait Colours {
method normal (line 31) | fn normal(&self) -> Style;
method multi_link_file (line 32) | fn multi_link_file(&self) -> Style;
method normal (line 52) | fn normal(&self) -> Style {
method multi_link_file (line 55) | fn multi_link_file(&self) -> Style {
type TestColours (line 49) | struct TestColours;
function regular_file (line 62) | fn regular_file() {
function regular_directory (line 81) | fn regular_directory() {
function popular_file (line 100) | fn popular_file() {
FILE: src/output/render/octal.rs
type Render (line 12) | pub trait Render {
method render (line 13) | fn render(&self, style: Style) -> TextCell;
method render (line 17) | fn render(&self, style: Style) -> TextCell {
function bits_to_octal (line 54) | fn bits_to_octal(r: bool, w: bool, x: bool) -> u8 {
function normal_folder (line 68) | fn normal_folder() {
function normal_file (line 91) | fn normal_file() {
function secret_file (line 114) | fn secret_file() {
function sticky1 (line 137) | fn sticky1() {
function sticky2 (line 160) | fn sticky2() {
function sticky3 (line 183) | fn sticky3() {
FILE: src/output/render/permissions.rs
type PermissionsPlusRender (line 13) | pub trait PermissionsPlusRender {
method render (line 14) | fn render<C: Colours + FiletypeColours>(&self, colours: &C) -> TextCell;
type Colours (line 17) | pub trait Colours {
method dash (line 18) | fn dash(&self) -> Style;
method user_read (line 20) | fn user_read(&self) -> Style;
method user_write (line 21) | fn user_write(&self) -> Style;
method user_execute_file (line 22) | fn user_execute_file(&self) -> Style;
method user_execute_other (line 23) | fn user_execute_other(&self) -> Style;
method group_read (line 25) | fn group_read(&self) -> Style;
method group_write (line 26) | fn group_write(&self) -> Style;
method group_execute (line 27) | fn group_execute(&self) -> Style;
method other_read (line 29) | fn other_read(&self) -> Style;
method other_write (line 30) | fn other_write(&self) -> Style;
method other_execute (line 31) | fn other_execute(&self) -> Style;
method special_user_file (line 33) | fn special_user_file(&self) -> Style;
method special_other (line 34) | fn special_other(&self) -> Style;
method attribute (line 36) | fn attribute(&self) -> Style;
FILE: src/output/render/permissions_unix.rs
method render (line 17) | fn render<C: Colours + FiletypeColours>(&self, colours: &C) -> TextCell {
type RenderPermissions (line 44) | pub trait RenderPermissions {
method render (line 45) | fn render<C: Colours>(&self, colours: &C, is_regular_file: bool) -> Ve...
method render (line 49) | fn render<C: Colours>(&self, colours: &C, is_regular_file: bool) -> Ve...
function user_execute_bit (line 78) | fn user_execute_bit<C: Colours>(
function group_execute_bit (line 94) | fn group_execute_bit<C: Colours>(&self, colours: &C) -> ANSIString<'stat...
function other_execute_bit (line 104) | fn other_execute_bit<C: Colours>(&self, colours: &C) -> ANSIString<'stat...
type TestColours (line 124) | struct TestColours;
method dash (line 128) | fn dash(&self) -> Style { Fixed(11).normal() }
method user_read (line 129) | fn user_read(&self) -> Style { Fixed(101).normal() }
method user_write (line 130) | fn user_write(&self) -> Style { Fixed(102).normal() }
method user_execute_file (line 131) | fn user_execute_file(&self) -> Style { Fixed(103).normal() }
method user_execute_other (line 132) | fn user_execute_other(&self) -> Style { Fixed(113).normal() }
method group_read (line 133) | fn group_read(&self) -> Style { Fixed(104).normal() }
method group_write (line 134) | fn group_write(&self) -> Style { Fixed(105).normal() }
method group_execute (line 135) | fn group_execute(&self) -> Style { Fixed(106).normal() }
method other_read (line 136) | fn other_read(&self) -> Style { Fixed(107).normal() }
method other_write (line 137) | fn other_write(&self) -> Style { Fixed(108).normal() }
method other_execute (line 138) | fn other_execute(&self) -> Style { Fixed(109).normal() }
method special_user_file (line 139) | fn special_user_file(&self) -> Style { Fixed(110).normal() }
method special_other (line 140) | fn special_other(&self) -> Style { Fixed(111).normal() }
method attribute (line 141) | fn attribute(&self) -> Style { Fixed(112).normal() }
function negate (line 146) | fn negate() {
function affirm (line 179) | fn affirm() {
function specials (line 211) | fn specials() {
function extra_specials (line 243) | fn extra_specials() {
FILE: src/output/render/permissions_windows.rs
method render (line 16) | fn render<C: Colours + FiletypeColours>(&self, colours: &C) -> TextCell {
function render (line 36) | pub fn render<C: Colours + FiletypeColours>(self, colours: &C) -> Vec<AN...
function render_type (line 53) | pub fn render_type<C: Colours + FiletypeColours>(self, colours: &C) -> A...
FILE: src/output/render/securityctx.rs
function render (line 13) | pub fn render<C: Colours>(&self, colours: &C) -> TextCell {
type Colours (line 42) | pub trait Colours {
method none (line 43) | fn none(&self) -> Style;
method selinux_colon (line 44) | fn selinux_colon(&self) -> Style;
method selinux_user (line 45) | fn selinux_user(&self) -> Style;
method selinux_role (line 46) | fn selinux_role(&self) -> Style;
method selinux_type (line 47) | fn selinux_type(&self) -> Style;
method selinux_range (line 48) | fn selinux_range(&self) -> Style;
FILE: src/output/render/size.rs
function render (line 17) | pub fn render<C: Colours>(
function render (line 107) | fn render<C: Colours>(self, colours: &C) -> TextCell {
type Colours (line 123) | pub trait Colours {
method size (line 124) | fn size(&self, prefix: Option<Prefix>) -> Style;
method unit (line 125) | fn unit(&self, prefix: Option<Prefix>) -> Style;
method no_size (line 126) | fn no_size(&self) -> Style;
method major (line 128) | fn major(&self) -> Style;
method comma (line 129) | fn comma(&self) -> Style;
method minor (line 130) | fn minor(&self) -> Style;
method size (line 149) | fn size(&self, _prefix: Option<Prefix>) -> Style { Fixed(66).normal() }
method unit (line 150) | fn unit(&self, _prefix: Option<Prefix>) -> Style { Fixed(77).bold() }
method no_size (line 151) | fn no_size(&self) -> Style { Black.italic() }
method major (line 153) | fn major(&self) -> Style { Blue.on(Red) }
method comma (line 154) | fn comma(&self) -> Style { Green.italic() }
method minor (line 155) | fn minor(&self) -> Style { Cyan.on(Yellow) }
type TestColours (line 145) | struct TestColours;
function directory (line 159) | fn directory() {
function file_decimal (line 174) | fn file_decimal() {
function file_binary (line 193) | fn file_binary() {
function file_bytes (line 212) | fn file_bytes() {
function device_ids (line 231) | fn device_ids() {
FILE: src/output/render/times.rs
type Render (line 13) | pub trait Render {
method render (line 14) | fn render(self, style: Style, time_offset: FixedOffset, time_format: T...
method render (line 18) | fn render(self, style: Style, time_offset: FixedOffset, time_format: T...
FILE: src/output/render/users.rs
type Render (line 14) | pub trait Render {
method render (line 15) | fn render<C: Colours, U: Users>(self, colours: &C, users: &U, format: ...
method render (line 19) | fn render<C: Colours, U: Users>(self, colours: &C, users: &U, format: ...
type Colours (line 43) | pub trait Colours {
method you (line 44) | fn you(&self) -> Style;
method other (line 45) | fn other(&self) -> Style;
method root (line 46) | fn root(&self) -> Style;
method no_user (line 47) | fn no_user(&self) -> Style;
method you (line 67) | fn you(&self) -> Style { Red.bold() }
method other (line 68) | fn other(&self) -> Style { Blue.underline() }
method root (line 69) | fn root(&self) -> Style { Blue.underline() }
method no_user (line 70) | fn no_user(&self) -> Style { Black.italic() }
type TestColours (line 63) | struct TestColours;
function named (line 74) | fn named() {
function unnamed (line 89) | fn unnamed() {
function different_named (line 101) | fn different_named() {
function different_unnamed (line 114) | fn different_unnamed() {
function overflow (line 128) | fn overflow() {
FILE: src/output/table.rs
type Options (line 35) | pub struct Options {
type Columns (line 47) | pub struct Columns {
method collect (line 71) | pub fn collect(&self, actually_enable_git: bool, git_repos: bool) -> V...
type Column (line 155) | pub enum Column {
method alignment (line 190) | pub fn alignment(self) -> Alignment {
method alignment (line 201) | pub fn alignment(self) -> Alignment {
method header (line 211) | pub fn header(self) -> &'static str {
type Alignment (line 181) | pub enum Alignment {
type SizeFormat (line 243) | pub enum SizeFormat {
type UserFormat (line 259) | pub enum UserFormat {
type GroupFormat (line 268) | pub enum GroupFormat {
type TimeType (line 278) | pub enum TimeType {
method header (line 295) | pub fn header(self) -> &'static str {
method get_corresponding_time (line 305) | pub fn get_corresponding_time(self, file: &File<'_>) -> Option<NaiveDa...
type FlagsFormat (line 317) | pub enum FlagsFormat {
method deduce (line 326) | pub(crate) fn deduce<V: Vars>(vars: &V) -> FlagsFormat {
type TimeTypes (line 345) | pub struct TimeTypes {
method default (line 355) | fn default() -> Self {
type Environment (line 369) | pub struct Environment {
method lock_users (line 383) | pub fn lock_users(&self) -> MutexGuard<'_, UsersCache> {
method load_all (line 387) | fn load_all() -> Self {
type Table (line 407) | pub struct Table<'a> {
type Row (line 423) | pub struct Row {
function new (line 429) | pub fn new(
function widths (line 458) | pub fn widths(&self) -> &TableWidths {
function header_row (line 463) | pub fn header_row(&self) -> Row {
function row_for_file (line 473) | pub fn row_for_file(
function add_widths (line 488) | pub fn add_widths(&mut self, row: &Row) {
function permissions_plus (line 493) | fn permissions_plus(&self, file: &File<'_>, xattrs: bool) -> Option<f::P...
function permissions_plus (line 503) | fn permissions_plus(&self, file: &File<'_>, xattrs: bool) -> Option<f::P...
function octal_permissions (line 513) | fn octal_permissions(&self, file: &File<'_>) -> Option<f::OctalPermissio...
function display (line 518) | fn display(
function git_status (line 584) | fn git_status(&self, file: &File<'_>) -> f::Git {
function subdir_git_repo (line 592) | fn subdir_git_repo(&self, file: &File<'_>, status: bool) -> f::SubdirGit...
function render (line 602) | pub fn render(&self, row: Row) -> TextCell {
type TableWidths (line 628) | pub struct TableWidths(Vec<usize>);
method zero (line 640) | pub fn zero(count: usize) -> Self {
method add_widths (line 644) | pub fn add_widths(&mut self, row: &Row) {
method total (line 651) | pub fn total(&self) -> usize {
type Target (line 631) | type Target = [usize];
method deref (line 633) | fn deref(&self) -> &Self::Target {
FILE: src/output/time.rs
type TimeFormat (line 32) | pub enum TimeFormat {
method format (line 66) | pub fn format(self, time: &DateTime<FixedOffset>) -> String {
function default (line 81) | fn default(time: &DateTime<FixedOffset>) -> String {
function short_month_padding (line 98) | fn short_month_padding(max_month_width: usize, month: &str) -> usize {
function iso (line 103) | fn iso(time: &DateTime<FixedOffset>) -> String {
function long (line 111) | fn long(time: &DateTime<FixedOffset>) -> String {
function relative (line 116) | fn relative(time: &DateTime<FixedOffset>) -> String {
function full (line 128) | fn full(time: &DateTime<FixedOffset>) -> String {
function custom (line 132) | fn custom(time: &DateTime<FixedOffset>, non_recent_fmt: &str, recent_fmt...
function short_month_width_japanese (line 164) | fn short_month_width_japanese() {
function short_month_width_hindi (line 173) | fn short_month_width_hindi() {
FILE: src/output/tree.rs
type TreePart (line 48) | pub enum TreePart {
method ascii_art (line 65) | pub fn ascii_art(self) -> &'static str {
type TreeTrunk (line 78) | pub struct TreeTrunk {
method new_row (line 109) | pub fn new_row(&mut self, params: TreeParams) -> &[TreePart] {
type TreeParams (line 89) | pub struct TreeParams {
method new (line 149) | pub fn new(depth: TreeDepth, last: bool) -> Self {
type TreeDepth (line 99) | pub struct TreeDepth(pub usize);
method root (line 155) | pub fn root() -> Self {
method deeper (line 159) | pub fn deeper(self) -> Self {
method iterate_over (line 165) | pub fn iterate_over<I, T>(self, inner: I) -> Iter<I>
type Iter (line 176) | pub struct Iter<I> {
type Item (line 185) | type Item = (TreeParams, T);
method next (line 187) | fn next(&mut self) -> Option<Self::Item> {
function params (line 200) | fn params(depth: usize, last: bool) -> TreeParams {
function empty_at_first (line 206) | fn empty_at_first() {
function one_child (line 213) | fn one_child() {
function two_children (line 221) | fn two_children() {
function two_times_two_children (line 230) | fn two_times_two_children() {
function two_times_two_nested_children (line 243) | fn two_times_two_nested_children() {
function test_iteration (line 262) | fn test_iteration() {
function test_empty (line 282) | fn test_empty() {
FILE: src/theme/default_theme.rs
method default_theme (line 18) | pub fn default_theme(scale: ColorScaleOptions) -> Self {
method default (line 27) | fn default() -> Self {
method colourful (line 149) | pub fn colourful(scale: ColorScaleOptions) -> Self {
method colourful_fixed (line 157) | fn colourful_fixed() -> Self {
method colourful_gradient (line 176) | fn colourful_gradient() -> Self {
FILE: src/theme/lsc.rs
type LSColors (line 33) | pub struct LSColors<'var>(pub &'var str);
function each_pair (line 36) | pub fn each_pair<C>(&mut self, mut callback: C)
function parse_into_high_colour (line 53) | fn parse_into_high_colour<'a, I>(iter: &mut Peekable<I>) -> Option<Colour>
type Pair (line 98) | pub struct Pair<'var> {
function to_style (line 104) | pub fn to_style(&self) -> Style {
FILE: src/theme/mod.rs
type Options (line 29) | pub struct Options {
method to_theme (line 71) | pub fn to_theme(&self, isatty: bool) -> Theme {
method default_theme (line 111) | fn default_theme(&self) -> Theme {
type UseColours (line 47) | pub enum UseColours {
type Definitions (line 59) | pub struct Definitions {
method parse_color_vars (line 131) | fn parse_color_vars(&self, colours: &mut UiStyles) -> (ExtensionMappin...
type Theme (line 64) | pub struct Theme {
method blocksize (line 318) | fn blocksize(&self, prefix: Option<unit_prefix::Prefix>) -> Style {
method unit (line 332) | fn unit(&self, prefix: Option<unit_prefix::Prefix>) -> Style {
method no_blocksize (line 346) | fn no_blocksize(&self) -> Style {
method normal (line 353) | fn normal(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method directory (line 354) | fn directory(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method pipe (line 355) | fn pipe(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method symlink (line 356) | fn symlink(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method block_device (line 357) | fn block_device(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method char_device (line 358) | fn char_device(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method socket (line 359) | fn socket(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method special (line 360) | fn special(&self) -> Style { self.ui.filekinds.unwrap_or_default(...
method not_modified (line 365) | fn not_modified(&self) -> Style { self.ui.punctuation() }
method new (line 367) | fn new(&self) -> Style { self.ui.git.unwrap_or_default().new...
method modified (line 368) | fn modified(&self) -> Style { self.ui.git.unwrap_or_default().mod...
method deleted (line 369) | fn deleted(&self) -> Style { self.ui.git.unwrap_or_default().del...
method renamed (line 370) | fn renamed(&self) -> Style { self.ui.git.unwrap_or_default().ren...
method type_change (line 371) | fn type_change(&self) -> Style { self.ui.git.unwrap_or_default().typ...
method ignored (line 372) | fn ignored(&self) -> Style { self.ui.git.unwrap_or_default().ign...
method conflicted (line 373) | fn conflicted(&self) -> Style { self.ui.git.unwrap_or_default().con...
method branch_main (line 378) | fn branch_main(&self) -> Style { self.ui.git_repo.unwrap_or_default()...
method branch_other (line 379) | fn branch_other(&self) -> Style { self.ui.git_repo.unwrap_or_default()...
method no_repo (line 380) | fn no_repo(&self) -> Style { self.ui.punctuation() }
method git_clean (line 381) | fn git_clean(&self) -> Style { self.ui.git_repo.unwrap_or_default()...
method git_dirty (line 382) | fn git_dirty(&self) -> Style { self.ui.git_repo.unwrap_or_default()...
method yours (line 388) | fn yours(&self) -> Style { self.ui.users.unwrap_or_default().grou...
method not_yours (line 389) | fn not_yours(&self) -> Style { self.ui.users.unwrap_or_default().grou...
method root_group (line 390) | fn root_group(&self) -> Style { self.ui.users.unwrap_or_default().grou...
method no_group (line 391) | fn no_group(&self) -> Style { self.ui.punctuation() }
method normal (line 396) | fn normal(&self) -> Style { self.ui.links.unwrap_or_default(...
method multi_link_file (line 397) | fn multi_link_file(&self) -> Style { self.ui.links.unwrap_or_default(...
method dash (line 402) | fn dash(&self) -> Style { self.ui.punctuation() }
method user_read (line 403) | fn user_read(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method user_write (line 404) | fn user_write(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method user_execute_file (line 405) | fn user_execute_file(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method user_execute_other (line 406) | fn user_execute_other(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method group_read (line 407) | fn group_read(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method group_write (line 408) | fn group_write(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method group_execute (line 409) | fn group_execute(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method other_read (line 410) | fn other_read(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method other_write (line 411) | fn other_write(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method other_execute (line 412) | fn other_execute(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method special_user_file (line 413) | fn special_user_file(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method special_other (line 414) | fn special_other(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method attribute (line 415) | fn attribute(&self) -> Style { self.ui.perms.unwrap_or_defaul...
method size (line 419) | fn size(&self, prefix: Option<unit_prefix::Prefix>) -> Style {
method unit (line 432) | fn unit(&self, prefix: Option<unit_prefix::Prefix>) -> Style {
method no_size (line 446) | fn no_size(&self) -> Style { self.ui.punctuation() }
method major (line 448) | fn major(&self) -> Style { self.ui.size.unwrap_or_default().major() }
method comma (line 450) | fn comma(&self) -> Style { self.ui.punctuation() }
method minor (line 452) | fn minor(&self) -> Style { self.ui.size.unwrap_or_default().minor() }
method you (line 458) | fn you(&self) -> Style { self.ui.users.unwrap_or_default().u...
method other (line 459) | fn other(&self) -> Style { self.ui.users.unwrap_or_default().u...
method root (line 460) | fn root(&self) -> Style { self.ui.users.unwrap_or_default().u...
method no_user (line 461) | fn no_user(&self) -> Style { self.ui.punctuation() }
method none (line 499) | fn none(&self) -> Style { self.ui.security_context.unwrap_or_...
method selinux_colon (line 500) | fn selinux_colon(&self) -> Style { self.ui.security_context.unwrap_or_...
method selinux_user (line 501) | fn selinux_user(&self) -> Style { self.ui.security_context.unwrap_or_...
method selinux_role (line 502) | fn selinux_role(&self) -> Style { self.ui.security_context.unwrap_or_...
method selinux_type (line 503) | fn selinux_type(&self) -> Style { self.ui.security_context.unwrap_or_...
method selinux_range (line 504) | fn selinux_range(&self) -> Style { self.ui.security_context.unwrap_or_...
type FileStyle (line 178) | pub trait FileStyle: Sync {
method get_style (line 181) | fn get_style(&self, file: &File<'_>, theme: &Theme) -> Option<Style>;
method get_style (line 188) | fn get_style(&self, _file: &File<'_>, _theme: &Theme) -> Option<Style> {
method get_style (line 202) | fn get_style(&self, file: &File<'_>, theme: &Theme) -> Option<Style> {
method get_style (line 269) | fn get_style(&self, file: &File<'_>, _theme: &Theme) -> Option<Style> {
method get_style (line 297) | fn get_style(&self, file: &File<'_>, theme: &Theme) -> Option<Style> {
type NoFileStyle (line 185) | struct NoFileStyle;
type ExtensionMappings (line 210) | struct ExtensionMappings {
method is_non_empty (line 231) | fn is_non_empty(&self) -> bool {
method add (line 235) | fn add(&mut self, pattern: glob::Pattern, style: Style) {
method to_vec_pat_style (line 545) | fn to_vec_pat_style(&self) -> Vec<(glob::Pattern, Style)> {
type GlobPattern (line 225) | enum GlobPattern {
function is_simple_pattern (line 251) | fn is_simple_pattern(pattern: glob::Pattern) -> Result<String, glob::Pat...
type FileTypes (line 294) | struct FileTypes;
method symlink_path (line 466) | fn symlink_path(&self) -> Style { self.ui.symlink_path() }
method normal_arrow (line 467) | fn normal_arrow(&self) -> Style { self.ui.punctuation() }
method broken_symlink (line 468) | fn broken_symlink(&self) -> Style { self.ui.broken_symlink() }
method broken_filename (line 469) | fn broken_filename(&self) -> Style { apply_overlay(self.ui.broken_sy...
method control_char (line 470) | fn control_char(&self) -> Style { self.ui.control_char() }
method broken_control_char (line 471) | fn broken_control_char(&self) -> Style { apply_overlay(self.ui.control_c...
method executable_file (line 472) | fn executable_file(&self) -> Style { self.ui.filekinds.unwrap_or_def...
method mount_point (line 473) | fn mount_point(&self) -> Style { self.ui.filekinds.unwrap_or_def...
method colour_file (line 475) | fn colour_file(&self, file: &File<'_>) -> Style {
method style_override (line 481) | fn style_override(&self, file: &File<'_>) -> Option<FileNameStyle> {
function apply_overlay (line 520) | fn apply_overlay(mut base: Style, overlay: Style) -> Style {
FILE: src/theme/ui_styles.rs
type IconStyle (line 17) | pub struct IconStyle {
type FileNameStyle (line 23) | pub struct FileNameStyle {
type UiStyles (line 30) | pub struct UiStyles {
method plain (line 389) | pub fn plain() -> Self {
method set_ls (line 515) | pub fn set_ls(&mut self, pair: &Pair<'_>) -> bool {
method set_exa (line 539) | pub fn set_exa(&mut self, pair: &Pair<'_>) -> bool {
method set_number_style (line 630) | pub fn set_number_style(&mut self, style: Style) {
method set_unit_style (line 638) | pub fn set_unit_style(&mut self, style: Style) {
type FileKinds (line 120) | pub struct FileKinds {
method default (line 134) | fn default() -> Self {
type Permissions (line 165) | pub struct Permissions {
type Size (line 203) | pub struct Size {
type Users (line 237) | pub struct Users {
type Links (line 258) | pub struct Links {
type Git (line 266) | pub struct Git {
method default (line 287) | fn default() -> Self {
type GitRepo (line 302) | pub struct GitRepo {
method default (line 316) | fn default() -> Self {
type SELinuxContext (line 327) | pub struct SELinuxContext {
type SecurityContext (line 345) | pub struct SecurityContext {
method default (line 356) | fn default() -> Self {
type FileType (line 373) | pub struct FileType {
FILE: tests/cli_tests.rs
function cli_all_tests (line 2) | fn cli_all_tests() {
function cli_unix_tests (line 8) | fn cli_unix_tests() {
function cli_windows_tests (line 14) | fn cli_windows_tests() {
function cli_nix_local_tests (line 20) | fn cli_nix_local_tests() {
function cli_powertest_tests (line 26) | fn cli_powertest_tests() {
function cli_nix_generated_tests (line 32) | fn cli_nix_generated_tests() {
Condensed preview — 744 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,764K chars).
[
{
"path": ".config/cliff.toml",
"chars": 2743,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n# git-cliff ~ default configuratio"
},
{
"path": ".config/treefmt.nix",
"chars": 768,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n{\n projectRootFile = \"Cargo.toml\""
},
{
"path": ".envrc",
"chars": 34,
"preview": "if has nix; then\n use flake .\nfi\n"
},
{
"path": ".git-blame-ignore-revs",
"chars": 1584,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n# This file contains a list of com"
},
{
"path": ".github/CODEOWNERS",
"chars": 921,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n# Lines starting with a '#' are co"
},
{
"path": ".github/FUNDING.yml",
"chars": 102,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\ngithub: cafkafk\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 669,
"preview": "---\nname: Bug report\nabout: Report a crash, runtime error, or invalid output in eza\ntitle: 'bug: '\nlabels: errors\nassign"
},
{
"path": ".github/ISSUE_TEMPLATE/compilation_error.md",
"chars": 596,
"preview": "---\nname: Compilation error\nabout: Report a problem compiling eza\ntitle: 'ci: '\nlabels: ''\nassignees: ''\n\n---\n\nIf eza fa"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 264,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n#\n# SPDX-FileCopyrightText: 2023-2"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 122,
"preview": "---\nname: Feature request\nabout: Request a feature or enhancement to eza\ntitle: 'feat: '\nlabels: ''\nassignees: ''\n\n---\n"
},
{
"path": ".github/ISSUE_TEMPLATE/question.md",
"chars": 142,
"preview": "---\nname: Question\nabout: Ask a question about eza\ntitle: ''\nlabels: question\nassignees: ''\n\n---\n\nThis should be posted "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
"chars": 889,
"preview": "<!--- Provide a general summary of your changes in the Title above -->\n\n<!--- Make sure you've read CONTRIBUTING.md and "
},
{
"path": ".github/dependabot.yml",
"chars": 919,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n#\n# SPDX-FileCopyrightText: 2023-2"
},
{
"path": ".github/workflows/apt.yml",
"chars": 1165,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n#\n# SPDX-FileCopyrightText: 2023-2"
},
{
"path": ".github/workflows/unit-tests.yml",
"chars": 6826,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\nname: Unit tests\non:\n push:\n b"
},
{
"path": ".github/workflows/update-dependencies.sh",
"chars": 1562,
"preview": "#!/usr/bin/env bash\n# SPDX-FileCopyrightText: 2025 Christina Sørensen\n#\n# SPDX-License-Identifier: EUPL-1.2\n\nset -euo pi"
},
{
"path": ".github/workflows/update-dependencies.yaml",
"chars": 1548,
"preview": "# SPDX-FileCopyrightText: 2025 Christina Sørensen\n#\n# SPDX-License-Identifier: EUPL-1.2\nname: \"Automated Dependency Bump"
},
{
"path": ".github/workflows/winget.yml",
"chars": 554,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n#\n# SPDX-FileCopyrightText: 2023-2"
},
{
"path": ".gitignore",
"chars": 557,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n# Nix Flake stuff\nresult\n\n# Genera"
},
{
"path": ".pre-commit-config-non-nix.yaml",
"chars": 556,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\nrepos:\n - repo: local\n hooks:\n"
},
{
"path": "CHANGELOG.md",
"chars": 56294,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 Christina Sørensen\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-License-Identifier: "
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5587,
"preview": "<!--\nSPDX-FileCopyrightText: 2014 Coraline Ada Ehmke\n\nSPDX-License-Identifier: CC-BY-4.0\n-->\n# Contributor Covenant Code"
},
{
"path": "CONTRIBUTING.md",
"chars": 8655,
"preview": "<!--\nSPDX-FileCopyrightText: 2023-2024 Christina Sørensen\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-License-Identif"
},
{
"path": "Cargo.toml",
"chars": 3734,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n[package]\nname = \"eza\"\ndescription"
},
{
"path": "INSTALL.md",
"chars": 8361,
"preview": "<!--\nSPDX-FileCopyrightText: 2023-2024 Christina Sørensen\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-License-Identif"
},
{
"path": "LICENSE.txt",
"chars": 13648,
"preview": "EUROPEAN UNION PUBLIC LICENCE v. 1.2\nEUPL © the European Union 2007, 2016\n\nThis European Union Public Licence (the ‘EUPL"
},
{
"path": "LICENSES/CC-BY-4.0.txt",
"chars": 16983,
"preview": "Creative Commons Attribution 4.0 International\n\n Creative Commons Corporation (“Creative Commons”) is not a law firm and"
},
{
"path": "LICENSES/EUPL-1.2.txt",
"chars": 13648,
"preview": "EUROPEAN UNION PUBLIC LICENCE v. 1.2\nEUPL © the European Union 2007, 2016\n\nThis European Union Public Licence (the ‘EUPL"
},
{
"path": "LICENSES/MIT.txt",
"chars": 1078,
"preview": "MIT License\n\nCopyright (c) <year> <copyright holders>\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "README.md",
"chars": 10360,
"preview": "<!--\nSPDX-FileCopyrightText: 2023-2024 Christina Sørensen\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-License-Identif"
},
{
"path": "REUSE.toml",
"chars": 2052,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n#\n# SPDX-License-Identifier: EUPL-1.2\n\nversion = 1\nSPDX-PackageName = "
},
{
"path": "SECURITY.md",
"chars": 643,
"preview": "<!--\nSPDX-FileCopyrightText: 2023-2024 Christina Sørensen\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-License-Identif"
},
{
"path": "TESTING.md",
"chars": 954,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 Christina Sørensen, Martin Fillon\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-Licen"
},
{
"path": "benches/my_benchmark.rs",
"chars": 630,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "build.rs",
"chars": 4116,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "completions/bash/eza",
"chars": 2454,
"preview": "# shellcheck shell=bash\n_eza() {\n cur=${COMP_WORDS[COMP_CWORD]}\n prev=${COMP_WORDS[COMP_CWORD-1]}\n\n case \"$prev"
},
{
"path": "completions/fish/eza.fish",
"chars": 6774,
"preview": "# Meta-stuff\ncomplete -c eza -s v -l version -d \"Show version of eza\"\ncomplete -c eza -l help -d \"Show list of command-l"
},
{
"path": "completions/nush/eza.nu",
"chars": 4485,
"preview": "export extern \"eza\" [\n --version(-v) # Show version of eza\n --help # Show list of"
},
{
"path": "completions/pwsh/_eza.ps1",
"chars": 20700,
"preview": "using namespace System.Management.Automation\nusing namespace System.Management.Automation.Language\n\nRegister-ArgumentCom"
},
{
"path": "completions/zsh/_eza",
"chars": 4988,
"preview": "#compdef eza\n\n# Save this file as _eza in /usr/local/share/zsh/site-functions or in any\n# other folder in $fpath. E.g. "
},
{
"path": "deb.asc",
"chars": 1676,
"preview": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBGTejj8BEAC3Qdi6up8rkFvekeuZiGpuC5OTic+Nd/x6zacrtDKJwdVa6fw3\ntVydFW1ELcw33ifWD"
},
{
"path": "deny.toml",
"chars": 11093,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n[graph]\n# This template contains a"
},
{
"path": "devtools/deb-package.sh",
"chars": 5780,
"preview": "#!/bin/bash -e\n\nREPO_URL=\"https://github.com/eza-community/eza\"\nNAME=\"eza\"\nDESTDIR=/usr/bin\nDOCDIR=/usr/share/man/\n\nCOMM"
},
{
"path": "devtools/dir-generator.sh",
"chars": 2549,
"preview": "#!/usr/bin/env bash\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 <output_dir>\";\n exit 1;\nfi\n\nrm \"$1\" -rf;\nmkdir -p \"$1\";"
},
{
"path": "devtools/generate-timestamp-test-dir.sh",
"chars": 616,
"preview": "#!/usr/bin/env bash\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 <output_dir>\";\n exit 1;\nfi\n\nrm \"$1\" -rf;\nmkdir -p \"$1\";"
},
{
"path": "devtools/generate-trycmd-test.sh",
"chars": 985,
"preview": "#!/usr/bin/env bash\n\n# Generate test data for the program\n\nif [ $# -le 1 ]; then\n echo \"Usage: $0 <test name> <test a"
},
{
"path": "docs/tapes/demo.tape",
"chars": 2112,
"preview": "Output docs/images/demo.gif\nSet Width 1536\nSet Height 512\nSet Shell fish\nSet FontFamily \"FantasqueSansM Nerd Font Mono\"\n"
},
{
"path": "docs/theme.yml",
"chars": 960,
"preview": "filekinds:\n normal:\n foreground: Blue\n directory:\n foreground: Blue\n symlink:\n foreground: Cyan\n executable"
},
{
"path": "flake.nix",
"chars": 4927,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n#\n# SPDX-FileCopyrightText: 2014-2"
},
{
"path": "justfile",
"chars": 11487,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n_default:\n @just -l\n\nall: build"
},
{
"path": "man/eza.1.md",
"chars": 14189,
"preview": "% eza(1) $version\n\n<!-- This is the eza(1) man page, written in Markdown. -->\n<!-- To generate the roff version, run `ju"
},
{
"path": "man/eza_colors-explanation.5.md",
"chars": 4977,
"preview": "% eza_colors-explanation(5) $version\n\n<!-- This is the eza_colors-explanation(5) man page, written in Markdown. -->\n<!--"
},
{
"path": "man/eza_colors.5.md",
"chars": 7364,
"preview": "% eza_colors(5) $version\n\n<!-- This is the eza_colors(5) man page, written in Markdown. -->\n<!-- To generate the roff ve"
},
{
"path": "nix/eza.nix",
"chars": 1563,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n{\n pkgs,\n naersk',\n buildInputs"
},
{
"path": "nix/trycmd.nix",
"chars": 2796,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n{\n pkgs,\n naersk',\n buildInputs"
},
{
"path": "powertest.yaml",
"chars": 3151,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\ndump_dir: tests/ptests\ndepth: 1\nbi"
},
{
"path": "rust-toolchain.toml",
"chars": 390,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\n[toolchain]\n# NOTE: don't forget t"
},
{
"path": "snap/snapcraft.yaml",
"chars": 1079,
"preview": "# SPDX-FileCopyrightText: 2024 Christina Sørensen\n# SPDX-License-Identifier: EUPL-1.2\nname: eza\nbase: core24\nversion: 'l"
},
{
"path": "src/fs/dir.rs",
"chars": 8768,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/dir_action.rs",
"chars": 3191,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/feature/git.rs",
"chars": 16405,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/feature/mod.rs",
"chars": 1084,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/feature/xattr.rs",
"chars": 22525,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/fields.rs",
"chars": 8281,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/file.rs",
"chars": 39492,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/filter.rs",
"chars": 15618,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/mod.rs",
"chars": 450,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/mounts/linux.rs",
"chars": 698,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/mounts/macos.rs",
"chars": 2572,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/mounts/mod.rs",
"chars": 2568,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/fs/recursive_size.rs",
"chars": 2746,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/info/filetype.rs",
"chars": 19264,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/info/mod.rs",
"chars": 541,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/info/sources.rs",
"chars": 2814,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/lib.rs",
"chars": 435,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/logger.rs",
"chars": 2001,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/main.rs",
"chars": 17281,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/config.rs",
"chars": 26743,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/dir_action.rs",
"chars": 4991,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/error.rs",
"chars": 3376,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/file_name.rs",
"chars": 7393,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/filter.rs",
"chars": 14079,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/mod.rs",
"chars": 7065,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/parser.rs",
"chars": 14590,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/stdin.rs",
"chars": 872,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/theme.rs",
"chars": 4772,
"preview": "use clap::ArgMatches;\n\n// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPD"
},
{
"path": "src/options/vars.rs",
"chars": 7332,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/options/view.rs",
"chars": 33263,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/cell.rs",
"chars": 8718,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/color_scale.rs",
"chars": 7788,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/details.rs",
"chars": 18829,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/escape.rs",
"chars": 2608,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/file_name.rs",
"chars": 18989,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/grid.rs",
"chars": 1681,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/grid_details.rs",
"chars": 8941,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/icons.rs",
"chars": 61010,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/lines.rs",
"chars": 1265,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/mod.rs",
"chars": 2296,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/blocks.rs",
"chars": 4998,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/filetype.rs",
"chars": 1290,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/flags.rs",
"chars": 534,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/flags_bsd.rs",
"chars": 1988,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/flags_windows.rs",
"chars": 3686,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/git.rs",
"chars": 4979,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/groups.rs",
"chars": 8312,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/inode.rs",
"chars": 825,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/links.rs",
"chars": 2630,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/mod.rs",
"chars": 1757,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/octal.rs",
"chars": 5856,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/permissions.rs",
"chars": 1006,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/permissions_unix.rs",
"chars": 9383,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/permissions_windows.rs",
"chars": 2022,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/securityctx.rs",
"chars": 1678,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/size.rs",
"chars": 7830,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/times.rs",
"chars": 935,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/render/users.rs",
"chars": 4221,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/table.rs",
"chars": 18021,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/time.rs",
"chars": 7668,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/output/tree.rs",
"chars": 9347,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/theme/default_theme.rs",
"chars": 6944,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/theme/lsc.rs",
"chars": 10478,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/theme/mod.rs",
"chars": 40947,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "src/theme/ui_styles.rs",
"chars": 25522,
"preview": "// SPDX-FileCopyrightText: 2024 Christina Sørensen\n// SPDX-License-Identifier: EUPL-1.2\n//\n// SPDX-FileCopyrightText: 20"
},
{
"path": "tests/cli_tests.rs",
"chars": 691,
"preview": "#[test]\nfn cli_all_tests() {\n trycmd::TestCases::new().case(\"tests/cmd/*_all.toml\");\n}\n\n#[test]\n#[cfg(unix)]\nfn cli_u"
},
{
"path": "tests/cmd/absolute_file_all.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/absolute_file_all.stdout",
"chars": 28,
"preview": "[CWD]/tests/itest/index.svg\n"
},
{
"path": "tests/cmd/absolute_file_all.toml",
"chars": 59,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest/index.svg --absolute\"\n"
},
{
"path": "tests/cmd/absolute_recurse_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/absolute_recurse_unix.stdout",
"chars": 1702,
"preview": "[CWD]/tests/itest/a\n[CWD]/tests/itest/b\n[CWD]/tests/itest/c\n[CWD]/tests/itest/d\n[CWD]/tests/itest/dir-symlink -> vagrant"
},
{
"path": "tests/cmd/absolute_recurse_unix.toml",
"chars": 52,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest --absolute -R\"\n"
},
{
"path": "tests/cmd/absolute_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/absolute_unix.stdout",
"chars": 508,
"preview": "[CWD]/tests/itest/a\n[CWD]/tests/itest/b\n[CWD]/tests/itest/c\n[CWD]/tests/itest/d\n[CWD]/tests/itest/dir-symlink -> vagrant"
},
{
"path": "tests/cmd/absolute_unix.toml",
"chars": 49,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest --absolute\"\n"
},
{
"path": "tests/cmd/basic_all.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/basic_all.stdout",
"chars": 112,
"preview": "a\nb\nc\nd\ndir-symlink -> vagrant/debug\ne\nexa\nf\ng\nh\ni\nimage.jpg.img.c.rs.log.png\nindex.svg\nj\nk\nl\nm\nn\no\np\nq\nvagrant\n"
},
{
"path": "tests/cmd/basic_all.toml",
"chars": 38,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest\"\n"
},
{
"path": "tests/cmd/classify-hyperlink-width-50_nix_local.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/classify-hyperlink-width-50_nix_local.stdout",
"chars": 1262,
"preview": "\u001b]8;;file:///build/source/tests/itest/a\u001b/a\u001b]8;;\u001b/ \u001b]8;;file:///build/source/tests/itest/exa\u001b/exa\u001b]8;;\u001b// \u001b]8;;file:///"
},
{
"path": "tests/cmd/follow-symlinks_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/follow-symlinks_unix.stdout",
"chars": 727,
"preview": "tests/itest\n├── a\n├── b\n├── c\n├── d\n├── dir-symlink -> vagrant/debug\n│ ├── a\n│ ├── symlink -> a\n│ └── symlink-brok"
},
{
"path": "tests/cmd/follow-symlinks_unix.toml",
"chars": 59,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest --follow-symlinks -T\"\n"
},
{
"path": "tests/cmd/icons_all.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/icons_all.stdout",
"chars": 156,
"preview": " a\n b\n c\n d\n dir-symlink -> vagrant/debug\n e\n exa\n f\n g\n h\n i\n image.jpg.img.c.rs.log.png\n index.svg\n j\n "
},
{
"path": "tests/cmd/icons_all.toml",
"chars": 53,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest --icons=always\"\n"
},
{
"path": "tests/cmd/long_icons_always.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/long_icons_always.stdout",
"chars": 839,
"preview": ".rw-r--r-- 0 nixbld 1 Jan 1970 a\n.rw-r--r-- 0 nixbld 1 Jan 1970 b\n.rw-r--r-- 0 nixbld 1 Jan 1970 c\n.rw-r-"
},
{
"path": "tests/cmd/long_icons_always.toml",
"chars": 60,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest --long --icons=always\"\n"
},
{
"path": "tests/cmd/long_windows.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/long_windows.stdout",
"chars": 244,
"preview": "-a--- a\n-a--- b\n-a--- c\n-a--- d\nl---- dir-symlink -> vagrant/debug\n-a--- e\nd---- exa\n-a--- f\n-a--- g\n-a--- h\n-a--- i\n-a-"
},
{
"path": "tests/cmd/long_windows.toml",
"chars": 79,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest --long --no-user --no-time --no-filesize\"\n"
},
{
"path": "tests/cmd/tree_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/cmd/tree_unix.stdout",
"chars": 666,
"preview": "tests/itest\n├── a\n├── b\n├── c\n├── d\n├── dir-symlink -> vagrant/debug\n├── e\n├── exa\n│ ├── file.c -> djihisudjuhfius\n│ "
},
{
"path": "tests/cmd/tree_unix.toml",
"chars": 41,
"preview": "bin.name = \"eza\"\nargs = \"tests/itest -T\"\n"
},
{
"path": "tests/gen/inexistant_file_unix.stderr",
"chars": 57,
"preview": "\"nonexistentdir\": No such file or directory (os error 2)\n"
},
{
"path": "tests/gen/inexistant_file_unix.stdout",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/inexistant_file_unix.toml",
"chars": 57,
"preview": "bin.name = \"eza\"\nargs = \"nonexistentdir\"\nstatus.code = 2\n"
},
{
"path": "tests/gen/long_all_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_all_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_all_nix.toml",
"chars": 54,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --all\"\n"
},
{
"path": "tests/gen/long_binary_bytes_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_binary_bytes_unix.stdout",
"chars": 73,
"preview": "- git\n- grid\n- group\n- icons\n- perms\n- size\n- specials\n- symlinks\n- time\n"
},
{
"path": "tests/gen/long_binary_bytes_unix.toml",
"chars": 94,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --no-user --no-time --no-permissions --binary\"\n"
},
{
"path": "tests/gen/long_blocksize_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_blocksize_nix.stdout",
"chars": 370,
"preview": "drwxr-xr-x - - nixbld 1 Jan 1970 git\ndrwxr-xr-x - - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - - nixbld 1 Jan 1970 group\n"
},
{
"path": "tests/gen/long_blocksize_nix.toml",
"chars": 60,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --blocksize\"\n"
},
{
"path": "tests/gen/long_extended_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_extended_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_extended_nix.toml",
"chars": 59,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --extended\"\n"
},
{
"path": "tests/gen/long_file_size_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_file_size_unix.stdout",
"chars": 73,
"preview": "- git\n- grid\n- group\n- icons\n- perms\n- size\n- specials\n- symlinks\n- time\n"
},
{
"path": "tests/gen/long_file_size_unix.toml",
"chars": 85,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --no-user --no-time --no-permissions\"\n"
},
{
"path": "tests/gen/long_git_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_git_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_git_nix.toml",
"chars": 54,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --git\"\n"
},
{
"path": "tests/gen/long_git_repos_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_git_repos_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_git_repos_nix.toml",
"chars": 60,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --git-repos\"\n"
},
{
"path": "tests/gen/long_git_repos_no_status_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_git_repos_no_status_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_git_repos_no_status_nix.toml",
"chars": 70,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --git-repos-no-status\"\n"
},
{
"path": "tests/gen/long_grid_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_grid_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_grid_nix.toml",
"chars": 55,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --grid\"\n"
},
{
"path": "tests/gen/long_header_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_header_nix.stdout",
"chars": 440,
"preview": "Permissions Size User Date Modified Name\ndrwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 197"
},
{
"path": "tests/gen/long_header_nix.toml",
"chars": 57,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --header\"\n"
},
{
"path": "tests/gen/long_header_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_header_unix.stdout",
"chars": 110,
"preview": "Size Name\n - git\n - grid\n - group\n - icons\n - perms\n - size\n - specials\n - symlinks\n - time\n"
},
{
"path": "tests/gen/long_header_unix.toml",
"chars": 94,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --no-user --no-time --header --no-permissions\"\n"
},
{
"path": "tests/gen/long_icons_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_icons_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_icons_nix.toml",
"chars": 61,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --icons=auto\"\n"
},
{
"path": "tests/gen/long_links_recurse_unix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_links_recurse_unix.stdout",
"chars": 47107,
"preview": " 12 git\n1002 grid\n 2 group\n 2 icons\n 2 perms\n 2 size\n 2 specials\n 3 symlinks\n 2 time\n\ntests/test_dir/git:"
},
{
"path": "tests/gen/long_links_recurse_unix.toml",
"chars": 117,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long --no-user --no-time --no-filesize --no-permissions --recurse --links\"\n"
},
{
"path": "tests/gen/long_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_nix.stdout",
"chars": 352,
"preview": "drwxr-xr-x - nixbld 1 Jan 1970 git\ndrwxr-xr-x - nixbld 1 Jan 1970 grid\ndrwxr-xr-x - nixbld 1 Jan 1970 group\ndrwxr-"
},
{
"path": "tests/gen/long_nix.toml",
"chars": 48,
"preview": "bin.name = \"eza\"\nargs = \"tests/test_dir --long\"\n"
},
{
"path": "tests/gen/long_octal_nix.stderr",
"chars": 0,
"preview": ""
},
{
"path": "tests/gen/long_octal_nix.stdout",
"chars": 397,
"preview": "0755 drwxr-xr-x - nixbld 1 Jan 1970 git\n0755 drwxr-xr-x - nixbld 1 Jan 1970 grid\n0755 drwxr-xr-x - nixbld 1 Jan 19"
}
]
// ... and 544 more files (download for full content)
About this extraction
This page contains the full source code of the eza-community/eza GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 744 files (1.5 MB), approximately 613.9k tokens, and a symbol index with 1183 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.