#!/bin/bash . $(ffoom path) ffoo import pretty DEFAULT_TARGET=$HOME TRY_RELPATH=true PY_SCRIPT=" import os.path import sys src, dst = sys.argv[1:] r = os.path.relpath(src, dst) a = os.path.abspath(src) if len(a) < len (r): print a else: print r " usage() { usage_is "[-t|--target TARGET] [SOURCE] [NAME]" } expand_tilde() { # # Exchange "~" for home # perl -pe "s|^[[:space:]]*~|$HOME|" } maybe_relpath() { local src="$1" local dst="$2" $TRY_RELPATH || { echo "$src"; return 0; } { echo 'import os.path' echo 'import sys' echo 'src, dst = sys.argv[1:]' echo 'r = os.path.relpath(src, dst)' echo 'a = os.path.abspath(src)' echo 'if len(a) < len (r):' echo ' print a' echo 'else:' echo ' print r' } | python "$src" "$dst" } link() { local src=$1 local dst=$2 debug -v src dst if $TRY_RELPATH; then src=$(python <(echo "$PY_SCRIPT") "$src" "$(dirname $dst)") fi think "linking $src to $dst" rm -f $dst ln -s $src $dst } load() { saturnin conf -p ln.dir.$1 | expand_tilde } while true; do case $1 in -t|--target) target=$2 shift 2 ;; --help) usage ;; -*) usage ;; *) src=$1; name=$2; break ;; esac done test -z "$target" && target=$(load target) test -z "$target" && target=$DEFAULT_TARGET test -z "$name" && name="$(basename "$PWD")" test -z "$src" && src="." debug -v name target mkdir -p $target link $src $target/$name