config

Personal configuration.
git clone git://code.dwrz.net/config
Log | Files | Refs

emacs-vterm.fish (2639B)


      1 # Some of the most useful features in emacs-libvterm require shell-side
      2 # configurations. The main goal of these additional functions is to enable the
      3 # shell to send information to `vterm` via properly escaped sequences. A
      4 # function that helps in this task, `vterm_printf`, is defined below.
      5 
      6 function vterm_printf;
      7     if begin; [  -n "$TMUX" ]  ; and  string match -q -r "screen|tmux" "$TERM"; end 
      8         # tell tmux to pass the escape sequences through
      9         printf "\ePtmux;\e\e]%s\007\e\\" "$argv"
     10     else if string match -q -- "screen*" "$TERM"
     11         # GNU screen (screen, screen-256color, screen-256color-bce)
     12         printf "\eP\e]%s\007\e\\" "$argv"
     13     else
     14         printf "\e]%s\e\\" "$argv"
     15     end
     16 end
     17 
     18 # Completely clear the buffer. With this, everything that is not on screen
     19 # is erased.
     20 if [ "$INSIDE_EMACS" = 'vterm' ]
     21     function clear
     22         vterm_printf "51;Evterm-clear-scrollback";
     23         tput clear;
     24     end
     25 end
     26 
     27 # This is to change the title of the buffer based on information provided by the
     28 # shell. See, http://tldp.org/HOWTO/Xterm-Title-4.html, for the meaning of the
     29 # various symbols.
     30 function fish_title
     31     hostname
     32     echo ":"
     33     prompt_pwd
     34 end
     35 
     36 # With vterm_cmd you can execute Emacs commands directly from the shell.
     37 # For example, vterm_cmd message "HI" will print "HI".
     38 # To enable new commands, you have to customize Emacs's variable
     39 # vterm-eval-cmds.
     40 function vterm_cmd --description 'Run an Emacs command among the ones defined in vterm-eval-cmds.'
     41     set -l vterm_elisp ()
     42     for arg in $argv
     43         set -a vterm_elisp (printf '"%s" ' (string replace -a -r '([\\\\"])' '\\\\\\\\$1' $arg))
     44     end
     45     vterm_printf '51;E'(string join '' $vterm_elisp)
     46 end
     47 
     48 # Sync directory and host in the shell with Emacs's current directory.
     49 # You may need to manually specify the hostname instead of $(hostname) in case
     50 # $(hostname) does not return the correct string to connect to the server.
     51 #
     52 # The escape sequence "51;A" has also the role of identifying the end of the
     53 # prompt
     54 function vterm_prompt_end;
     55     vterm_printf '51;A'(whoami)'@'(hostname)':'(pwd)
     56 end
     57 
     58 # We are going to add a portion to the prompt, so we copy the old one
     59 functions --copy fish_prompt vterm_old_fish_prompt
     60 
     61 function fish_prompt --description 'Write out the prompt; do not replace this. Instead, put this at end of your file.'
     62     # Remove the trailing newline from the original prompt. This is done
     63     # using the string builtin from fish, but to make sure any escape codes
     64     # are correctly interpreted, use %b for printf.
     65     printf "%b" (string join "\n" (vterm_old_fish_prompt))
     66     vterm_prompt_end
     67 end