A month ago or so, a friend of mine turned me onto a new unix shell called FishShell. It shares some similarities with other terminals, but offers lots of really nice features. It has a vastly improved autocompletion feature (including an amazing tool that parses all your installed man pages and generates an autocompletion database). It took me a while to work out some of the syntax (no more
export PATH=A
, but rather set -x PATH A
). I’ve switched all my machines over to it (Mac and Linux) and I’m loving it so far.Then, the other day I found out about a great tool called Xeno.io. It’s a tool that combines git and ssh into a single stream that lets you edit remote files with local editors. I hooked it up with Sublime (a quick
set -xU EDITOR subl
and set -xU GIT_EDITOR ’subl -w’
), and it’s a great way to edit code on remote systems without having to use screen and such. And if your connection drops, no worries! It’s stored in git, and when it comes back it’ll resync.So I spent some time merging the two, and build the following nice autocompletes for xeno that support the major operations, and filling in open sessions. Hope someone out there finds it useful!
# xeno # function __fish_xeno_available_sessions xeno-list | cut -d ':' -f 1 end function __fish_xeno_needs_command set cmd (commandline -opc) if [ (count $cmd) -eq 1 -a $cmd[1] = 'xeno' ] return 0 end return 1 end function __fish_xeno_using_command set cmd (commandline -opc) if [ (count $cmd) -gt 1 ] if [ $argv[1] = $cmd[2] ] return 0 end end return 1 end complete -f -c xeno -n '__fish_xeno_needs_command' -a 'list stop resume sync ssh edit' complete -f -c xeno -n '__fish_xeno_needs_command' -a list --description 'List open sessions' complete -f -c xeno -n '__fish_xeno_using_command list' -a '(__fish_xeno_available_sessions)' complete -f -c xeno -n '__fish_xeno_needs_command' -a stop --description 'Shutdown a session' complete -f -c xeno -n '__fish_xeno_using_command stop' -a '(__fish_xeno_available_sessions)' complete -f -c xeno -n '__fish_xeno_needs_command' -a resume --description 'Resume a previously used session' complete -f -c xeno -n '__fish_xeno_using_command resume' -a '(__fish_xeno_available_sessions)' complete -f -c xeno -n '__fish_xeno_needs_command' -a sync --description 'Force a sync of data' complete -f -c xeno -n '__fish_xeno_using_command sync' -a '(__fish_xeno_available_sessions)' complete -f -c xeno -n '__fish_xeno_needs_command' -a ssh --description 'SSH to a host to prepare for editing' complete -f -c xeno -n '__fish_xeno_needs_command' -a edit --description 'Edit a file'