From 0c153b400b620d30c584c1a74fa3cb50057e972f Mon Sep 17 00:00:00 2001 From: PowerUser64 Date: Tue, 4 Mar 2025 00:32:11 -0800 Subject: [PATCH] add ted ("test edit") script --- .config/shell/bin/ted | 88 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 .config/shell/bin/ted diff --git a/.config/shell/bin/ted b/.config/shell/bin/ted new file mode 100755 index 0000000..bb9314d --- /dev/null +++ b/.config/shell/bin/ted @@ -0,0 +1,88 @@ +#!/bin/bash +# "test edit" - makes a temporary file and edits it +# requires: bash (uses arrays) + +set -eu + +pname="${0##*/}" + +ed() { + ${EDITOR:-nvim} "$@" +} + +usage() { + echo '"Test edit" - edit a temporary file for testing code fragments' + echo "" + echo "Usage: $pname [OPTIONS] [file] [ed-opts] [--] [cmd]..." + echo "" + echo "Arguments:" + echo " file A file to edit. Also acts as the name for the directory." + echo " ed-opts Any option to pass to the editor. (eg. another file name)" + echo " cmd... A list of commands to EVALuate after the editor exits. (example: bash)" + echo ' Exposed variables:' + echo ' $filename - the name of the file specified for `file`' + echo ' $tempdir - the directory the editor was launched in.' + echo ' $ed_args - array of arguments passed to the editor.' + echo ' $cmd_args - the array of commands specified in the `cmd...` option' + echo "" + echo "Options:" + echo " -h, --help Print usage information and exit. This only gets read in the first argument position." + echo "" + echo "Environment:" + echo " EDITOR The editor you want to use." + echo "" + echo "Examples:" + echo " Edit hello.sh and then run bash (so you can run it)" + echo " $pname hello.sh -- bash" + echo " Edit hello.sh and then run it" + echo " $pname hello.sh -- ./hello.sh" + echo " Edit hello.sh and then run it (using a variable)" + echo " $pname hello.sh -- ./\$filename" + echo " Edit hello-world.c and hello-lib.c, then compile with gcc and run bash" + echo " $pname hello-world.c hello-lib.c -- 'gcc -o hello \"\${ed_args[@]}\"' './hello' bash" +} + +if [[ $# = 0 ]]; then usage; exit 1; fi + +case "${1:-}" in + -h|--help) usage; exit;; +esac + +filename="$1"; shift +dirname="${filename%%.*}" +tests_dir="${XDG_DOCUMENTS_DIR:-"$HOME"/Documents}/code-tests" +date="$(date +%F)" + +tempdir="$tests_dir/$date-$dirname" +mkdir -p "$tempdir" + +# build an argument list for the editor +ed_args=("$filename") +cmds=("$SHELL") +for a;do + shift + # stop reading after -- + if [ "$a" = -- ]; then + cmds=("$@") + break + fi + ed_args+=("$a") +done + +cd "$tempdir" + +# launch editor +ed "${ed_args[@]}" + +# launch the command +if [ "${#cmds}" != 0 ]; then + for cmd in "${cmds[@]}"; do + (eval "$cmd") + done +fi + +# check if directory is empty. If it is, remove it. +filecount="$(find . -maxdepth 1 -print | wc -l)" +if [ "$filecount" = 0 ]; then + rmdir "$tempdir" +fi