#!/bin/sh
# questions - capture questions via dmenu into a SQLite database
# Usage: questions [-l | -c | -d | -s TERM]
DB="${XDG_CONFIG_HOME:-$HOME/.config}/scripts/scripts.db"
# Initialize DB/table if needed
mkdir -p "$(dirname "$DB")"
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS questions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
question TEXT NOT NULL,
created_at TEXT DEFAULT (datetime('now', 'localtime'))
);"
cmd_add() {
question=$(printf '' | dmenu -c -l 1 -h 40 -p "Question:" || exit 0)
[ -z "$question" ] && exit 0
sqlite3 "$DB" "INSERT INTO questions (question) VALUES ('$(printf '%s' "$question" | sed "s/'/''/g")');"
notify-send "Question saved" "$question"
}
cmd_list() {
printf '\033[1m%-5s %-19s %s\033[0m\n' "ID" "DATE" "QUESTION"
printf '%-5s %-19s %s\n' "-----" "-------------------" "---"
sqlite3 -separator '|' "$DB" "SELECT id, question, created_at FROM questions ORDER BY id;" | while IFS='|' read -r id question date; do
printf '\033[33m%-5s\033[0m \033[2m%-19s\033[0m %s\n' "$id" "$date" "$question"
done
}
cmd_count() {
n=$(sqlite3 "$DB" "SELECT COUNT(*) FROM questions;")
printf '%s questions\n' "$n"
}
cmd_delete() {
id="$1"
if [ -z "$id" ]; then
# Interactive: pick from dmenu
selected=$(sqlite3 -separator ' | ' "$DB" "SELECT id, question FROM questions ORDER BY id;" | dmenu -c -l 20 -p "Delete:")
[ -z "$selected" ] && exit 0
id=$(printf '%s' "$selected" | cut -d'|' -f1 | tr -d ' ')
fi
sqlite3 "$DB" "DELETE FROM questions WHERE id = $id;"
printf 'Deleted question %s\n' "$id"
}
cmd_search() {
term="$1"
[ -z "$term" ] && { printf 'Usage: questions -s TERM\n'; exit 1; }
escaped=$(printf '%s' "$term" | sed "s/'/''/g")
printf '\033[1m%-5s %-19s %s\033[0m\n' "ID" "DATE" "QUESTION"
printf '%-5s %-19s %s\n' "-----" "-------------------" "---"
sqlite3 -separator '|' "$DB" "SELECT id, question, created_at FROM questions WHERE question LIKE '%$escaped%' ORDER BY id;" | while IFS='|' read -r id question date; do
printf '\033[33m%-5s\033[0m \033[2m%-19s\033[0m %s\n' "$id" "$date" "$question"
done
}
case "$1" in
-l|list) cmd_list ;;
-c|count) cmd_count ;;
-d|delete) cmd_delete "$2" ;;
-s|search) cmd_search "$2" ;;
-h|help)
printf 'questions Ask a question (dmenu)\n'
printf 'questions -l List all questions\n'
printf 'questions -c Count questions\n'
printf 'questions -d [ID] Delete a question (dmenu picker or by ID)\n'
printf 'questions -s TERM Search questions\n'
;;
"") cmd_add ;;
*) printf 'Unknown flag: %s (try questions -h)\n' "$1" ;;
esac