Well, it was actually completely broken. Because I fed an absolute path
name into `check_com()' without testing it - instead of using the
obvious test.
This also fixes an annoyance:
If infocmp returns an octal code such as this:
backspace='\177'
That screwed up our special-string resolution, because mksh's `print'
builtin doesn't like \177 style octals. It *requires* them to look like
this: \0177 (leading zero).
We now just translate these strings like this:
\\[1-7][0-7]* => \\0[1-7][0-7]*
That should be fairly safe. - And this time, mika and me actually tested
the code before committing it. :-)
while read -r line ; do
key="${line%=*}"
[[ "${key}" != k* ]] && continue
- seq="$(print "${line#*=}")"
+ seq="$(printf '%s' "${line#*=}" | sed -e 's,\\\([1-7][0-7]*\),\\0\1,g')"
+ seq="$(print "${seq}")"
case "$key" in
key_left) bind "${seq}"='backward-char' ;;
key_right) bind "${seq}"='forward-char' ;;
emulate -L zsh
local shell="/bin/mksh"
- if ! check_com -c ${shell}; then
+ if [[ ! -x ${shell} ]]; then
printf '`%s'\'' not available, giving up.\n' ${shell} >&2
return 1
fi