mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-01 23:24:21 +08:00
a2bc5709eb
- Mainly work is done on gcc
- Some duplicated removed elsewhere
(cherry picked from commit bbe2a2ba9b
)
340 lines
16 KiB
Fish
340 lines
16 KiB
Fish
function __fish_tmux_sessions -d 'available sessions'
|
|
tmux list-sessions -F "#S #{session_windows} windows created: #{session_created_string} [#{session_width}x#{session_height}]#{session_attached}" | sed 's/0$//;s/1$/ (attached)/' 2>/dev/null
|
|
end
|
|
|
|
function __fish_tmux_clients -d 'connected clients'
|
|
tmux list-clients -F "#{client_tty} #S: Created: #{client_created_string} [#{client_width}x#{client_height} #{client_termname}]" 2>/dev/null
|
|
end
|
|
|
|
function __fish_tmux_panes -d 'window panes'
|
|
#fully qualified pane names
|
|
tmux list-panes -F '#S:#W.#P session:window.pane' 2>/dev/null
|
|
|
|
#panes by themselves
|
|
tmux list-panes -F '#P pane' 2>/dev/null
|
|
|
|
#windows by themselves
|
|
tmux list-panes -F '#W window' 2>/dev/null
|
|
end
|
|
|
|
#don't allow dirs in the completion list...
|
|
complete -c tmux -x
|
|
|
|
############### Begin: Front Flags ###############
|
|
#these do not require parameters
|
|
complete -c tmux -n __fish_use_subcommand -s 2 -d 'Force tmux to assume the terminal supports 256 colours'
|
|
complete -c tmux -n __fish_use_subcommand -s 8 -d 'Like -2, but indicates that the terminal supports 88 colours'
|
|
complete -c tmux -n __fish_use_subcommand -s l -d 'Behave as a login shell'
|
|
complete -c tmux -n __fish_use_subcommand -s q -d 'Set the quiet server option'
|
|
complete -c tmux -n __fish_use_subcommand -s u -d 'Flag explicitly informs tmux that UTF-8 is supported'
|
|
complete -c tmux -n __fish_use_subcommand -s v -d 'Request verbose logging'
|
|
complete -c tmux -n __fish_use_subcommand -s V -d 'Report the tmux version'
|
|
|
|
#these require parameters
|
|
complete -c tmux -n __fish_use_subcommand -xs c -d 'Execute command using the default shell'
|
|
complete -c tmux -n __fish_use_subcommand -rs f -d 'Alternate config file'
|
|
complete -c tmux -n __fish_use_subcommand -rs L -d 'Specify the name of the server socket to use'
|
|
complete -c tmux -n __fish_use_subcommand -rs S -d 'Full path to server socket. If set, -L is ignored.'
|
|
############### End: Front Flags ###############
|
|
|
|
############### Begin: Clients and Sessions ###############
|
|
set -l attach 'attach-session attach at a'
|
|
set -l detach 'detach-client detach'
|
|
set -l has 'has-session has'
|
|
set -l killserver kill-server
|
|
set -l killsession kill-session
|
|
set -l lsc 'list-clients lsc'
|
|
set -l lscm 'list-commands lscm'
|
|
set -l ls 'list-sessions ls'
|
|
set -l lockc 'lock-client lockc'
|
|
set -l locks 'lock-session locks'
|
|
set -l new 'new-session new'
|
|
set -l refresh 'refresh-client refresh'
|
|
set -l rename 'rename-session rename'
|
|
set -l showmsgs 'show-messages showmsgs'
|
|
set -l source 'source-file source'
|
|
set -l start 'start-server start'
|
|
set -l suspendc 'suspend-client suspendc'
|
|
set -l switchc 'switch-client switchc'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $attach -d 'attach to existing session'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $attach" -s d -d 'detach other clients'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $attach" -s r -d 'attach in read-only mode'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $detach -d 'detach current client'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $detach" -s P -d 'SIGHUP parent process of client, likely causing it to exit'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $has -d 'report error and exit with 1 if the session does not exist'
|
|
complete -c tmux -n __fish_use_subcommand -a $killserver -d 'kill tmux server, clients, and sessions'
|
|
complete -c tmux -n __fish_use_subcommand -a $killsession -d 'destroy session, close its windows, and detach all its clients'
|
|
complete -c tmux -n __fish_use_subcommand -a $lsc -d 'list all attached clients'
|
|
complete -c tmux -n __fish_use_subcommand -a $lscm -d 'list syntax for all tmux commands'
|
|
complete -c tmux -n __fish_use_subcommand -a $ls -d 'list all sessions'
|
|
complete -c tmux -n __fish_use_subcommand -a $lockc -d 'lock client'
|
|
complete -c tmux -n __fish_use_subcommand -a $locks -d 'lock session'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $new -d 'create a new session with name session-name'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -s d -d "don't attach to current window"
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -s A -d "attach to existing session if session-name already exists"
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -s D -d "if -A is specified, detach other clients attached to the session"
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -s P -d "print information about the new session after creation"
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -s E -d "don't apply update-environment option"
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs c -d start-directory
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs F -d format
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs n -d window-name
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs s -d session-name
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs t -d group-name
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs x -d width
|
|
complete -c tmux -n "__fish_seen_subcommand_from $new" -xs y -d height
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $refresh -d 'refresh client'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $refresh" -s S -d 'update client status bar'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $rename -d 'rename session'
|
|
complete -c tmux -n __fish_use_subcommand -a $showmsgs -d 'save msgs in status bar in per-client msg log'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $source -d 'execute commands from path'
|
|
complete -c tmux -n __fish_use_subcommand -a $start -d 'start tmux server if not running; do not create a session'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $suspendc -d 'send SIGTSTP signal to client (tty stop)'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $switchc -d 'Switch the current session for client target-client to target-session'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $switchc" -s l -d 'move client to the last session'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $switchc" -s n -d 'move client to the next session'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $switchc" -s p -d 'move client to the previous session'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $switchc" -s r -d 'toggle if client is read-only'
|
|
|
|
#commands with a session flag
|
|
complete -c tmux -xs t -n "__fish_seen_subcommand_from $attach $new $has $killsession $lsc $locks $rename $switchc" -a '(__fish_tmux_sessions)' -d target-session
|
|
complete -c tmux -xs s -n "__fish_seen_subcommand_from $detach" -a '(__fish_tmux_sessions)' -d target-session
|
|
|
|
#commands with a client flag
|
|
complete -c tmux -xs t -n "__fish_seen_subcommand_from $detach $lockc $refresh $showmsgs $suspendc" -a '(__fish_tmux_clients)' -d target-client
|
|
complete -c tmux -xs c -n "__fish_seen_subcommand_from $switchc" -a '(__fish_tmux_clients)' -d target-client
|
|
|
|
#commands with the -F format flag
|
|
complete -c tmux -n "__fish_seen_subcommand_from $lsc $ls" -rs F -d 'format string'
|
|
|
|
############### End: Clients and Sessions ###############
|
|
|
|
############### Begin: Windows and Panes ###############
|
|
#TODO - these commands are not currently implemented.
|
|
#there is a section in the tmux man page that has the same title as this section
|
|
#use the "Clients and Sessions" code as an example when implementing this
|
|
############### End: Windows and Panes ###############
|
|
|
|
############### Begin: Key Bindings ###############
|
|
set -l bind 'bind-key bind'
|
|
set -l lsk 'list-keys lsk'
|
|
set -l send 'send-keys send'
|
|
set -l sendprefix send-prefix
|
|
set -l unbind 'unbind-key unbind'
|
|
|
|
set -l key_table 'vi-edit emacs-edit vi-choice emacs-choice vi-copy emacs-copy'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $bind -d 'bind key to command'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $bind" -s c -d 'bind for command mode instead of normal mode'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $bind" -s n -d 'make the binding work without using a prefix key'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $bind" -s r -d 'key may repeat'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $bind" -xs t -d 'choose key table for binding' -xa "$key_table"
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $lsk -d 'list all key bindings'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $lsk" -s t -d 'key table' -xa "$key_table"
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $send -d 'list all key bindings'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $send" -s R -d 'reset terminal state'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $send" -xs t -a '(__fish_tmux_panes)' -d 'target pane'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $sendprefix -d 'send the prefix key'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $sendprefix" -s 2 -d 'use secondary prefix'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $sendprefix" -xs t -a '(__fish_tmux_panes)' -d 'target pane'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $unbind -d 'unbind the command bound to key'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $unbind" -s a -d 'remove all key bindings'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $unbind" -s c -d 'binding for command mode'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $unbind" -s n -d 'command bound to key without a prefix (if any) removed'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $unbind" -xs t -d 'key table' -xa "$key_table"
|
|
|
|
############### End: Key Bindings ###############
|
|
|
|
############### Begin: Options ###############
|
|
set -l setoption 'set set-option'
|
|
set -l showoptions show-options
|
|
set -l options \
|
|
backspace \
|
|
buffer-limit \
|
|
command-alias \
|
|
default-terminal \
|
|
copy-command \
|
|
escape-time \
|
|
editor \
|
|
exit-empty \
|
|
exit-unattached \
|
|
extended-keys \
|
|
focus-events \
|
|
history-file \
|
|
message-limit \
|
|
prompt-history-limit \
|
|
set-clipboard \
|
|
terminal-features \
|
|
terminal-overrides \
|
|
user-keys \
|
|
activity-action \
|
|
assume-paste-time \
|
|
base-index \
|
|
bell-action \
|
|
default-command \
|
|
default-shell \
|
|
default-size \
|
|
destroy-unattached \
|
|
detach-on-destroy \
|
|
display-panes-active-colour \
|
|
display-panes-colour \
|
|
display-panes-time \
|
|
display-time \
|
|
history-limit \
|
|
key-table \
|
|
lock-after-time \
|
|
lock-command \
|
|
message-command-style \
|
|
message-style \
|
|
mouse \
|
|
prefix \
|
|
renumber-windows \
|
|
repeat-time \
|
|
set-titles \
|
|
set-titles-string \
|
|
silence-action \
|
|
status \
|
|
status-format \
|
|
status-interval \
|
|
status-justify \
|
|
status-keys \
|
|
status-left \
|
|
status-left-length \
|
|
status-left-style \
|
|
status-position \
|
|
status-right \
|
|
status-right-length \
|
|
status-right-style \
|
|
status-style \
|
|
update-environment \
|
|
visual-activity \
|
|
visual-bell \
|
|
visual-silence \
|
|
word-separators \
|
|
aggressive-resize \
|
|
automatic-rename \
|
|
automatic-rename-format \
|
|
clock-mode-colour \
|
|
clock-mode-style \
|
|
fill-character \
|
|
main-pane-height \
|
|
main-pane-width \
|
|
copy-mode-match-style \
|
|
copy-mode-mark-style \
|
|
copy-mode-current-match-style \
|
|
mode-keys \
|
|
mode-style \
|
|
monitor-activity \
|
|
monitor-bell \
|
|
monitor-silence \
|
|
other-pane-height \
|
|
other-pane-width \
|
|
pane-active-border-style \
|
|
pane-base-index \
|
|
pane-border-format \
|
|
pane-border-indicators \
|
|
pane-border-lines \
|
|
pane-border-status \
|
|
pane-border-style \
|
|
popup-style \
|
|
popup-border-style \
|
|
popup-border-lines \
|
|
window-status-activity-style \
|
|
window-status-bell-style \
|
|
window-status-current-format \
|
|
window-status-current-style \
|
|
window-status-format \
|
|
window-status-last-style \
|
|
window-status-separator \
|
|
window-status-style \
|
|
window-size \
|
|
wrap-search \
|
|
allow-passthrough \
|
|
allow-rename \
|
|
alternate-screen \
|
|
cursor-colour \
|
|
pane-colours \
|
|
cursor-style \
|
|
remain-on-exit \
|
|
remain-on-exit-format \
|
|
scroll-on-clear \
|
|
synchronize-panes \
|
|
window-active-style \
|
|
window-style
|
|
complete -c tmux -n '__fish_use_subcommand' -a "$setoption" -d 'Set or unset option'
|
|
complete -c tmux -n '__fish_use_subcommand' -a "$showoptions" -d 'Show set options'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption $showoptions" -s p -d 'Pane option'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption $showoptions" -s w -d 'Window option'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption $showoptions" -s s -d 'Server option'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption $showoptions" -s g -d 'Global option'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption" -s F -d 'Expand format'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption" -s u -d 'Unset option'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption" -s U -d 'Unset option, also in child panes'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption" -s o -d 'Prevent override'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption" -s q -d 'Suppress ambiguous option errors'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption" -s a -d 'Append'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption $showoptions" -s t -x -d 'Target pane' -a '(__fish_tmux_panes)'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $showoptions" -s q -d 'No error if unset'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $showoptions" -s v -d 'Only show value'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $showoptions" -s H -d 'Include hooks'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $showoptions" -s A -d 'Include inherited options'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setoption $showoptions; and not __fish_seen_subcommand_from $options" -a "$options"
|
|
|
|
############### End: Options ###############
|
|
|
|
############### Begin: Environment ###############
|
|
set -l setenv 'set-environment setenv'
|
|
set -l showenv 'show-environment showenv'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $setenv -d 'Set or unset an environment variable'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setenv" -s g -d 'global environment'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setenv" -s r -d 'remove from environment before starting a new process'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $setenv" -s u -d 'unset variable'
|
|
complete -c tmux -xs t -n "__fish_seen_subcommand_from $setenv" -a '(__fish_tmux_sessions)' -d target-session
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $showenv -d 'bind key to command'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $showenv" -s g -d 'global environment'
|
|
complete -c tmux -xs t -n "__fish_seen_subcommand_from $showenv" -a '(__fish_tmux_sessions)' -d target-session
|
|
|
|
############### End: Environment ###############
|
|
|
|
############### Begin: Status Line ###############
|
|
set -l commandprompt command-prompt
|
|
set -l display 'display-message display'
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $commandprompt -d 'Open the command prompt in a client'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $commandprompt" -s I -x -d 'Comma-separated list of initial text for each prompt'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $commandprompt" -s p -x -d 'Comma-separated list of prompts'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $commandprompt" -s t -xa '(__fish_tmux_clients)' -d target-client
|
|
|
|
complete -c tmux -n __fish_use_subcommand -a $display -d 'Display a message'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $display" -s p -d 'print to stdout'
|
|
complete -c tmux -n "__fish_seen_subcommand_from $display" -s t -xa '(__fish_tmux_panes)' -d target-pane
|
|
complete -c tmux -n "__fish_seen_subcommand_from $display" -s c -xa '(__fish_tmux_clients)' -d target-client
|
|
|
|
############### End: Status Line ###############
|
|
|
|
############### Begin: Buffers ###############
|
|
#TODO - these commands are not currently implemented.
|
|
#there is a section in the tmux man page that has the same title as this section
|
|
#use the "Clients and Sessions" code as an example when implementing this
|
|
############### End: Buffers ###############
|
|
|
|
############### Begin: Miscellaneous ###############
|
|
#TODO - these commands are not currently implemented.
|
|
#there is a section in the tmux man page that has the same title as this section
|
|
#use the "Clients and Sessions" code as an example when implementing this
|
|
############### End: Miscellaneous ###############
|