Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Oh My Zsh
Commits
f584de59
Commit
f584de59
authored
Aug 03, 2018
by
Marc Cornellà
Browse files
tmux: refactor and simplify tmux function logic
parent
19716a8e
Changes
1
Show whitespace changes
Inline
Side-by-side
plugins/tmux/tmux.plugin.zsh
View file @
f584de59
#
if
!
((
$+
commands[tmux]
))
;
then
# Aliases
print
"zsh tmux plugin: tmux not found. Please install tmux before using this plugin."
>
&2
#
return
1
fi
# ALIASES
alias
ta
=
'tmux attach -t'
alias
ta
=
'tmux attach -t'
alias
tad
=
'tmux attach -d -t'
alias
tad
=
'tmux attach -d -t'
...
@@ -9,85 +12,76 @@ alias tl='tmux list-sessions'
...
@@ -9,85 +12,76 @@ alias tl='tmux list-sessions'
alias
tksv
=
'tmux kill-server'
alias
tksv
=
'tmux kill-server'
alias
tkss
=
'tmux kill-session -t'
alias
tkss
=
'tmux kill-session -t'
# Only run if tmux is actually installed
# CONFIGURATION VARIABLES
if
!
which tmux &> /dev/null
;
then
print
"zsh tmux plugin: tmux not found. Please install tmux before using this plugin."
>
&2
return
1
fi
# Configuration variables
#
# Automatically start tmux
# Automatically start tmux
[[
-n
"
$ZSH_TMUX_AUTOSTART
"
]]
||
ZSH_TMUX_AUTOSTART
=
false
:
${
ZSH_TMUX_AUTOSTART
:
=false
}
# Only autostart once. If set to false, tmux will attempt to
# Only autostart once. If set to false, tmux will attempt to
# autostart every time your zsh configs are reloaded.
# autostart every time your zsh configs are reloaded.
[[
-n
"
$
ZSH_TMUX_AUTOSTART_ONCE
"
]]
||
ZSH_TMUX_AUTOSTART_ONCE
=
true
:
${
ZSH_TMUX_AUTOSTART_ONCE
:
=true
}
# Automatically connect to a previous session if it exists
# Automatically connect to a previous session if it exists
[[
-n
"
$ZSH_TMUX_AUTOCONNECT
"
]]
||
ZSH_TMUX_AUTOCONNECT
=
true
:
${
ZSH_TMUX_AUTOCONNECT
:
=true
}
# Automatically close the terminal when tmux exits
# Automatically close the terminal when tmux exits
[[
-n
"
$
ZSH_TMUX_AUTOQUIT
"
]]
||
ZSH_TMUX_AUTOQUIT
=
$ZSH_TMUX_AUTOSTART
:
${
ZSH_TMUX_AUTOQUIT
:
=
$ZSH_TMUX_AUTOSTART
}
# Set term to screen or screen-256color based on current terminal support
# Set term to screen or screen-256color based on current terminal support
[[
-n
"
$ZSH_TMUX_FIXTERM
"
]]
||
ZSH_TMUX_FIXTERM
=
true
:
${
ZSH_TMUX_FIXTERM
:
=true
}
# Set '-CC' option for iTerm2 tmux integration
# Set '-CC' option for iTerm2 tmux integration
[[
-n
"
$
ZSH_TMUX_ITERM2
"
]]
||
ZSH_TMUX_ITERM2
=
false
:
${
ZSH_TMUX_ITERM2
:
=false
}
# The TERM to use for non-256 color terminals.
# The TERM to use for non-256 color terminals.
# Tmux states this should be screen, but you may need to change it on
# Tmux states this should be screen, but you may need to change it on
# systems without the proper terminfo
# systems without the proper terminfo
[[
-n
"
$
ZSH_TMUX_FIXTERM_WITHOUT_256COLOR
"
]]
||
ZSH_TMUX_FIXTERM_WITHOUT_256COLOR
=
"
screen
"
:
${
ZSH_TMUX_FIXTERM_WITHOUT_256COLOR
:
=
screen
}
# The TERM to use for 256 color terminals.
# The TERM to use for 256 color terminals.
# Tmux states this should be screen-256color, but you may need to change it on
# Tmux states this should be screen-256color, but you may need to change it on
# systems without the proper terminfo
# systems without the proper terminfo
[[
-n
"
$ZSH_TMUX_FIXTERM_WITH_256COLOR
"
]]
||
ZSH_TMUX_FIXTERM_WITH_256COLOR
=
"screen-256color"
:
${
ZSH_TMUX_FIXTERM_WITH_256COLOR
:
=screen-256color
}
# Determine if the terminal supports 256 colors
# Determine if the terminal supports 256 colors
if
[[
`
tput colors
`
==
"
256
"
]]
;
then
if
[[
$(
tput colors
)
==
256
]]
;
then
export
ZSH_TMUX_TERM
=
$ZSH_TMUX_FIXTERM_WITH_256COLOR
export
ZSH_TMUX_TERM
=
$ZSH_TMUX_FIXTERM_WITH_256COLOR
else
else
export
ZSH_TMUX_TERM
=
$ZSH_TMUX_FIXTERM_WITHOUT_256COLOR
export
ZSH_TMUX_TERM
=
$ZSH_TMUX_FIXTERM_WITHOUT_256COLOR
fi
fi
# Set the correct local config file to use.
# Set the correct local config file to use.
if
[[
"
$ZSH_TMUX_ITERM2
"
==
"false"
]]
&&
[[
-f
$HOME
/.tmux.conf
||
-h
$HOME
/.tmux.conf
]]
;
then
if
[[
"
$ZSH_TMUX_ITERM2
"
==
"false"
&&
-e
"
$HOME
/.tmux.conf"
]]
;
then
#use this when they have a ~/.tmux.conf
export
_ZSH_TMUX_FIXED_CONFIG
=
"
${
0
:h:a
}
/tmux.extra.conf"
export
_ZSH_TMUX_FIXED_CONFIG
=
"
${
0
:h:a
}
/tmux.extra.conf"
else
else
#use this when they don't have a ~/.tmux.conf
export
_ZSH_TMUX_FIXED_CONFIG
=
"
${
0
:h:a
}
/tmux.only.conf"
export
_ZSH_TMUX_FIXED_CONFIG
=
"
${
0
:h:a
}
/tmux.only.conf"
fi
fi
# Wrapper function for tmux.
# Wrapper function for tmux.
function
_zsh_tmux_plugin_run
()
{
function
_zsh_tmux_plugin_run
()
{
local
tmux_cmd
tmux_cmd
=(
command
tmux
)
[[
"
$ZSH_TMUX_ITERM2
"
==
"true"
]]
&&
tmux_cmd+
=
"-CC"
[[
"
$ZSH_TMUX_FIXTERM
"
==
"true"
]]
&&
tmux_cmd+
=(
-f
$_ZSH_TMUX_FIXED_CONFIG
)
if
[[
-n
"
$@
"
]]
;
then
if
[[
-n
"
$@
"
]]
;
then
# We have other arguments, just run them
command
tmux
"
$@
"
\t
mux
$@
return
$?
elif
[[
"
$ZSH_TMUX_AUTOCONNECT
"
==
"true"
]]
;
then
fi
local
-a
tmux_cmd
=(
command
tmux
)
[[
"
$ZSH_TMUX_ITERM2
"
==
"true"
]]
&&
tmux_cmd+
=(
-CC
)
# Try to connect to an existing session.
# Try to connect to an existing session.
$tmux_cmd
attach
||
$tmux_cmd
new-session
if
[[
"
$ZSH_TMUX_AUTOCONNECT
"
==
"true"
]]
;
then
if
[[
"
$ZSH_TMUX_AUTOQUIT
"
==
"true"
]]
;
then
$tmux_cmd
attach
exit
fi
fi
else
# Just run tmux, fixing the TERM variable if requested.
# If failed, just run tmux, fixing the TERM variable if requested.
$tmux_cmd
if
[[
$?
-ne
0
]]
;
then
[[
"
$ZSH_TMUX_FIXTERM
"
==
"true"
]]
&&
tmux_cmd+
=(
-f
"
$_ZSH_TMUX_FIXED_CONFIG
"
)
$tmux_cmd
new-session
fi
if
[[
"
$ZSH_TMUX_AUTOQUIT
"
==
"true"
]]
;
then
if
[[
"
$ZSH_TMUX_AUTOQUIT
"
==
"true"
]]
;
then
exit
exit
fi
fi
fi
}
}
# Use the completions for tmux for our function
# Use the completions for tmux for our function
compdef _tmux _zsh_tmux_plugin_run
compdef _tmux _zsh_tmux_plugin_run
# Alias tmux to our wrapper function.
# Alias tmux to our wrapper function.
alias
tmux
=
_zsh_tmux_plugin_run
alias
tmux
=
_zsh_tmux_plugin_run
# Autostart if not already in tmux and enabled.
# Autostart if not already in tmux and enabled.
if
[[
!
-n
"
$TMUX
"
&&
"
$ZSH_TMUX_AUTOSTART
"
==
"true"
]]
;
then
if
[[
-z
"
$TMUX
"
&&
"
$ZSH_TMUX_AUTOSTART
"
==
"true"
]]
;
then
# Actually don't autostart if we already did and multiple autostarts are disabled.
# Actually don't autostart if we already did and multiple autostarts are disabled.
if
[[
"
$ZSH_TMUX_AUTOSTART_ONCE
"
==
"false"
||
"
$ZSH_TMUX_AUTOSTARTED
"
!=
"true"
]]
;
then
if
[[
"
$ZSH_TMUX_AUTOSTART_ONCE
"
==
"false"
||
"
$ZSH_TMUX_AUTOSTARTED
"
!=
"true"
]]
;
then
export
ZSH_TMUX_AUTOSTARTED
=
true
export
ZSH_TMUX_AUTOSTARTED
=
true
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment