D awk => awk +0 -6
@@ 1,6 0,0 @@
-#!/bin/sh
-# A workaround to stop mawk buffering stdin.
-case "$(realpath "$(command -v awk)")" in
- */mawk) exec awk -Winteractive "$@";;
- *) exec awk "$@";;
-esac
M handlers/gadget => handlers/gadget +1 -1
@@ 69,7 69,7 @@ while IFS= read -r line; do
fi
export -- "${line%% *}=$value"
elif prefixed "$line" handler; then
- exec "/usr/libexec/numen/handlers/${line#handler }"
+ exec "${NUMEN_LIBEXEC:-/usr/libexec/numen}/handlers/${line#handler }"
else
print "$line"
fi
M handlers/kernel => handlers/kernel +1 -1
@@ 70,7 70,7 @@ while IFS= read -r line; do
fi
export -- "${line%% *}=$value"
elif prefixed "$line" handler; then
- exec "/usr/libexec/numen/handlers/${line#handler }"
+ exec "${NUMEN_LIBEXEC:-/usr/libexec/numen}/handlers/${line#handler }"
else
print "$line"
fi
M handlers/x11 => handlers/x11 +1 -1
@@ 76,6 76,6 @@ while IFS= read -r line; do
line="${line#set }"
export -- "${line%% *}=$(shell -c "${line#* }")"
elif prefixed "$line" handler; then
- exec "/usr/libexec/numen/handlers/${line#handler }"
+ exec "${NUMEN_LIBEXEC:-/usr/libexec/numen}/handlers/${line#handler }"
fi
done | myxdotool
M install-numen.sh => install-numen.sh +9 -6
@@ 1,5 1,5 @@
#!/bin/sh
-# ./install-numen.sh [DESTDIR] [BINDIR]
+# ./install-numen.sh [DESTDIR] [BINDIR] [LIBEXECDIR] [ETCDIR]
#
# If the environment variable PACKAGING is set, compiling speech.go is left
# to you to do beforehand. It is meant for build systems packaging numen.
@@ 24,24 24,27 @@ if ! [ "$PACKAGING" ]; then
go build speech.go || exit
fi
+bin="$1/${2:-usr/local/bin}"
+libexec="${3:-/usr/libexec/numen}"
+etc="${4:-/etc/numen}"
+
# Install executables for internal use
-libexec="$1/usr/libexec/numen"
rm -rf "$libexec" && mkdir -p "$libexec" || exit
-cp awk instructor numen record scribe speech "$libexec" || exit
+cp instructor numen record scribe speech "$libexec" || exit
cp -r handlers "$libexec" || exit
# Install the numen and numenc command
-bin="$1/${2:-/usr/local/bin}"
mkdir -p "$bin" || exit
sed "1 a \
-export NUMEN_VERSION=$version" wrapper > "$bin/numen" && chmod +x "$bin/numen" || exit
+export NUMEN_VERSION=$version NUMEN_LIBEXEC=$libexec NUMEN_ETC=$etc" wrapper > "$bin/numen" || exit
+chmod +x "$bin/numen" || exit
cp numenc "$bin" || exit
# Install scripts used in the default phrases
mkdir -p "$libexec/phrases" && cp phrasescripts/* "$libexec/phrases" || exit
# Install the default phrases
-mkdir -p "$1/etc/numen" && rm -rf "$1/etc/numen/phrases" && cp -r phrases "$1/etc/numen" || exit
+mkdir -p "$etc" && rm -rf "$etc/phrases" && cp -r phrases "$etc" || exit
# Install the manpage
mkdir -p "$1/usr/share/man/man1" && scdoc < doc/numen.1.scd > "$1/usr/share/man/man1/numen.1" || exit
M instructor => instructor +8 -1
@@ 1,6 1,12 @@
-#!/usr/libexec/numen/awk -f
+#!/bin/sh
# Simplifies actions for the handlers.
+# a workaround to stop mawk buffering stdin
+case "$(realpath "$(command -v awk)")" in
+*/mawk) exec awk -Winteractive -f /proc/self/fd/3;;
+*) exec awk -f /proc/self/fd/3;;
+esac 3<< 'EOF'
+
BEGIN {
ModDir = ENVIRON["HOME"]"/.local/share/numen/mods"
if (length(ENVIRON["XDG_DATA_HOME"])) ModDir = ENVIRON["XDG_DATA_HOME"]"/numen/mods"
@@ 205,3 211,4 @@ for (;;) {
next
}
}
+EOF
M numen => numen +2 -2
@@ 42,7 42,7 @@ if [ $# = 0 ]; then
if [ -d "${XDG_CONFIG_HOME:-$HOME/.config}"/numen/phrases ]; then
set -- "${XDG_CONFIG_HOME:-$HOME/.config}/numen/phrases/"*.phrases
else
- set -- /etc/numen/phrases/*.phrases
+ set -- "${NUMEN_ETC:-/etc/numen}/phrases/"*.phrases
fi
fi
@@ 66,7 66,7 @@ export NUMEN_HANDLER="$handler"
export NUMEN_PIPE="$pipe"
export NUMEN_SHELL="${NUMEN_SHELL:-/bin/sh}"
-libexec=/usr/libexec/numen
+libexec="${NUMEN_LIBEXEC:-/usr/libexec/numen}"
if ! [ "$speechless" ]; then
: "${audiolog:=/dev/null}"
: "${phraselog:=/dev/null}"
M phrases/mouse.phrases => phrases/mouse.phrases +1 -1
@@ 11,5 11,5 @@ implicate:scrolldown
# Center the cursor in the active window
# (Requires the xdotool command and is X11 specific)
-center:set DISPLAY /usr/libexec/numen/phrases/displaying\
+center:set DISPLAY "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/displaying"\
eval xdotool mousemove $(xdotool getactivewindow getwindowgeometry | awk '{sub(/[,x]/, " ")}; NR==2 {x=$2;y=$3}; NR==3 {print x+($2)/2, y+($3)/2}')
M phrases/voice.phrases => phrases/voice.phrases +14 -14
@@ 5,42 5,42 @@
# Transcribe a sentence
# For example, "scribe please type this".
@transcribe scribe:set fmt echo normal\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# Transcribe a sentence formatted...
# With the first letter uppercase
@transcribe transcribe:set fmt echo sentence\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# With Each First Letter Uppercase
@transcribe title scribe:set fmt echo title\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# UPPERCASE
@transcribe shout scribe:set fmt echo upper\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# with_underscrores_inbetween
@transcribe snake scribe:set fmt echo snake\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# UPPERCASE_WITH_UNDERSCRORES_INBETWEEN
@transcribe trench scribe:set fmt echo uppersnake\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# with-dashes-inbetween
@transcribe dash scribe:set fmt echo dash\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# with.dots.inbetween
@transcribe dot scribe:set fmt echo dot\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# with/slashes/inbetween
@transcribe path scribe:set fmt echo path\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# allsmashedtogether
@transcribe smash scribe:set fmt echo smash\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# camelCase
@transcribe cam scribe:set fmt echo camel\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# UpperCamelCase
@transcribe camel scribe:set fmt echo uppercamel\
-localpen printf %s\\n "$NUMEN_TRANSCRIPT" | /usr/libexec/numen/phrases/fmt "$fmt"
+localpen printf %s\\n "$NUMEN_TRANSCRIPT" | "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/fmt" "$fmt"
# Erase the transcription
nevermind:localeval awk -v n=${#NUMEN_TEXT} 'BEGIN {for(;n--;) print "press BackSpace"}'
@@ 50,7 50,7 @@ initial:localeval awk -v n=${#NUMEN_TEXT} 'BEGIN {for(;n--;) print "press Left"}
# Menu of transcription results
# (Requires the dmenu command)
-transcripts:eval /usr/libexec/numen/phrases/transcripts "$fmt" &
+transcripts:eval "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/transcripts" "$fmt" &
# Menu to change transcription result
# (Requires the dmenu command)
-change:eval /usr/libexec/numen/phrases/transcripts "$fmt" change &
+change:eval "${NUMEN_LIBEXEC:-/usr/libexec/numen}/phrases/transcripts" "$fmt" change &
M phrasescripts/transcripts => phrasescripts/transcripts +4 -3
@@ 1,12 1,13 @@
#!/bin/sh
# transcripts FORMAT [CHANGE]
-export DISPLAY="$(/usr/libexec/numen/phrases/displaying)"
+libexec="${NUMEN_LIBEXEC:-/usr/libexec/numen}"
+export DISPLAY="$("$libexec/phrases/displaying")"
f="${XDG_DATA_HOME:-$HOME/.local/share}/numen/transcripts"
if [ "$2" ]; then
if [ "$(wc -l < "$f")" -gt 1 ]; then
- if transcript="$(tail -n +2 "$f" | /usr/libexec/numen/phrases/fmt "$1" | dmenu -i -l 10)"; then
+ if transcript="$(tail -n +2 "$f" | "$libexec/phrases/fmt" "$1" | dmenu -i -l 10)"; then
awk -v n=${#NUMEN_TEXT} 'BEGIN {for(;n--;) print "press BackSpace"}'
printf 'type %s\n' "$transcript"
fi
@@ 14,7 15,7 @@ if [ "$2" ]; then
notify-send 'No alternative transcripts' &
fi
elif [ -s "$f" ]; then
- printf 'type %s\n' "$(/usr/libexec/numen/phrases/fmt "$1" < "$f" | dmenu -i -l 10)"
+ printf 'type %s\n' "$("$libexec/phrases/fmt" "$1" < "$f" | dmenu -i -l 10)"
else
notify-send 'No transcripts' &
fi
M scribe => scribe +9 -1
@@ 1,5 1,12 @@
-#!/usr/libexec/numen/awk -f
+#!/bin/sh
# Filters the output of ./speech for ./instructor and continuously writes transcript results to a file.
+
+# a workaround to stop mawk buffering stdin
+case "$(realpath "$(command -v awk)")" in
+*/mawk) exec awk -Winteractive -f /proc/self/fd/3;;
+*) exec awk -f /proc/self/fd/3;;
+esac 3<< 'EOF'
+
function erase(file) { system("> "file) }
BEGIN {
f = ENVIRON["HOME"]"/.local/share/numen/transcripts"
@@ 8,3 15,4 @@ BEGIN {
/^transcript1[^0-9]/ { erase(f); close(f); print "set NUMEN_TRANSCRIPT echo \""substr($0, 13)"\""; fflush() }
/^transcript/ { sub(/^[^:]*:/, ""); print > f; fflush(f); next } # Note > appends after the first time until close
{ print; fflush() }
+EOF
M wrapper => wrapper +1 -1
@@ 9,4 9,4 @@ if [ -z "$NUMEN_MODEL" ]; then
exit 1
fi
fi
-exec /usr/libexec/numen/numen "$@"
+exec "${NUMEN_LIBEXEC:-/usr/libexec/numen}/numen" "$@"