Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/ClaasBontus/qcd_rs

Command line tool for quickly changing directories
https://github.com/ClaasBontus/qcd_rs

chdir command-line linux rust

Last synced: about 2 months ago
JSON representation

Command line tool for quickly changing directories

Lists

README

        

# qcd – quickly change directory

**qcd** is a Linux tool which helps improving your efficiency on the command line. With qcd
you change to another directory just by entering commands like `qcd 3` and step
back to where you came from with `qcd -o`. Or you toggle between two directories with
the swap functionality (`qcd -w`).

For this to work you store frequently visited directories in a database file (sqlite3).
Entries in this database get referred to via indices (value '3' in the example).
If you don't like remembering indices you can assign aliases to each entry. Indices and
aliases can be freely adjusted to your needs.

In addition `qcd` provides a stack concept. In the example (`qcd 3`) the
current working directory is put on (top of) the stack before changing the directory.
Entering `qcd -o` pops (removes) the path from top of the stack and changes the working
directory to that path.

Enter `qcd -h` to see the full help.

# Usage examples
## Change directory

qcd ENTRY [-n] Chdir to path with idx or alias ENTRY (w/o -n: adds work dir to stack)
qcd -o (pop) Chdir to top of stack, remove that entry from stack

## Add or remove an entry

qcd -a PATH [-i IDX] [-s ALIAS] Add PATH to database
qcd -p [-i IDX] [-s ALIAS] Add current working directory to database
qcd -r ENTRY Remove row with idx or alias ENTRY
qcd -u (push) Add current working directory to (top of) stack

## Queries

qcd -l List all indexes, aliases and paths
qcd -q PATH Query index of PATH
ls `qcd -e 4` List directory contents of path with idx 4

## Alias matching
Your choices of alias names can have an influence on your efficiency. Abbreviating an alias
will match if the string equals the beginning of an alias in a unique way. For instance,
with aliases *pets* and *people* in the database `qcd pet` will match the first one while
`qcd pe` will match none. If there is a single alias starting e.g. with letter 'a'
`qcd a` will already do the job.

# Obtaining qcd
## Building qcd from source files
You need a Linux system with [Rust](https://www.rust-lang.org/tools/install)
installed. Change to a convenient directory and enter

git clone https://github.com/ClaasBontus/qcd_rs.git
cd qcd_rs
cargo build --release

After a successful build you should find the executable (named `qcd_rs`) in
subdirectory target/release/.

## Installation
It is **not sufficient** to copy the qcd-binary to a directory in your search path
([read this](https://stackoverflow.com/a/64617878/3876684]) if you want to know why).

1. Copy qcd_rs to a directory in your PATH (or use the full path specification to qcd_rs in the code below).
2. Add the following code to your `.bashrc` or `.zshrc` file:

```bash
qcdfunc()
{
d=`qcd_rs "$@"`
if (( $? ))
then
\builtin echo $d
else
\builtin cd $d
fi
}

alias qcd=qcdfunc
export QCD_RS_SESSIONID=`qcd_rs --pid`
```

# Environment variables
- QCD_RS_DBPATH: Path to sqlite database (default: *home-directory*).
- QCD_RS_DBNAME: Name of sqlite database file (default: .qcd_rs.sqlite).
- QCD_RS_SESSIONID: Process ID. Needed for providing a separate stack for each opened shell.

# Remarks
- qcd prevents duplicate entries on top of stack.
- Old entries on stack (older than 21 days) eventually get removed.
- Support is restricted to [UTF-8 paths](https://github.com/camino-rs/camino).