# 0.15

![tv-0.15.png](/img/tv-0.15.png)

## Highlights

This section is meant as a quick recap of what you should know when upgrading to 0.15.x.

It is by no means exhaustive. If you're really interested in the complete changelogs, check out the individual [release pages](https://github.com/alexpasmantier/television/releases).

### Channel Actions Picker

![tv-015-actions.png](/img/tv-015-actions.png)

Channels can now define **actions** — commands that operate on the currently selected entry. Hit <kbd>Ctrl</kbd>+<kbd>X</kbd> to open the action picker and choose from a searchable list, or bind actions directly to keys.

Here's what the `git-branch` channel looks like:

```toml
[keybindings]
enter = "actions:checkout"
ctrl-d = "actions:delete"
ctrl-m = "actions:merge"
ctrl-r = "actions:rebase"

[actions.checkout]
description = "Checkout the selected branch"
command = "git checkout '{0}'"
mode = "execute"

[actions.delete]
description = "Delete the selected branch"
command = "git branch -d '{0}'"
mode = "execute"
```

Actions support two modes:
- `execute`: replaces the tv process (tv exits, action takes over)
- `fork`: spawns the command as a child process (tv stays open)

This enables having "management-style" channels. For instance, the `docker-containers` channel lets you start, stop, restart, view logs, exec into, or remove containers — all from the same picker:

```toml
[actions.logs]
description = "Follow logs of the selected container"
command = "docker logs -f '{split:\t:0}'"
mode = "execute"

[actions.exec]
description = "Execute shell in the selected container"
command = "docker exec -it '{split:\t:0}' /bin/sh"
mode = "execute"
```

### Frecency Sorting

Results can now be ranked by **frecency** (frequency + recency). Entries you select often and recently float to the top. This is enabled by default for some channels and recorded automatically.

Frecency is stored in `~/.local/share/television/frecency.json` and uses a Mozilla-style time-decay algorithm with recency buckets (last 4 hours, last day, last week, etc.) combined with access count.

You can tune it per channel:

```toml
[source]
command = "fd -t f"
frecency = false  # disable for this channel
```

Or adjust the global cap in `~/.config/television/config.toml`:

```toml
frecency_max_entries = 1000  # max entries tracked per channel (default)
```

Channels where ordering is inherently meaningful (shell history, git log, etc.) ship with frecency disabled by default.

### Custom Sorting Controls

You can now **preserve the original source order** instead of having results re-sorted by match quality. This is useful for chronologically sorted sources like shell history or log entries:

```sh
tv zsh-history --no-sort
```

Or in a channel TOML:

```toml
[source]
command = "sed '1!G;h;$!d' ${HISTFILE:-${HOME}/.zsh_history}"
no_sort = true
frecency = false
```

When `no_sort` is enabled, both match-quality sorting and frecency are disabled — the source's original ordering is preserved.

### Custom Shell for Commands

Channels can now specify which shell to use for source, preview, and action commands. This is useful when a command depends on shell-specific syntax:

```toml
[source]
command = "some-command-that-needs-fish-syntax"
shell = "fish"
```

You can also set a **global shell override** in your config file so all channels use it by default (channel-specific settings still take precedence):

```toml
# ~/.config/television/config.toml
shell = "zsh"  # options: bash, zsh, fish, powershell, cmd, nu
```

If neither is set, tv auto-detects from `$SHELL`.

### 41 New Channels + Improvements

0.15.0 and 0.15.1 together added **41 new channels** with more default actions for existing ones. The `update-channels` command now **skips channels with unmet requirements** by default — so running `tv update-channels` won't clutter your system with channels you can't use.

### Cycle Sources and Previews Tab Indicators

Channels with multiple source commands (like `dirs` which cycles between `fd -t d` and `fd -t d --hidden`) now show **tab indicators** in the UI so you can see which variant is active. The keybinding to cycle is shown next to the indicator.

```toml
# dirs.toml — two source commands to cycle through with ctrl-s
[source]
command = ["fd -t d", "fd -t d --hidden"]
```

The same applies to channels with multiple preview commands (<kbd>Ctrl</kbd>+<kbd>F</kbd> to cycle).

### Remote Control: Missing Requirements Popup

When browsing channels in the remote control (<kbd>Ctrl</kbd>+<kbd>T</kbd>) and selecting one whose requirements aren't met, tv now shows a popup explaining what's missing instead of failing silently.

![tv-015-missing-reqs.png](/img/tv-015-missing-reqs.png)

### Fish Shell Channel Completion

Fish users now get channel name completion out of the box:

```fish
tv <Tab>
# Shows available channels labeled "(Channel)" alongside subcommands
```

### Performance

Various performance improvements (see changelog)

### Other Changes

- `tv list-channels` output is now sorted alphabetically
- The stateful loading spinner was replaced by a static symbol
- Documentation overhaul across the project
- Dependabot configured for cargo and rust-toolchain ecosystems

**Full Changelog**: https://github.com/alexpasmantier/television/compare/0.14.5...0.15.3
