X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=home%2Flib%2Flogin_functions.sh;h=a691958baa3de86d573509658d0755fc6c8469e5;hb=549b689caf4f12615520e6558b011ffbaf2bad09;hp=7bd88cb52cf07054396097a163fd598f33230662;hpb=5671a1eef64379979e9e398d3995c2331f32964f;p=khome.git diff --git a/home/lib/login_functions.sh b/home/lib/login_functions.sh index 7bd88cb..a691958 100644 --- a/home/lib/login_functions.sh +++ b/home/lib/login_functions.sh @@ -28,8 +28,27 @@ notify_done() { ## p : string -> unit p() { + local -r usage='Usage: p [FILE] NAME' + local name + local file + + case "$#" in + 0) + echo "$usage" >&2 + return 1;; + 1) + file=~/._p/p + name="$1";; + 2) + file="$1" + name="$2";; + *) + echo "$usage" >&2 + return 1;; + esac + awk \ - -v _s="$1" \ + -v _s="$name" \ ' BEGIN {_s = tolower(_s)} @@ -56,11 +75,11 @@ p() { u = tmp printf("%d [C] s:\"%s\", e:\"%s\", u:\"%s\"\n", n, s, e, u) > "/dev/stderr" } - - printf "%s", p # XXX Intentionally avoiding newline in the result. + ps[n] = p } END { + printf "%s", ps[n] # XXX Intentionally avoiding newline in the result. if (n == 1) { exit 0 } else if (n == 0) { @@ -68,12 +87,12 @@ p() { exit 1 } else if (n > 1) { # TODO fzf-select which of the records the user (ahem, me) wants. - printf "[WARNING] Found more than one record.\n" > "/dev/stderr" + printf "[WARNING] Found more than one record. Selecting the last one.\n" > "/dev/stderr" exit 0 } } ' \ - ~/._p/p \ + "$file" \ | xsel -i -b -t 30000 } @@ -425,6 +444,59 @@ gh_clone_repo() { git clone "$1" } +bar() { + local -r len="${1:-79}" # 1st arg or 79. + local -r char="${2:--}" # 2nd arg or a dash. + for _ in {1.."$len"}; do + printf '%c' "$char"; + done +} + +daily_todo_file_template() { +cat << EOF +=============================================================================== +$(date '+%F %A') +=============================================================================== + +------------------------------------------------------------------------------- +TODAY +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +CURRENT +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +BLOCKED +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +BACKLOG +------------------------------------------------------------------------------- +EOF +} + +today() { + local date + date="$(date +%F)" + local -r dir="$DIR_TODO/daily" + local -r file="$dir/$date.txt" + + mkdir -p "$dir" + if [ ! -f "$file" ] + then + daily_todo_file_template > "$file" + fi + cd "$DIR_TODO" && "$EDITOR" $EDITOR_ARGS "$file" +} + +todo() { + cd "$DIR_TODO" && "$EDITOR" TODO +} + work_log_template() { cat << EOF $(date '+%F %A') @@ -602,11 +674,44 @@ status() { echo 'accounting' - printf '%stmux\n%ssessions %d, clients %d\n' \ - "$indent_unit" \ - "${indent_unit}${indent_unit}" \ - "$(tmux list-sessions 2> /dev/null | wc -l)" \ - "$(tmux list-clients 2> /dev/null | wc -l)" + printf '%stmux\n' "$indent_unit" + ps -eo comm,cmd \ + | awk ' + # Expecting lines like: + # "tmux: server tmux -L pistactl new-session -d -s pistactl" + # "tmux: client tmux -L foo" + # "tmux: client tmux -Lbar" + /^tmux:/ { + # XXX This of course assumes pervasive usage of -L + # TODO Handle -S + role=$2 + split($0, sides_of_L, "-L") + split(sides_of_L[2], words_right_of_L, FS) + sock=words_right_of_L[1] + if (!sock) { + sock = "default" + } else { + sock = "\"" sock "\"" + } + roles[role]++ + socks[sock]++ + count[role, sock]++ + } + + END { + for (sock in socks) { + clients = count["client", sock] + printf "%s ", sock + if (clients) { + printf "<-> %d", clients + } + printf "\n" + } + printf "\n" + }' \ + | sort \ + | column -t \ + | indent "${indent_unit}${indent_unit}" echo