Skip to content

Commit

Permalink
Add the fastfile plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
mapc committed May 29, 2012
1 parent 1120f97 commit b7bad0f
Showing 1 changed file with 128 additions and 0 deletions.
128 changes: 128 additions & 0 deletions plugins/fastfile/fastfile.plugin.zsh
@@ -0,0 +1,128 @@
################################################################################
# FILE: fastfile.plugin.zsh
# DESCRIPTION: oh-my-zsh plugin file.
# AUTHOR: Michael Varner (musikmichael@web.de)
# VERSION: 1.0.0
#
# This plugin adds the ability to on the fly generate and access file shortcuts.
#
################################################################################

###########################
# Settings

# These can be overwritten any time.
# If they are not set yet, they will be
# overwritten with their default values

default fastfile_dir "${HOME}/.fastfile/"
default fastfile_var_prefix ""

###########################
# Impl

#
# Generate a shortcut
#
# Arguments:
# 1. name - The name of the shortcut (default: name of the file)
# 2. file - The file or directory to make the shortcut for
# STDOUT:
# => fastfle_print
#
function fastfile() {
test "$2" || 2="."
2=$(readlink -f "$2")
test "$1" || 1="$(basename "$2")"

mkdir -p "${fastfile_dir}"
echo "$2" > "$(fastfile_resolv "$1")"

fastfile_sync
fastfile_print "$1"
}

#
# Resolve the location of a shortcut file (the database file, where the value is written!)
#
# Arguments:
# 1. name - The name of the shortcut
# STDOUT:
# The path
#
function fastfile_resolv() {
echo "${fastfile_dir}${1}"
}

#
# Get the real path of a shortcut
#
# Arguments:
# 1. name - The name of the shortcut
# STDOUT:
# The path
#
function fastfile_get() {
cat "$(fastfile_resolv "$1")"
}

#
# Print a shortcut
#
# Arguments:
# 1. name - The name of the shortcut
# STDOUT:
# Name and value of the shortcut
#
function fastfile_print() {
echo "${fastfile_var_prefix}${1} -> $(fastfile_get "$1")"
}

#
# List all shortcuts
#
# STDOUT:
# (=> fastfle_print) for each shortcut
#
function fastfile_ls() {
for f in $(ls "${fastfile_dir}"); do
fastfile_print "$f"
done | column -t
}

#
# Remove a shortcut
#
# Arguments:
# 1. name - The name of the shortcut (default: name of the file)
# 2. file - The file or directory to make the shortcut for
# STDOUT:
# => fastfle_print
#
function fastfile_rm() {
fastfile_print "$1"
rm "$(fastfile_resolv "$1")"
}

#
# Generate the aliases for the shortcuts
#
function fastfile_sync() {
for f in $(ls "${fastfile_dir}"); do
alias -g "${fastfile_var_prefix}${f}"="$(fastfile_get "$f")"
done
}

##################################
# Shortcuts

alias ff=fastfile
alias ffp=fastfile_print
alias ffrm=fastfile_rm
alias ffls=fastfile_ls
alias ffsync=fastfile_sync

##################################
# Init

fastfile_sync

0 comments on commit b7bad0f

Please sign in to comment.