From 97d53308dfa0d29c66cb9a44abab91ef050e6a87 Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 27 Oct 2026 13:27:51 +0000 Subject: [PATCH] update --- README.md | 1 + bashrc.d/90-memory-question.bash | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 bashrc.d/90-memory-question.bash diff --git a/README.md b/README.md index 8bfed5e..4da262e 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ The loader sources every readable `bashrc.d/*.bash` file in lexical order: - `50-completions.bash`: command-specific completion setup. - `60-directory-notes.bash`: `TODO.md` and `.autonote.md` display after `cd`. - `70-development.bash`: OpenCode and Pyenv initialization. +- `90-memory-question.bash`: daily shell-memory question and `answerpls`. Keep cross-module dependencies explicit through this numbering. New modules should own one coherent area rather than becoming another general-purpose RC. diff --git a/bashrc.d/90-memory-question.bash b/bashrc.d/90-memory-question.bash new file mode 100644 index 0000000..0db6e4b --- /dev/null +++ b/bashrc.d/90-memory-question.bash @@ -0,0 +1,57 @@ +# shellcheck shell=bash + +_memory_file="${XDG_CONFIG_HOME:-$HOME/.config}/profile/memory.tsv" +_memory_question_color='\033[38;5;11m' +_memory_names=() +_memory_questions=() +_memory_answers=() +declare -A _memory_seen=() +_memory_invalid=0 +_memory_line_number=0 + +if [[ -r "$_memory_file" ]]; then + while IFS=$'\t' read -r _memory_name _memory_question _memory_answer _memory_extra; do + ((_memory_line_number++)) + + if [[ -z "$_memory_name$_memory_question$_memory_answer$_memory_extra" ]]; then + continue + fi + + if [[ -z "$_memory_name" || -z "$_memory_question" || -z "$_memory_answer" || -n "$_memory_extra" ]]; then + printf 'Invalid memory question on line %d.\n' "$_memory_line_number" >&2 + _memory_invalid=1 + continue + fi + + if [[ -n ${_memory_seen[$_memory_name]:-} ]]; then + printf 'Duplicate memory question for %s on line %d.\n' "$_memory_name" "$_memory_line_number" >&2 + _memory_invalid=1 + continue + fi + + _memory_seen[$_memory_name]=1 + _memory_names+=("$_memory_name") + _memory_questions+=("$_memory_question") + _memory_answers+=("$_memory_answer") + done < "$_memory_file" +else + printf 'Memory question file is unavailable: %s\n' "$_memory_file" >&2 + _memory_invalid=1 +fi + +if [[ $_memory_invalid -eq 0 && ${#_memory_names[@]} -gt 0 ]]; then + _memory_day=$(date -d "$(date +%F) 00:00" +%s) + _memory_index=$(( (_memory_day / 86400) % ${#_memory_names[@]} )) + _MEMORY_ANSWER=${_memory_answers[$_memory_index]} + + answerpls() { + printf '%s\n' "$_MEMORY_ANSWER" + } + + printf '%b%s%b (answerpls)\n\n' \ + "$_memory_question_color" "${_memory_questions[$_memory_index]}" "$_NC" +fi + +unset _memory_file _memory_question_color _memory_names _memory_questions _memory_answers +unset _memory_seen _memory_invalid _memory_line_number _memory_name _memory_question +unset _memory_answer _memory_extra _memory_day _memory_index