1
0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2025-12-12 15:34:50 +08:00

Compare commits

...

4 Commits

Author SHA1 Message Date
rdpate
ff9d1dad2b
Merge 2115c86ae0 into f84341c574 2025-12-11 19:47:19 +01:00
tDwtp
f84341c574
fix(git): git_status_prompt should respect spaces in prefixes (#13478) 2025-12-11 15:05:23 +01:00
Tanzim Hossain Romel
92aed2e936
feat(extract): add unar as fallback for RAR extraction (#13472)
Add unar as a fallback when unrar is not available for extracting
RAR files. This addresses the issue where unrar has been removed
from Homebrew due to licensing issues.

The extraction now:
- Prefers unrar if available (backward compatible)
- Falls back to unar if unrar is not found
- Shows helpful error message if neither tool is installed
2025-12-09 20:14:31 +01:00
Roger Pate
2115c86ae0 fix(mercurial): use "hg identify --template", avoid "hg status" when possible
Use "hg identify" with a template parameter to generate revision identifiers (branch, bookmarks, tags) because this is faster, more complete, and more customizable.

When DISABLE_UNTRACKED_FILES_DIRTY=true, avoid "hg status" entirely; otherwise, stop once the first untracked file is found.  This should be much faster on really large repositories.
2024-11-25 03:21:47 -05:00
4 changed files with 48 additions and 42 deletions

View File

@ -117,7 +117,7 @@ function _omz_git_prompt_status() {
fi
# For each status prefix, do a regex comparison
for status_prefix in ${(k)prefix_constant_map}; do
for status_prefix in "${(@k)prefix_constant_map}"; do
local status_constant="${prefix_constant_map[$status_prefix]}"
local status_regex=$'(^|\n)'"$status_prefix"

View File

@ -77,7 +77,15 @@ EOF
(*.lzma) unlzma "$full_path" ;;
(*.z) uncompress "$full_path" ;;
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;;
(*.rar) unrar x -ad "$full_path" ;;
(*.rar)
if (( $+commands[unrar] )); then
unrar x -ad "$full_path"
elif (( $+commands[unar] )); then
unar -o . "$full_path"
else
echo "extract: cannot extract RAR files: install unrar or unar" >&2
success=1
fi ;;
(*.rpm)
rpm2cpio "$full_path" | cpio --quiet -id ;;
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;

View File

@ -49,13 +49,25 @@ plugins=(... mercurial)
PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)$(hg_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
```
You can also redefine additional vars used in the plugin (after Oh My Zsh is sourced):
You can define the below variables to customize the prompt, after Oh-My-Zsh is source. The prompt will be generated in this order:
1. PREFIX variable.
2. IDENTIFY variable, which is used with "hg identify --template":
* Branch name, if not "default".
* Bookmarks, if any. The active bookmark will have '*' appended.
* Tags, if any.
3. Either the DIRTY or CLEAN variables.
4. SUFFIX variable.
Spaces are only needed to separate non-empty parts, but no space will be inserted before DIRTY or CLEAN.
```zsh
ZSH_THEME_HG_PROMPT_PREFIX="%{$fg_bold[magenta]%}hg:(%{$fg[red]%}"
ZSH_THEME_HG_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_HG_PROMPT_DIRTY="%{$fg[magenta]%}) %{$fg[yellow]%}✗%{$reset_color%}"
ZSH_THEME_HG_PROMPT_PREFIX="%{$fg[magenta]%}hg:(%{$fg[red]%}"
ZSH_THEME_HG_PROMPT_IDENTIFY='{separate(" ",ifeq(branch,"default","",branch),"{activebookmark}*",tags)}'
# See "hg help templates"; the default is $ZSH_THEME_HG_PROMPT_IDENTIFY_DEFAULT.
ZSH_THEME_HG_PROMPT_DIRTY="%{$fg[magenta]%}) %{$fg_bold[yellow]%}✗"
ZSH_THEME_HG_PROMPT_CLEAN="%{$fg[magenta]%})"
ZSH_THEME_HG_PROMPT_SUFFIX="%{$reset_color%}"
```
### Display repo branch and directory status in prompt

View File

@ -73,46 +73,32 @@ function hg_get_bookmark_name() {
echo "$(<"$dir/.hg/bookmarks.current")"
}
ZSH_THEME_HG_PROMPT_IDENTIFY_DEFAULT='{separate(" ",ifeq(branch,"default","",branch),strip(bookmarks % "{bookmark}{ifeq(bookmark,activebookmark,"*")} "),tags)}'
function hg_prompt_info {
local dir branch dirty
if ! dir=$(hg_root); then
if ! hg_root >/dev/null; then
return
fi
if [[ ! -f "$dir/.hg/branch" ]]; then
branch=default
else
branch="$(<"$dir/.hg/branch")"
local pieces dirty
if ! pieces="$(hg identify -T'{if(dirty,"x","-")} '"${ZSH_THEME_HG_PROMPT_IDENTIFY:-$ZSH_THEME_HG_PROMPT_IDENTIFY_DEFAULT}")"; then
return
fi
dirty="${pieces%% *}"
pieces="${pieces#* }"
dirty="${dirty%-}"
# Check for untracked files unless that is disabled or the repo is already known to be dirty.
if [[ x"${DISABLE_UNTRACKED_FILES_DIRTY-}" != xtrue && -z "$dirty" ]]; then
dirty="$(hg status -u --template=x 2>/dev/null | head -c1; [[ 0 = ${pipestatus[1]} ]] || echo error)"
case "$dirty" in
error) return ;;
esac
fi
dirty="$(hg_dirty)"
echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch:gs/%/%%}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}"
}
function hg_dirty {
# Do nothing if clean / dirty settings aren't defined
if [[ -z "$ZSH_THEME_HG_PROMPT_DIRTY" && -z "$ZSH_THEME_HG_PROMPT_CLEAN" ]]; then
return
fi
# Check if there are modifications
local hg_status
if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" = true ]]; then
if ! hg_status="$(hg status -q 2>/dev/null)"; then
return
fi
else
if ! hg_status="$(hg status 2>/dev/null)"; then
return
fi
fi
# grep exits with 0 when dirty
if command grep -Eq '^\s*[ACDIMR!?L].*$' <<< "$hg_status"; then
echo $ZSH_THEME_HG_PROMPT_DIRTY
return
fi
echo $ZSH_THEME_HG_PROMPT_CLEAN
case "$dirty" in
?*) dirty="$ZSH_THEME_HG_PROMPT_DIRTY" ;;
'') dirty="$ZSH_THEME_HG_PROMPT_CLEAN" ;;
esac
echo "${ZSH_THEME_HG_PROMPT_PREFIX}${pieces:gs/%/%%}$dirty${ZSH_THEME_HG_PROMPT_SUFFIX}"
}