speedwm-personal/scripts/speedwm-sxp
2023-02-05 12:58:48 +01:00

55 lines
1.5 KiB
Bash
Executable file

#!/bin/sh
# speedwm-sxp
# some functions we can use on demand
print_text() { printf "%s\n%s\nClear\nRemove\nExit\n" "$(cat "$CUSTOM_HISTFILE")" "------"; } # function which returns history
print() { OP="$(print_text | "$RUNLAUNCHER" -g 1 -l 40 -p "$*")"; } # function which prints the menu
# basic variables
[ -z "$CUSTOM_HISTFILE" ] && CUSTOM_HISTFILE="$HOME/.config/speedwm/.custom_history"
[ -z "$RUNLAUNCHER" ] && RUNLAUNCHER="spmenu"
# make sure $CUSTOM_HISTFILE exists
mkdir -p "$(dirname "$CUSTOM_HISTFILE")"; touch "$CUSTOM_HISTFILE"
# parse current expression
parse() {
print "$@"
[ "$OP" = "Clear" ] && printf "" > "$CUSTOM_HISTFILE" && exit
[ "$OP" = "Exit" ] && exit 0
[ "$OP" = "------" ] && exit 0
[ -z "$OP" ] && exit 0
}
main() {
parse "Enter an S expression:"
[ "$OP" = "Remove" ] && \
remove_entry "$@" || \
add_entry "$@"
return 0
}
# write expression
add_entry() {
FILE_CONTENTS="$(grep -v "$OP" "$CUSTOM_HISTFILE")"
printf "%s\n" "$FILE_CONTENTS" > "$CUSTOM_HISTFILE" # prevent duplicates
# add entry
printf "%s\n" "$OP" >> "$CUSTOM_HISTFILE"
printf "%s\n" "$OP"
}
# write expression
remove_entry() {
# print menu again so we can choose an entry to remove
parse "Remove:"
[ "$OP" = "Remove" ] && remove_entry "$@"
# add everything except the entry to $FILE_CONTENTS and write that back to the file
FILE_CONTENTS="$(grep -v "$OP" "$CUSTOM_HISTFILE")" || return 1
printf "%s\n" "$FILE_CONTENTS" > "$CUSTOM_HISTFILE" || return 1
}
main "$@"