#!/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 "$@"