dotfiles/.config/zsh/80-emacs-vterm.zsh

38 lines
1007 B
Bash

#
# Shell-side support for Emacs libvterm terminal
#
# This file returns immediately if we are not running in an Emacs vterm.
if [[ ${INSIDE_EMACS} != "vterm" ]]; then
return
fi
vterm_printf() {
# Function definition pulled from emacs-libvterm README
if [ -n "$TMUX" ] && { [ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ]; }; then
# Tell tmux to pass the escape sequences through
printf "\ePtmux;\e\e]%s\007\e\\" "$1"
elif [ "${TERM%%-*}" = "screen" ]; then
# GNU screen (screen, screen-256color, screen-256color-bce)
printf "\eP\e]%s\007\e\\" "$1"
else
printf "\e]%s\e\\" "$1"
fi
}
vterm_prompt_end() {
vterm_printf "51;A${USER}@${SYSTEM_INFO[Hostname]}:${PWD}"
}
prompt_elements[prompt]="${prompt_elements[prompt]}"'%{$(vterm_prompt_end)%}'
emacsctl() {
local vterm_elisp
vterm_elisp=""
while [ $# -gt 0 ]; do
vterm_elisp="$vterm_elisp""$(printf '"%s" ' "$(printf "%s" "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g')")"
shift
done
vterm_printf "51;E${vterm_elisp}"
}