Add mblaze related files
This commit is contained in:
parent
96862e6556
commit
69e00b6f58
34
mblaze/Makefile
Normal file
34
mblaze/Makefile
Normal file
@ -0,0 +1,34 @@
|
||||
# mblaze.env
|
||||
# Written in 2020 by Lucas
|
||||
# CC0 1.0 Universal/Public domain - No rights reserved
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to the
|
||||
# public domain worldwide. This software is distributed without any
|
||||
# warranty. You should have received a copy of the CC0 Public Domain
|
||||
# Dedication along with this software. If not, see
|
||||
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
.POSIX:
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .sh
|
||||
|
||||
PREFIX = ${HOME}/.mblaze
|
||||
|
||||
BIN = m mless
|
||||
|
||||
all: ${BIN}
|
||||
|
||||
clean:
|
||||
rm -f ${BIN}
|
||||
|
||||
install: all env mlesskey mless-key-handler
|
||||
mkdir -pm 700 ${PREFIX}
|
||||
lesskey -o ${PREFIX}/mless mlesskey
|
||||
cp -f env mless-key-handler ${PREFIX}
|
||||
mkdir -p ${PREFIX}/bin
|
||||
cp -f ${BIN} ${PREFIX}/bin
|
||||
cd ${PREFIX}/bin && chmod 555 ${BIN}
|
||||
|
||||
uninstall:
|
||||
cd ${PREFIX}/bin && rm -f ${BIN}
|
||||
rm -f ${PREFIX}/env ${PREFIX}/mless ${PREFIX}/mless-key-handler
|
72
mblaze/env
Normal file
72
mblaze/env
Normal file
@ -0,0 +1,72 @@
|
||||
# mblaze.env
|
||||
# Written in 2020 by Lucas
|
||||
# CC0 1.0 Universal/Public domain - No rights reserved
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to the
|
||||
# public domain worldwide. This software is distributed without any
|
||||
# warranty. You should have received a copy of the CC0 Public Domain
|
||||
# Dedication along with this software. If not, see
|
||||
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
if [ -z "$mblaze_account" ]; then
|
||||
printf "Usage: mblaze_account=example.com . ~/.mblaze/env\n" >&2
|
||||
return 1
|
||||
fi
|
||||
MBLAZE=~/.mblaze/$mblaze_account
|
||||
|
||||
if [ ! -d "$MBLAZE" ]; then
|
||||
printf "Unknown account \"%s\"\n" "$mblaze_account" >&2
|
||||
return 1
|
||||
fi
|
||||
export MBLAZE
|
||||
|
||||
if [ -d ~/.mblaze/bin ]; then
|
||||
PATH=~/.mblaze/bin:$PATH
|
||||
export PATH
|
||||
fi
|
||||
|
||||
# account in prompt
|
||||
PS1='@$mblaze_account \$ '
|
||||
export PS1
|
||||
# mless colors
|
||||
MCOLOR_CUR=10
|
||||
MCOLOR_MISS=1
|
||||
export MCOLOR_CUR MCOLOR_MISS
|
||||
# mcolor colors
|
||||
MCOLOR_SEP=7
|
||||
MCOLOR_FROM=14
|
||||
MCOLOR_HEADER=6
|
||||
MCOLOR_FOOTER=7
|
||||
MCOLOR_SIG=5
|
||||
MCOLOR_QQQUOTE=3
|
||||
MCOLOR_QQUOTE=3
|
||||
MCOLOR_QUOTE=3
|
||||
export MCOLOR_SEP MCOLOR_FROM MCOLOR_HEADER MCOLOR_FOOTER MCOLOR_SIG
|
||||
export MCOLOR_QQQUOTE MCOLOR_QQUOTE MCOLOR_QUOTE
|
||||
|
||||
if [ -f "$MBLAZE/private.env" ]; then
|
||||
. "$MBLAZE/private.env"
|
||||
fi
|
||||
|
||||
mfetch()
|
||||
{
|
||||
command -v _account_mfetch >/dev/null 2>&1 &&
|
||||
_account_mfetch "$mblaze_account"
|
||||
|
||||
lockfile=%h/mail/.fdm-$mblaze_account-lock
|
||||
fdm -qa "$mblaze_account" -D "\$lockfile=$lockfile" fetch || return 1
|
||||
mcount=$(mdirs ~/mail/"$mblaze_account" | xargs minc | wc -l)
|
||||
mcount=$(printf "%u\n" "$mcount")
|
||||
prefix="$(date "+%a %d %b %T") [$mblaze_account]"
|
||||
case $mcount in
|
||||
0) printf "%s: no new emails.\n" "$prefix"
|
||||
;;
|
||||
1) printf "%s: 1 new email.\n" "$prefix"
|
||||
;;
|
||||
*) printf "%s: %u new emails.\n" "$prefix" "$mcount"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
cd ~/mail/"$mblaze_account"
|
117
mblaze/m.sh
Normal file
117
mblaze/m.sh
Normal file
@ -0,0 +1,117 @@
|
||||
#!/bin/sh
|
||||
# mblaze.env
|
||||
# Written in 2020 by Lucas
|
||||
# CC0 1.0 Universal/Public domain - No rights reserved
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to the
|
||||
# public domain worldwide. This software is distributed without any
|
||||
# warranty. You should have received a copy of the CC0 Public Domain
|
||||
# Dedication along with this software. If not, see
|
||||
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
usage()
|
||||
{
|
||||
cat - <<. >&2
|
||||
Usage:
|
||||
${0##*/} f|fetch
|
||||
${0##*/} l|list [dirs...]
|
||||
${0##*/} r|read dir [dirs...]
|
||||
${0##*/} s|scan [-a] dir [dirs...]
|
||||
.
|
||||
exit 1
|
||||
}
|
||||
|
||||
_mdirs()
|
||||
{
|
||||
mdirs "$@" | sort -t /
|
||||
}
|
||||
|
||||
m_fetch_usage()
|
||||
{
|
||||
printf "Usage: %s f|fetch\n" "${0##*/}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
m_read_usage()
|
||||
{
|
||||
printf "Usage: %s r|read dir [dirs...]\n" "${0##*/}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
m_scan_usage()
|
||||
{
|
||||
printf "Usage: %s s|scan [-a] dir [dirs...]\n" "${0##*/}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
m_fetch()
|
||||
{
|
||||
if [ $# -ne 0 ]; then
|
||||
m_fetch_usage
|
||||
fi
|
||||
printf "%s: fetch TBD.\n" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
m_list()
|
||||
{
|
||||
pwd=$(pwd)
|
||||
# cut(1) lists are 1-based, and +1 for leading slash
|
||||
_mdirs "${@:-.}" | cut -c $((${#pwd} + 2))- | mlist -i
|
||||
}
|
||||
|
||||
m_read()
|
||||
{
|
||||
if [ $# -eq 0 ]; then
|
||||
m_read_usage
|
||||
fi
|
||||
|
||||
_mdirs "$@" | mlist -s | msort -d | mthread | mless
|
||||
}
|
||||
|
||||
m_scan()
|
||||
{
|
||||
mlist_flags=-s
|
||||
while getopts a flag; do
|
||||
case $flag in
|
||||
a)
|
||||
mlist_flags=
|
||||
;;
|
||||
*)
|
||||
m_scan_usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $(($OPTIND - 1))
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
m_scan_usage
|
||||
fi
|
||||
|
||||
_mdirs "$@" | mlist $mlist_flags | msort -d | mthread | mseq -S | mscan
|
||||
}
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
usage
|
||||
fi
|
||||
cmd=$1
|
||||
shift
|
||||
|
||||
case $cmd in
|
||||
f|fetch)
|
||||
m_fetch "$@"
|
||||
;;
|
||||
l|list)
|
||||
m_list "$@"
|
||||
;;
|
||||
r|read)
|
||||
m_read "$@"
|
||||
;;
|
||||
s|scan)
|
||||
m_scan "$@"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
41
mblaze/mless-key-handler
Normal file
41
mblaze/mless-key-handler
Normal file
@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
# mblaze.env
|
||||
# Written in 2020 by Lucas
|
||||
# CC0 1.0 Universal/Public domain - No rights reserved
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to the
|
||||
# public domain worldwide. This software is distributed without any
|
||||
# warranty. You should have received a copy of the CC0 Public Domain
|
||||
# Dedication along with this software. If not, see
|
||||
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
keyhandler()
|
||||
{
|
||||
case "$1" in
|
||||
0|1)
|
||||
exit $1
|
||||
;;
|
||||
70) # F flag
|
||||
mflag -F .
|
||||
mseq -f : | mseq -S
|
||||
mseq -C +
|
||||
;;
|
||||
82) # R mark read
|
||||
mflag -S .
|
||||
mseq -f : | mseq -S
|
||||
mseq -C +
|
||||
;;
|
||||
94) # ^ goto parent
|
||||
mseq -C '.^' 2>/dev/null
|
||||
;;
|
||||
123) # { prev thread
|
||||
prev=$(mseq .-1 | sed 's/^ *//')
|
||||
prev_root=$(mseq -c "$prev" = | head -n 1 | sed 's/^ *//')
|
||||
mseq -C "$prev_root" 2>/dev/null
|
||||
;;
|
||||
125) # } next thread
|
||||
mseq -C "$(mseq .+1: | sed -n '/^[^ <]/{p;q;}')"
|
||||
;;
|
||||
esac
|
||||
}
|
114
mblaze/mless.sh
Normal file
114
mblaze/mless.sh
Normal file
@ -0,0 +1,114 @@
|
||||
#!/bin/sh
|
||||
# mless [MSG] - less(1)-wrapper around mshow
|
||||
|
||||
colorscan() {
|
||||
awk '
|
||||
function co(n, c) { e = ENVIRON["MCOLOR_" n]; return e ? e : c }
|
||||
function fg(c, s) { return sprintf("\033[38;5;%03dm%s\033[0m", c, s) }
|
||||
function so(s) { return sprintf("\033[1m%s\033[0m", s) }
|
||||
/^>/ { print so(fg(co("CUR",119), $0)); next }
|
||||
/^ *\\_/ { print fg(co("MISS",242), $0); next }
|
||||
{ print }'
|
||||
}
|
||||
|
||||
keyhandler() {
|
||||
case "$?" in
|
||||
0|1) exit $?;;
|
||||
36) # $ goto end
|
||||
mseq -C '$' 2>/dev/null
|
||||
;;
|
||||
78) # N go to next unseen message
|
||||
nu=$(magrep -v -m1 :S .:) && mseq -C "$nu"
|
||||
;;
|
||||
107) # k next thread
|
||||
mseq -C "$(mseq .+1: | sed -n '/^[^ <]/{p;q;}')"
|
||||
;;
|
||||
100) # d mark read
|
||||
mflag -S .
|
||||
mseq -f : | mseq -S
|
||||
mseq -C +
|
||||
;;
|
||||
82) # R toggle raw mode
|
||||
MLESS_RAW=$((1-$MLESS_RAW))
|
||||
;;
|
||||
72) # H toggle HTML mode
|
||||
MLESS_HTML=$((1-$MLESS_HTML))
|
||||
;;
|
||||
94) # ^ goto parent
|
||||
mseq -C '.^' 2>/dev/null
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
if [ -n "${NO_COLOR+set}" ]; then
|
||||
colorscan() { cat -; }
|
||||
fi
|
||||
|
||||
if [ "$1" = --filter ]; then
|
||||
if [ "$2" = //scan ]; then
|
||||
mscan : 2>/dev/null | colorscan
|
||||
exit $?
|
||||
fi
|
||||
|
||||
mseq -C "$2"
|
||||
mscan .-2:.+3 2>/dev/null | colorscan
|
||||
echo
|
||||
|
||||
if ! [ -f "$(mseq -r "$2")" ]; then
|
||||
mseq "$2"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ $MLESS_RAW -eq 0 ]; then
|
||||
if [ $MLESS_HTML -eq 1 ]; then
|
||||
mshow -A text/html "$2"
|
||||
else
|
||||
mshow "$2"
|
||||
fi | mcolor
|
||||
else
|
||||
mseq -r "$2"
|
||||
echo
|
||||
cat "$(mseq -r "$2")"
|
||||
fi
|
||||
exit $?
|
||||
fi
|
||||
|
||||
if [ "$#" -eq 0 ] && ! [ -t 0 ]; then
|
||||
mseq -S >/dev/null
|
||||
set -- :
|
||||
fi
|
||||
|
||||
if ! [ -t 1 ]; then
|
||||
exec mseq :
|
||||
fi
|
||||
|
||||
[ "$#" -eq 1 ] && set -- ${1:-.}
|
||||
|
||||
if [ "$#" -ge 1 ]; then
|
||||
mseq -C "$1"
|
||||
fi
|
||||
|
||||
nl="
|
||||
"
|
||||
export MLESS_RAW=0
|
||||
export MLESS_HTML=0
|
||||
if [ -f "$MBLAZE/mless" ]; then
|
||||
export LESSKEY="$MBLAZE/mless"
|
||||
elif [ -f "$HOME/.mblaze/mless" ]; then
|
||||
export LESSKEY="$HOME/.mblaze/mless"
|
||||
elif [ -f "$HOME/.mless" ]; then
|
||||
export LESSKEY="$HOME/.mless"
|
||||
fi
|
||||
if [ -f "$MBLAZE/mless-key-handler" ]; then
|
||||
. "$MBLAZE/mless-key-handler"
|
||||
elif [ -f "$HOME/.mblaze/mless-key-handler" ]; then
|
||||
. "$HOME/.mblaze/mless-key-handler"
|
||||
elif [ -f "$HOME/.mless-key-handler" ]; then
|
||||
. "$HOME/.mless-key-handler"
|
||||
fi
|
||||
while :; do
|
||||
LESSOPEN="|$0 --filter %s" \
|
||||
less -Ps"mless %f?m (message %i of %m).." -R \
|
||||
"+:e $(mscan -n .)$nl" //scan $(mscan -n :)
|
||||
keyhandler $?
|
||||
done
|
20
mblaze/mlesskey
Normal file
20
mblaze/mlesskey
Normal file
@ -0,0 +1,20 @@
|
||||
# mblaze.env
|
||||
# Written in 2020 by Lucas
|
||||
# CC0 1.0 Universal/Public domain - No rights reserved
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to the
|
||||
# public domain worldwide. This software is distributed without any
|
||||
# warranty. You should have received a copy of the CC0 Public Domain
|
||||
# Dedication along with this software. If not, see
|
||||
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
Q quit \1
|
||||
[ prev-file
|
||||
] next-file
|
||||
S noaction E//scan\n
|
||||
` noaction E\#\n
|
||||
F quit F
|
||||
R quit R
|
||||
{ quit {
|
||||
} quit }
|
||||
\^ quit \^
|
Loading…
Reference in New Issue
Block a user