mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-02-06 02:51:32 +01:00
Merge branch 'master' into omz-subexecutor
This commit is contained in:
commit
8913f0ee55
4 changed files with 43 additions and 17 deletions
|
|
@ -3,6 +3,7 @@
|
|||
# https://github.com/woefe/git-prompt.zsh/blob/master/git-prompt.zsh
|
||||
|
||||
zmodload zsh/system
|
||||
autoload -Uz is-at-least
|
||||
|
||||
# For now, async prompt function handlers are set up like so:
|
||||
# First, define the async function handler and register the handler
|
||||
|
|
@ -82,10 +83,8 @@ function _omz_async_request {
|
|||
exec {fd}< <(
|
||||
# Tell parent process our PID
|
||||
builtin echo ${sysparams[pid]}
|
||||
# Store handler name for callback
|
||||
builtin echo $handler
|
||||
# Set exit code for the handler if used
|
||||
(exit $ret)
|
||||
() { return $ret }
|
||||
# Run the async function handler
|
||||
$handler
|
||||
)
|
||||
|
|
@ -95,11 +94,11 @@ function _omz_async_request {
|
|||
|
||||
# There's a weird bug here where ^C stops working unless we force a fork
|
||||
# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
|
||||
command true
|
||||
# and https://github.com/zsh-users/zsh-autosuggestions/pull/612
|
||||
is-at-least 5.8 || command true
|
||||
|
||||
# Save the PID from the handler child process
|
||||
read pid <&$fd
|
||||
_OMZ_ASYNC_PIDS[$handler]=$pid
|
||||
read -u $fd "_OMZ_ASYNC_PIDS[$handler]"
|
||||
|
||||
# When the fd is readable, call the response handler
|
||||
zle -F "$fd" _omz_async_callback
|
||||
|
|
@ -114,15 +113,14 @@ function _omz_async_callback() {
|
|||
local err=$2 # Second arg will be passed in case of error
|
||||
|
||||
if [[ -z "$err" || "$err" == "hup" ]]; then
|
||||
# Get handler name from first line
|
||||
local handler
|
||||
read handler <&$fd
|
||||
# Get handler name from fd
|
||||
local handler="${(k)_OMZ_ASYNC_FDS[(r)$fd]}"
|
||||
|
||||
# Store old output which is supposed to be already printed
|
||||
local old_output="${_OMZ_ASYNC_OUTPUT[$handler]}"
|
||||
|
||||
# Read output from fd
|
||||
_OMZ_ASYNC_OUTPUT[$handler]="$(cat <&$fd)"
|
||||
IFS= read -r -u $fd -d '' "_OMZ_ASYNC_OUTPUT[$handler]"
|
||||
|
||||
# Repaint prompt if output has changed
|
||||
if [[ "$old_output" != "${_OMZ_ASYNC_OUTPUT[$handler]}" ]]; then
|
||||
|
|
|
|||
26
lib/git.zsh
26
lib/git.zsh
|
|
@ -9,7 +9,7 @@ function __git_prompt_git() {
|
|||
GIT_OPTIONAL_LOCKS=0 command git "$@"
|
||||
}
|
||||
|
||||
function _omz_git_prompt_status() {
|
||||
function _omz_git_prompt_info() {
|
||||
# If we are on a folder not tracked by git, get out.
|
||||
# Otherwise, check for hide-info at global and local repository level
|
||||
if ! __git_prompt_git rev-parse --git-dir &> /dev/null \
|
||||
|
|
@ -38,8 +38,16 @@ function _omz_git_prompt_status() {
|
|||
}
|
||||
|
||||
# Enable async prompt by default unless the setting is at false / no
|
||||
if zstyle -t ':omz:alpha:lib:git' async-prompt; then
|
||||
if zstyle -T ':omz:alpha:lib:git' async-prompt; then
|
||||
function git_prompt_info() {
|
||||
setopt localoptions noksharrays
|
||||
if [[ -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_info]" ]]; then
|
||||
echo -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_info]"
|
||||
fi
|
||||
}
|
||||
|
||||
function git_prompt_status() {
|
||||
setopt localoptions noksharrays
|
||||
if [[ -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_status]" ]]; then
|
||||
echo -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_status]"
|
||||
fi
|
||||
|
|
@ -49,10 +57,15 @@ if zstyle -t ':omz:alpha:lib:git' async-prompt; then
|
|||
# or any of the other prompt variables
|
||||
function _defer_async_git_register() {
|
||||
# Check if git_prompt_info is used in a prompt variable
|
||||
case "${PS1}:${PS2}:${PS3}:${PS4}:${RPS1}:${RPS2}:${RPS3}:${RPS4}" in
|
||||
case "${PS1}:${PS2}:${PS3}:${PS4}:${RPROMPT}:${RPS1}:${RPS2}:${RPS3}:${RPS4}" in
|
||||
*(\$\(git_prompt_info\)|\`git_prompt_info\`)*)
|
||||
_omz_register_handler _omz_git_prompt_info
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${PS1}:${PS2}:${PS3}:${PS4}:${RPROMPT}:${RPS1}:${RPS2}:${RPS3}:${RPS4}" in
|
||||
*(\$\(git_prompt_status\)|\`git_prompt_status\`)*)
|
||||
_omz_register_handler _omz_git_prompt_status
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
@ -65,6 +78,9 @@ if zstyle -t ':omz:alpha:lib:git' async-prompt; then
|
|||
precmd_functions=(_defer_async_git_register $precmd_functions)
|
||||
else
|
||||
function git_prompt_info() {
|
||||
_omz_git_prompt_info
|
||||
}
|
||||
function git_prompt_status() {
|
||||
_omz_git_prompt_status
|
||||
}
|
||||
fi
|
||||
|
|
@ -197,7 +213,7 @@ function git_prompt_long_sha() {
|
|||
SHA=$(__git_prompt_git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
|
||||
}
|
||||
|
||||
function git_prompt_status() {
|
||||
function _omz_git_prompt_status() {
|
||||
[[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
|
||||
|
||||
# Maps a git status prefix to an internal constant
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue