Skip to content

Commit

Permalink
scd: update to 1.4.0 (ohmyzsh#9066)
Browse files Browse the repository at this point in the history
  • Loading branch information
pavoljuhas authored Aug 27, 2020
1 parent cfb86cd commit 8d08f16
Show file tree
Hide file tree
Showing 4 changed files with 355 additions and 118 deletions.
54 changes: 45 additions & 9 deletions plugins/scd/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ directory aliases, which appear as named directories in zsh session.
## INSTALLATION NOTES

Besides oh-my-zsh, `scd` can be used with *bash*, *dash* or *tcsh*
shells and is also available as [Vim](https://www.vim.org/) plugin and
[IPython](https://ipython.org/) extension. For installation details, see
shells and is also available as Vim plugin
[scd.vim](https://github.com/pavoljuhas/scd.vim) and
[IPython](https://ipython.org) extension. For installation details, see
https://github.com/pavoljuhas/smart-change-directory.

## SYNOPSIS
Expand All @@ -24,11 +25,31 @@ https://github.com/pavoljuhas/smart-change-directory.
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:

<dl><dt>
^PAT</dt><dd>
PAT must match at the beginning of the path, for example, "^/home"</dd><dt>
PAT$</dt><dd>
require PAT to match the end of the path, "man$"</dd><dt>
./</dt><dd>
match only subdirectories of the current directory</dd><dt>
:PAT</dt><dd>
require PAT to match over the tail component, ":doc", ":re/doc"</dd>
</dl>


## OPTIONS

<dl><dt>
-a, --add</dt><dd>
add specified directories to the directory index.</dd><dt>
add current or specified directories to the directory index.</dd><dt>

--unindex</dt><dd>
remove current or specified directories from the index.</dd><dt>
Expand All @@ -42,11 +63,16 @@ scd [options] [pattern1 pattern2 ...]

--unalias</dt><dd>
remove ALIAS definition for the current or specified directory from
<em>~/.scdalias.zsh</em>.</dd><dt>
<em>~/.scdalias.zsh</em>. Use "OLD" to purge aliases to non-existent
directories.</dd><dt>

-A, --all</dt><dd>
include all matching directories. Disregard matching by directory
alias and filtering of less likely paths.</dd><dt>
display all directories even those excluded by patterns in
<em>~/.scdignore</em>. Disregard the unique matching for a
directory alias and filtering of less likely paths.</dd><dt>

-p, --push</dt><dd>
use "pushd" to change to the target directory.</dd><dt>

--list</dt><dd>
show matching directories and exit.</dd><dt>
Expand All @@ -58,6 +84,7 @@ scd [options] [pattern1 pattern2 ...]
display this options summary and exit.</dd>
</dl>


## Examples

```sh
Expand All @@ -83,17 +110,26 @@ scd --alias=xray
scd xray
```

# FILES
## FILES

<dl><dt>
~/.scdhistory</dt><dd>
time-stamped index of visited directories.</dd><dt>

~/.scdalias.zsh</dt><dd>
scd-generated definitions of directory aliases.</dd>
scd-generated definitions of directory aliases.</dd><dt>

~/.scdignore</dt><dd>
<a href="http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators">
glob patterns</a> for paths to be ignored in the scd search, for example,
<code>/mnt/backup/*</code>. The patterns are specified one per line
and are matched assuming the <em>extendedglob</em> zsh option. Lines
starting with "#" are skipped as comments. The .scdignore patterns
are not applied in the <em>--all</em> mode.</dd>
</dl>

# ENVIRONMENT

## ENVIRONMENT

<dl><dt>
SCD_HISTFILE</dt><dd>
Expand Down
60 changes: 60 additions & 0 deletions plugins/scd/_scd
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#compdef scd
#description smart change directory

local curcontext="$curcontext" state line expl ret=1
typeset -A opt_args

local -a indexopts myargs
indexopts=( --add -a --unindex )

myargs=(
# common options
"(--help -h)"{--help,-h}"[print help and exit]"

# options for manipulating directory index
- index
"(--recursive -r)"{--recursive,-r}"[use recursive --add or --unindex]"
"($indexopts)"{--add,-a}"[add specified directories to the index]"
"($indexopts)--unindex[remove specified directories from the index]"
"*:directory:{ (( ${words[(I)-a|--add|--unindex]} )) && _path_files -/ }"

# define new directory alias
- alias
"--alias=[create alias for this or given directory]:directory-alias:()"
'1:directory:{ (( words[(I)--alias*] )) && _path_files -/ }'

# remove definition of directory alias
- unalias
"--unalias[remove definition of directory alias]"
"*::directory alias:->scd-alias-target"

# act on the directory change
- scd
"(--all -A)"{--all,-A}"[include less likely and ignored paths]"
"--list[print matching directories and exit]"
"(--verbose -v)"{--verbose,-v}"[show directory ranking and full paths]"
"(--push -p)"{--push,-p}"[change directory with 'pushd']"
"1::directory alias:->scd-alias-target"
"*:patterns:()"
)

_arguments -S -C $myargs && ret=0


if [[ "$state" == scd-alias-target && -s ~/.scdalias.zsh ]]; then
local -a scdaliases
scdaliases=( )
eval "$(setopt extendedglob
phome="(#b)(#s)${HOME}(/*)#(#e)"
builtin hash -dr
source ~/.scdalias.zsh &&
for k v in ${(kv)nameddirs}; do
scdaliases+=( $k:${v/${~phome}/"~"${match[1]}} )
done
complete_unalias=${+opt_args[unalias---unalias]}
if (( complete_unalias && ! ${+nameddirs[OLD]} )); then
scdaliases+=( 'OLD:all aliases to non-existent paths' )
fi
typeset -p scdaliases )"
_describe -t scdaliases scdalias scdaliases
fi
Loading

0 comments on commit 8d08f16

Please sign in to comment.