diff --git a/README.md b/README.md index 0992e1f..b319c94 100644 --- a/README.md +++ b/README.md @@ -20,3 +20,23 @@ ``` The revolution will be televised. + + +## 📺 About +`Television` is a blazingly fast general purpose fuzzy finder TUI written in Rust. It is inspired by the neovim `Telescope` plugin and the `fzf` command line tool. It is designed to be fast, efficient, easy to use and easily extensible. It is built on top of `tokio`, `ratatui` and the `nucleo` matcher which is used in the `helix` editor. + +## 📺 Design +`Television`'s design is based on the concept of `Channels`. A `Channel` is a source of data that can be used for fuzzy +finding. A `Channel` can be anything from a file system directory, a git repository, a list of strings, a list of +numbers, etc. `Television` provides a set of built-in `Channels` that can be used out of the box. However, `Television` +is designed to be easily extensible and allows users to define their own custom `Channels` by implementing a simple +trait. + +## Built-in Channels +- `Files`: search through files in a directory tree. +- `Text`: search through textual content in a directory tree. +- `GitRepos`: search through git repositories anywhere on the file system. +- `Env`: search through environment variables and their values. +- `Alias`: search through shell aliases and their values. +- `Stdin`: search through lines of text from stdin. + diff --git a/crates/television/utils/files.rs b/crates/television/utils/files.rs index 242de65..ce43eff 100644 --- a/crates/television/utils/files.rs +++ b/crates/television/utils/files.rs @@ -4,6 +4,7 @@ use std::{collections::HashSet, path::PathBuf}; use ignore::{overrides::Override, types::TypesBuilder, WalkBuilder}; use infer::Infer; use lazy_static::lazy_static; +use tracing::debug; use crate::config::default_num_threads; @@ -26,9 +27,14 @@ pub fn walk_builder( // ignore paths if let Some(paths) = ignore_paths { - for path in paths { - builder.add_ignore(path); - } + builder.filter_entry(move |e| { + let path = e.path(); + if paths.iter().any(|p| path.starts_with(p)) { + debug!("Ignoring path: {:?}", path); + return false; + } + true + }); } builder.threads(n_threads);