#!/bin/sh # speedwm-sxp # some functions we can use on demand print_text() { printf "%s\n%s\nClear\nRemove\nExit" "$(grep -ve '^$' $CUSTOM_HISTFILE)" "------"; } # function which returns history print_menu() { 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_menu "$@" case "$OP" in "Clear") rm -f "$CUSTOM_HISTFILE"; mkdir -p "$(dirname "$CUSTOM_HISTFILE")"; touch "$CUSTOM_HISTFILE"; main "$@" ;; "Exit") exit 0 ;; "------") exit 0 ;; "") exit 0 ;; esac } main() { parse "Enter an S expression:" [ "$OP" = "Remove" ] && \ remove_entry "$@" || \ perf_entry "$@" return 0 } # write expression perf_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 "$@"