Put dx to $PATH, and add d function to your shell configuration (bash or fish).
~/some/long/path $ dx add sc
~/some/long/path $ dx ls
sc ~/some/long/path
~/some/long/path $ cd ~
~ $ pwd
~
~ $ d sc
~/some/long/path $
function d { | |
dir=$("dx" $*) && cd $dir; | |
} | |
function _dcomp () { | |
local cur dlist | |
cur="${COMP_WORDS[COMP_CWORD]}" | |
prev="${COMP_WORDS[COMP_CWORD-1]}" | |
dlist=$(dx tab) | |
if [[ ${prev} == d ]] ; then | |
COMPREPLY=( $(compgen -W "${dlist}" -- $cur) ) | |
return 0 | |
fi | |
} | |
complete -F _dcomp d |
function d | |
cd (dx $argv) | |
end |
#!/usr/bin/env ruby | |
require 'fileutils' | |
def load_path file | |
lines = IO.readlines file | |
mapping = {} | |
for line in lines | |
name, dir = line.chomp.split ' = ' | |
mapping[name] = dir | |
end | |
mapping | |
end | |
def save_path file, mapping | |
File.open(file, 'w') do |f| | |
for name, dir in mapping | |
f.puts "#{name} = #{dir}" | |
end | |
end | |
end | |
SINGLE = %w[ls help tab] | |
if __FILE__ == $0 | |
rc = File.expand_path(ENV['DXRC'] || '~/.dxrc') | |
FileUtils.touch rc unless File.exists? rc | |
mapping = load_path rc | |
ARGV << 'ls' if ARGV.empty? | |
if ARGV.size == 1 and !SINGLE.include?(ARGV[0]) | |
dir = mapping[ARGV[0]] | |
if dir | |
puts dir | |
else | |
$stderr.puts "Mapping #{ARGV[0]} is not found!" | |
end | |
else | |
case ARGV[0] | |
when 'add' | |
if ARGV[1] == 'ls' or ARGV[1] == 'help' | |
puts "Name cannot be 'ls' or 'help'!" | |
exit 1 | |
end | |
dir = if ARGV.size < 3 | |
`pwd` | |
else | |
ARGV[2] | |
end | |
mapping[ARGV[1]] = dir | |
save_path rc, mapping | |
when 'rm' | |
mapping.delete! ARGV[1] | |
save_path rc, mapping | |
when 'ls' | |
for name, dir in mapping | |
puts "#{name}\t#{dir}" | |
end | |
when 'tab' | |
puts mapping.keys.join ' ' | |
when 'help' | |
puts "Usage: dx [ls]" | |
puts " dx add [name] [path (default = pwd)]" | |
puts " dx rm [name]" | |
end | |
end | |
end |