fish-shell/share/completions/screen.fish
Collin Styles e475b1a375 Fix screen session name completion for non-Ubuntu distros
For some reason Ubuntu's version of screen includes timestamps in the
output of `screen -list`. The timestamps aren't present on other
distributions (tested on Fedora and Arch Linux), nor when building from
source. This commit fixes the regex so that with or without the
timestamp, fish will correctly show suggestions for screen sessions.
2019-02-24 21:08:56 -08:00

85 lines
3.5 KiB
Fish

function __fish_detect_screen_socket_dir -d "Detect which folder screen uses"
set screen_bin screen
if not set -q __fish_screen_socket_dir
set -g __fish_screen_socket_dir ($screen_bin -ls __fish_i_don_t_think_this_will_be_matched | string match -r "(?<=No Sockets found in ).*(?=\.)")
end
end
function __fish_complete_screen_general_list_mac -d "Get the socket list on mac"
pushd $__fish_screen_socket_dir > /dev/null
set -l sockets (ls)
if test (count $sockets) -ne 0
switch $argv
case "Detached"
stat -f "%Lp %SB %N" -t "%D %T" $sockets | string match -r '^6\d{2} .*$' | string replace -r '^6\d{2} (\S+ \S+) (\S+)' '$2\t$1 Detached'
case "Attached"
stat -f "%Lp %SB %N" -t "%D %T" $sockets | string match -r '^7\d{2} .*$' | string replace -r '^7\d{2} (\S+ \S+) (\S+)' '$2\t$1 Attached'
end
end
popd > /dev/null
end
function __fish_complete_screen_general_list -d "Get the socket list"
set -l escaped (string escape --style=regex $argv)
screen -list | string match -r '^\t.*\('$escaped'\)\s*$' | string replace -r '\t(.*)\s+(\(.*\))?\s*\((.*)\)' '$1\t$3'
end
function __fish_complete_screen_detached -d "Print a list of detached screen sessions"
switch (uname)
case Darwin
__fish_complete_screen_general_list_mac Detached
case '*'
__fish_complete_screen_general_list Detached
end
end
function __fish_complete_screen_attached -d "Print a list of attached screen sessions"
switch (uname)
case Darwin
__fish_complete_screen_general_list_mac Attached
case '*'
__fish_complete_screen_general_list Attached
end
end
function __fish_complete_screen -d "Print a list of running screen sessions"
string join \n (__fish_complete_screen_attached) (__fish_complete_screen_detached)
end
# detect socket directory for mac users
__fish_detect_screen_socket_dir
complete -c screen -x
complete -c screen -s a -d 'Include all capabilitys'
complete -c screen -s A -d 'Adapt window size'
complete -c screen -s c -r -d 'Specify init file'
complete -c screen -s d -d 'Detach screen' -a '(__fish_complete_screen)' -x
complete -c screen -s D -d 'Detach screen' -a '(__fish_complete_screen)' -x
complete -c screen -s r -d 'Reattach session' -a '(__fish_complete_screen)' -x
complete -c screen -s R -d 'Reattach/create session'
complete -c screen -o RR -d 'Reattach/create any session'
complete -c screen -s e -x -d 'Escape character'
complete -c screen -s f -d 'Flow control on'
complete -c screen -o fn -d 'Flow control off'
complete -c screen -o fa -d 'Flow control automatic'
complete -c screen -s h -x -d 'History length'
complete -c screen -s i -d 'Interrupt display on C-c'
complete -c screen -s l -d 'Login on'
complete -c screen -o ln -d 'Login off'
complete -c screen -o ls -d 'List sessions'
complete -c screen -o list -d 'List sessions'
complete -c screen -s L -d 'Log on'
complete -c screen -s m -d 'Ignore $STY'
complete -c screen -s O -d 'Optimal output'
complete -c screen -s p -d 'Preselect window'
complete -c screen -s q -d 'Quiet mode'
complete -c screen -s s -r -d 'Set shell'
complete -c screen -s S -x -d 'Session name'
complete -c screen -s t -x -d 'Session title'
complete -c screen -s U -d 'UTF-8 mode'
complete -c screen -s v -d 'Display version and exit'
complete -c screen -o wipe -d 'Wipe dead sessions'
complete -c screen -s x -d 'Multi attach' -a '(__fish_complete_screen_attached)' -x
complete -c screen -s X -r -d 'Send command'