summaryrefslogtreecommitdiff
path: root/bin/cle
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2025-04-13 20:03:35 +0200
committerMarc Vertes <mvertes@free.fr>2025-04-13 20:03:35 +0200
commit6b2ff5de7a85ac0dd21c4e6a3c6871099182d8ee (patch)
tree11bbe9b8aab723098756c5977fb3ef5c0cebe409 /bin/cle
parentb7927432c7574abb47425fd1af5e7d8ab8fc936c (diff)
cle
Diffstat (limited to 'bin/cle')
-rwxr-xr-xbin/cle42
1 files changed, 42 insertions, 0 deletions
diff --git a/bin/cle b/bin/cle
new file mode 100755
index 0000000..63a7153
--- /dev/null
+++ b/bin/cle
@@ -0,0 +1,42 @@
+#!/bin/sh -C
+
+clip() { print "$1" | tee /dev/tty | head -n 1 | pbcopy; }
+
+del() { rm -i ~/.cle/"$1"; }
+
+die() { echo "$@" >&2; exit 1; }
+
+edit() {
+ [ "$1" ] || die 'missing argument'
+ tmp=$(mktemp) f=~/.cle/"$1"
+ trap 'rm -f "$tmp"' EXIT
+ print "$1" >| "$tmp" || mkdir -p "${f%/*}"
+ [ -s "$tmp" ] || gen >| "$tmp"
+ "${EDITOR:-vim}" "$tmp"
+ crypt "$tmp" >| "$f"
+}
+
+gen() { LC_ALL=C tr -dc 'A-Za-z0-9!?%=' < /dev/urandom | head -c 10; }
+
+list() { cd ~/.cle && find -- * -type f; }
+
+print() { [ -f ~/.cle/"$1" ] && crypt -d < ~/.cle/"$1"; }
+
+tui() {
+ list | fzf --preview 'cle print {}' \
+ --preview-window hidden \
+ --header 'ctrl-del: delete, ctrl-e: edit, ctrl-n: new' \
+ --bind 'ctrl-delete:execute(cle del {})+reload(cle list)' \
+ --bind 'ctrl-e:execute(cle edit {})' \
+ --bind 'ctrl-n:execute(cle edit {q})+reload(cle list)' \
+ --bind 'ctrl-v:toggle-preview' \
+ --query "$1" --select-1 |
+ xargs cle clip
+}
+
+case $1 in
+ (clip|del|edit|gen|list|print)
+ cmd=$1; shift; $cmd "$@" ;;
+ (*)
+ tui "$@" ;;
+esac