Skip to content


First pls organises paths supplied as CLI arguments into groups of solo files and individual directories. Then it prints each group one by one.

Terminal window
pls Cargo.toml Cargo.lock src docs  Cargo.toml Cargo.lock   src: args/   └─ config/   └─ enums/   └─ ext/   └─ fmt/   └─ models/   └─ output/   └─ traits/   └─ utils/   └─   docs: node_modules/ public/ src/ 󰌞 astro.config.mjs 󰊢 .gitignore 󰜎 justfile  package.json   └─ pnpm-lock.yaml.pls.yml  tsconfig.json


Solo files

The solo files group consists of all files supplied individually. These files are collected into one group. Each of the files in this group comes with its own separate configuration derived from .pls.yml files.

The special thing here is that the group also has its own configuration determined from the common ancestor of all these files. This group-level configuration sets top-level options such as table headings, box-drawing characters and importance scales.

Consider the following filesystem tree:

├── .pls.yml
├── a
└── subdir
├── .pls.yml
└── b
header_style: red bold underline
curr: green bold
other: green bold
- pattern: ^a$
style: red underline
Terminal window
pls a ./../file_group/./subdir/a

Link# T Permissions User Group Size Modified Name   1 f rw- r-- r-- runner docker 0.0 B 2024-Apr-22 05:23am a   1 f rw- r-- r-- runner docker 0.0 B 2024-04-22 ./../file_group/./subdir/a


Note how both files retain their individual configurations for the row, but the table settings come from the outer .pls.yml file. Also note that the file names are shown exactly as they were passed on the command line.

By default, pls does not follow symlinks in the arguments provided to it. So a symlink to a directory will be treated as a file input and will not list the contents of the target directory.

Terminal window
pls sym

​󰌹 sym@ 󰁔 ./dir

Terminal window
pls ./dir