#!/usr/bin/env nuxr-nuxsh nux.use nux/fs @prefix fs nux.fs. MARK_DIR_NAME=.by MARK_PREFIX="" @namespace mark. { function :dir item { if [ -n "$MARK_DIR" ]; then echo $MARK_DIR; else fs:closest "$MARK_DIR_NAME" "$item" fi } function :mark root item mark { name="" if [ -e "$root/.path-names" ]; then rel_path=$(nux.fs.path.relative "$root/.." "$item"); name=${rel_path//\//-} fs:info "$item" Creating symlink: $(nux.fs.path.display "$root/$mark/$name") else fs:info "$item" Creating symlink in $(nux.fs.path.display "$root/$mark") fi fs:symlink "$item" "$root/$mark" "$name" } } ## Manages symlinks in closest mark (**.by**) directory, provides functionality to batch create ## them with relative paths. ## ## #Available tasks: @namespace task. { ## tag:: ## Performs specified task in tag namespace (marks prefixed with **tag/**) @command tag task { MARK_PREFIX="tag/" nuxr.run "$task" "$@" } ## this:: [marks...] ## Marks **current folder** with specific markers. ## This creates symlinks in **mark** folder pointing to **current folder**. @command this mark { nux.log debug "Args $#" item=$(pwd) mark_root=$(mark.dir "$item") mark.mark "$mark_root" "$item" "$MARK_PREFIX$mark" while [ "$#" -gt 0 ]; do mark="$1"; shift; mark.mark "$mark_root" "$item" "$MARK_PREFIX$mark" done } ## multiple:: ## Marks **files** with specific **mark**. ## This creates symlinks for files in **mark** folder. @command multiple mark { pwd=$(pwd) mark_root=$(mark.dir "$pwd") while [ "$#" -gt 0 ]; do item="$1"; shift; mark.mark "$mark_root" "$pwd/$item" "$MARK_PREFIX$mark" done } ## display:: [mark] ## Displays path to current mark folder and displays available marks. ## If **mark** is provided list nested marks. @command display mark { mark_root=$(mark.dir $pwd) prefix="$MARK_PREFIX" if [ -n "$mark" ]; then prefix="$MARK_PREFIX$mark/"; fi echo $mark_root: ( cd $(mark_root); for mark in "$prefix"* ; do echo ${mark#$MARK_PREFIX}; done; ) }