mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-02-13 12:50:58 +01:00
Compare commits
5 Commits
1ed17ac052
...
095ac3ca8f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
095ac3ca8f | ||
|
|
ecdc1e722a | ||
|
|
526969cad3 | ||
|
|
13c702964c | ||
|
|
d39804a5a6 |
23
lib/cli.zsh
23
lib/cli.zsh
@@ -72,6 +72,10 @@ function _omz {
|
||||
local -aU plugins
|
||||
plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t))
|
||||
_describe 'plugin' plugins ;;
|
||||
plugin::list)
|
||||
local -a opts
|
||||
opts=('--enabled:List enabled plugins only')
|
||||
_describe -o 'options' opts ;;
|
||||
theme::(set|use))
|
||||
local -aU themes
|
||||
themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
||||
@@ -206,7 +210,7 @@ Available commands:
|
||||
disable <plugin> Disable plugin(s)
|
||||
enable <plugin> Enable plugin(s)
|
||||
info <plugin> Get information of a plugin
|
||||
list List all available Oh My Zsh plugins
|
||||
list [--enabled] List Oh My Zsh plugins
|
||||
load <plugin> Load plugin(s)
|
||||
|
||||
EOF
|
||||
@@ -449,8 +453,21 @@ function _omz::plugin::info {
|
||||
|
||||
function _omz::plugin::list {
|
||||
local -a custom_plugins builtin_plugins
|
||||
custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t))
|
||||
builtin_plugins=("$ZSH"/plugins/*(-/N:t))
|
||||
|
||||
# If --enabled is provided, only list what's enabled
|
||||
if [[ "$1" == "--enabled" ]]; then
|
||||
local plugin
|
||||
for plugin in "${plugins[@]}"; do
|
||||
if [[ -d "${ZSH_CUSTOM}/plugins/${plugin}" ]]; then
|
||||
custom_plugins+=("${plugin}")
|
||||
elif [[ -d "${ZSH}/plugins/${plugin}" ]]; then
|
||||
builtin_plugins+=("${plugin}")
|
||||
fi
|
||||
done
|
||||
else
|
||||
custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t))
|
||||
builtin_plugins=("$ZSH"/plugins/*(-/N:t))
|
||||
fi
|
||||
|
||||
# If the command is being piped, print all found line by line
|
||||
if [[ ! -t 1 ]]; then
|
||||
|
||||
198
lib/git.zsh
198
lib/git.zsh
@@ -39,6 +39,105 @@ function _omz_git_prompt_info() {
|
||||
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
||||
}
|
||||
|
||||
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
|
||||
# This cannot use the prompt constants, as they may be empty
|
||||
local -A prefix_constant_map
|
||||
prefix_constant_map=(
|
||||
'\?\? ' 'UNTRACKED'
|
||||
'A ' 'ADDED'
|
||||
'M ' 'MODIFIED'
|
||||
'MM ' 'MODIFIED'
|
||||
' M ' 'MODIFIED'
|
||||
'AM ' 'MODIFIED'
|
||||
' T ' 'MODIFIED'
|
||||
'R ' 'RENAMED'
|
||||
' D ' 'DELETED'
|
||||
'D ' 'DELETED'
|
||||
'UU ' 'UNMERGED'
|
||||
'ahead' 'AHEAD'
|
||||
'behind' 'BEHIND'
|
||||
'diverged' 'DIVERGED'
|
||||
'stashed' 'STASHED'
|
||||
)
|
||||
|
||||
# Maps the internal constant to the prompt theme
|
||||
local -A constant_prompt_map
|
||||
constant_prompt_map=(
|
||||
'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED"
|
||||
'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED"
|
||||
'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED"
|
||||
'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED"
|
||||
'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED"
|
||||
'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED"
|
||||
'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD"
|
||||
'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND"
|
||||
'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED"
|
||||
'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED"
|
||||
)
|
||||
|
||||
# The order that the prompt displays should be added to the prompt
|
||||
local status_constants
|
||||
status_constants=(
|
||||
UNTRACKED ADDED MODIFIED RENAMED DELETED
|
||||
STASHED UNMERGED AHEAD BEHIND DIVERGED
|
||||
)
|
||||
|
||||
local status_text
|
||||
status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)"
|
||||
|
||||
# Don't continue on a catastrophic failure
|
||||
if [[ $? -eq 128 ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# A lookup table of each git status encountered
|
||||
local -A statuses_seen
|
||||
|
||||
if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then
|
||||
statuses_seen[STASHED]=1
|
||||
fi
|
||||
|
||||
local status_lines
|
||||
status_lines=("${(@f)${status_text}}")
|
||||
|
||||
# If the tracking line exists, get and parse it
|
||||
if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then
|
||||
local branch_statuses
|
||||
branch_statuses=("${(@s/,/)match}")
|
||||
for branch_status in $branch_statuses; do
|
||||
if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then
|
||||
continue
|
||||
fi
|
||||
local last_parsed_status=$prefix_constant_map[$match[1]]
|
||||
statuses_seen[$last_parsed_status]=$match[2]
|
||||
done
|
||||
fi
|
||||
|
||||
# For each status prefix, do a regex comparison
|
||||
for status_prefix in ${(k)prefix_constant_map}; do
|
||||
local status_constant="${prefix_constant_map[$status_prefix]}"
|
||||
local status_regex=$'(^|\n)'"$status_prefix"
|
||||
|
||||
if [[ "$status_text" =~ $status_regex ]]; then
|
||||
statuses_seen[$status_constant]=1
|
||||
fi
|
||||
done
|
||||
|
||||
# Display the seen statuses in the order specified
|
||||
local status_prompt
|
||||
for status_constant in $status_constants; do
|
||||
if (( ${+statuses_seen[$status_constant]} )); then
|
||||
local next_display=$constant_prompt_map[$status_constant]
|
||||
status_prompt="$next_display$status_prompt"
|
||||
fi
|
||||
done
|
||||
|
||||
echo $status_prompt
|
||||
}
|
||||
|
||||
# Use async version if setting is enabled, or unset but zsh version is at least 5.0.6.
|
||||
# This avoids async prompt issues caused by previous zsh versions:
|
||||
# - https://github.com/ohmyzsh/ohmyzsh/issues/12331
|
||||
@@ -246,105 +345,6 @@ 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 _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
|
||||
# This cannot use the prompt constants, as they may be empty
|
||||
local -A prefix_constant_map
|
||||
prefix_constant_map=(
|
||||
'\?\? ' 'UNTRACKED'
|
||||
'A ' 'ADDED'
|
||||
'M ' 'MODIFIED'
|
||||
'MM ' 'MODIFIED'
|
||||
' M ' 'MODIFIED'
|
||||
'AM ' 'MODIFIED'
|
||||
' T ' 'MODIFIED'
|
||||
'R ' 'RENAMED'
|
||||
' D ' 'DELETED'
|
||||
'D ' 'DELETED'
|
||||
'UU ' 'UNMERGED'
|
||||
'ahead' 'AHEAD'
|
||||
'behind' 'BEHIND'
|
||||
'diverged' 'DIVERGED'
|
||||
'stashed' 'STASHED'
|
||||
)
|
||||
|
||||
# Maps the internal constant to the prompt theme
|
||||
local -A constant_prompt_map
|
||||
constant_prompt_map=(
|
||||
'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED"
|
||||
'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED"
|
||||
'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED"
|
||||
'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED"
|
||||
'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED"
|
||||
'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED"
|
||||
'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD"
|
||||
'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND"
|
||||
'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED"
|
||||
'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED"
|
||||
)
|
||||
|
||||
# The order that the prompt displays should be added to the prompt
|
||||
local status_constants
|
||||
status_constants=(
|
||||
UNTRACKED ADDED MODIFIED RENAMED DELETED
|
||||
STASHED UNMERGED AHEAD BEHIND DIVERGED
|
||||
)
|
||||
|
||||
local status_text
|
||||
status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)"
|
||||
|
||||
# Don't continue on a catastrophic failure
|
||||
if [[ $? -eq 128 ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# A lookup table of each git status encountered
|
||||
local -A statuses_seen
|
||||
|
||||
if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then
|
||||
statuses_seen[STASHED]=1
|
||||
fi
|
||||
|
||||
local status_lines
|
||||
status_lines=("${(@f)${status_text}}")
|
||||
|
||||
# If the tracking line exists, get and parse it
|
||||
if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then
|
||||
local branch_statuses
|
||||
branch_statuses=("${(@s/,/)match}")
|
||||
for branch_status in $branch_statuses; do
|
||||
if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then
|
||||
continue
|
||||
fi
|
||||
local last_parsed_status=$prefix_constant_map[$match[1]]
|
||||
statuses_seen[$last_parsed_status]=$match[2]
|
||||
done
|
||||
fi
|
||||
|
||||
# For each status prefix, do a regex comparison
|
||||
for status_prefix in ${(k)prefix_constant_map}; do
|
||||
local status_constant="${prefix_constant_map[$status_prefix]}"
|
||||
local status_regex=$'(^|\n)'"$status_prefix"
|
||||
|
||||
if [[ "$status_text" =~ $status_regex ]]; then
|
||||
statuses_seen[$status_constant]=1
|
||||
fi
|
||||
done
|
||||
|
||||
# Display the seen statuses in the order specified
|
||||
local status_prompt
|
||||
for status_constant in $status_constants; do
|
||||
if (( ${+statuses_seen[$status_constant]} )); then
|
||||
local next_display=$constant_prompt_map[$status_constant]
|
||||
status_prompt="$next_display$status_prompt"
|
||||
fi
|
||||
done
|
||||
|
||||
echo $status_prompt
|
||||
}
|
||||
|
||||
# Outputs the name of the current user
|
||||
# Usage example: $(git_current_user_name)
|
||||
function git_current_user_name() {
|
||||
|
||||
@@ -33,6 +33,8 @@ if it's found, or the mvn command otherwise.
|
||||
| `mvnct` | `mvn clean test` |
|
||||
| `mvncv` | `mvn clean verify` |
|
||||
| `mvncvst` | `mvn clean verify -DskipTests` |
|
||||
| `mvnv` | `mvn verify` |
|
||||
| `mvnvst` | `mvn verify -DskipTests` |
|
||||
| `mvndp` | `mvn deploy` |
|
||||
| `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` |
|
||||
| `mvndt` | `mvn dependency:tree` |
|
||||
|
||||
@@ -62,6 +62,8 @@ alias mvncp='mvn clean package'
|
||||
alias mvnct='mvn clean test'
|
||||
alias mvncv='mvn clean verify'
|
||||
alias mvncvst='mvn clean verify -DskipTests'
|
||||
alias mvnv='mvn verify'
|
||||
alias mvnvst='mvn verify -DskipTests'
|
||||
alias mvndp='mvn deploy'
|
||||
alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
|
||||
alias mvndt='mvn dependency:tree'
|
||||
|
||||
@@ -1,16 +1,26 @@
|
||||
# rsync
|
||||
|
||||
This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands.
|
||||
This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands, simplifying file transfer and synchronization tasks.
|
||||
|
||||
To use it add `rsync` to the plugins array in you zshrc file.
|
||||
To use it add `rsync` to the plugins array in you `.zshrc` file.
|
||||
|
||||
```zsh
|
||||
plugins=(... rsync)
|
||||
```
|
||||
|
||||
| Alias | Command |
|
||||
| ------------------- | ------------------------------------------------ |
|
||||
| *rsync-copy* | `rsync -avz --progress -h` |
|
||||
| *rsync-move* | `rsync -avz --progress -h --remove-source-files` |
|
||||
| *rsync-update* | `rsync -avzu --progress -h` |
|
||||
| *rsync-synchronize* | `rsync -avzu --delete --progress -h` |
|
||||
| Alias | Command | Description |
|
||||
| ------------------- | ------------------------------------------------ | ------------|
|
||||
| `rsync-copy` | `rsync -avz --progress -h` | Recursively copy files and directories, preserving permissions, timestamps, and symbolic links. Compression is enabled for faster transfers. Progress is displayed in a human-readable format. |
|
||||
| `rsync-move` | `rsync -avz --progress -h --remove-source-files` | Same as rsync-copy, but removes the source files after a successful transfer (effectively performing a move). |
|
||||
| `rsync-update` | `rsync -avzu --progress -h` | Like rsync-copy, but only updates files if the source is newer than the destination (or if the destination file is missing). |
|
||||
| `rsync-synchronize` | `rsync -avzu --delete --progress -h` | Performs bidirectional-style sync: updates files as in rsync-update and deletes files in the destination that no longer exist in the source. Useful for directory synchronization. |
|
||||
|
||||
Explanation of Flags:
|
||||
- -a: Archive mode; preserves symbolic links, permissions, timestamps, etc.
|
||||
- -v: Verbose; shows details of the transfer process.
|
||||
- -z: Compress file data during transfer for efficiency.
|
||||
- -u: Skip files that are newer on the receiver.
|
||||
- --progress: Show progress during file transfer.
|
||||
- -h: Output numbers in human-readable format (e.g., 1K, 234M).
|
||||
- --remove-source-files: Deletes source files after they are copied (used in rsync-move).
|
||||
- --delete: Deletes files in the destination that are not present in the source (used in rsync-synchronize).
|
||||
|
||||
@@ -1,46 +1,76 @@
|
||||
# universalarchive plugin
|
||||
|
||||
Lets you compress files by a command `ua <format> <files>`, supporting various
|
||||
compression formats (e.g. 7z, tar.gz, lzma, ...).
|
||||
The `universalarchive` plugin provides a convenient command-line interface for archiving files and directories using a wide variety of compression formats - without having to remember the exact syntax for each tool.
|
||||
|
||||
To enable it, add `universalarchive` to the plugins array in your zshrc file:
|
||||
To enable it, add `universalarchive` to the plugins array in your `.zshrc` file:
|
||||
|
||||
```zsh
|
||||
plugins=(... universalarchive)
|
||||
```
|
||||
|
||||
## Features
|
||||
- Compress files and directories using a simple, unified command: ua <format> <files>
|
||||
- Automatically detects file/directory names to generate appropriate output names
|
||||
- Supports fallback naming if an output file already exists
|
||||
- Works with many common and advanced compression formats
|
||||
- Designed for simplicity and quick use in the terminal
|
||||
|
||||
## Usage
|
||||
|
||||
Run `ua <format> <files>` to compress `<files>` into an archive file using `<format>`.
|
||||
For example:
|
||||
|
||||
Basic command format:
|
||||
```sh
|
||||
ua xz *.html
|
||||
ua <format> <files...>
|
||||
```
|
||||
- `<format>`: the archive format to use (e.g., `zip`, `tar.gz`, `xz`, `7z`, etc.)
|
||||
- `<files...>`: one or more files or directories to compress
|
||||
|
||||
## Examples:
|
||||
|
||||
Compresses `notes.txt` and `images` into `notes.zip`
|
||||
```sh
|
||||
ua zip notes.txt images/
|
||||
```
|
||||
|
||||
this command will compress all `.html` files in directory `folder` into `folder.xz`.
|
||||
Creates `myproject.tar.gz`
|
||||
```sh
|
||||
ua tar.gz myproject/
|
||||
```
|
||||
|
||||
This plugin saves you from having to remember which command line arguments compress a file.
|
||||
Compresses all .log files into `current_folder.xz`
|
||||
```sh
|
||||
ua xz *.log
|
||||
```
|
||||
|
||||
## Supported compression formats
|
||||
The plugin will generate a default archive filename based on the input:
|
||||
- For a file, the output is derived from the file name without its extension.
|
||||
- For a directory, it uses the directory name.
|
||||
- For multiple files, it uses the name of the common parent directory.
|
||||
|
||||
| Extension | Description |
|
||||
|:-----------------|:-------------------------------|
|
||||
| `7z` | 7zip file |
|
||||
| `bz2` | Bzip2 file |
|
||||
| `gz` | Gzip file |
|
||||
| `lzma` | LZMA archive |
|
||||
| `lzo` | LZO archive |
|
||||
| `rar` | WinRAR archive |
|
||||
| `tar` | Tarball |
|
||||
| `tbz`/`tar.bz2` | Tarball with bzip2 compression |
|
||||
| `tgz`/`tar.gz` | Tarball with gzip compression |
|
||||
| `tlz`/`tar.lzma` | Tarball with lzma compression |
|
||||
| `txz`/`tar.xz` | Tarball with lzma2 compression |
|
||||
| `tZ`/`tar.Z` | Tarball with LZW compression |
|
||||
| `xz` | LZMA2 archive |
|
||||
| `Z` | Z archive (LZW) |
|
||||
| `zip` | Zip archive |
|
||||
| `zst` | Zstd archive |
|
||||
If the output file already exists, a unique filename is generated using `mktemp`.
|
||||
|
||||
See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information regarding the archive formats.
|
||||
## Supported Archive Formats
|
||||
|
||||
| Format | Description | Tool Used |
|
||||
|:-----------------|:-------------------------------|:-----------------|
|
||||
| `7z` | 7zip archive | `7z` |
|
||||
| `bz2` | Bzip2-compressed file | `bzip2` |
|
||||
| `gz` | Gzip-compressed file | `gzip` |
|
||||
| `lzma` | LZMA-compressed file | `lzma` |
|
||||
| `lzo` | LZO-compressed file | `lzop` |
|
||||
| `rar` | WinRAR archive | `rar` |
|
||||
| `tar` | Uncompressed tarball | `tar` |
|
||||
| `tbz`,`tar.bz2` | Tarball compressed with Bzip2 | `tar + bzip2` |
|
||||
| `tgz`,`tar.gz` | Tarball compressed with Gzip | `tar + gzip` |
|
||||
| `tlz`,`tar.lzma` | Tarball compressed with LZMA | `tar + lzma` |
|
||||
| `txz`,`tar.xz` | Tarball compressed with LZMA2 | `tar + xz` |
|
||||
| `tZ`,`tar.Z` | Tarball compressed with LZW | `tar + compress` |
|
||||
| `xz` | XZ-compressed file | `xz` |
|
||||
| `Z` | LZW-compressed file | `compress` |
|
||||
| `zip` | Standard Zip archive | `zip` |
|
||||
| `zst` | Zstandard-compressed file | `zstd` |
|
||||
|
||||
> Note: Some formats may require specific tools to be installed on your system (e.g. `7z`, `rar`, `lzop`, `zstd`). Make sure these tools are available in your `$PATH`.
|
||||
|
||||
## Auto-Completion
|
||||
|
||||
The plugin provides tab-completion for supported formats and input files. Type `ua <TAB>` to see available formats, and `ua <format> <TAB>` to browse files.
|
||||
|
||||
Reference in New Issue
Block a user