1
0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2026-02-12 05:49:47 +08:00

Compare commits

...

8 Commits

Author SHA1 Message Date
Marc Cornellà
8428442ff0
fix(termsupport): add workaround for directory tracking issues in Konsole
Fixes #11683
Related: 50c6786
2023-10-19 23:24:55 +02:00
Marc Cornellà
ff6dac56a2
fix(git): fix smart cd to cloned directory in gccd function 2023-10-19 23:04:08 +02:00
Marc Cornellà
f79647dba5
fix(git): fix check in gbds function 2023-10-19 22:05:03 +02:00
Zeeshan
207d29b716
fix(git)!: standardize git pull --rebase aliases (#11224)
BREAKING CHANGE: The alias `gup` for `git pull --rebase` and its derivatives
are replaced by `gpr` for standardization. This means the previous aliases will
no longer be available after a few months. Meanwhile, the original aliases are
still working, with a deprecation notice.
See https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/git/README.md#deprecated-aliases
for the full list of deprecated aliases.

Fixes #11104
Closes #11224

Co-authored-by: Marc Cornellà <marc@mcornella.com>
2023-10-19 22:00:04 +02:00
Marc Cornellà
9f84ba0854
feat(command-not-found): add support for Homebrew on Linux
Fixes #11151
2023-10-19 20:47:26 +02:00
Marc Cornellà
d082d87580
refactor(lando): add LANDO_ZSH_WRAPPED_COMMANDS setting and refactor 2023-10-19 20:38:45 +02:00
Ryan Tvenge
a8dee63ffe
feat(lando): bypass lando if command is not available in container (#11993)
Closes #11993
2023-10-19 20:38:37 +02:00
Peat Bakke
104041a018
feat(tmux): add tds alias for directory sessions (#11987) 2023-10-19 11:49:38 +02:00
8 changed files with 313 additions and 241 deletions

View File

@ -151,7 +151,7 @@ function omz_termsupport_cwd {
URL_PATH="$(omz_urlencode -P $PWD)" || return 1 URL_PATH="$(omz_urlencode -P $PWD)" || return 1
# Konsole errors if the HOST is provided # Konsole errors if the HOST is provided
[[ -z "$KONSOLE_VERSION" ]] || URL_HOST="" [[ -z "$KONSOLE_PROFILE_NAME" && -z "$KONSOLE_DBUS_SESSION" ]] || URL_HOST=""
# common control sequence (OSC 7) to set current host and path # common control sequence (OSC 7) to set current host and path
printf "\e]7;file://%s%s\e\\" "${URL_HOST}" "${URL_PATH}" printf "\e]7;file://%s%s\e\\" "${URL_HOST}" "${URL_PATH}"

View File

@ -3,9 +3,10 @@
for file ( for file (
# Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
/usr/share/doc/pkgfile/command-not-found.zsh /usr/share/doc/pkgfile/command-not-found.zsh
# macOS (M1 and classic Homebrew): https://github.com/Homebrew/homebrew-command-not-found # Homebrew: https://github.com/Homebrew/homebrew-command-not-found
/opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh /opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh /usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
); do ); do
if [[ -r "$file" ]]; then if [[ -r "$file" ]]; then
source "$file" source "$file"

View File

@ -11,7 +11,7 @@ plugins=(... git)
## Aliases ## Aliases
| Alias | Command | | Alias | Command |
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | :--------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
| `grt` | `cd "$(git rev-parse --show-toplevel \|\| echo .)"` | | `grt` | `cd "$(git rev-parse --show-toplevel \|\| echo .)"` |
| `ggpnp` | `ggl && ggp` | | `ggpnp` | `ggl && ggp` |
| `ggpur` | `ggu` | | `ggpur` | `ggu` |
@ -116,13 +116,11 @@ plugins=(... git)
| `gmtlvim` | `git mergetool --no-prompt --tool=vimdiff` | | `gmtlvim` | `git mergetool --no-prompt --tool=vimdiff` |
| `gl` | `git pull` | | `gl` | `git pull` |
| `gpr` | `git pull --rebase` | | `gpr` | `git pull --rebase` |
| `gup` | `git pull --rebase` | | `gprv` | `git pull --rebase -v` |
| `gupa` | `git pull --rebase --autostash` | | `gpra` | `git pull --rebase --autostash` |
| `gupav` | `git pull --rebase --autostash --verbose` | | `gprav` | `git pull --rebase --autostash -v` |
| `gupv` | `git pull --rebase --verbose` | | `gprom` | `git pull --rebase origin $(git_main_branch)` |
| `ggu` | `git pull --rebase origin $(current_branch)` | | `gpromi` | `git pull --rebase=interactive origin $(git_main_branch)` |
| `gupom` | `git pull --rebase origin $(git_main_branch)` |
| `gupomi` | `git pull --rebase=interactive origin $(git_main_branch)` |
| `ggpull` | `git pull origin "$(git_current_branch)"` | | `ggpull` | `git pull origin "$(git_current_branch)"` |
| `ggl` | `git pull origin $(current_branch)` | | `ggl` | `git pull origin $(current_branch)` |
| `gluc` | `git pull upstream $(git_current_branch)` | | `gluc` | `git pull upstream $(git_current_branch)` |
@ -225,7 +223,7 @@ These are aliases that have been removed, renamed, or otherwise modified in a wa
receive further support. receive further support.
| Alias | Command | Modification | | Alias | Command | Modification |
| :------- | :----------------------------------------------------- | :-------------------------------------------------------- | | :------- | :-------------------------------------------------------- | :-------------------------------------------------------- |
| `gap` | `git add --patch` | New alias: `gapa`. | | `gap` | `git add --patch` | New alias: `gapa`. |
| `gcl` | `git config --list` | New alias: `gcf`. | | `gcl` | `git config --list` | New alias: `gcf`. |
| `gdc` | `git diff --cached` | New alias: `gdca`. | | `gdc` | `git diff --cached` | New alias: `gdca`. |
@ -237,6 +235,12 @@ receive further support.
| `glg` | `git log --stat --max-count=10` | Now aliased to `git log --stat --color`. | | `glg` | `git log --stat --max-count=10` | Now aliased to `git log --stat --color`. |
| `glgg` | `git log --graph --max-count=10` | Now aliased to `git log --graph --color`. | | `glgg` | `git log --graph --max-count=10` | Now aliased to `git log --graph --color`. |
| `gwc` | `git whatchanged -p --abbrev-commit --pretty = medium` | New alias: `gwch`. | | `gwc` | `git whatchanged -p --abbrev-commit --pretty = medium` | New alias: `gwch`. |
| `gup` | `git pull --rebase` | now alias `gpr` |
| `gupv` | `git pull --rebase -v` | now alias `gprv` |
| `gupa` | `git pull --rebase --autostash` | now alias `gpra` |
| `gupav` | `git pull --rebase --autostash -v` | now alias `gprav` |
| `gupom` | `git pull --rebase origin $(git_main_branch)` | now alias `gprom` |
| `gupomi` | `git pull --rebase=interactive origin $(git_main_branch)` | now alias `gpromi` |
## Functions ## Functions

View File

@ -141,7 +141,7 @@ function gbds() {
git for-each-ref refs/heads/ "--format=%(refname:short)" | \ git for-each-ref refs/heads/ "--format=%(refname:short)" | \
while read branch; do while read branch; do
local merge_base=$(git merge-base $default_branch $branch) local merge_base=$(git merge-base $default_branch $branch)
if [[ '-*' == $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch\^{tree}) -p $merge_base -m _)) ]]; then if [[ $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch\^{tree}) -p $merge_base -m _)) = -* ]]; then
git branch -D $branch git branch -D $branch
fi fi
done done
@ -166,8 +166,15 @@ alias gclean='git clean --interactive -d'
alias gcl='git clone --recurse-submodules' alias gcl='git clone --recurse-submodules'
function gccd() { function gccd() {
command git clone --recurse-submodules "$@" # get repo URI from args based on valid formats: https://git-scm.com/docs/git-clone#URLS
[[ -d "$_" ]] && cd "$_" || cd "${${_:t}%.git}" local repo="${${@[(r)(ssh://*|git://*|ftp(s)#://*|http(s)#://*|*@*)(.git/#)#]}:-$_}"
# clone repository and exit if it fails
command git clone --recurse-submodules "$@" || return
# if last arg passed was a directory, that's where the repo was cloned
# otherwise parse the repo URI and use the last part as the directory
[[ -d "$_" ]] && cd "$_" || cd "${${repo:t}%.git/#}"
} }
compdef _git gccd=git-clone compdef _git gccd=git-clone
@ -246,12 +253,12 @@ alias gmom='git merge origin/$(git_main_branch)'
alias gmum='git merge upstream/$(git_main_branch)' alias gmum='git merge upstream/$(git_main_branch)'
alias gmtl='git mergetool --no-prompt' alias gmtl='git mergetool --no-prompt'
alias gmtlvim='git mergetool --no-prompt --tool=vimdiff' alias gmtlvim='git mergetool --no-prompt --tool=vimdiff'
alias gl='git pull' alias gl='git pull'
alias gpr='git pull --rebase' alias gpr='git pull --rebase'
alias gup='git pull --rebase' alias gprv='git pull --rebase -v'
alias gupa='git pull --rebase --autostash' alias gpra='git pull --rebase --autostash'
alias gupav='git pull --rebase --autostash --verbose' alias gprav='git pull --rebase --autostash -v'
alias gupv='git pull --rebase --verbose'
function ggu() { function ggu() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)" [[ "$#" != 1 ]] && local b="$(git_current_branch)"
@ -259,8 +266,8 @@ function ggu() {
} }
compdef _git ggu=git-checkout compdef _git ggu=git-checkout
alias gupom='git pull --rebase origin $(git_main_branch)' alias gprom='git pull --rebase origin $(git_main_branch)'
alias gupomi='git pull --rebase=interactive origin $(git_main_branch)' alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
alias ggpull='git pull origin "$(git_current_branch)"' alias ggpull='git pull origin "$(git_current_branch)"'
function ggl() { function ggl() {
@ -388,3 +395,20 @@ alias gk='\gitk --all --branches &!'
alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!' alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
unset git_version unset git_version
# Logic for adding warnings on deprecated aliases
local old_alias new_alias
for old_alias new_alias (
# TODO(2023-10-19): remove deprecated `git pull --rebase` aliases
gup gpr
gupv gprv
gupa gpra
gupav gprav
gupom gprom
gupomi gpromi
); do
aliases[$old_alias]="
print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_alias}%F{yellow}' is a deprecated alias, using '%F{green}${new_alias}%F{yellow}' instead.%f\"
$new_alias"
done
unset old_alias new_alias

View File

@ -8,7 +8,7 @@ To use it, add `lando` to the plugins array in your zshrc file:
plugins=(... lando) plugins=(... lando)
``` ```
## ALIASES: ## Wrapped Commands
| Alias | Description | | Alias | Description |
|:----------:|:----------------:| |:----------:|:----------------:|
@ -21,16 +21,34 @@ plugins=(... lando)
| `wp` | `lando wp` | | `wp` | `lando wp` |
| `yarn` | `lando yarn` | | `yarn` | `lando yarn` |
More or different commands can be wrapped by setting the `LANDO_ZSH_WRAPPED_COMMANDS` setting, see [Settings](#settings) below.
## How It Works: ## How It Works:
This plugin removes the requirement to type `lando` before a command. It utilizes the lando version of supported commands run within directories with the following criteria: This plugin removes the requirement to type `lando` before a command. It utilizes the lando version of supported commands run within directories with the following criteria:
- The `.lando.yml` file is found in the current directory or any parent directory within `$LANDO_ZSH_SITES_DIRECTORY`. - The `.lando.yml` file is found in the current directory or any parent directory within `$LANDO_ZSH_SITES_DIRECTORY`.
- The current directory is within `$LANDO_ZSH_SITES_DIRECTORY` but is not `$LANDO_ZSH_SITES_DIRECTORY` itself. - The current directory is within `$LANDO_ZSH_SITES_DIRECTORY` but is not `$LANDO_ZSH_SITES_DIRECTORY` itself.
- If the command is not a part of the commands available in the lando environment, it will run the command without `lando`.
## Settings: ## Settings:
- `LANDO_ZSH_SITES_DIRECTORY`: The plugin will stop searching through parents for `CONFIG_FILE` once it hits this directory. > NOTE: these settings must be set *before* the plugin is loaded, and any changes require a restart of the shell to be applied.
- `LANDO_ZSH_CONFIG_FILE`: The plugin will check to see if this provided file exists to check for presence of Lando.
- `LANDO_ZSH_SITES_DIRECTORY`: The plugin will stop searching through parents for `CONFIG_FILE` once it hits this directory:
```sh
LANDO_ZSH_SITES_DIRECTORY="$HOME/Code"
```
- `LANDO_ZSH_CONFIG_FILE`: The plugin will check to see if this provided file exists to check for presence of Lando:
```sh
LANDO_ZSH_CONFIG_FILE=".lando.dev.yml"
```
- `LANDO_ZSH_WRAPPED_COMMANDS`: The list of commands to wrap, as a string of commands separated by whitespace:
```sh
LANDO_ZSH_WRAPPED_COMMANDS="mysql php composer test artisan"
```
## Author: ## Author:

View File

@ -1,25 +1,36 @@
# Settings # Settings
: ${LANDO_ZSH_SITES_DIRECTORY:="$HOME/Sites"} : ${LANDO_ZSH_SITES_DIRECTORY:="$HOME/Sites"}
: ${LANDO_ZSH_CONFIG_FILE:=.lando.yml} : ${LANDO_ZSH_CONFIG_FILE:=.lando.yml}
: ${LANDO_ZSH_WRAPPED_COMMANDS:="
artisan
composer
drush
gulp
npm
php
wp
yarn
"}
# Enable multiple commands with lando. # Enable multiple commands with lando.
function artisan \ function ${=LANDO_ZSH_WRAPPED_COMMANDS} {
composer \ # If the lando task is available in `lando --help`, then it means:
drush \ #
gulp \ # 1. `lando` is in a project with a `.lando.yml` file.
npm \ # 2. The lando task is available for lando, based on the .lando.yml config file.
php \ #
wp \ # This has a penalty of about 250ms, so we still want to check if the lando file
yarn { # exists before, which is the fast path. If it exists, checking help output is
if checkForLandoFile; then # still faster than running the command and failing.
lando "$0" "$@" if _lando_file_exists && lando --help 2>&1 | command grep -Eq "^ +lando $0 "; then
command lando "$0" "$@"
else else
command "$0" "$@" command "$0" "$@"
fi fi
} }
# Check for the file in the current and parent directories. # Check for the file in the current and parent directories.
checkForLandoFile() { _lando_file_exists() {
# Only bother checking for lando within the Sites directory. # Only bother checking for lando within the Sites directory.
if [[ "$PWD/" != "$LANDO_ZSH_SITES_DIRECTORY"/* ]]; then if [[ "$PWD/" != "$LANDO_ZSH_SITES_DIRECTORY"/* ]]; then
# Not within $LANDO_ZSH_SITES_DIRECTORY # Not within $LANDO_ZSH_SITES_DIRECTORY

View File

@ -25,6 +25,7 @@ The plugin also supports the following:
| `tkss` | tmux kill-session -t | Terminate named running tmux session | | `tkss` | tmux kill-session -t | Terminate named running tmux session |
| `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session | | `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session |
| `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor | | `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor |
| `tds` | `_tmux_directory_session` | Creates or attaches to a session for the current path |
## Configuration Variables ## Configuration Variables

View File

@ -108,6 +108,19 @@ compdef _tmux _zsh_tmux_plugin_run
# Alias tmux to our wrapper function. # Alias tmux to our wrapper function.
alias tmux=_zsh_tmux_plugin_run alias tmux=_zsh_tmux_plugin_run
function _tmux_directory_session() {
# current directory without leading path
local dir=${PWD##*/}
# md5 hash for the full working directory path
local md5=$(printf '%s' "$PWD" | md5sum | cut -d ' ' -f 1)
# human friendly unique session name for this directory
local session_name="${dir}-${md5:0:6}"
# create or attach to the session
tmux new -As "$session_name"
}
alias tds=_tmux_directory_session
# Autostart if not already in tmux and enabled. # Autostart if not already in tmux and enabled.
if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" ]]; then if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" ]]; then
# Actually don't autostart if we already did and multiple autostarts are disabled. # Actually don't autostart if we already did and multiple autostarts are disabled.