Merge pull request #806 from ZyX-I/shell-fixes
Shell fixes: TMUX support for su[do] and modes on old zsh
This commit is contained in:
commit
1fbd92bb88
|
@ -9,26 +9,37 @@ if test -z "${POWERLINE_COMMAND}" ; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_powerline_tmux_setenv() {
|
_powerline_init_tmux_support() {
|
||||||
if [[ -n "$TMUX" ]]; then
|
# Note: `test -w ""` returns false, so first condition may be removed
|
||||||
tmux setenv -g TMUX_"$1"_`tmux display -p "#D" | tr -d %` "$2"
|
if test -n "$TMUX" && test -w "$TMUX" ; then
|
||||||
tmux refresh -S
|
# TMUX variable may be unset to create new tmux session inside this one
|
||||||
|
_POWERLINE_TMUX="$TMUX"
|
||||||
|
|
||||||
|
_powerline_tmux_setenv() {
|
||||||
|
TMUX="$_POWERLINE_TMUX" tmux setenv -g TMUX_"$1"_`tmux display -p "#D" | tr -d %` "$2"
|
||||||
|
TMUX="$_POWERLINE_TMUX" tmux refresh -S
|
||||||
|
}
|
||||||
|
|
||||||
|
_powerline_tmux_set_pwd() {
|
||||||
|
if test "x$_POWERLINE_SAVED_PWD" != "x$PWD" ; then
|
||||||
|
_POWERLINE_SAVED_PWD="$PWD"
|
||||||
|
_powerline_tmux_setenv PWD "$PWD"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_powerline_tmux_set_columns() {
|
||||||
|
_powerline_tmux_setenv COLUMNS "$COLUMNS"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap "_powerline_tmux_set_columns" SIGWINCH
|
||||||
|
_powerline_tmux_set_columns
|
||||||
|
else
|
||||||
|
_powerline_tmux_set_pwd() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_POWERLINE_SAVED_PWD=
|
|
||||||
|
|
||||||
_powerline_tmux_set_pwd() {
|
|
||||||
if test "x$_POWERLINE_SAVED_PWD" != "x$PWD" ; then
|
|
||||||
_POWERLINE_SAVED_PWD="$PWD"
|
|
||||||
_powerline_tmux_setenv PWD "$PWD"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_powerline_tmux_set_columns() {
|
|
||||||
_powerline_tmux_setenv COLUMNS "$COLUMNS"
|
|
||||||
}
|
|
||||||
|
|
||||||
_powerline_prompt() {
|
_powerline_prompt() {
|
||||||
local last_exit_code=$?
|
local last_exit_code=$?
|
||||||
PS1="$($POWERLINE_COMMAND shell left -r bash_prompt --last_exit_code=$last_exit_code --jobnum="$(jobs -p|wc -l)")"
|
PS1="$($POWERLINE_COMMAND shell left -r bash_prompt --last_exit_code=$last_exit_code --jobnum="$(jobs -p|wc -l)")"
|
||||||
|
@ -36,8 +47,7 @@ _powerline_prompt() {
|
||||||
return $last_exit_code
|
return $last_exit_code
|
||||||
}
|
}
|
||||||
|
|
||||||
trap "_powerline_tmux_set_columns" SIGWINCH
|
|
||||||
_powerline_tmux_set_columns
|
|
||||||
|
|
||||||
[[ "$PROMPT_COMMAND" != "${PROMPT_COMMAND/_powerline_prompt/}" ]] ||
|
[[ "$PROMPT_COMMAND" != "${PROMPT_COMMAND/_powerline_prompt/}" ]] ||
|
||||||
export PROMPT_COMMAND="${PROMPT_COMMAND}"$'\n'"_powerline_prompt"
|
export PROMPT_COMMAND="${PROMPT_COMMAND}"$'\n'"_powerline_prompt"
|
||||||
|
|
||||||
|
_powerline_init_tmux_support
|
||||||
|
|
|
@ -2,8 +2,10 @@ function powerline-setup
|
||||||
if test -z "$POWERLINE_COMMAND"
|
if test -z "$POWERLINE_COMMAND"
|
||||||
if which powerline-client >/dev/null
|
if which powerline-client >/dev/null
|
||||||
set -g -x POWERLINE_COMMAND powerline-client
|
set -g -x POWERLINE_COMMAND powerline-client
|
||||||
else
|
else if which powerline >/dev/null
|
||||||
set -g -x POWERLINE_COMMAND powerline
|
set -g -x POWERLINE_COMMAND powerline
|
||||||
|
else
|
||||||
|
set -g -x POWERLINE_COMMAND (dirname (status -f))/../../../scripts/powerline
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function --on-variable POWERLINE_COMMAND _powerline_update
|
function --on-variable POWERLINE_COMMAND _powerline_update
|
||||||
|
@ -18,18 +20,18 @@ function powerline-setup
|
||||||
"
|
"
|
||||||
end
|
end
|
||||||
_powerline_update
|
_powerline_update
|
||||||
function _powerline_tmux_setenv
|
if test -w "$TMUX"
|
||||||
if test -n "$TMUX"
|
function _powerline_tmux_setenv
|
||||||
tmux setenv -g TMUX_$argv[1]_(tmux display -p "#D" | tr -d "%") "$argv[2]"
|
tmux setenv -g TMUX_$argv[1]_(tmux display -p "#D" | tr -d "%") "$argv[2]"
|
||||||
tmux refresh -S
|
tmux refresh -S
|
||||||
end
|
end
|
||||||
|
function --on-variable PWD _powerline_tmux_set_pwd
|
||||||
|
_powerline_tmux_setenv PWD "$PWD"
|
||||||
|
end
|
||||||
|
function --on-signal WINCH _powerline_tmux_set_columns
|
||||||
|
_powerline_tmux_setenv COLUMNS "$COLUMNS"
|
||||||
|
end
|
||||||
|
_powerline_tmux_set_columns
|
||||||
|
_powerline_tmux_set_pwd
|
||||||
end
|
end
|
||||||
function --on-variable PWD _powerline_tmux_set_pwd
|
|
||||||
_powerline_tmux_setenv PWD "$PWD"
|
|
||||||
end
|
|
||||||
function --on-signal WINCH _powerline_tmux_set_columns
|
|
||||||
_powerline_tmux_setenv COLUMNS "$COLUMNS"
|
|
||||||
end
|
|
||||||
_powerline_tmux_set_columns
|
|
||||||
_powerline_tmux_set_pwd
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,7 +14,7 @@ if ! $?POWERLINE_COMMAND then
|
||||||
setenv POWERLINE_COMMAND $POWERLINE_SOURCED:h:h:h:h:q/scripts/powerline
|
setenv POWERLINE_COMMAND $POWERLINE_SOURCED:h:h:h:h:q/scripts/powerline
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
alias _powerline_tmux_set_pwd 'if $?TMUX tmux setenv -g TMUX_PWD_`tmux display -p "#D" | tr -d %` $PWD:q ; if $?TMUX tmux refresh -S'
|
alias _powerline_tmux_set_pwd 'if ( $?TMUX && { test -w $TMUX:q } ) tmux setenv -g TMUX_PWD_`tmux display -p "#D" | tr -d %` $PWD:q ; if ( $?TMUX && { test -w $TMUX:q } ) tmux refresh -S'
|
||||||
alias _powerline_set_prompt 'set prompt="`$POWERLINE_COMMAND shell left -r tcsh_prompt --last_exit_code=$?`"'
|
alias _powerline_set_prompt 'set prompt="`$POWERLINE_COMMAND shell left -r tcsh_prompt --last_exit_code=$?`"'
|
||||||
alias _powerline_set_rprompt 'set rprompt="`$POWERLINE_COMMAND shell right -r tcsh_prompt --last_exit_code=$?` "'
|
alias _powerline_set_rprompt 'set rprompt="`$POWERLINE_COMMAND shell right -r tcsh_prompt --last_exit_code=$?` "'
|
||||||
alias cwdcmd "`alias cwdcmd` ; _powerline_tmux_set_pwd"
|
alias cwdcmd "`alias cwdcmd` ; _powerline_tmux_set_pwd"
|
||||||
|
|
|
@ -8,23 +8,84 @@ if test -z "${POWERLINE_COMMAND}" ; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_powerline_tmux_setenv() {
|
integer _POWERLINE_JOBNUM
|
||||||
|
|
||||||
|
_powerline_init_tmux_support() {
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
if [[ -n "$TMUX" ]]; then
|
# Note: `test -w ""` returns false, so first condition may be removed
|
||||||
tmux setenv -g TMUX_"$1"_$(tmux display -p "#D" | tr -d %) "$2"
|
if test -n "$TMUX" && test -w "$TMUX" ; then
|
||||||
tmux refresh -S
|
# TMUX variable may be unset to create new tmux session inside this one
|
||||||
|
typeset -g _POWERLINE_TMUX="$TMUX"
|
||||||
|
|
||||||
|
function -g _powerline_tmux_setenv() {
|
||||||
|
emulate -L zsh
|
||||||
|
local -x TMUX="$_POWERLINE_TMUX"
|
||||||
|
tmux setenv -g TMUX_"$1"_$(tmux display -p "#D" | tr -d %) "$2"
|
||||||
|
tmux refresh -S
|
||||||
|
}
|
||||||
|
|
||||||
|
function -g _powerline_tmux_set_pwd() {
|
||||||
|
_powerline_tmux_setenv PWD "$PWD"
|
||||||
|
}
|
||||||
|
|
||||||
|
function -g _powerline_tmux_set_columns() {
|
||||||
|
_powerline_tmux_setenv COLUMNS "$COLUMNS"
|
||||||
|
}
|
||||||
|
|
||||||
|
chpwd_functions+=( _powerline_tmux_set_pwd )
|
||||||
|
trap "_powerline_tmux_set_columns" SIGWINCH
|
||||||
|
_powerline_tmux_set_columns
|
||||||
|
_powerline_tmux_set_pwd
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_powerline_tmux_set_pwd() {
|
_powerline_init_modes_support() {
|
||||||
_powerline_tmux_setenv PWD "$PWD"
|
emulate -L zsh
|
||||||
|
|
||||||
|
test -z "$ZSH_VERSION" && return 0
|
||||||
|
|
||||||
|
typeset -ga VS
|
||||||
|
VS=( ${(s:.:)ZSH_VERSION} )
|
||||||
|
|
||||||
|
# Mode support requires >=zsh-4.3.11
|
||||||
|
if (( VS[1] < 4 || (VS[1] == 4 && (VS[2] < 3 || (VS[2] == 3 && VS[3] < 11))) )) ; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
function -g _powerline_get_main_keymap_name() {
|
||||||
|
REPLY="${${(Q)${${(z)${"$(bindkey -lL main)"}}[3]}}:-.safe}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function -g _powerline_set_true_keymap_name() {
|
||||||
|
export _POWERLINE_MODE="${1}"
|
||||||
|
local plm_bk="$(bindkey -lL ${_POWERLINE_MODE})"
|
||||||
|
if [[ $plm_bk = 'bindkey -A'* ]] ; then
|
||||||
|
_powerline_set_true_keymap_name ${(Q)${${(z)plm_bk}[3]}}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function -g _powerline_zle_keymap_select() {
|
||||||
|
_powerline_set_true_keymap_name $KEYMAP
|
||||||
|
zle reset-prompt
|
||||||
|
test -z "$_POWERLINE_SAVE_WIDGET" || zle $_POWERLINE_SAVE_WIDGET
|
||||||
|
}
|
||||||
|
|
||||||
|
function -g _powerline_set_main_keymap_name() {
|
||||||
|
local REPLY
|
||||||
|
_powerline_get_main_keymap_name
|
||||||
|
_powerline_set_true_keymap_name "$REPLY"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "$_POWERLINE_MODE" != vi* ]] ; then
|
||||||
|
export _POWERLINE_DEFAULT_MODE="$_POWERLINE_MODE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_powerline_add_widget zle-keymap-select _powerline_zle_keymap_select
|
||||||
|
_powerline_set_main_keymap_name
|
||||||
|
precmd_functions+=( _powerline_set_main_keymap_name )
|
||||||
}
|
}
|
||||||
|
|
||||||
_powerline_tmux_set_columns() {
|
_powerline_set_jobnum() {
|
||||||
_powerline_tmux_setenv COLUMNS "$COLUMNS"
|
|
||||||
}
|
|
||||||
|
|
||||||
_powerline_precmd() {
|
|
||||||
# If you are wondering why I am not using the same code as I use for bash
|
# If you are wondering why I am not using the same code as I use for bash
|
||||||
# ($(jobs|wc -l)): consider the following test:
|
# ($(jobs|wc -l)): consider the following test:
|
||||||
# echo abc | less
|
# echo abc | less
|
||||||
|
@ -36,19 +97,16 @@ _powerline_precmd() {
|
||||||
# wrong number of jobs. You need to filter the lines first. Or not use
|
# wrong number of jobs. You need to filter the lines first. Or not use
|
||||||
# jobs built-in at all.
|
# jobs built-in at all.
|
||||||
_POWERLINE_JOBNUM=${(%):-%j}
|
_POWERLINE_JOBNUM=${(%):-%j}
|
||||||
_powerline_set_true_keymap_name "${${(Q)${${(z)${"$(bindkey -lL main)"}}[3]}}:-.safe}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_powerline_setup_prompt() {
|
_powerline_setup_prompt() {
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
for f in "${precmd_functions[@]}"; do
|
for f in "${precmd_functions[@]}"; do
|
||||||
if [[ "$f" = "_powerline_precmd" ]]; then
|
if [[ "$f" = "_powerline_set_jobnum" ]]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
precmd_functions+=( _powerline_precmd )
|
precmd_functions+=( _powerline_set_jobnum )
|
||||||
chpwd_functions+=( _powerline_tmux_set_pwd )
|
|
||||||
_powerline_set_true_keymap_name "${${(Q)${${(z)${"$(bindkey -lL main)"}}[3]}}:-.safe}"
|
|
||||||
if zmodload zsh/zpython &>/dev/null ; then
|
if zmodload zsh/zpython &>/dev/null ; then
|
||||||
zpython 'from powerline.bindings.zsh import setup as _powerline_setup'
|
zpython 'from powerline.bindings.zsh import setup as _powerline_setup'
|
||||||
zpython '_powerline_setup()'
|
zpython '_powerline_setup()'
|
||||||
|
@ -85,31 +143,8 @@ _powerline_add_widget() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_powerline_set_true_keymap_name() {
|
|
||||||
export _POWERLINE_MODE="${1}"
|
|
||||||
local plm_bk="$(bindkey -lL ${_POWERLINE_MODE})"
|
|
||||||
if [[ $plm_bk = 'bindkey -A'* ]] ; then
|
|
||||||
_powerline_set_true_keymap_name ${(Q)${${(z)plm_bk}[3]}}
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_powerline_zle_keymap_select() {
|
|
||||||
_powerline_set_true_keymap_name $KEYMAP
|
|
||||||
zle reset-prompt
|
|
||||||
test -z "$_POWERLINE_SAVE_WIDGET" || zle $_POWERLINE_SAVE_WIDGET
|
|
||||||
}
|
|
||||||
|
|
||||||
_powerline_add_widget zle-keymap-select _powerline_zle_keymap_select
|
|
||||||
_powerline_precmd
|
|
||||||
|
|
||||||
if [[ "$_POWERLINE_MODE" != vi* ]] ; then
|
|
||||||
export _POWERLINE_DEFAULT_MODE="$_POWERLINE_MODE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trap "_powerline_tmux_set_columns" SIGWINCH
|
|
||||||
_powerline_tmux_set_columns
|
|
||||||
_powerline_tmux_set_pwd
|
|
||||||
|
|
||||||
setopt promptpercent
|
setopt promptpercent
|
||||||
setopt promptsubst
|
setopt promptsubst
|
||||||
_powerline_setup_prompt
|
_powerline_setup_prompt
|
||||||
|
_powerline_init_tmux_support
|
||||||
|
_powerline_init_modes_support
|
||||||
|
|
Loading…
Reference in New Issue