Skip to content

Simple command-line utility for sorting inputs by proximity to a path argument

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

svenstaro/proximity-sort

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

proximity-sort

Crates.io Build Status

This script provides a simple command-line utility that sorts its inputs by their path proximity to a given path. For example, for a path foo/bar.txt, the following input:

quox.txt
foo/bar.txt
foo/baz.txt

Would yield an output of:

foo/bar.txt
foo/baz.txt
quox.txt

The lines are sorted by the number of leading path components shared between the input path and the provided path.

This program was primarily written to allow context-aware suggestions for fzf (requested in junegunn/fzf.vim#360 and junegunn/fzf.vim#492) without making modifications to fzf itself (see junegunn/fzf#1380).

Installation

If you have Rust installed, you can install this with:

cargo install proximity-sort

Usage

It can be used with fzf by running:

$ fd -t f | proximity-sort path/to/file | fzf --tiebreak=index

And you can add it to your .vimrc with:

function! s:list_cmd()
  let base = fnamemodify(expand('%'), ':h:.:S')
  return base == '.' ? 'fd -t f' : printf('fd -t f | proximity-sort %s', expand('%'))
endfunction

command! -bang -nargs=? -complete=dir Files
  \ call fzf#vim#files(<q-args>, {'source': s:list_cmd(),
  \                               'options': '--tiebreak=index'}, <bang>0)

Paths of the same proximity are sorted alphabetically:

$ echo "banana\napple/pie\napple" | proximity-sort . -s
> apple
> banana
> apple/pie

About

Simple command-line utility for sorting inputs by proximity to a path argument

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%