Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #if [ ! -n "$(pgrep bobHelpnotes)" ]; then echo "already running"; exit 1; fi
- mkdir -p ~/Helpnotes || exit 1
- [ -d ~/.config/Helpnotes ] || mkdir -p ~/.config/Helpnotes
- touch ~/.config/Helpnotes/ignored_items.txt || exit 1
- ### NOTE: no harm if the blacklist file contains inline working notes
- ### (annotation lines will never exactly match a window titlestring or process name, eh)
- generate_blacklist_arr() { #TODO declare -A, and map
- ### advisable to also USENEVER the name of the tabbed helpviewer app
- usenever=(File Search Replace Open Save SaveAs 'Save As' 'Open As' 'Confirm Delete' \
- 'Create New File' Find 'Move Folder' 'Preferences' Question yad Untitled untitled \
- Unnamed unnamed '(Unnamed)' '(unnamed)' 'Choose Font' gExec 'Run Program')
- readarray -t ignored < ~/.config/Helpnotes/ignored_items.txt
- thelist=("${usenever[@]}" "${ignored[@]}")
- #echo ${thelist[@]} ### for debugging
- }
- addtoblacklist_and_reload() {
- ### this fn would be called if user has, via yad dialog, elected to ignore an item
- echo "$now_win" >> ~/.config/Helpnotes/ignored_titles.txt
- exec "./bobHelpnotes" # new program instance restarts, occupying the same PID, and re-pasrses the blacklist
- }
- ### NOT DYNAMICALLY FILLING-IN-THE BLANK B/C THE TITLETEXT MAY BE LOOOOOONG
- hepmetxt=" context-sensitive help is active, but no note exists yet for ______
- Below, you can copy the titletext of the ______ window
- and paste it as the name of a new cherrytree node.
- tip: to dismiss this dialog, you can ESC or click outside the dialogbox"
- trainingmode_ask() {
- sez=$(yad --center --on-top --width=620 --close-on-unfocus --button="OK" --title="scusa" --text="$hepmetxt" \
- --entry --entry-text="$now_win") ### backgrounding it causes a runaway OOM
- ### NOTED: The "--fullscreen" and "--maximize" args are not entirely effective, and are annoying.
- ### The "close-on-unfocus" option is a godsend, IMO.
- echo $sez
- # pseudocode: if return value from the yad call is blah, then do zippity
- ### If we are passing a FILEname string (vs a NODEname, passed to cherrytree), might be
- ### advisable (or necessary) to preface the call with "touch ~/bobHelpnotes/$notename &&"
- ### ========================
- ### BUT DURING DEBUGGING, UNTIL WE HAVE CREATED A WELL-POPULATED A BLACKLIST
- ### AND/OR SETUP "VALIDATION" RULES TO IGNORE e.g. pythonic endswith(' - Mozilla Firefox')
- ### THE touch WOULD RESULT IN A HELLUVA LOT OF UNWANTED JUNK FILES.
- # touch ~/Helpnotes/$notename && mousepad ~/Helpnotes/${notename}& disown
- }
- generate_blacklist_arr
- oldwin=""
- xprop -spy -root _NET_ACTIVE_WINDOW | while read -r zig; do
- ### NOTED: a "goto workspace NN" event generates a change event.
- ### closure of a transient (e.g "Find" dialog) window generates an event.
- ### lxterminal: Use of NewWindow command spawns a window titled "Unnamed" yet does NOT generate an event.
- ### When switching focus between the original and the "Unnamed", no event is detected.
- now_win="$(xdotool getwindowfocus getwindowname)" # window titletext
- if [ "$now_win" != "$oldwin" ]; then
- shallreject=0
- for item in "${thelist[@]}"; do
- [[ $now_win == "$item" ]] && $shallreject=1
- done
- [ ! -n shallreject ] && continue # blech
- ### sanitize (validate, normalize) the titletext string
- # ### trim leading // trailing space n tab chars + reduce each whitespace substring to a single space
- notename=$(echo "$now_win"|awk '{$1=$1};1')
- ### convert punctuation chars
- notename=${notename//[^-_a-zA-Z0-9.]/_}
- #trainingmode_ask ### WIP not yet implemented
- ### get the PROCESS NAME associated with the currently-focused window
- echo -e "current processname: $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)"
- oldwin="$now_win"
- echo -e " raw window title: $now_win"
- echo -e " sanitized notefile namestring: ~/Helpnotes/$notename"
- fi ### The echo lines are useful FOR DEBUGGING
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement