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,24 +9,35 @@ if test -z "${POWERLINE_COMMAND}" ; then
|
|||
fi
|
||||
fi
|
||||
|
||||
_powerline_tmux_setenv() {
|
||||
if [[ -n "$TMUX" ]]; then
|
||||
tmux setenv -g TMUX_"$1"_`tmux display -p "#D" | tr -d %` "$2"
|
||||
tmux refresh -S
|
||||
fi
|
||||
}
|
||||
_powerline_init_tmux_support() {
|
||||
# Note: `test -w ""` returns false, so first condition may be removed
|
||||
if test -n "$TMUX" && test -w "$TMUX" ; then
|
||||
# TMUX variable may be unset to create new tmux session inside this one
|
||||
_POWERLINE_TMUX="$TMUX"
|
||||
|
||||
_POWERLINE_SAVED_PWD=
|
||||
_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() {
|
||||
_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_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
|
||||
}
|
||||
|
||||
_powerline_prompt() {
|
||||
|
@ -36,8 +47,7 @@ _powerline_prompt() {
|
|||
return $last_exit_code
|
||||
}
|
||||
|
||||
trap "_powerline_tmux_set_columns" SIGWINCH
|
||||
_powerline_tmux_set_columns
|
||||
|
||||
[[ "$PROMPT_COMMAND" != "${PROMPT_COMMAND/_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 which powerline-client >/dev/null
|
||||
set -g -x POWERLINE_COMMAND powerline-client
|
||||
else
|
||||
else if which powerline >/dev/null
|
||||
set -g -x POWERLINE_COMMAND powerline
|
||||
else
|
||||
set -g -x POWERLINE_COMMAND (dirname (status -f))/../../../scripts/powerline
|
||||
end
|
||||
end
|
||||
function --on-variable POWERLINE_COMMAND _powerline_update
|
||||
|
@ -18,12 +20,11 @@ function powerline-setup
|
|||
"
|
||||
end
|
||||
_powerline_update
|
||||
if test -w "$TMUX"
|
||||
function _powerline_tmux_setenv
|
||||
if test -n "$TMUX"
|
||||
tmux setenv -g TMUX_$argv[1]_(tmux display -p "#D" | tr -d "%") "$argv[2]"
|
||||
tmux refresh -S
|
||||
end
|
||||
end
|
||||
function --on-variable PWD _powerline_tmux_set_pwd
|
||||
_powerline_tmux_setenv PWD "$PWD"
|
||||
end
|
||||
|
@ -32,4 +33,5 @@ function powerline-setup
|
|||
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
|
||||
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_rprompt 'set rprompt="`$POWERLINE_COMMAND shell right -r tcsh_prompt --last_exit_code=$?` "'
|
||||
alias cwdcmd "`alias cwdcmd` ; _powerline_tmux_set_pwd"
|
||||
|
|
|
@ -8,23 +8,84 @@ if test -z "${POWERLINE_COMMAND}" ; then
|
|||
fi
|
||||
fi
|
||||
|
||||
_powerline_tmux_setenv() {
|
||||
integer _POWERLINE_JOBNUM
|
||||
|
||||
_powerline_init_tmux_support() {
|
||||
emulate -L zsh
|
||||
if [[ -n "$TMUX" ]]; then
|
||||
# Note: `test -w ""` returns false, so first condition may be removed
|
||||
if test -n "$TMUX" && test -w "$TMUX" ; then
|
||||
# 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
|
||||
}
|
||||
|
||||
_powerline_tmux_set_pwd() {
|
||||
_powerline_tmux_setenv PWD "$PWD"
|
||||
_powerline_init_modes_support() {
|
||||
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_tmux_setenv COLUMNS "$COLUMNS"
|
||||
}
|
||||
|
||||
_powerline_precmd() {
|
||||
_powerline_set_jobnum() {
|
||||
# If you are wondering why I am not using the same code as I use for bash
|
||||
# ($(jobs|wc -l)): consider the following test:
|
||||
# echo abc | less
|
||||
|
@ -36,19 +97,16 @@ _powerline_precmd() {
|
|||
# wrong number of jobs. You need to filter the lines first. Or not use
|
||||
# jobs built-in at all.
|
||||
_POWERLINE_JOBNUM=${(%):-%j}
|
||||
_powerline_set_true_keymap_name "${${(Q)${${(z)${"$(bindkey -lL main)"}}[3]}}:-.safe}"
|
||||
}
|
||||
|
||||
_powerline_setup_prompt() {
|
||||
emulate -L zsh
|
||||
for f in "${precmd_functions[@]}"; do
|
||||
if [[ "$f" = "_powerline_precmd" ]]; then
|
||||
if [[ "$f" = "_powerline_set_jobnum" ]]; then
|
||||
return
|
||||
fi
|
||||
done
|
||||
precmd_functions+=( _powerline_precmd )
|
||||
chpwd_functions+=( _powerline_tmux_set_pwd )
|
||||
_powerline_set_true_keymap_name "${${(Q)${${(z)${"$(bindkey -lL main)"}}[3]}}:-.safe}"
|
||||
precmd_functions+=( _powerline_set_jobnum )
|
||||
if zmodload zsh/zpython &>/dev/null ; then
|
||||
zpython 'from powerline.bindings.zsh import setup as _powerline_setup'
|
||||
zpython '_powerline_setup()'
|
||||
|
@ -85,31 +143,8 @@ _powerline_add_widget() {
|
|||
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 promptsubst
|
||||
_powerline_setup_prompt
|
||||
_powerline_init_tmux_support
|
||||
_powerline_init_modes_support
|
||||
|
|
Loading…
Reference in New Issue