mirror of https://github.com/curusarn/resh
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
6.6 KiB
219 lines
6.6 KiB
|
|
# shellcheck source=../submodules/bash-zsh-compat-widgets/bindfunc.sh
|
|
. ~/.resh/bindfunc.sh
|
|
# shellcheck source=widgets.sh
|
|
. ~/.resh/widgets.sh
|
|
|
|
__resh_bind_arrows() {
|
|
if [ "${__RESH_arrow_keys_bind_enabled-0}" != 0 ]; then
|
|
echo "RESH arrow key bindings are already enabled!"
|
|
return 1
|
|
fi
|
|
bindfunc --revert '\eOA' __resh_widget_arrow_up_compat
|
|
__RESH_bindfunc_revert_arrow_up_bind=$_bindfunc_revert
|
|
bindfunc --revert '\e[A' __resh_widget_arrow_up_compat
|
|
__RESH_bindfunc_revert_arrow_up_bind_vim=$_bindfunc_revert
|
|
bindfunc --vim-cmd --revert 'k' __resh_widget_arrow_up_compat
|
|
__RESH_bindfunc_revert_k_bind_vim=$_bindfunc_revert
|
|
bindfunc --revert '\eOB' __resh_widget_arrow_down_compat
|
|
__RESH_bindfunc_revert_arrow_down_bind=$_bindfunc_revert
|
|
bindfunc --revert '\e[B' __resh_widget_arrow_down_compat
|
|
__RESH_bindfunc_revert_arrow_down_bind_vim=$_bindfunc_revert
|
|
bindfunc --vim-cmd --revert 'j' __resh_widget_arrow_down_compat
|
|
__RESH_bindfunc_revert_j_bind_vim=$_bindfunc_revert
|
|
__RESH_arrow_keys_bind_enabled=1
|
|
return 0
|
|
}
|
|
|
|
__resh_nop() {
|
|
# does nothing
|
|
true
|
|
}
|
|
|
|
__resh_bind_control_R() {
|
|
if [ "${__RESH_control_R_bind_enabled-0}" != 0 ]; then
|
|
echo "Error: Can't enable Ctrl+R binding because it is already enabled!"
|
|
return 1
|
|
fi
|
|
bindfunc --revert '\C-r' __resh_widget_control_R_compat
|
|
__RESH_bindfunc_revert_control_R_bind=$_bindfunc_revert
|
|
__RESH_control_R_bind_enabled=1
|
|
if [ -n "${BASH_VERSION-}" ]; then
|
|
# fuck bash
|
|
bind '"\C-r": "\u[31~\u[32~"'
|
|
bind -x '"\u[31~": __resh_widget_control_R_compat'
|
|
|
|
# execute
|
|
# bind '"\u[32~": accept-line'
|
|
|
|
# just paste
|
|
# bind -x '"\u[32~": __resh_nop'
|
|
true
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
__resh_unbind_arrows() {
|
|
if [ "${__RESH_arrow_keys_bind_enabled-0}" != 1 ]; then
|
|
echo "Error: Can't disable arrow key bindings because they are not enabled!"
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "${__RESH_bindfunc_revert_arrow_up_bind+x}" ]; then
|
|
echo "Warn: Couldn't revert arrow UP binding because 'revert command' is empty."
|
|
else
|
|
eval "$__RESH_bindfunc_revert_arrow_up_bind"
|
|
[ -z "${__RESH_bindfunc_revert_arrow_up_bind_vim+x}" ] || eval "$__RESH_bindfunc_revert_arrow_up_bind_vim"
|
|
[ -z "${__RESH_bindfunc_revert_k_bind_vim+x}" ] || eval "$__RESH_bindfunc_revert_k_bind_vim"
|
|
echo "RESH arrow up binding successfully disabled"
|
|
__RESH_arrow_keys_bind_enabled=0
|
|
fi
|
|
|
|
if [ -z "${__RESH_bindfunc_revert_arrow_down_bind+x}" ]; then
|
|
echo "Warn: Couldn't revert arrow DOWN binding because 'revert command' is empty."
|
|
else
|
|
eval "$__RESH_bindfunc_revert_arrow_down_bind"
|
|
[ -z "${__RESH_bindfunc_revert_arrow_down_bind_vim+x}" ] || eval "$__RESH_bindfunc_revert_arrow_down_bind_vim"
|
|
[ -z "${__RESH_bindfunc_revert_j_bind_vim+x}" ] || eval "$__RESH_bindfunc_revert_j_bind_vim"
|
|
echo "RESH arrow down binding successfully disabled"
|
|
__RESH_arrow_keys_bind_enabled=0
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
__resh_unbind_control_R() {
|
|
if [ "${__RESH_control_R_bind_enabled-0}" != 1 ]; then
|
|
echo "Error: Can't disable Ctrl+R binding because it is not enabled!"
|
|
return 1
|
|
fi
|
|
if [ -z "${__RESH_bindfunc_revert_control_R_bind+x}" ]; then
|
|
echo "Warn: Couldn't revert Ctrl+R binding because 'revert command' is empty."
|
|
else
|
|
eval "$__RESH_bindfunc_revert_control_R_bind"
|
|
fi
|
|
__RESH_control_R_bind_enabled=0
|
|
return 0
|
|
}
|
|
|
|
__resh_bind_all() {
|
|
__resh_bind_arrows
|
|
__resh_bind_control_R
|
|
}
|
|
|
|
__resh_unbind_all() {
|
|
__resh_unbind_arrows
|
|
__resh_unbind_control_R
|
|
}
|
|
|
|
# wrapper for resh-cli for calling resh directly
|
|
resh() {
|
|
local buffer
|
|
local git_remote; git_remote="$(git remote get-url origin 2>/dev/null)"
|
|
buffer=$(resh-cli --sessionID "$__RESH_SESSION_ID" --host "$__RESH_HOST" --pwd "$PWD" --gitOriginRemote "$git_remote")
|
|
status_code=$?
|
|
if [ $status_code = 111 ]; then
|
|
# execute
|
|
echo "$buffer"
|
|
eval "$buffer"
|
|
elif [ $status_code = 0 ]; then
|
|
# paste
|
|
echo "$buffer"
|
|
elif [ $status_code = 130 ]; then
|
|
true
|
|
else
|
|
echo "$buffer" >| ~/.resh/cli_last_run_out.txt
|
|
echo "resh-cli ERROR:"
|
|
cat ~/.resh/cli_last_run_out.txt
|
|
fi
|
|
}
|
|
|
|
reshctl() {
|
|
# local log=~/.resh/reshctl.log
|
|
# export current shell because resh-control needs to know
|
|
export __RESH_ctl_shell=$__RESH_SHELL
|
|
# run resh-control aka the real reshctl
|
|
resh-control "$@"
|
|
|
|
# modify current shell session based on exit status
|
|
local _status=$?
|
|
# echo $_status
|
|
# unexport current shell
|
|
unset __RESH_ctl_shell
|
|
case "$_status" in
|
|
0|1)
|
|
# success | fail
|
|
return "$_status"
|
|
;;
|
|
# enable
|
|
# 30)
|
|
# # enable all
|
|
# __resh_bind_all
|
|
# return 0
|
|
# ;;
|
|
31)
|
|
# enable arrow keys
|
|
__resh_bind_arrows
|
|
return 0
|
|
;;
|
|
32)
|
|
# enable control R
|
|
__resh_bind_control_R
|
|
return 0
|
|
;;
|
|
# disable
|
|
# 40)
|
|
# # disable all
|
|
# __resh_unbind_all
|
|
# return 0
|
|
# ;;
|
|
41)
|
|
# disable arrow keys
|
|
__resh_unbind_arrows
|
|
return 0
|
|
;;
|
|
42)
|
|
# disable control R
|
|
__resh_unbind_control_R
|
|
return 0
|
|
;;
|
|
50)
|
|
# reload rc files
|
|
. ~/.resh/shellrc
|
|
return 0
|
|
;;
|
|
51)
|
|
# inspect session history
|
|
# reshctl debug inspect N
|
|
resh-inspect --sessionID "$__RESH_SESSION_ID" --count "${3-10}"
|
|
return 0
|
|
;;
|
|
52)
|
|
# show status
|
|
if [ "${__RESH_arrow_keys_bind_enabled-0}" != 0 ]; then
|
|
echo ' * this session: ENABLED'
|
|
else
|
|
echo ' * this session: DISABLED'
|
|
fi
|
|
echo
|
|
echo 'Control R binding ...'
|
|
if [ "$(resh-config --key BindControlR)" = true ]; then
|
|
echo ' * future sessions: ENABLED (experimental)'
|
|
else
|
|
echo ' * future sessions: DISABLED'
|
|
fi
|
|
if [ "${__RESH_control_R_bind_enabled-0}" != 0 ]; then
|
|
echo ' * this session: ENABLED'
|
|
else
|
|
echo ' * this session: DISABLED'
|
|
fi
|
|
return 0
|
|
;;
|
|
*)
|
|
echo "reshctl() FATAL ERROR: unknown status ($_status)" >&2
|
|
echo "Possibly caused by version mismatch between installed resh and resh in this session." >&2
|
|
echo "Please REPORT this issue here: https://github.com/curusarn/resh/issues" >&2
|
|
echo "Please RESTART your terminal window." >&2
|
|
return "$_status"
|
|
;;
|
|
esac
|
|
} |