# Some of the most useful features in emacs-libvterm require shell-side # configurations. The main goal of these additional functions is to enable the # shell to send information to `vterm` via properly escaped sequences. A # function that helps in this task, `vterm_printf`, is defined below. function vterm_printf; if begin; [ -n "$TMUX" ] ; and string match -q -r "screen|tmux" "$TERM"; end # tell tmux to pass the escape sequences through printf "\ePtmux;\e\e]%s\007\e\\" "$argv" else if string match -q -- "screen*" "$TERM" # GNU screen (screen, screen-256color, screen-256color-bce) printf "\eP\e]%s\007\e\\" "$argv" else printf "\e]%s\e\\" "$argv" end end # Completely clear the buffer. With this, everything that is not on screen # is erased. if [ "$INSIDE_EMACS" = 'vterm' ] function clear vterm_printf "51;Evterm-clear-scrollback"; tput clear; end end # This is to change the title of the buffer based on information provided by the # shell. See, http://tldp.org/HOWTO/Xterm-Title-4.html, for the meaning of the # various symbols. function fish_title hostname echo ":" pwd end # With vterm_cmd you can execute Emacs commands directly from the shell. # For example, vterm_cmd message "HI" will print "HI". # To enable new commands, you have to customize Emacs's variable # vterm-eval-cmds. function vterm_cmd --description 'Run an Emacs command among the ones defined in vterm-eval-cmds.' set -l vterm_elisp () for arg in $argv set -a vterm_elisp (printf '"%s" ' (string replace -a -r '([\\\\"])' '\\\\\\\\$1' $arg)) end vterm_printf '51;E'(string join '' $vterm_elisp) end # Sync directory and host in the shell with Emacs's current directory. # You may need to manually specify the hostname instead of $(hostname) in case # $(hostname) does not return the correct string to connect to the server. # # The escape sequence "51;A" has also the role of identifying the end of the # prompt function vterm_prompt_end; vterm_printf '51;A'(whoami)'@'(hostname)':'(pwd) end # We are going to add a portion to the prompt, so we copy the old one functions --copy fish_prompt vterm_old_fish_prompt function fish_prompt --description 'Write out the prompt; do not replace this. Instead, put this at end of your file.' # Remove the trailing newline from the original prompt. This is done # using the string builtin from fish, but to make sure any escape codes # are correctly interpreted, use %b for printf. printf "%b" (string join "\n" (vterm_old_fish_prompt)) vterm_prompt_end end