Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pavoljuhas/smart-change-directory
smart change of directory in a Unix shell, IPython and Vim
https://github.com/pavoljuhas/smart-change-directory
ipython shell zsh
Last synced: 3 months ago
JSON representation
smart change of directory in a Unix shell, IPython and Vim
- Host: GitHub
- URL: https://github.com/pavoljuhas/smart-change-directory
- Owner: pavoljuhas
- License: bsd-3-clause
- Created: 2013-12-12T16:41:32.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2023-03-02T21:23:50.000Z (almost 2 years ago)
- Last Synced: 2023-08-01T02:11:08.515Z (over 1 year ago)
- Topics: ipython, shell, zsh
- Language: Shell
- Homepage:
- Size: 132 KB
- Stars: 19
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# smart-change-directory (scd)
[Z shell](http://www.zsh.org) function for visiting any directory in
a unix shell, [Vim](http://www.vim.org) or [IPython](http://ipython.org).`scd` is a Z shell (Zsh) script for changing to any directory with a few
keystrokes. scd keeps history of the visited directories, which
serves as an index of the known paths. The directory index is updated after
every `cd` command in the shell and can be also filled manually by running
`scd -a`. To switch to some directory, scd needs few fragments of the
desired path to match with the index. A selection menu is displayed in case
of several matches, with a preference given to recently visited paths.
scd can define persistent aliases, which match only their target paths.## SYNOPSIS
```sh
scd [options] [pattern1 pattern2 ...]
```## PATTERNS
Patterns may use all zsh [glob operators](
http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators)
available with *extendedglob* option. Specified patterns must match
the absolute path and at least one of them must match in the tail.
Several special patterns are also recognized as follows:
-
^PAT -
PAT must match at the beginning of the path, for example, "^/home" -
PAT$ -
require PAT to match the end of the path, "man$" -
./ -
match only subdirectories of the current directory -
PAT: -
require PAT to match over the tail component, "doc:", "re/doc:"
## OPTIONS
-
-a, --add -
add current or specified directories to the directory index.
For file arguments add their containing paths. -
--unindex
-
remove current or specified directories from the index. -
-r, --recursive
-
apply options --add or --unindex recursively. -
--alias=ALIAS
-
create alias for the current or specified directory and save it to
~/.scdalias.zsh. -
--unalias
-
remove ALIAS definition for the current or specified directory from
~/.scdalias.zsh. Use "OLD" to purge aliases to non-existent
directories. -
-A, --all
-
display all directories even those excluded by patterns in
~/.scdignore. Disregard the unique matching for a
directory alias and filtering of less likely paths. -
-p, --push
-
use "pushd" to change to the target directory. -
--list
-
show matching directories and exit. -
-v, --verbose
-
display directory rank in the selection menu. -
-h, --help
-
display this options summary and exit.
## INSTALLATION
## Unix shell
1. Make sure that Z shell is installed. On Linux it is usually the `zsh`
package.
2. Copy or symlink the [bin/scd](bin/scd) script to some directory
in the PATH.
3. Find out what shell is active for your account by running `ps -p $$`.
4. Edit the startup file for your shell and have it source the
corresponding scd setup file from [shellrcfiles](shellrcfiles)
as follows:
* *zsh*
```zsh
# ~/.zshrc
source ~/Software/smart-change-directory/shellrcfiles/zshrc_scd
```
Note that scd aliases are named directories in Zsh and can
be thus expanded as `~NAME` in the shell. If you use the
[oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
framework you may just activate the `scd` plugin instead.
* *bash*
```bash
# ~/.bashrc
source ~/Software/smart-change-directory/shellrcfiles/bashrc_scd
```
* *tcsh*
```sh
# ~/.cshrc
source ~/Software/smart-change-directory/shellrcfiles/tcshrc_scd
```
* *dash*
```sh
# add to ~/.profile or to the ${ENV} file
. ~/Software/smart-change-directory/shellrcfiles/dashrc_scd
```
## Examples
```sh
# Index recursively some paths for the very first run
scd -ar ~/Documents/
# Change to a directory path matching "doc"
scd doc
# Change to a path matching all of "a", "b" and "c"
scd a b c
# Change to a directory path that ends with "ts"
scd "ts$"
# Show selection menu and ranking of 20 most likely directories
scd -v
# Alias current directory as "xray"
scd --alias=xray
# Jump to a previously defined aliased directory
scd xray
```
## Installation as Vim plugin
Please refer to https://github.com/pavoljuhas/scd.vim.
## Installation as IPython extension
1. Copy or symlink [ipython/ipy_scd.py](ipython/ipy_scd.py)
to some directory in Python module path.
2. In IPython terminal session do `%load_ext ipy_scd`
to define the `%scd` magic command. This also modifies the `%cd`,
`%pushd`, `%popd` magics to add directories to the scd index. To load
`ipy_scd` for every IPython session, modify
`.../profile_default/ipython_config.py` so that it contains
```Python
c.TerminalIPythonApp.extensions = ['ipy_scd']
```
3. If `scd` is not in the PATH, its location can be defined with
```Python
import ipy_scd
ipy_scd.scd_executable = '/path/to/scd'
```
## Examples
```Python
# recursively index ~/.local/ and its subdirectories
%scd -ar ~/.local
# jump to the site-packages directory (if exists in ~/.local)
%scd site pack
```
## FILES
-
~/.scdhistory -
time-stamped index of visited directories. -
~/.scdalias.zsh
-
scd-generated definitions of directory aliases. -
~/.scdignore
-
glob patterns for paths to be ignored in the scd search, for example,
/mnt/backup/*
. The patterns are specified one per line
and are matched assuming the extendedglob zsh option. Lines
starting with "#" are skipped as comments. The .scdignore patterns
are not applied in the --all mode.
## ENVIRONMENT
-
SCD_HISTFILE -
path to the scd index file (by default ~/.scdhistory). -
SCD_HISTSIZE
-
maximum number of entries in the index (5000). Index is trimmed when it
exceeds SCD_HISTSIZE by more than 20%. -
SCD_MENUSIZE
-
maximum number of items for directory selection menu (20). -
SCD_MEANLIFE
-
mean lifetime in seconds for exponential decay of directory
likelihood (86400). -
SCD_THRESHOLD
-
threshold for cumulative directory likelihood. Directories with
a lower likelihood compared to the best match are excluded (0.005).
-
SCD_SCRIPT
-
command script file where scd writes the finalcd
command. This variable must be defined when scd runs in its own
process rather than as a shell function. It is up to the
scd caller to use the output in SCD_SCRIPT.