## 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)}
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) {
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
}
===============================================================================
-------------------------------------------------------------------------------
-CURRENTLY IMPORTANT
+TODAY
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-TO FINISH TODAY
+CURRENT
-------------------------------------------------------------------------------
then
daily_todo_file_template > "$file"
fi
- cd "$DIR_TODO" && "$EDITOR" "$file"
+ cd "$DIR_TODO" && "$EDITOR" $EDITOR_ARGS "$file"
}
todo() {
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 (s->c)\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 = "anon"
+ } else {
+ sock = "named." sock
+ }
+ roles[role]++
+ socks[sock]++
+ count[role, sock]++
+ }
+
+ END {
+ sock_sep = ""
+ for (sock in socks) {
+ printf "%s%s ", sock_sep, sock
+ sock_sep = "\n"
+ role_sep = ""
+ for (role in roles) {
+ printf "%s%d", role_sep, count[role, sock]
+ role_sep = "->"
+ }
+ }
+ printf "\n"
+ }' \
+ | sort \
+ | column -t \
+ | indent "${indent_unit}${indent_unit}"
echo