Define functions, KBDs for lf
Defines functions for creating, deleting, renaming files. Defines functions for encrypting/decrypting files. Defines functions for archiving/unarchiving files. Adds TODOs for wishlist items. Adds `help` function to view `lf` documentation. TODO: write generic explanation of desire to share KBDs between Emacs, Vim, other programs that I can link to in documentation to avoid repeating myself.
This commit is contained in:
parent
f5ace0b0a9
commit
362a623a0a
1 changed files with 151 additions and 1 deletions
|
@ -1 +1,151 @@
|
|||
map D delete
|
||||
# It might be possible to attempt to share KBDs between `lf` and `dired`.
|
||||
# Currently shared KBDs with `dired`:
|
||||
# - D: delete file
|
||||
# - R: rename file
|
||||
# - +: create directory
|
||||
# - c: create file
|
||||
#
|
||||
# The following command prefixes are used by lf (taken from the docs):
|
||||
#
|
||||
# : read (default) builtin/custom command
|
||||
# $ shell shell command
|
||||
# % shell-pipe shell command running with the ui
|
||||
# ! shell-wait shell command waiting for key press
|
||||
# & shell-async shell command running asynchronously
|
||||
# / search search file in current directory
|
||||
# ? search-back search file in the reverse order
|
||||
|
||||
# TODO: move most of these commands to function.zsh and call those functions
|
||||
# herein. Especially the `archive` and `extract` functions.
|
||||
#
|
||||
# TODO: consider integrations with `xdg-open` and configuring filetypes to
|
||||
# behave in expected "dwim" ways.
|
||||
#
|
||||
# TODO: learn more about the terms "archive", "compress", "decompress",
|
||||
# "expand", "extract", etc. See if a larger abstraction can be created on top
|
||||
# without sacrificing too much nuance. This might be the case of "serialize",
|
||||
# "deserialize", "pickle", "unpickle", "marshal", "unmarshal", "encode",
|
||||
# "decode" -- in which case, a broader abstraction would be nice to decrease the
|
||||
# surface area of the vocabulary.
|
||||
#
|
||||
# TODO: find a way to visualize all of the bound or unbound KBDs.
|
||||
#
|
||||
# TODO: support polymorphic way encrypt/decrypt a file or directory.
|
||||
#
|
||||
# TODO: support "toggle" for encryption/decryption that detects which function
|
||||
# to run based on the extension.
|
||||
#
|
||||
# TODO: support "toggle" for archive/unarchive that detects which function to
|
||||
# run based on the extension.
|
||||
|
||||
# Arguably the most import function herein
|
||||
cmd help $lf -doc | less
|
||||
|
||||
# delete a file, dir
|
||||
map D delete
|
||||
|
||||
cmd rename %{{
|
||||
# Renames files, dirs.
|
||||
set -f
|
||||
if [ -e "$1" ]; then
|
||||
printf 'file exists'
|
||||
else
|
||||
mv "$f" "$1"
|
||||
fi
|
||||
}}
|
||||
map R push :rename<space>
|
||||
|
||||
cmd mkdir %{{
|
||||
mkdir -p "$1"
|
||||
}}
|
||||
map + push :mkdir<space>
|
||||
|
||||
cmd touch %{{
|
||||
# Create a file
|
||||
touch "$1"
|
||||
}}
|
||||
map c push :touch<space>
|
||||
|
||||
cmd encrypt_file %{{
|
||||
# Encrypts the file and deletes the cleartext version.
|
||||
# Run `decrypt_file` to return the file to its cleartext version.
|
||||
printf "recipient: "
|
||||
read recipient
|
||||
gpg --encrypt --recipient "$recipient" "$f" && rm "$f"
|
||||
}}
|
||||
|
||||
cmd decrypt_file %{{
|
||||
# Decrypts a file that was encrypted with `encrypt_file`.
|
||||
# Assumes encrypted files have the .gpg extension and decrypted files omit the
|
||||
# .gpg extension.
|
||||
# Deletes the original .gpg file when finished.
|
||||
|
||||
# check if file exists without .gpg extension
|
||||
if [ -e "${f%.gpg}" ]; then
|
||||
printf "${f%.gpg} exists. Consider deleting or renaming it. Aborting..."
|
||||
else
|
||||
gpg --decrypt "$f" >"${f%.gpg}" 2>/dev/null && rm "$f"
|
||||
fi
|
||||
}}
|
||||
|
||||
cmd archive %{{
|
||||
# Generic function for archiving directories.
|
||||
# TODO: support selections of multiple files.
|
||||
set -f
|
||||
printf "Which type of archive would you like to create? (tar,tar.gz,zip) "
|
||||
read answer
|
||||
case $answer in
|
||||
tar.gz) tar -czf "$f.tar.gz" "$(basename $f)"; rm -rf "$f";;
|
||||
tar) tar -cf "$f.tar" "$(basename $f)"; rm -rf "$f";;
|
||||
zip) zip -r "$f.zip" "$(basename $f)"; rm -rf "$f";;
|
||||
*) printf "\"$1\" is not a support archive. Aborting..."
|
||||
esac
|
||||
}}
|
||||
|
||||
cmd unarchive %{{
|
||||
# Generic function for extracting archived directories.
|
||||
# Assumes directories were archived with the `archive`.
|
||||
set -f
|
||||
case $f in
|
||||
*.tar.gz) tar -xzvf $f; rm "$f";;
|
||||
*.tar) tar -xvf $f; rm "$f";;
|
||||
*.zip) unzip "$f"; rm "$f";;
|
||||
# TODO: grab extension from $f and display it in `printf` call.
|
||||
*) printf "Unsupported archive type. Aborting..."
|
||||
esac
|
||||
}}
|
||||
|
||||
cmd tar %{{
|
||||
# tars a directory
|
||||
set -f
|
||||
printf "gzip? (y,n) "
|
||||
read answer
|
||||
case $answer in
|
||||
y) tar -czf "$f.tar.gz" "$(basename $f)"; rm -rf "$f";;
|
||||
n) tar -cf "$f.tar" "$(basename $f)"; rm -rf "$f";;
|
||||
*) printf "\"$answer\" is not a supported answer. Aborting...";;
|
||||
esac
|
||||
}}
|
||||
|
||||
cmd untar %{{
|
||||
# untars a directory tar'd with `tar`.
|
||||
set -f
|
||||
case $f in
|
||||
*.tar.gz) tar -xzvf $f; rm "$f";;
|
||||
*.tar) tar -xvf $f; rm "$f";;
|
||||
esac
|
||||
}}
|
||||
|
||||
cmd zip %{{
|
||||
# zip a directory
|
||||
set -f
|
||||
zip -r "$f.zip" "$(basename $f)"
|
||||
rm -rf "$f"
|
||||
}}
|
||||
|
||||
cmd unzip %{{
|
||||
# unzip a directory
|
||||
set -f
|
||||
unzip "$f"
|
||||
rm "$f"
|
||||
}}
|
Loading…
Reference in a new issue