fencecat 0.2.2

Walkdir cat with markdown fenced code output
Documentation
# fencecat ⚖️🐈

Recursively emit Markdown code fences labeled with relative file paths.  
Perfect for sharing source trees in LLM chats, issues, blog posts, or code reviews.

## Features

- Walks a directory tree and prints each file inside a fenced code block.
- Labels fences with the file’s relative path.
- Automatically chooses fence length so embedded backticks don’t break.
- Skips binary files and empty files.
- Supports filtering by file extension (allow list and deny list).
- Supports filtering by path Regex (allow list and deny list).
- Optional: order by file size (largest first).
- Optional: copy the entire output to your clipboard.

## Installation

```bash
cargo install --locked fencecat
```

The resulting binary will be in `~/.cargo/bin/fencecat`.

## Usage

```bash
fencecat [OPTIONS] [DIR]
```

### Options

  * `-c`, `--copy`
    Copy the full output to the clipboard.
    On Wayland/X11 this uses external tools (`wl-copy`, `xclip`, or `xsel`) if available.

  * `-B`, `--biggest-first`
    Order files by size, largest first.

  * `--ext EXT[,EXT...]`
    Only include files with the given extensions.
    Examples:

    ```bash
    fencecat . --ext rs,ts,py
    fencecat src --ext .md,.toml
    ```

  * `--not-ext EXT[,EXT...]`
    Exclude files with the given extensions. This takes precedence over inclusions.
    Example:

    ```bash
    fencecat . --not-ext lock,txt
    ```

  * `--regex PATTERN`
    Only include paths that match the given Regex pattern (relative to the current working directory).
    Can be specified multiple times to add multiple patterns.

  * `--not-regex PATTERN`
    Exclude paths that match the given Regex pattern.
    Can be specified multiple times.

  * `-h`, `--help`
    Show help information.

  * `-V`, `--version`
    Show version.

  * `--no-ignore`
    Include hidden and gitignored files (disables ignore rules).

### Examples

Emit all files under `src/`:

```bash
fencecat src
```

Emit only Rust and Python files:

```bash
fencecat . --ext rs,py
```

Exclude lock files and text files:

```bash
fencecat . --not-ext lock,txt
```

Emit only files in a `controllers` or `models` folder using Regex:

```bash
fencecat src --regex "controllers/" --regex "models/"
```

Exclude test files using Regex:

```bash
fencecat . --not-regex "test" --not-regex "_spec\."
```

Copy output to clipboard for pasting into GitHub:

```bash
fencecat . -c
```

Sort files by size:

```bash
fencecat . -B
```

## Clipboard Notes

On Linux/Wayland:

  * Install [`wl-clipboard`]https://github.com/bugaevc/wl-clipboard for `wl-copy` / `wl-paste`.
  * If unavailable, `xclip` or `xsel` under XWayland are used.
  * macOS uses `pbcopy`; Windows uses PowerShell’s `Set-Clipboard`.

If the clipboard still seems empty, check your compositor or portal logs.

## License

MIT