mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-26 21:51:05 +01:00
Merge branch 'ohmyzsh:master' into master
This commit is contained in:
commit
5b518bfea8
153 changed files with 3869 additions and 2184 deletions
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
|
@ -1,13 +1,14 @@
|
|||
# Plugin owners
|
||||
plugins/archlinux/ @ratijas
|
||||
plugins/dbt/ @msempere
|
||||
plugins/eza/ @pepoluan
|
||||
plugins/genpass/ @atoponce
|
||||
plugins/git-lfs/ @hellovietduc
|
||||
plugins/gitfast/ @felipec
|
||||
plugins/react-native @esthor
|
||||
plugins/sdk/ @rgoldberg
|
||||
plugins/shell-proxy/ @septs
|
||||
plugins/starship/ @axieax
|
||||
plugins/universalarchive/ @Konfekt
|
||||
plugins/wp-cli/ @joshmedeski
|
||||
plugins/zoxide/ @ajeetdsouza
|
||||
plugins/starship/ @axieax
|
||||
plugins/dbt/ @msempere
|
||||
|
|
12
.github/dependabot.yml
vendored
Normal file
12
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "sunday"
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/.github/workflows/dependencies"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "sunday"
|
38
.github/dependencies.yml
vendored
Normal file
38
.github/dependencies.yml
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
dependencies:
|
||||
plugins/gitfast:
|
||||
repo: felipec/git-completion
|
||||
branch: master
|
||||
version: tag:v2.1
|
||||
postcopy: |
|
||||
set -e
|
||||
rm -rf git-completion.plugin.zsh Makefile README.adoc t tools
|
||||
test -e git-completion.zsh && mv -f git-completion.zsh _git
|
||||
plugins/z:
|
||||
branch: master
|
||||
repo: agkozak/zsh-z
|
||||
version: afaf2965b41fdc6ca66066e09382726aa0b6aa04
|
||||
precopy: |
|
||||
set -e
|
||||
test -e README.md && mv -f README.md MANUAL.md
|
||||
postcopy: |
|
||||
set -e
|
||||
test -e _zshz && mv -f _zshz _z
|
||||
test -e zsh-z.plugin.zsh && mv -f zsh-z.plugin.zsh z.plugin.zsh
|
||||
plugins/history-substring-search:
|
||||
repo: zsh-users/zsh-history-substring-search
|
||||
branch: master
|
||||
version: 8dd05bfcc12b0cd1ee9ea64be725b3d9f713cf64
|
||||
precopy: |
|
||||
set -e
|
||||
rm -f zsh-history-substring-search.plugin.zsh
|
||||
test -e zsh-history-substring-search.zsh && mv zsh-history-substring-search.zsh history-substring-search.zsh
|
||||
postcopy: |
|
||||
set -e
|
||||
test -e dependencies/OMZ-README.md && cat dependencies/OMZ-README.md >> README.md
|
||||
plugins/gradle:
|
||||
repo: gradle/gradle-completion
|
||||
branch: master
|
||||
version: 25da917cf5a88f3e58f05be3868a7b2748c8afe6
|
||||
precopy: |
|
||||
set -e
|
||||
find . ! -name _gradle ! -name LICENSE -delete
|
29
.github/workflows/dependencies.yml
vendored
Normal file
29
.github/workflows/dependencies.yml
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
name: Update dependencies
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
# schedule:
|
||||
# - cron: '34 3 * * */8'
|
||||
|
||||
jobs:
|
||||
check:
|
||||
name: Check for updates
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Authenticate as @ohmyzsh
|
||||
id: generate_token
|
||||
uses: ohmyzsh/github-app-token@v2
|
||||
with:
|
||||
app_id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||
private_key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||
- name: Process dependencies
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||
GIT_APP_NAME: ohmyzsh[bot]
|
||||
GIT_APP_EMAIL: 54982679+ohmyzsh[bot]@users.noreply.github.com
|
||||
TMP_DIR: ${{ runner.temp }}
|
||||
run: |
|
||||
pip install -r .github/workflows/dependencies/requirements.txt
|
||||
python3 .github/workflows/dependencies/updater.py
|
2
.github/workflows/dependencies/requirements.txt
vendored
Normal file
2
.github/workflows/dependencies/requirements.txt
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
PyYAML~=6.0.1
|
||||
requests~=2.31.0
|
450
.github/workflows/dependencies/updater.py
vendored
Normal file
450
.github/workflows/dependencies/updater.py
vendored
Normal file
|
@ -0,0 +1,450 @@
|
|||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import requests
|
||||
import shutil
|
||||
import yaml
|
||||
from copy import deepcopy
|
||||
from typing import Optional, TypedDict
|
||||
|
||||
# Get TMP_DIR variable from environment
|
||||
TMP_DIR = os.path.join(os.environ.get("TMP_DIR", "/tmp"), "ohmyzsh")
|
||||
# Relative path to dependencies.yml file
|
||||
DEPS_YAML_FILE = ".github/dependencies.yml"
|
||||
# Dry run flag
|
||||
DRY_RUN = os.environ.get("DRY_RUN", "0") == "1"
|
||||
|
||||
import timeit
|
||||
class CodeTimer:
|
||||
def __init__(self, name=None):
|
||||
self.name = " '" + name + "'" if name else ''
|
||||
|
||||
def __enter__(self):
|
||||
self.start = timeit.default_timer()
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
self.took = (timeit.default_timer() - self.start) * 1000.0
|
||||
print('Code block' + self.name + ' took: ' + str(self.took) + ' ms')
|
||||
|
||||
|
||||
### YAML representation
|
||||
def str_presenter(dumper, data):
|
||||
"""
|
||||
Configures yaml for dumping multiline strings
|
||||
Ref: https://stackoverflow.com/a/33300001
|
||||
"""
|
||||
if len(data.splitlines()) > 1: # check for multiline string
|
||||
return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
|
||||
return dumper.represent_scalar('tag:yaml.org,2002:str', data)
|
||||
|
||||
yaml.add_representer(str, str_presenter)
|
||||
yaml.representer.SafeRepresenter.add_representer(str, str_presenter)
|
||||
|
||||
|
||||
# Types
|
||||
class DependencyDict(TypedDict):
|
||||
repo: str
|
||||
branch: str
|
||||
version: str
|
||||
precopy: Optional[str]
|
||||
postcopy: Optional[str]
|
||||
|
||||
class DependencyYAML(TypedDict):
|
||||
dependencies: dict[str, DependencyDict]
|
||||
|
||||
class UpdateStatus(TypedDict):
|
||||
has_updates: bool
|
||||
version: Optional[str]
|
||||
compare_url: Optional[str]
|
||||
head_ref: Optional[str]
|
||||
head_url: Optional[str]
|
||||
|
||||
|
||||
class CommandRunner:
|
||||
class Exception(Exception):
|
||||
def __init__(self, message, returncode, stage, stdout, stderr):
|
||||
super().__init__(message)
|
||||
self.returncode = returncode
|
||||
self.stage = stage
|
||||
self.stdout = stdout
|
||||
self.stderr = stderr
|
||||
|
||||
@staticmethod
|
||||
def run_or_fail(command: list[str], stage: str, *args, **kwargs):
|
||||
if DRY_RUN and command[0] == "gh":
|
||||
command.insert(0, "echo")
|
||||
|
||||
result = subprocess.run(command, *args, capture_output=True, **kwargs)
|
||||
|
||||
if result.returncode != 0:
|
||||
raise CommandRunner.Exception(
|
||||
f"{stage} command failed with exit code {result.returncode}", returncode=result.returncode,
|
||||
stage=stage,
|
||||
stdout=result.stdout.decode("utf-8"),
|
||||
stderr=result.stderr.decode("utf-8")
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class DependencyStore:
|
||||
store: DependencyYAML = {
|
||||
"dependencies": {}
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def set(data: DependencyYAML):
|
||||
DependencyStore.store = data
|
||||
|
||||
@staticmethod
|
||||
def update_dependency_version(path: str, version: str) -> DependencyYAML:
|
||||
with CodeTimer(f"store deepcopy: {path}"):
|
||||
store_copy = deepcopy(DependencyStore.store)
|
||||
|
||||
dependency = store_copy["dependencies"].get(path, {})
|
||||
dependency["version"] = version
|
||||
store_copy["dependencies"][path] = dependency
|
||||
|
||||
return store_copy
|
||||
|
||||
@staticmethod
|
||||
def write_store(file: str, data: DependencyYAML):
|
||||
with open(file, "w") as yaml_file:
|
||||
yaml.safe_dump(data, yaml_file, sort_keys=False)
|
||||
|
||||
|
||||
class Dependency:
|
||||
def __init__(self, path: str, values: DependencyDict):
|
||||
self.path = path
|
||||
self.values = values
|
||||
|
||||
self.name: str = ""
|
||||
self.desc: str = ""
|
||||
self.kind: str = ""
|
||||
|
||||
match path.split("/"):
|
||||
case ["plugins", name]:
|
||||
self.name = name
|
||||
self.kind = "plugin"
|
||||
self.desc = f"{name} plugin"
|
||||
case ["themes", name]:
|
||||
self.name = name.replace(".zsh-theme", "")
|
||||
self.kind = "theme"
|
||||
self.desc = f"{self.name} theme"
|
||||
case _:
|
||||
self.name = self.desc = path
|
||||
|
||||
def __str__(self):
|
||||
output: str = ""
|
||||
for key in DependencyDict.__dict__['__annotations__'].keys():
|
||||
if key not in self.values:
|
||||
output += f"{key}: None\n"
|
||||
continue
|
||||
|
||||
value = self.values[key]
|
||||
if "\n" not in value:
|
||||
output += f"{key}: {value}\n"
|
||||
else:
|
||||
output += f"{key}:\n "
|
||||
output += value.replace("\n", "\n ", value.count("\n") - 1)
|
||||
return output
|
||||
|
||||
def update_or_notify(self):
|
||||
# Print dependency settings
|
||||
print(f"Processing {self.desc}...", file=sys.stderr)
|
||||
print(self, file=sys.stderr)
|
||||
|
||||
# Check for updates
|
||||
repo = self.values["repo"]
|
||||
remote_branch = self.values["branch"]
|
||||
version = self.values["version"]
|
||||
is_tag = version.startswith("tag:")
|
||||
|
||||
try:
|
||||
with CodeTimer(f"update check: {repo}"):
|
||||
if is_tag:
|
||||
status = GitHub.check_newer_tag(repo, version.replace("tag:", ""))
|
||||
else:
|
||||
status = GitHub.check_updates(repo, remote_branch, version)
|
||||
|
||||
if status["has_updates"]:
|
||||
short_sha = status["head_ref"][:8]
|
||||
new_version = status["version"] if is_tag else short_sha
|
||||
|
||||
try:
|
||||
# Create new branch
|
||||
branch = Git.create_branch(self.path, new_version)
|
||||
|
||||
# Update dependencies.yml file
|
||||
self.__update_yaml(f"tag:{new_version}" if is_tag else status["version"])
|
||||
|
||||
# Update dependency files
|
||||
self.__apply_upstream_changes()
|
||||
|
||||
# Add all changes and commit
|
||||
Git.add_and_commit(self.name, short_sha)
|
||||
|
||||
# Push changes to remote
|
||||
Git.push(branch)
|
||||
|
||||
# Create GitHub PR
|
||||
GitHub.create_pr(
|
||||
branch,
|
||||
f"feat({self.name}): update to version {new_version}",
|
||||
f"""## Description
|
||||
|
||||
Update for **{self.desc}**: update to version [{new_version}]({status['head_url']}).
|
||||
Check out the [list of changes]({status['compare_url']}).
|
||||
"""
|
||||
)
|
||||
|
||||
# Clean up repository
|
||||
Git.clean_repo()
|
||||
except (CommandRunner.Exception, shutil.Error) as e:
|
||||
# Handle exception on automatic update
|
||||
match type(e):
|
||||
case CommandRunner.Exception:
|
||||
# Print error message
|
||||
print(f"Error running {e.stage} command: {e.returncode}", file=sys.stderr)
|
||||
print(e.stderr, file=sys.stderr)
|
||||
case shutil.Error:
|
||||
print(f"Error copying files: {e}", file=sys.stderr)
|
||||
|
||||
try:
|
||||
Git.clean_repo()
|
||||
except CommandRunner.Exception as e:
|
||||
print(f"Error reverting repository to clean state: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Create a GitHub issue to notify maintainer
|
||||
title = f"{self.path}: update to {new_version}"
|
||||
body = (
|
||||
f"""## Description
|
||||
|
||||
There is a new version of `{self.name}` {self.kind} available.
|
||||
|
||||
New version: [{new_version}]({status['head_url']})
|
||||
Check out the [list of changes]({status['compare_url']}).
|
||||
"""
|
||||
)
|
||||
|
||||
print(f"Creating GitHub issue", file=sys.stderr)
|
||||
print(f"{title}\n\n{body}", file=sys.stderr)
|
||||
GitHub.create_issue(title, body)
|
||||
except Exception as e:
|
||||
print(e, file=sys.stderr)
|
||||
|
||||
def __update_yaml(self, new_version: str) -> None:
|
||||
dep_yaml = DependencyStore.update_dependency_version(self.path, new_version)
|
||||
DependencyStore.write_store(DEPS_YAML_FILE, dep_yaml)
|
||||
|
||||
def __apply_upstream_changes(self) -> None:
|
||||
# Patterns to ignore in copying files from upstream repo
|
||||
GLOBAL_IGNORE = [
|
||||
".git",
|
||||
".github",
|
||||
".gitignore"
|
||||
]
|
||||
|
||||
path = os.path.abspath(self.path)
|
||||
precopy = self.values.get("precopy")
|
||||
postcopy = self.values.get("postcopy")
|
||||
|
||||
repo = self.values["repo"]
|
||||
branch = self.values["branch"]
|
||||
remote_url = f"https://github.com/{repo}.git"
|
||||
repo_dir = os.path.join(TMP_DIR, repo)
|
||||
|
||||
# Clone repository
|
||||
Git.clone(remote_url, branch, repo_dir, reclone=True)
|
||||
|
||||
# Run precopy on tmp repo
|
||||
if precopy is not None:
|
||||
print("Running precopy script:", end="\n ", file=sys.stderr)
|
||||
print(precopy.replace("\n", "\n ", precopy.count("\n") - 1), file=sys.stderr)
|
||||
CommandRunner.run_or_fail(["bash", "-c", precopy], cwd=repo_dir, stage="Precopy")
|
||||
|
||||
# Copy files from upstream repo
|
||||
print(f"Copying files from {repo_dir} to {path}", file=sys.stderr)
|
||||
shutil.copytree(repo_dir, path, dirs_exist_ok=True, ignore=shutil.ignore_patterns(*GLOBAL_IGNORE))
|
||||
|
||||
# Run postcopy on our repository
|
||||
if postcopy is not None:
|
||||
print("Running postcopy script:", end="\n ", file=sys.stderr)
|
||||
print(postcopy.replace("\n", "\n ", postcopy.count("\n") - 1), file=sys.stderr)
|
||||
CommandRunner.run_or_fail(["bash", "-c", postcopy], cwd=path, stage="Postcopy")
|
||||
|
||||
|
||||
class Git:
|
||||
default_branch = "master"
|
||||
|
||||
@staticmethod
|
||||
def clone(remote_url: str, branch: str, repo_dir: str, reclone=False):
|
||||
# If repo needs to be fresh
|
||||
if reclone and os.path.exists(repo_dir):
|
||||
shutil.rmtree(repo_dir)
|
||||
|
||||
# Clone repo in tmp directory and checkout branch
|
||||
if not os.path.exists(repo_dir):
|
||||
print(f"Cloning {remote_url} to {repo_dir} and checking out {branch}", file=sys.stderr)
|
||||
CommandRunner.run_or_fail(["git", "clone", "--depth=1", "-b", branch, remote_url, repo_dir], stage="Clone")
|
||||
|
||||
@staticmethod
|
||||
def create_branch(path: str, version: str):
|
||||
# Get current branch name
|
||||
result = CommandRunner.run_or_fail(["git", "rev-parse", "--abbrev-ref", "HEAD"], stage="GetDefaultBranch")
|
||||
Git.default_branch = result.stdout.decode("utf-8").strip()
|
||||
|
||||
# Create new branch and return created branch name
|
||||
branch_name = f"update/{path}/{version}"
|
||||
CommandRunner.run_or_fail(["git", "checkout", "-b", branch_name], stage="CreateBranch")
|
||||
return branch_name
|
||||
|
||||
@staticmethod
|
||||
def add_and_commit(scope: str, version: str):
|
||||
user_name = os.environ.get("GIT_APP_NAME")
|
||||
user_email = os.environ.get("GIT_APP_EMAIL")
|
||||
|
||||
# Add all files to git staging
|
||||
CommandRunner.run_or_fail(["git", "add", "-A", "-v"], stage="AddFiles")
|
||||
|
||||
# Reset environment and git config
|
||||
clean_env = os.environ.copy()
|
||||
clean_env["LANG"]="C.UTF-8"
|
||||
clean_env["GIT_CONFIG_GLOBAL"]="/dev/null"
|
||||
clean_env["GIT_CONFIG_NOSYSTEM"]="1"
|
||||
|
||||
# Commit with settings above
|
||||
CommandRunner.run_or_fail([
|
||||
"git",
|
||||
"-c", f"user.name={user_name}",
|
||||
"-c", f"user.email={user_email}",
|
||||
"commit",
|
||||
"-m", f"feat({scope}): update to {version}"
|
||||
], stage="CreateCommit", env=clean_env)
|
||||
|
||||
@staticmethod
|
||||
def push(branch: str):
|
||||
CommandRunner.run_or_fail(["git", "push", "-u", "origin", branch], stage="PushBranch")
|
||||
|
||||
@staticmethod
|
||||
def clean_repo():
|
||||
CommandRunner.run_or_fail(["git", "reset", "--hard", "HEAD"], stage="ResetRepository")
|
||||
CommandRunner.run_or_fail(["git", "checkout", Git.default_branch], stage="CheckoutDefaultBranch")
|
||||
|
||||
|
||||
class GitHub:
|
||||
@staticmethod
|
||||
def check_newer_tag(repo, current_tag) -> UpdateStatus:
|
||||
# GET /repos/:owner/:repo/git/refs/tags
|
||||
url = f"https://api.github.com/repos/{repo}/git/refs/tags"
|
||||
|
||||
# Send a GET request to the GitHub API
|
||||
response = requests.get(url)
|
||||
|
||||
# If the request was successful
|
||||
if response.status_code == 200:
|
||||
# Parse the JSON response
|
||||
data = response.json()
|
||||
|
||||
if len(data) == 0:
|
||||
return {
|
||||
"has_updates": False,
|
||||
}
|
||||
|
||||
latest_ref = data[-1]
|
||||
latest_tag = latest_ref["ref"].replace("refs/tags/", "")
|
||||
|
||||
if latest_tag == current_tag:
|
||||
return {
|
||||
"has_updates": False,
|
||||
}
|
||||
|
||||
return {
|
||||
"has_updates": True,
|
||||
"version": latest_tag,
|
||||
"compare_url": f"https://github.com/{repo}/compare/{current_tag}...{latest_tag}",
|
||||
"head_ref": latest_ref["object"]["sha"],
|
||||
"head_url": f"https://github.com/{repo}/releases/tag/{latest_tag}",
|
||||
}
|
||||
else:
|
||||
# If the request was not successful, raise an exception
|
||||
raise Exception(f"GitHub API request failed with status code {response.status_code}: {response.json()}")
|
||||
|
||||
@staticmethod
|
||||
def check_updates(repo, branch, version) -> UpdateStatus:
|
||||
# TODO: add support for semver updating (based on tags)
|
||||
# Check if upstream github repo has a new version
|
||||
# GitHub API URL for comparing two commits
|
||||
url = f"https://api.github.com/repos/{repo}/compare/{version}...{branch}"
|
||||
|
||||
# Send a GET request to the GitHub API
|
||||
response = requests.get(url)
|
||||
|
||||
# If the request was successful
|
||||
if response.status_code == 200:
|
||||
# Parse the JSON response
|
||||
data = response.json()
|
||||
|
||||
# If the base is behind the head, there is a newer version
|
||||
has_updates = data["status"] != "identical"
|
||||
|
||||
if not has_updates:
|
||||
return {
|
||||
"has_updates": False,
|
||||
}
|
||||
|
||||
return {
|
||||
"has_updates": data["status"] != "identical",
|
||||
"version": data["commits"][-1]["sha"],
|
||||
"compare_url": data["permalink_url"],
|
||||
"head_ref": data["commits"][-1]["sha"],
|
||||
"head_url": data["commits"][-1]["html_url"]
|
||||
}
|
||||
else:
|
||||
# If the request was not successful, raise an exception
|
||||
raise Exception(f"GitHub API request failed with status code {response.status_code}: {response.json()}")
|
||||
|
||||
@staticmethod
|
||||
def create_issue(title: str, body: str) -> None:
|
||||
cmd = [
|
||||
"gh",
|
||||
"issue",
|
||||
"create",
|
||||
"-t", title,
|
||||
"-b", body
|
||||
]
|
||||
CommandRunner.run_or_fail(cmd, stage="CreateIssue")
|
||||
|
||||
@staticmethod
|
||||
def create_pr(branch: str, title: str, body: str) -> None:
|
||||
cmd = [
|
||||
"gh",
|
||||
"pr",
|
||||
"create",
|
||||
"-B", Git.default_branch,
|
||||
"-H", branch,
|
||||
"-t", title,
|
||||
"-b", body
|
||||
]
|
||||
CommandRunner.run_or_fail(cmd, stage="CreatePullRequest")
|
||||
|
||||
|
||||
def main():
|
||||
# Load the YAML file
|
||||
with open(DEPS_YAML_FILE, "r") as yaml_file:
|
||||
data: DependencyYAML = yaml.safe_load(yaml_file)
|
||||
|
||||
if "dependencies" not in data:
|
||||
raise Exception(f"dependencies.yml not properly formatted")
|
||||
|
||||
# Cache YAML version
|
||||
DependencyStore.set(data)
|
||||
|
||||
dependencies = data["dependencies"]
|
||||
for path in dependencies:
|
||||
dependency = Dependency(path, dependencies[path])
|
||||
dependency.update_or_notify()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
14
.github/workflows/installer.yml
vendored
14
.github/workflows/installer.yml
vendored
|
@ -3,9 +3,9 @@ on:
|
|||
workflow_dispatch: {}
|
||||
push:
|
||||
paths:
|
||||
- tools/install.sh
|
||||
- .github/workflows/installer
|
||||
- .github/workflows/installer.yml
|
||||
- 'tools/install.sh'
|
||||
- '.github/workflows/installer/**'
|
||||
- '.github/workflows/installer.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
|
@ -17,6 +17,7 @@ permissions:
|
|||
jobs:
|
||||
test:
|
||||
name: Test installer
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
|
@ -25,7 +26,7 @@ jobs:
|
|||
- macos-latest
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install zsh
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get update; sudo apt-get install zsh
|
||||
|
@ -41,14 +42,15 @@ jobs:
|
|||
- test
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Vercel CLI
|
||||
run: npm install -g vercel
|
||||
- name: Setup project and deploy
|
||||
env:
|
||||
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
|
||||
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
|
||||
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
|
||||
run: |
|
||||
cp tools/install.sh .github/workflows/installer/install.sh
|
||||
cd .github/workflows/installer
|
||||
vc deploy --prod -t ${{ secrets.VERCEL_TOKEN }}
|
||||
vc deploy --prod -t "$VERCEL_TOKEN"
|
||||
|
|
11
.github/workflows/installer/vercel.json
vendored
11
.github/workflows/installer/vercel.json
vendored
|
@ -2,7 +2,16 @@
|
|||
"headers": [
|
||||
{
|
||||
"source": "/((?!favicon.ico).*)",
|
||||
"headers": [{ "key": "Content-Type", "value": "text/plain" }]
|
||||
"headers": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "text/plain"
|
||||
},
|
||||
{
|
||||
"key": "Content-Disposition",
|
||||
"value": "inline; filename=\"install.sh\""
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rewrites": [
|
||||
|
|
8
.github/workflows/main.yml
vendored
8
.github/workflows/main.yml
vendored
|
@ -20,16 +20,12 @@ permissions:
|
|||
jobs:
|
||||
tests:
|
||||
name: Run tests
|
||||
runs-on: ${{ matrix.os }}
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install zsh
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get update; sudo apt-get install zsh
|
||||
- name: Check syntax
|
||||
run: |
|
||||
|
|
10
.github/workflows/project.yml
vendored
10
.github/workflows/project.yml
vendored
|
@ -15,9 +15,15 @@ jobs:
|
|||
name: Add to project
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PROJECT_TOKEN }}
|
||||
steps:
|
||||
- name: Authenticate as @ohmyzsh
|
||||
id: generate_token
|
||||
uses: ohmyzsh/github-app-token@v2
|
||||
with:
|
||||
app_id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||
private_key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||
- name: Store app token
|
||||
run: echo "GH_TOKEN=${{ steps.generate_token.outputs.token }}" >> "$GITHUB_ENV"
|
||||
- name: Read project data
|
||||
env:
|
||||
ORGANIZATION: ohmyzsh
|
||||
|
|
85
README.md
85
README.md
|
@ -13,41 +13,42 @@ Finally, you'll begin to get the sort of attention that you have always felt you
|
|||
To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://twitter.com/ohmyzsh) on Twitter, and join us on [Discord](https://discord.gg/ohmyzsh).
|
||||
|
||||
[![CI](https://github.com/ohmyzsh/ohmyzsh/workflows/CI/badge.svg)](https://github.com/ohmyzsh/ohmyzsh/actions?query=workflow%3ACI)
|
||||
[![Follow @ohmyzsh](https://img.shields.io/twitter/follow/ohmyzsh?label=Follow+@ohmyzsh&style=flat)](https://twitter.com/intent/follow?screen_name=ohmyzsh)
|
||||
[![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/ohmyzsh?label=%40ohmyzsh&logo=x&style=flat)](https://twitter.com/intent/follow?screen_name=ohmyzsh)
|
||||
[![Mastodon Follow](https://img.shields.io/mastodon/follow/111169632522566717?label=%40ohmyzsh&domain=https%3A%2F%2Fmstdn.social&logo=mastodon&style=flat)](https://mstdn.social/@ohmyzsh)
|
||||
[![Discord server](https://img.shields.io/discord/642496866407284746)](https://discord.gg/ohmyzsh)
|
||||
[![Gitpod ready](https://img.shields.io/badge/Gitpod-ready-blue?logo=gitpod)](https://gitpod.io/#https://github.com/ohmyzsh/ohmyzsh)
|
||||
[![huntr.dev](https://cdn.huntr.dev/huntr_security_badge_mono.svg)](https://huntr.dev/bounties/disclose/?utm_campaign=ohmyzsh%2Fohmyzsh&utm_medium=social&utm_source=github&target=https%3A%2F%2Fgithub.com%2Fohmyzsh%2Fohmyzsh)
|
||||
|
||||
<details>
|
||||
<summary>Table of Contents</summary>
|
||||
|
||||
- [Getting Started](#getting-started)
|
||||
- [Operating System Compatibility](#operating-system-compatibility)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Basic Installation](#basic-installation)
|
||||
- [Manual inspection](#manual-inspection)
|
||||
- [Manual Inspection](#manual-inspection)
|
||||
- [Using Oh My Zsh](#using-oh-my-zsh)
|
||||
- [Plugins](#plugins)
|
||||
- [Enabling Plugins](#enabling-plugins)
|
||||
- [Using Plugins](#using-plugins)
|
||||
- [Themes](#themes)
|
||||
- [Selecting a Theme](#selecting-a-theme)
|
||||
- [Selecting A Theme](#selecting-a-theme)
|
||||
- [FAQ](#faq)
|
||||
- [Advanced Topics](#advanced-topics)
|
||||
- [Advanced Installation](#advanced-installation)
|
||||
- [Custom Directory](#custom-directory)
|
||||
- [Unattended install](#unattended-install)
|
||||
- [Installing from a forked repository](#installing-from-a-forked-repository)
|
||||
- [Unattended Install](#unattended-install)
|
||||
- [Installing From A Forked Repository](#installing-from-a-forked-repository)
|
||||
- [Manual Installation](#manual-installation)
|
||||
- [Installation Problems](#installation-problems)
|
||||
- [Custom Plugins and Themes](#custom-plugins-and-themes)
|
||||
- [Enable GNU ls in macOS and freeBSD systems](#enable-gnu-ls)
|
||||
- [Skip aliases](#skip-aliases)
|
||||
- [Custom Plugins And Themes](#custom-plugins-and-themes)
|
||||
- [Enable GNU ls In macOS And freeBSD Systems](#enable-gnu-ls-in-macos-and-freebsd-systems)
|
||||
- [Skip Aliases](#skip-aliases)
|
||||
- [Getting Updates](#getting-updates)
|
||||
- [Updates verbosity](#updates-verbosity)
|
||||
- [Updates Verbosity](#updates-verbosity)
|
||||
- [Manual Updates](#manual-updates)
|
||||
- [Uninstalling Oh My Zsh](#uninstalling-oh-my-zsh)
|
||||
- [How do I contribute to Oh My Zsh?](#how-do-i-contribute-to-oh-my-zsh)
|
||||
- [Do NOT send us themes](#do-not-send-us-themes)
|
||||
- [How Do I Contribute To Oh My Zsh?](#how-do-i-contribute-to-oh-my-zsh)
|
||||
- [Do Not Send Us Themes](#do-not-send-us-themes)
|
||||
- [Contributors](#contributors)
|
||||
- [Follow Us](#follow-us)
|
||||
- [Merchandise](#merchandise)
|
||||
|
@ -58,9 +59,21 @@ To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://twi
|
|||
|
||||
## Getting Started
|
||||
|
||||
### Operating System Compatibility
|
||||
|
||||
| O/S | Status |
|
||||
| :------------- | :-----: |
|
||||
| Android | ✅ |
|
||||
| freeBSD | ✅ |
|
||||
| LCARS | 🛸 |
|
||||
| Linux | ✅ |
|
||||
| macOS | ✅ |
|
||||
| OS/2 Warp | ❌ |
|
||||
| Windows (WSL2) | ✅ |
|
||||
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- A Unix-like operating system: macOS, Linux, BSD. On Windows: WSL2 is preferred, but cygwin or msys also mostly work.
|
||||
- [Zsh](https://www.zsh.org) should be installed (v4.3.9 or more recent is fine but we prefer 5.0.8 and newer). If not pre-installed (run `zsh --version` to confirm), check the following wiki instructions here: [Installing ZSH](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH)
|
||||
- `curl` or `wget` should be installed
|
||||
- `git` should be installed (recommended v2.4.11 or higher)
|
||||
|
@ -75,9 +88,17 @@ Oh My Zsh is installed by running one of the following commands in your terminal
|
|||
| **wget** | `sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` |
|
||||
| **fetch** | `sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` |
|
||||
|
||||
Alternatively, the installer is also mirrored outside GitHub. Using this URL instead may be required if you're in a country like India or China, that blocks `raw.githubusercontent.com`:
|
||||
|
||||
| Method | Command |
|
||||
| :-------- | :------------------------------------------------------------------------------------------------ |
|
||||
| **curl** | `sh -c "$(curl -fsSL https://install.ohmyz.sh/)"` |
|
||||
| **wget** | `sh -c "$(wget -O- https://install.ohmyz.sh/)"` |
|
||||
| **fetch** | `sh -c "$(fetch -o - https://install.ohmyz.sh/)"` |
|
||||
|
||||
_Note that any previous `.zshrc` will be renamed to `.zshrc.pre-oh-my-zsh`. After installation, you can move the configuration you want to preserve into the new `.zshrc`._
|
||||
|
||||
#### Manual inspection
|
||||
#### Manual Inspection
|
||||
|
||||
It's a good idea to inspect the install script from projects you don't yet know. You can do
|
||||
that by downloading the install script first, looking through it so everything looks normal,
|
||||
|
@ -88,6 +109,8 @@ wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
|
|||
sh install.sh
|
||||
```
|
||||
|
||||
If the above URL times out or otherwise fails, you may have to substitute the URL for `https://install.ohmyz.sh` to be able to get the script.
|
||||
|
||||
## Using Oh My Zsh
|
||||
|
||||
### Plugins
|
||||
|
@ -126,7 +149,7 @@ Each built-in plugin includes a **README**, documenting it. This README should s
|
|||
|
||||
We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We have over one hundred and fifty themes now bundled. Most of them have [screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!). Check them out!
|
||||
|
||||
#### Selecting a Theme
|
||||
#### Selecting A Theme
|
||||
|
||||
_Robby's theme is the default one. It's not the fanciest one. It's not the simplest one. It's just the right one (for him)._
|
||||
|
||||
|
@ -197,7 +220,7 @@ like this:
|
|||
ZSH="$HOME/.dotfiles/oh-my-zsh" sh install.sh
|
||||
```
|
||||
|
||||
#### Unattended install
|
||||
#### Unattended Install
|
||||
|
||||
If you're running the Oh My Zsh install script as part of an automated install, you can pass the `--unattended`
|
||||
flag to the `install.sh` script. This will have the effect of not trying to change
|
||||
|
@ -207,7 +230,9 @@ the default shell, and it also won't run `zsh` when the installation has finishe
|
|||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
|
||||
```
|
||||
|
||||
#### Installing from a forked repository
|
||||
If you're in China, India, or another country that blocks `raw.githubusercontent.com`, you may have to substitute the URL for `https://install.ohmyz.sh` for it to install.
|
||||
|
||||
#### Installing From A Forked Repository
|
||||
|
||||
The install script also accepts these variables to allow installation of a different repository:
|
||||
|
||||
|
@ -232,19 +257,19 @@ REPO=apjanke/oh-my-zsh BRANCH=edge sh install.sh
|
|||
|
||||
#### Manual Installation
|
||||
|
||||
##### 1. Clone the repository <!-- omit in toc -->
|
||||
##### 1. Clone The Repository <!-- omit in toc -->
|
||||
|
||||
```sh
|
||||
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh
|
||||
```
|
||||
|
||||
##### 2. _Optionally_, backup your existing `~/.zshrc` file <!-- omit in toc -->
|
||||
##### 2. _Optionally_, Backup Your Existing `~/.zshrc` File <!-- omit in toc -->
|
||||
|
||||
```sh
|
||||
cp ~/.zshrc ~/.zshrc.orig
|
||||
```
|
||||
|
||||
##### 3. Create a new zsh configuration file <!-- omit in toc -->
|
||||
##### 3. Create A New Zsh Configuration File <!-- omit in toc -->
|
||||
|
||||
You can create a new zsh config file by copying the template that we have included for you.
|
||||
|
||||
|
@ -252,7 +277,7 @@ You can create a new zsh config file by copying the template that we have includ
|
|||
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
|
||||
```
|
||||
|
||||
##### 4. Change your default shell <!-- omit in toc -->
|
||||
##### 4. Change Your Default Shell <!-- omit in toc -->
|
||||
|
||||
```sh
|
||||
chsh -s $(which zsh)
|
||||
|
@ -260,7 +285,7 @@ chsh -s $(which zsh)
|
|||
|
||||
You must log out from your user session and log back in to see this change.
|
||||
|
||||
##### 5. Initialize your new zsh configuration <!-- omit in toc -->
|
||||
##### 5. Initialize Your New Zsh Configuration <!-- omit in toc -->
|
||||
|
||||
Once you open up a new terminal window, it should load zsh with Oh My Zsh's configuration.
|
||||
|
||||
|
@ -271,7 +296,7 @@ If you have any hiccups installing, here are a few common fixes.
|
|||
- You _might_ need to modify your `PATH` in `~/.zshrc` if you're not able to find some commands after switching to `oh-my-zsh`.
|
||||
- If you installed manually or changed the install location, check the `ZSH` environment variable in `~/.zshrc`.
|
||||
|
||||
### Custom Plugins and Themes
|
||||
### Custom Plugins And Themes
|
||||
|
||||
If you want to override any of the default behaviors, just add a new file (ending in `.zsh`) in the `custom/` directory.
|
||||
|
||||
|
@ -279,7 +304,7 @@ If you have many functions that go well together, you can put them as a `XYZ.plu
|
|||
|
||||
If you would like to override the functionality of a plugin distributed with Oh My Zsh, create a plugin of the same name in the `custom/plugins/` directory and it will be loaded instead of the one in `plugins/`.
|
||||
|
||||
### Enable GNU ls in macOS and freeBSD systems
|
||||
### Enable GNU ls In macOS And freeBSD Systems
|
||||
|
||||
<a name="enable-gnu-ls"></a>
|
||||
|
||||
|
@ -293,7 +318,7 @@ zstyle ':omz:lib:theme-and-appearance' gnu-ls yes
|
|||
|
||||
_Note: this is not compatible with `DISABLE_LS_COLORS=true`_
|
||||
|
||||
### Skip aliases
|
||||
### Skip Aliases
|
||||
|
||||
<a name="remove-directories-aliases"></a>
|
||||
|
||||
|
@ -376,7 +401,7 @@ zstyle ':omz:update' frequency 7
|
|||
zstyle ':omz:update' frequency 0
|
||||
```
|
||||
|
||||
### Updates verbosity
|
||||
### Updates Verbosity
|
||||
|
||||
You can also limit the update verbosity with the following settings:
|
||||
|
||||
|
@ -404,7 +429,7 @@ Oh My Zsh isn't for everyone. We'll miss you, but we want to make this an easy b
|
|||
|
||||
If you want to uninstall `oh-my-zsh`, just run `uninstall_oh_my_zsh` from the command-line. It will remove itself and revert your previous `bash` or `zsh` configuration.
|
||||
|
||||
## How do I contribute to Oh My Zsh?
|
||||
## How Do I Contribute To Oh My Zsh?
|
||||
|
||||
Before you participate in our delightful community, please read the [code of conduct](CODE_OF_CONDUCT.md).
|
||||
|
||||
|
@ -414,7 +439,7 @@ We also need people to test out pull requests. So take a look through [the open
|
|||
|
||||
See [Contributing](CONTRIBUTING.md) for more details.
|
||||
|
||||
### Do NOT send us themes
|
||||
### Do Not Send Us Themes
|
||||
|
||||
We have (more than) enough themes for the time being. Please add your theme to the [external themes](https://github.com/ohmyzsh/ohmyzsh/wiki/External-themes) wiki page.
|
||||
|
||||
|
@ -424,6 +449,10 @@ Oh My Zsh has a vibrant community of happy users and delightful contributors. Wi
|
|||
|
||||
Thank you so much!
|
||||
|
||||
<a href="https://github.com/ohmyzsh/ohmyzsh/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=ohmyzsh/ohmyzsh" width="100%"/>
|
||||
</a>
|
||||
|
||||
## Follow Us
|
||||
|
||||
We're on social media:
|
||||
|
|
|
@ -17,8 +17,7 @@ In the near future we will introduce versioning, so expect this section to chang
|
|||
|
||||
**Do not submit an issue or pull request**: this might reveal the vulnerability.
|
||||
|
||||
Instead, you should email the maintainers directly at: [**security@ohmyz.sh**](mailto:security@ohmyz.sh).
|
||||
Instead, you should email the maintainers directly at: [**security@ohmyz.sh**](mailto:security@ohmyz.sh),
|
||||
or using the link to [privately report a vulnerability with GitHub](https://github.com/ohmyzsh/ohmyzsh/security/advisories/new).
|
||||
|
||||
We will deal with the vulnerability privately and submit a patch as soon as possible.
|
||||
|
||||
You can also submit your vulnerability report to [huntr.dev](https://huntr.dev/bounties/disclose/?utm_campaign=ohmyzsh%2Fohmyzsh&utm_medium=social&utm_source=github&target=https%3A%2F%2Fgithub.com%2Fohmyzsh%2Fohmyzsh) and see if you can get a bounty reward.
|
||||
|
|
146
lib/async_prompt.zsh
Normal file
146
lib/async_prompt.zsh
Normal file
|
@ -0,0 +1,146 @@
|
|||
# The async code is taken from
|
||||
# https://github.com/zsh-users/zsh-autosuggestions/blob/master/src/async.zsh
|
||||
# https://github.com/woefe/git-prompt.zsh/blob/master/git-prompt.zsh
|
||||
|
||||
zmodload zsh/system
|
||||
|
||||
# For now, async prompt function handlers are set up like so:
|
||||
# First, define the async function handler and register the handler
|
||||
# with _omz_register_handler:
|
||||
#
|
||||
# function _git_prompt_status_async {
|
||||
# # Do some expensive operation that outputs to stdout
|
||||
# }
|
||||
# _omz_register_handler _git_prompt_status_async
|
||||
#
|
||||
# Then add a stub prompt function in `$PROMPT` or similar prompt variables,
|
||||
# which will show the output of "$_OMZ_ASYNC_OUTPUT[handler_name]":
|
||||
#
|
||||
# function git_prompt_status {
|
||||
# echo -n $_OMZ_ASYNC_OUTPUT[_git_prompt_status_async]
|
||||
# }
|
||||
#
|
||||
# RPROMPT='$(git_prompt_status)'
|
||||
#
|
||||
# This API is subject to change and optimization. Rely on it at your own risk.
|
||||
|
||||
function _omz_register_handler {
|
||||
setopt localoptions noksharrays
|
||||
typeset -ga _omz_async_functions
|
||||
# we want to do nothing if there's no $1 function or we already set it up
|
||||
if [[ -z "$1" ]] || (( ! ${+functions[$1]} )) \
|
||||
|| (( ${_omz_async_functions[(Ie)$1]} )); then
|
||||
return
|
||||
fi
|
||||
_omz_async_functions+=("$1")
|
||||
# let's add the hook to async_request if it's not there yet
|
||||
if (( ! ${precmd_functions[(Ie)_omz_async_request]} )) \
|
||||
&& (( ${+functions[_omz_async_request]})); then
|
||||
autoload -Uz add-zsh-hook
|
||||
add-zsh-hook precmd _omz_async_request
|
||||
fi
|
||||
}
|
||||
|
||||
# Set up async handlers and callbacks
|
||||
function _omz_async_request {
|
||||
local -i ret=$?
|
||||
typeset -gA _OMZ_ASYNC_FDS _OMZ_ASYNC_PIDS _OMZ_ASYNC_OUTPUT
|
||||
|
||||
# executor runs a subshell for all async requests based on key
|
||||
local handler
|
||||
for handler in ${_omz_async_functions}; do
|
||||
(( ${+functions[$handler]} )) || continue
|
||||
|
||||
local fd=${_OMZ_ASYNC_FDS[$handler]:--1}
|
||||
local pid=${_OMZ_ASYNC_PIDS[$handler]:--1}
|
||||
|
||||
# If we've got a pending request, cancel it
|
||||
if (( fd != -1 && pid != -1 )) && { true <&$fd } 2>/dev/null; then
|
||||
# Close the file descriptor and remove the handler
|
||||
exec {fd}<&-
|
||||
zle -F $fd
|
||||
|
||||
# Zsh will make a new process group for the child process only if job
|
||||
# control is enabled (MONITOR option)
|
||||
if [[ -o MONITOR ]]; then
|
||||
# Send the signal to the process group to kill any processes that may
|
||||
# have been forked by the async function handler
|
||||
kill -TERM -$pid 2>/dev/null
|
||||
else
|
||||
# Kill just the child process since it wasn't placed in a new process
|
||||
# group. If the async function handler forked any child processes they may
|
||||
# be orphaned and left behind.
|
||||
kill -TERM $pid 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
# Define global variables to store the file descriptor, PID and output
|
||||
_OMZ_ASYNC_FDS[$handler]=-1
|
||||
_OMZ_ASYNC_PIDS[$handler]=-1
|
||||
|
||||
# Fork a process to fetch the git status and open a pipe to read from it
|
||||
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)
|
||||
# Run the async function handler
|
||||
$handler
|
||||
)
|
||||
|
||||
# Save FD for handler
|
||||
_OMZ_ASYNC_FDS[$handler]=$fd
|
||||
|
||||
# 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
|
||||
|
||||
# Save the PID from the handler child process
|
||||
read pid <&$fd
|
||||
_OMZ_ASYNC_PIDS[$handler]=$pid
|
||||
|
||||
# When the fd is readable, call the response handler
|
||||
zle -F "$fd" _omz_async_callback
|
||||
done
|
||||
}
|
||||
|
||||
# Called when new data is ready to be read from the pipe
|
||||
function _omz_async_callback() {
|
||||
emulate -L zsh
|
||||
|
||||
local fd=$1 # First arg will be fd ready for reading
|
||||
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
|
||||
|
||||
# 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)"
|
||||
|
||||
# Repaint prompt if output has changed
|
||||
if [[ "$old_output" != "${_OMZ_ASYNC_OUTPUT[$handler]}" ]]; then
|
||||
zle reset-prompt
|
||||
zle -R
|
||||
fi
|
||||
|
||||
# Close the fd
|
||||
exec {fd}<&-
|
||||
fi
|
||||
|
||||
# Always remove the handler
|
||||
zle -F "$fd"
|
||||
|
||||
# Unset global FD variable to prevent closing user created FDs in the precmd hook
|
||||
_OMZ_ASYNC_FDS[$handler]=-1
|
||||
_OMZ_ASYNC_PIDS[$handler]=-1
|
||||
}
|
||||
|
||||
autoload -Uz add-zsh-hook
|
||||
add-zsh-hook precmd _omz_async_request
|
|
@ -448,7 +448,7 @@ function _omz::plugin::load {
|
|||
if [[ ! -f "$base/_$plugin" && ! -f "$base/$plugin.plugin.zsh" ]]; then
|
||||
_omz::log warn "'$plugin' is not a valid plugin"
|
||||
continue
|
||||
# It it is a valid plugin, add its directory to $fpath unless it is already there
|
||||
# It is a valid plugin, add its directory to $fpath unless it is already there
|
||||
elif (( ! ${fpath[(Ie)$base]} )); then
|
||||
fpath=("$base" $fpath)
|
||||
fi
|
||||
|
|
|
@ -62,7 +62,7 @@ function detect-clipboard() {
|
|||
function clippaste() { powershell.exe -noprofile -command Get-Clipboard; }
|
||||
elif [ -n "${WAYLAND_DISPLAY:-}" ] && (( ${+commands[wl-copy]} )) && (( ${+commands[wl-paste]} )); then
|
||||
function clipcopy() { cat "${1:-/dev/stdin}" | wl-copy &>/dev/null &|; }
|
||||
function clippaste() { wl-paste; }
|
||||
function clippaste() { wl-paste --no-newline; }
|
||||
elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xsel]} )); then
|
||||
function clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; }
|
||||
function clippaste() { xsel --clipboard --output; }
|
||||
|
|
|
@ -182,6 +182,8 @@ function omz_urlencode() {
|
|||
fi
|
||||
|
||||
# Use LC_CTYPE=C to process text byte-by-byte
|
||||
# Note that this doesn't work in Termux, as it only has UTF-8 locale.
|
||||
# Characters will be processed as UTF-8, which is fine for URLs.
|
||||
local i byte ord LC_ALL=C
|
||||
export LC_ALL
|
||||
local reserved=';/?:@&=+$,'
|
||||
|
@ -206,6 +208,9 @@ function omz_urlencode() {
|
|||
else
|
||||
if [[ "$byte" == " " && -n $spaces_as_plus ]]; then
|
||||
url_str+="+"
|
||||
elif [[ "$PREFIX" = *com.termux* ]]; then
|
||||
# Termux does not have non-UTF8 locales, so just send the UTF-8 character directly
|
||||
url_str+="$byte"
|
||||
else
|
||||
ord=$(( [##16] #byte ))
|
||||
url_str+="%$ord"
|
||||
|
|
38
lib/git.zsh
38
lib/git.zsh
|
@ -9,7 +9,7 @@ function __git_prompt_git() {
|
|||
GIT_OPTIONAL_LOCKS=0 command git "$@"
|
||||
}
|
||||
|
||||
function git_prompt_info() {
|
||||
function _omz_git_prompt_status() {
|
||||
# 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 \
|
||||
|
@ -17,6 +17,10 @@ function git_prompt_info() {
|
|||
return 0
|
||||
fi
|
||||
|
||||
# Get either:
|
||||
# - the current branch name
|
||||
# - the tag name if we are on a tag
|
||||
# - the short SHA of the current commit
|
||||
local ref
|
||||
ref=$(__git_prompt_git symbolic-ref --short HEAD 2> /dev/null) \
|
||||
|| ref=$(__git_prompt_git describe --tags --exact-match HEAD 2> /dev/null) \
|
||||
|
@ -33,6 +37,38 @@ function git_prompt_info() {
|
|||
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
||||
}
|
||||
|
||||
# Enable async prompt by default unless the setting is at false / no
|
||||
if zstyle -t ':omz:alpha:lib:git' async-prompt; then
|
||||
function git_prompt_info() {
|
||||
if [[ -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_status]" ]]; then
|
||||
echo -n "$_OMZ_ASYNC_OUTPUT[_omz_git_prompt_status]"
|
||||
fi
|
||||
}
|
||||
|
||||
# Conditionally register the async handler, only if it's needed in $PROMPT
|
||||
# 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
|
||||
*(\$\(git_prompt_info\)|\`git_prompt_info\`)*)
|
||||
_omz_register_handler _omz_git_prompt_status
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
add-zsh-hook -d precmd _defer_async_git_register
|
||||
unset -f _defer_async_git_register
|
||||
}
|
||||
|
||||
# Register the async handler first. This needs to be done before
|
||||
# the async request prompt is run
|
||||
precmd_functions=(_defer_async_git_register $precmd_functions)
|
||||
else
|
||||
function git_prompt_info() {
|
||||
_omz_git_prompt_status
|
||||
}
|
||||
fi
|
||||
|
||||
# Checks if working tree is dirty
|
||||
function parse_git_dirty() {
|
||||
local STATUS
|
||||
|
|
|
@ -32,19 +32,26 @@ if [[ -n "${terminfo[knp]}" ]]; then
|
|||
fi
|
||||
|
||||
# Start typing + [Up-Arrow] - fuzzy find history forward
|
||||
if [[ -n "${terminfo[kcuu1]}" ]]; then
|
||||
autoload -U up-line-or-beginning-search
|
||||
zle -N up-line-or-beginning-search
|
||||
|
||||
bindkey -M emacs "^[[A" up-line-or-beginning-search
|
||||
bindkey -M viins "^[[A" up-line-or-beginning-search
|
||||
bindkey -M vicmd "^[[A" up-line-or-beginning-search
|
||||
if [[ -n "${terminfo[kcuu1]}" ]]; then
|
||||
bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search
|
||||
bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search
|
||||
bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search
|
||||
fi
|
||||
|
||||
# Start typing + [Down-Arrow] - fuzzy find history backward
|
||||
if [[ -n "${terminfo[kcud1]}" ]]; then
|
||||
autoload -U down-line-or-beginning-search
|
||||
zle -N down-line-or-beginning-search
|
||||
|
||||
bindkey -M emacs "^[[B" down-line-or-beginning-search
|
||||
bindkey -M viins "^[[B" down-line-or-beginning-search
|
||||
bindkey -M vicmd "^[[B" down-line-or-beginning-search
|
||||
if [[ -n "${terminfo[kcud1]}" ]]; then
|
||||
bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search
|
||||
bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search
|
||||
bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search
|
||||
|
|
|
@ -19,8 +19,13 @@ setopt multios # enable redirect to multiple streams: echo >file1 >
|
|||
setopt long_list_jobs # show long list format job notifications
|
||||
setopt interactivecomments # recognize comments
|
||||
|
||||
# define pager dependant on what is available (less or more)
|
||||
if (( ${+commands[less]} )); then
|
||||
env_default 'PAGER' 'less'
|
||||
env_default 'LESS' '-R'
|
||||
elif (( ${+commands[more]} )); then
|
||||
env_default 'PAGER' 'more'
|
||||
fi
|
||||
|
||||
## super user alias
|
||||
alias _='sudo '
|
||||
|
|
|
@ -40,5 +40,5 @@ ZSH_THEME_RVM_PROMPT_OPTIONS="i v g"
|
|||
# use this to enable users to see their ruby version, no matter which
|
||||
# version management system they use
|
||||
function ruby_prompt_info() {
|
||||
echo $(rvm_prompt_info || rbenv_prompt_info || chruby_prompt_info)
|
||||
echo "$(rvm_prompt_info || rbenv_prompt_info || chruby_prompt_info)"
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ typeset -AHg FX FG BG
|
|||
FX=(
|
||||
reset "%{[00m%}"
|
||||
bold "%{[01m%}" no-bold "%{[22m%}"
|
||||
dim "%{[02m%}" no-dim "%{[22m%}"
|
||||
italic "%{[03m%}" no-italic "%{[23m%}"
|
||||
underline "%{[04m%}" no-underline "%{[24m%}"
|
||||
blink "%{[05m%}" no-blink "%{[25m%}"
|
||||
|
|
|
@ -151,7 +151,7 @@ function omz_termsupport_cwd {
|
|||
URL_PATH="$(omz_urlencode -P $PWD)" || return 1
|
||||
|
||||
# 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
|
||||
printf "\e]7;file://%s%s\e\\" "${URL_HOST}" "${URL_PATH}"
|
||||
|
|
|
@ -17,7 +17,7 @@ Requirements: Python needs to be installed.
|
|||
|
||||
- `als`: show all aliases by group
|
||||
|
||||
- `als -h/--help`: print help mesage
|
||||
- `als -h/--help`: print help message
|
||||
|
||||
- `als <keyword(s)>`: filter and highlight aliases by `<keyword>`
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ plugins=(... ansible)
|
|||
| `acon` | command `ansible-console` |
|
||||
| `ainv` | command `ansible-inventory` |
|
||||
| `aplaybook` | command `ansible-playbook` |
|
||||
| `ainv` | command `ansible-inventory` |
|
||||
| `adoc` | command `ansible-doc` |
|
||||
| `agal` | command `ansible-galaxy` |
|
||||
| `apull` | command `ansible-pull` |
|
||||
|
|
|
@ -2,26 +2,29 @@
|
|||
ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}"
|
||||
ASDF_COMPLETIONS="$ASDF_DIR/completions"
|
||||
|
||||
if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then
|
||||
# If not found, check for archlinux/AUR package (/opt/asdf-vm/)
|
||||
if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/asdf.bash" ]] && [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
|
||||
if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
|
||||
ASDF_DIR="/opt/asdf-vm"
|
||||
ASDF_COMPLETIONS="$ASDF_DIR"
|
||||
fi
|
||||
|
||||
# If not found, check for Homebrew package
|
||||
if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/asdf.bash" ]] && (( $+commands[brew] )); then
|
||||
brew_prefix="$(brew --prefix asdf)"
|
||||
ASDF_DIR="${brew_prefix}/libexec"
|
||||
ASDF_COMPLETIONS="${brew_prefix}/etc/bash_completion.d"
|
||||
unset brew_prefix
|
||||
elif (( $+commands[brew] )); then
|
||||
_ASDF_PREFIX="$(brew --prefix asdf)"
|
||||
ASDF_DIR="${_ASDF_PREFIX}/libexec"
|
||||
ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions"
|
||||
unset _ASDF_PREFIX
|
||||
else
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
# Load command
|
||||
if [[ -f "$ASDF_DIR/asdf.sh" ]]; then
|
||||
. "$ASDF_DIR/asdf.sh"
|
||||
|
||||
source "$ASDF_DIR/asdf.sh"
|
||||
# Load completions
|
||||
if [[ -f "$ASDF_COMPLETIONS/asdf.bash" ]]; then
|
||||
. "$ASDF_COMPLETIONS/asdf.bash"
|
||||
if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then
|
||||
fpath+=("$ASDF_COMPLETIONS")
|
||||
autoload -Uz _asdf
|
||||
compdef _asdf asdf # compdef is already loaded before loading plugins
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -4,6 +4,7 @@ autojump_paths=(
|
|||
$HOME/.autojump/share/autojump/autojump.zsh # manual installation
|
||||
$HOME/.nix-profile/etc/profile.d/autojump.sh # NixOS installation
|
||||
/run/current-system/sw/share/autojump/autojump.zsh # NixOS installation
|
||||
/etc/profiles/per-user/$USER/share/autojump/autojump.zsh # Home Manager, NixOS with user-scoped packages
|
||||
/usr/share/autojump/autojump.zsh # Debian and Ubuntu package
|
||||
/etc/profile.d/autojump.zsh # manual installation
|
||||
/etc/profile.d/autojump.sh # Gentoo installation
|
||||
|
|
|
@ -16,6 +16,8 @@ plugins=(... aws)
|
|||
It also sets `$AWS_EB_PROFILE` to `<profile>` for the Elastic Beanstalk CLI. It sets `$AWS_PROFILE_REGION` for display in `aws_prompt_info`.
|
||||
Run `asp` without arguments to clear the profile.
|
||||
* `asp [<profile>] login`: If AWS SSO has been configured in your aws profile, it will run the `aws sso login` command following profile selection.
|
||||
* `asp [<profile>] login [<sso_session>]`: In addition to `asp [<profile>] login`, if SSO session has been configured in your aws profile, it will run the `aws sso login --sso-session <sso_session>` command following profile selection.
|
||||
* `asp [<profile>] logout`: If AWS SSO has been configured in your aws profile, it will run the `aws sso logout` command following profile selection.
|
||||
|
||||
* `asr [<region>]`: sets `$AWS_REGION` and `$AWS_DEFAULT_REGION` (legacy) to `<region>`.
|
||||
Run `asr` without arguments to clear the profile.
|
||||
|
@ -45,6 +47,11 @@ plugins=(... aws)
|
|||
Some themes might overwrite the value of RPROMPT instead of appending to it, so they'll need to be fixed to
|
||||
see the AWS profile/region prompt.
|
||||
|
||||
* Set `AWS_PROFILE_STATE_ENABLED=true` in your zshrc file if you want the aws profile to persist between shell sessions.
|
||||
This option might slow down your shell startup time.
|
||||
By default the state file path is `/tmp/.aws_current_profile`. This means that the state won't survive a reboot or otherwise GC.
|
||||
You can control the state file path using the `AWS_STATE_FILE` environment variable.
|
||||
|
||||
## Theme
|
||||
|
||||
The plugin creates an `aws_prompt_info` function that you can use in your theme, which displays
|
||||
|
|
|
@ -6,10 +6,26 @@ function agr() {
|
|||
echo $AWS_REGION
|
||||
}
|
||||
|
||||
# Update state file if enabled
|
||||
function _aws_update_state() {
|
||||
if [[ "$AWS_PROFILE_STATE_ENABLED" == true ]]; then
|
||||
test -d $(dirname ${AWS_STATE_FILE}) || exit 1
|
||||
echo "${AWS_PROFILE} ${AWS_REGION}" > "${AWS_STATE_FILE}"
|
||||
fi
|
||||
}
|
||||
|
||||
function _aws_clear_state() {
|
||||
if [[ "$AWS_PROFILE_STATE_ENABLED" == true ]]; then
|
||||
test -d $(dirname ${AWS_STATE_FILE}) || exit 1
|
||||
echo -n > "${AWS_STATE_FILE}"
|
||||
fi
|
||||
}
|
||||
|
||||
# AWS profile selection
|
||||
function asp() {
|
||||
if [[ -z "$1" ]]; then
|
||||
unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE AWS_PROFILE_REGION
|
||||
_aws_clear_state
|
||||
echo AWS profile cleared.
|
||||
return
|
||||
fi
|
||||
|
@ -28,15 +44,24 @@ function asp() {
|
|||
|
||||
export AWS_PROFILE_REGION=$(aws configure get region)
|
||||
|
||||
_aws_update_state
|
||||
|
||||
if [[ "$2" == "login" ]]; then
|
||||
if [[ -n "$3" ]]; then
|
||||
aws sso login --sso-session $3
|
||||
else
|
||||
aws sso login
|
||||
fi
|
||||
elif [[ "$2" == "logout" ]]; then
|
||||
aws sso logout
|
||||
fi
|
||||
}
|
||||
|
||||
# AWS region selection
|
||||
function asr() {
|
||||
if [[ -z "$1" ]]; then
|
||||
unset AWS_DEFAULT_REGION AWS_REGION
|
||||
_aws_update_state
|
||||
echo AWS region cleared.
|
||||
return
|
||||
fi
|
||||
|
@ -50,6 +75,7 @@ function asr() {
|
|||
|
||||
export AWS_REGION=$1
|
||||
export AWS_DEFAULT_REGION=$1
|
||||
_aws_update_state
|
||||
}
|
||||
|
||||
# AWS profile switch
|
||||
|
@ -196,8 +222,17 @@ function aws_change_access_key() {
|
|||
}
|
||||
|
||||
function aws_regions() {
|
||||
local region
|
||||
if [[ $AWS_DEFAULT_REGION ]];then
|
||||
region="$AWS_DEFAULT_REGION"
|
||||
elif [[ $AWS_REGION ]];then
|
||||
region="$AWS_REGION"
|
||||
else
|
||||
region="us-west-1"
|
||||
fi
|
||||
|
||||
if [[ $AWS_DEFAULT_PROFILE || $AWS_PROFILE ]];then
|
||||
aws ec2 describe-regions |grep RegionName | awk -F ':' '{gsub(/"/, "", $2);gsub(/,/, "", $2);gsub(/ /, "", $2); print $2}'
|
||||
aws ec2 describe-regions --region $region |grep RegionName | awk -F ':' '{gsub(/"/, "", $2);gsub(/,/, "", $2);gsub(/ /, "", $2); print $2}'
|
||||
else
|
||||
echo "You must specify a AWS profile."
|
||||
fi
|
||||
|
@ -240,6 +275,22 @@ if [[ "$SHOW_AWS_PROMPT" != false && "$RPROMPT" != *'$(aws_prompt_info)'* ]]; th
|
|||
RPROMPT='$(aws_prompt_info)'"$RPROMPT"
|
||||
fi
|
||||
|
||||
if [[ "$AWS_PROFILE_STATE_ENABLED" == true ]]; then
|
||||
AWS_STATE_FILE="${AWS_STATE_FILE:-/tmp/.aws_current_profile}"
|
||||
test -s "${AWS_STATE_FILE}" || return
|
||||
|
||||
aws_state=($(cat $AWS_STATE_FILE))
|
||||
|
||||
export AWS_DEFAULT_PROFILE="${aws_state[1]}"
|
||||
export AWS_PROFILE="$AWS_DEFAULT_PROFILE"
|
||||
export AWS_EB_PROFILE="$AWS_DEFAULT_PROFILE"
|
||||
|
||||
test -z "${aws_state[2]}" && AWS_REGION=$(aws configure get region)
|
||||
|
||||
export AWS_REGION=${AWS_REGION:-$aws_state[2]}
|
||||
export AWS_DEFAULT_REGION="$AWS_REGION"
|
||||
fi
|
||||
|
||||
# Load awscli completions
|
||||
|
||||
# AWS CLI v2 comes with its own autocompletion. Check if that is there, otherwise fall back
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# Bazel plugin
|
||||
|
||||
This plugin adds completion for [bazel](https://bazel.build), an open-source build and
|
||||
test tool that scalably supports multi-language and multi-platform projects.
|
||||
This plugin adds completion and aliases for [bazel](https://bazel.build), an open-source build and test tool that scalably supports multi-language and multi-platform projects.
|
||||
|
||||
To use it, add `bazel` to the plugins array in your zshrc file:
|
||||
|
||||
|
@ -12,3 +11,12 @@ plugins=(... bazel)
|
|||
The plugin has a copy of [the completion script from the git repository][1].
|
||||
|
||||
[1]: https://github.com/bazelbuild/bazel/blob/master/scripts/zsh_completion/_bazel
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
| ------- | -------------------------------------- | ------------------------------------------------------ |
|
||||
| bzb | `bazel build` | The `bazel build` command |
|
||||
| bzt | `bazel test` | The `bazel test` command |
|
||||
| bzr | `bazel run` | The `bazel run` command |
|
||||
| bzq | `bazel query` | The `bazel query` command |
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#compdef bazel
|
||||
#compdef bazel bazelisk
|
||||
|
||||
# Copyright 2015 The Bazel Authors. All rights reserved.
|
||||
#
|
||||
|
|
5
plugins/bazel/bazel.plugin.zsh
Normal file
5
plugins/bazel/bazel.plugin.zsh
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Aliases for bazel
|
||||
alias bzb='bazel build'
|
||||
alias bzt='bazel test'
|
||||
alias bzr='bazel run'
|
||||
alias bzq='bazel query'
|
|
@ -1,19 +1,19 @@
|
|||
# bgnotify zsh plugin
|
||||
|
||||
cross-platform background notifications for long running commands! Supports OSX and Ubuntu linux.
|
||||
cross-platform background notifications for long running commands! Supports OSX and Linux.
|
||||
|
||||
Standalone homepage: [t413/zsh-background-notify](https://github.com/t413/zsh-background-notify)
|
||||
|
||||
----------------------------------
|
||||
---
|
||||
|
||||
## How to use!
|
||||
## How to use
|
||||
|
||||
Just add bgnotify to your plugins list in your `.zshrc`
|
||||
|
||||
- On OS X you'll need [terminal-notifier](https://github.com/alloy/terminal-notifier)
|
||||
* `brew install terminal-notifier` (or `gem install terminal-notifier`)
|
||||
- On ubuntu you're already all set!
|
||||
- On windows you can use [notifu](https://www.paralint.com/projects/notifu/) or the Cygwin Ports libnotify package
|
||||
- On Linux, make sure you have `notify-send` or `kdialog` installed. If you're using Ubuntu you should already be all set!
|
||||
- On Windows you can use [notifu](https://www.paralint.com/projects/notifu/) or the Cygwin Ports libnotify package
|
||||
|
||||
|
||||
## Screenshots
|
||||
|
@ -35,20 +35,29 @@ Just add bgnotify to your plugins list in your `.zshrc`
|
|||
|
||||
One can configure a few things:
|
||||
|
||||
- `bgnotify_bell` enabled or disables the terminal bell (default true)
|
||||
- `bgnotify_threshold` sets the notification threshold time (default 6 seconds)
|
||||
- `function bgnotify_formatted` lets you change the notification
|
||||
- `function bgnotify_formatted` lets you change the notification. You can for instance customize the message and pass in an icon.
|
||||
|
||||
Use these by adding a function definition before the your call to source. Example:
|
||||
|
||||
~~~ sh
|
||||
```sh
|
||||
bgnotify_bell=false ## disable terminal bell
|
||||
bgnotify_threshold=4 ## set your own notification threshold
|
||||
|
||||
function bgnotify_formatted {
|
||||
## $1=exit_status, $2=command, $3=elapsed_time
|
||||
[ $1 -eq 0 ] && title="Holy Smokes Batman!" || title="Holy Graf Zeppelin!"
|
||||
bgnotify "$title -- after $3 s" "$2";
|
||||
|
||||
# Humanly readable elapsed time
|
||||
local elapsed="$(( $3 % 60 ))s"
|
||||
(( $3 < 60 )) || elapsed="$((( $3 % 3600) / 60 ))m $elapsed"
|
||||
(( $3 < 3600 )) || elapsed="$(( $3 / 3600 ))h $elapsed"
|
||||
|
||||
[ $1 -eq 0 ] && title="Holy Smokes Batman" || title="Holy Graf Zeppelin"
|
||||
[ $1 -eq 0 ] && icon="$HOME/icons/success.png" || icon="$HOME/icons/fail.png"
|
||||
bgnotify "$title - took ${elapsed}" "$2" "$icon"
|
||||
}
|
||||
|
||||
plugins=(git bgnotify) ## add to plugins list
|
||||
source $ZSH/oh-my-zsh.sh ## existing source call
|
||||
~~~
|
||||
```
|
||||
|
|
|
@ -21,13 +21,12 @@ function bgnotify_end {
|
|||
local elapsed=$(( EPOCHSECONDS - bgnotify_timestamp ))
|
||||
|
||||
# check time elapsed
|
||||
[[ $bgnotify_timestamp -gt 0 ]] || return
|
||||
[[ $elapsed -ge $bgnotify_threshold ]] || return
|
||||
[[ $bgnotify_timestamp -gt 0 ]] || return 0
|
||||
[[ $elapsed -ge $bgnotify_threshold ]] || return 0
|
||||
|
||||
# check if Terminal app is not active
|
||||
[[ $(bgnotify_appid) != "$bgnotify_termid" ]] || return
|
||||
[[ $(bgnotify_appid) != "$bgnotify_termid" ]] || return 0
|
||||
|
||||
printf '\a' # beep sound
|
||||
bgnotify_formatted "$exit_status" "$bgnotify_lastcmd" "$elapsed"
|
||||
} always {
|
||||
bgnotify_timestamp=0
|
||||
|
@ -52,53 +51,89 @@ function bgnotify_formatted {
|
|||
(( $3 < 60 )) || elapsed="$((( $3 % 3600) / 60 ))m $elapsed"
|
||||
(( $3 < 3600 )) || elapsed="$(( $3 / 3600 ))h $elapsed"
|
||||
|
||||
if [[ $1 -eq 0 ]]; then
|
||||
bgnotify "#win (took $elapsed)" "$2"
|
||||
[[ $bgnotify_bell = true ]] && printf '\a' # beep sound
|
||||
if [[ $exit_status -eq 0 ]]; then
|
||||
bgnotify "#win (took $elapsed)" "$cmd"
|
||||
else
|
||||
bgnotify "#fail (took $elapsed)" "$2"
|
||||
bgnotify "#fail (took $elapsed)" "$cmd"
|
||||
fi
|
||||
}
|
||||
|
||||
# for macOS, output is "app ID, window ID" (com.googlecode.iterm2, 116)
|
||||
function bgnotify_appid {
|
||||
if (( ${+commands[osascript]} )); then
|
||||
osascript -e 'tell application (path to frontmost application as text) to get the {id, id of front window}' 2>/dev/null
|
||||
elif (( ${+commands[xprop]} )); then
|
||||
osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null
|
||||
elif [[ -n $WAYLAND_DISPLAY ]] && (( ${+commands[swaymsg]} )); then # wayland+sway
|
||||
local app_id=$(bgnotify_find_sway_appid)
|
||||
[[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
|
||||
elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then
|
||||
xprop -root _NET_ACTIVE_WINDOW 2>/dev/null | cut -d' ' -f5
|
||||
else
|
||||
echo $EPOCHSECONDS
|
||||
fi
|
||||
}
|
||||
|
||||
function bgnotify {
|
||||
# $1: title, $2: message
|
||||
if (( ${+commands[terminal-notifier]} )); then # macOS
|
||||
local term_id="${bgnotify_termid%%,*}" # remove window id
|
||||
if [[ -z "$term_id" ]]; then
|
||||
case "$TERM_PROGRAM" in
|
||||
iTerm.app) term_id='com.googlecode.iterm2' ;;
|
||||
Apple_Terminal) term_id='com.apple.terminal' ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [[ -z "$term_id" ]]; then
|
||||
terminal-notifier -message "$2" -title "$1" &>/dev/null
|
||||
function bgnotify_find_sway_appid {
|
||||
# output is "app_id,container_id", for example "Alacritty,1694"
|
||||
# see example swaymsg output: https://github.com/ohmyzsh/ohmyzsh/files/13463939/output.json
|
||||
if (( ${+commands[jq]} )); then
|
||||
swaymsg -t get_tree | jq '.. | select(.type?) | select(.focused==true) | {app_id, id} | join(",")'
|
||||
else
|
||||
terminal-notifier -message "$2" -title "$1" -activate "$term_id" -sender "$term_id" &>/dev/null
|
||||
swaymsg -t get_tree | awk '
|
||||
BEGIN { Id = ""; Appid = ""; FocusNesting = -1; Nesting = 0 }
|
||||
{
|
||||
# Enter a block
|
||||
if ($0 ~ /.*{$/) Nesting++
|
||||
|
||||
# Exit a block. If Nesting is now less than FocusNesting, we have the data we are looking for
|
||||
if ($0 ~ /^[[:blank:]]*}.*/) { Nesting--; if (FocusNesting > 0 && Nesting < FocusNesting) exit 0 }
|
||||
|
||||
# Save the Id, it is potentially what we are looking for
|
||||
if ($0 ~ /^[[:blank:]]*"id": [0-9]*,?$/) { sub(/^[[:blank:]]*"id": /, ""); sub(/,$/, ""); Id = $0 }
|
||||
|
||||
# Save the Appid, it is potentially what we are looking for
|
||||
if ($0 ~ /^[[:blank:]]*"app_id": ".*",?$/) { sub(/^[[:blank:]]*"app_id": "/, ""); sub(/",$/, ""); Appid = $0 }
|
||||
|
||||
# Window is focused, this nesting block contains the Id and Appid we want!
|
||||
if ($0 ~ /^[[:blank:]]*"focused": true,?$/) { FocusNesting = Nesting }
|
||||
}
|
||||
END {
|
||||
if (Appid != "" && Id != "" && FocusNesting != -1) print Appid "," Id
|
||||
else print ""
|
||||
}'
|
||||
fi
|
||||
}
|
||||
|
||||
function bgnotify_programid {
|
||||
case "$TERM_PROGRAM" in
|
||||
iTerm.app) echo 'com.googlecode.iterm2' ;;
|
||||
Apple_Terminal) echo 'com.apple.terminal' ;;
|
||||
esac
|
||||
}
|
||||
|
||||
function bgnotify {
|
||||
local title="$1"
|
||||
local message="$2"
|
||||
local icon="$3"
|
||||
if (( ${+commands[terminal-notifier]} )); then # macOS
|
||||
local term_id=$(bgnotify_programid)
|
||||
terminal-notifier -message "$message" -title "$title" ${=icon:+-appIcon "$icon"} ${=term_id:+-activate "$term_id" -sender "$term_id"} &>/dev/null
|
||||
elif (( ${+commands[growlnotify]} )); then # macOS growl
|
||||
growlnotify -m "$1" "$2"
|
||||
elif (( ${+commands[notify-send]} )); then # GNOME
|
||||
notify-send "$1" "$2"
|
||||
growlnotify -m "$title" "$message"
|
||||
elif (( ${+commands[notify-send]} )); then
|
||||
notify-send "$title" "$message" ${=icon:+--icon "$icon"}
|
||||
elif (( ${+commands[kdialog]} )); then # KDE
|
||||
kdialog --title "$1" --passivepopup "$2" 5
|
||||
kdialog --title "$title" --passivepopup "$message" 5
|
||||
elif (( ${+commands[notifu]} )); then # cygwin
|
||||
notifu /m "$2" /p "$1"
|
||||
notifu /m "$message" /p "$title" ${=icon:+/i "$icon"}
|
||||
fi
|
||||
}
|
||||
|
||||
## Defaults
|
||||
|
||||
# enable terminal bell on notify by default
|
||||
bgnotify_bell=${bgnotify_bell:-true}
|
||||
|
||||
# notify if command took longer than 5s by default
|
||||
bgnotify_threshold=${bgnotify_threshold:-5}
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ fi
|
|||
|
||||
alias bcubc='brew upgrade --cask && brew cleanup'
|
||||
alias bcubo='brew update && brew outdated --cask'
|
||||
alias bcubc='brew upgrade --cask && brew cleanup'
|
||||
alias brewp='brew pin'
|
||||
alias brewsp='brew list --pinned'
|
||||
alias bubc='brew upgrade && brew cleanup'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# catimg
|
||||
|
||||
Plugin for displaying images on the terminal using the the `catimg.sh` script provided by [posva](https://github.com/posva/catimg)
|
||||
Plugin for displaying images on the terminal using the `catimg.sh` script provided by [posva](https://github.com/posva/catimg)
|
||||
|
||||
To use it, add `catimg` to the plugins array in your zshrc file:
|
||||
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
for file (
|
||||
# Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
|
||||
/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
|
||||
/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
|
||||
if [[ -r "$file" ]]; then
|
||||
source "$file"
|
||||
|
|
|
@ -13,7 +13,12 @@ plugins=(... debian)
|
|||
- `$apt_pref`: use aptitude or apt if installed, fallback is apt-get.
|
||||
- `$apt_upgr`: use upgrade or safe-upgrade (for aptitude).
|
||||
|
||||
Set `$apt_pref` and `$apt_upgr` to whatever command you want (before sourcing Oh My Zsh) to override this behavior.
|
||||
Set **both** `$apt_pref` and `$apt_upgr` to whatever command you want (before sourcing Oh My Zsh) to override this behavior, e.g.:
|
||||
|
||||
```sh
|
||||
apt_pref='apt'
|
||||
apt_upgr='full-upgrade'
|
||||
```
|
||||
|
||||
## Common Aliases
|
||||
|
||||
|
|
|
@ -7,10 +7,10 @@ _direnv_hook() {
|
|||
trap - SIGINT;
|
||||
}
|
||||
typeset -ag precmd_functions;
|
||||
if [[ -z ${precmd_functions[(r)_direnv_hook]} ]]; then
|
||||
if [[ -z "${precmd_functions[(r)_direnv_hook]+1}" ]]; then
|
||||
precmd_functions=( _direnv_hook ${precmd_functions[@]} )
|
||||
fi
|
||||
typeset -ag chpwd_functions;
|
||||
if [[ -z ${chpwd_functions[(r)_direnv_hook]} ]]; then
|
||||
if [[ -z "${chpwd_functions[(r)_direnv_hook]+1}" ]]; then
|
||||
chpwd_functions=( _direnv_hook ${chpwd_functions[@]} )
|
||||
fi
|
||||
|
|
|
@ -12,7 +12,7 @@ plugins=(... docker-compose)
|
|||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
|-----------|--------------------------------|----------------------------------------------------------------------------------|
|
||||
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
||||
| dco | `docker-compose` | Docker-compose main command |
|
||||
| dcb | `docker-compose build` | Build containers |
|
||||
| dce | `docker-compose exec` | Execute command inside a container |
|
||||
|
@ -28,6 +28,7 @@ plugins=(... docker-compose)
|
|||
| dcdn | `docker-compose down` | Stop and remove containers |
|
||||
| dcl | `docker-compose logs` | Show logs of container |
|
||||
| dclf | `docker-compose logs -f` | Show logs and follow output |
|
||||
| dclF | `docker-compose logs -f --tail0` | Just follow recent logs |
|
||||
| dcpull | `docker-compose pull` | Pull image of a service |
|
||||
| dcstart | `docker-compose start` | Start a container |
|
||||
| dck | `docker-compose kill` | Kills containers |
|
||||
|
|
|
@ -128,7 +128,7 @@ __docker-compose_subcommand() {
|
|||
'--resolve-image-digests[Pin image tags to digests.]' \
|
||||
'--services[Print the service names, one per line.]' \
|
||||
'--volumes[Print the volume names, one per line.]' \
|
||||
'--hash[Print the service config hash, one per line. Set "service1,service2" for a list of specified services.]' \ && ret=0
|
||||
'--hash[Print the service config hash, one per line. Set "service1,service2" for a list of specified services.]' && ret=0
|
||||
;;
|
||||
(create)
|
||||
_arguments \
|
||||
|
|
|
@ -16,6 +16,7 @@ alias dcupdb="$dccmd up -d --build"
|
|||
alias dcdn="$dccmd down"
|
||||
alias dcl="$dccmd logs"
|
||||
alias dclf="$dccmd logs -f"
|
||||
alias dclF="$dccmd logs -f --tail 0"
|
||||
alias dcpull="$dccmd pull"
|
||||
alias dcstart="$dccmd start"
|
||||
alias dck="$dccmd kill"
|
||||
|
|
|
@ -57,6 +57,6 @@ fi
|
|||
! is-at-least 23.0.0 ${${(s:,:z)"$(command docker --version)"}[3]}; then
|
||||
command cp "${0:h}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
|
||||
else
|
||||
command docker completion zsh >| "$ZSH_CACHE_DIR/completions/_docker"
|
||||
command docker completion zsh | tee "$ZSH_CACHE_DIR/completions/_docker" > /dev/null
|
||||
fi
|
||||
} &|
|
||||
|
|
|
@ -1,22 +1,14 @@
|
|||
# This scripts is copied from (MIT License):
|
||||
# https://github.com/dotnet/toolset/blob/master/scripts/register-completions.zsh
|
||||
# https://raw.githubusercontent.com/dotnet/sdk/main/scripts/register-completions.zsh
|
||||
|
||||
_dotnet_zsh_complete()
|
||||
{
|
||||
local completions=("$(dotnet complete "$words")")
|
||||
|
||||
# If the completion list is empty, just continue with filename selection
|
||||
if [ -z "$completions" ]
|
||||
then
|
||||
_arguments '*::arguments: _normal'
|
||||
return
|
||||
fi
|
||||
|
||||
# This is not a variable assignment, don't remove spaces!
|
||||
_values = "${(ps:\n:)completions}"
|
||||
#compdef dotnet
|
||||
_dotnet_completion() {
|
||||
local -a completions=("${(@f)$(dotnet complete "${words}")}")
|
||||
compadd -a completions
|
||||
_files
|
||||
}
|
||||
|
||||
compdef _dotnet_zsh_complete dotnet
|
||||
compdef _dotnet_completion dotnet
|
||||
|
||||
# Aliases bellow are here for backwards compatibility
|
||||
# added by Shaun Tabone (https://github.com/xontab)
|
||||
|
|
|
@ -27,4 +27,4 @@ The plugin uses a custom launcher (which we'll call here `$EMACS_LAUNCHER`) that
|
|||
| eeval | `$EMACS_LAUNCHER --eval` | Same as `M-x eval` but from outside Emacs |
|
||||
| eframe | `emacsclient --alternate-editor="" --create-frame` | Create new X frame |
|
||||
| efile | - | Print the path to the file open in the current buffer |
|
||||
| ecd | - | Print the directory of the file open in the the current buffer |
|
||||
| ecd | - | Print the directory of the file open in the current buffer |
|
||||
|
|
|
@ -60,7 +60,7 @@ function efile {
|
|||
}
|
||||
|
||||
# Write to standard output the directory of the file
|
||||
# opened in the the current buffer
|
||||
# opened in the current buffer
|
||||
function ecd {
|
||||
local file
|
||||
file="$(efile)" || return $?
|
||||
|
|
|
@ -70,7 +70,7 @@ EOF
|
|||
(*.tar.lz4) lz4 -c -d "$full_path" | tar xvf - ;;
|
||||
(*.tar.lrz) (( $+commands[lrzuntar] )) && lrzuntar "$full_path" ;;
|
||||
(*.gz) (( $+commands[pigz] )) && pigz -cdk "$full_path" > "${file:t:r}" || gunzip -ck "$full_path" > "${file:t:r}" ;;
|
||||
(*.bz2) bunzip2 "$full_path" ;;
|
||||
(*.bz2) (( $+commands[pbzip2] )) && pbzip2 -d "$full_path" || bunzip2 "$full_path" ;;
|
||||
(*.xz) unxz "$full_path" ;;
|
||||
(*.lrz) (( $+commands[lrunzip] )) && lrunzip "$full_path" ;;
|
||||
(*.lz4) lz4 -d "$full_path" ;;
|
||||
|
|
101
plugins/eza/README.md
Normal file
101
plugins/eza/README.md
Normal file
|
@ -0,0 +1,101 @@
|
|||
# eza plugin
|
||||
|
||||
This provides aliases that invoke the [`eza`](https://github.com/eza-community/eza) utility rather than `ls`
|
||||
|
||||
To use it add `eza` to the plugins array in your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... eza)
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
All configurations are done using the `zstyle` command in the `:omz:plugins:eza` namespace.
|
||||
|
||||
**NOTE:** The configuring needs to be done prior to OMZ loading the plugins. When the plugin is loaded,
|
||||
changing the `zstyle` won't have any effect.
|
||||
|
||||
### `dirs-first`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'dirs-first' yes|no
|
||||
```
|
||||
|
||||
If `yes`, directories will be grouped first.
|
||||
|
||||
Default: `no`
|
||||
|
||||
### `git-status`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'git-status' yes|no
|
||||
```
|
||||
|
||||
If `yes`, always add `--git` flag to indicate git status (if tracked / in a git repo).
|
||||
|
||||
Default: `no`
|
||||
|
||||
### `header`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'header' yes|no
|
||||
```
|
||||
|
||||
If `yes`, always add `-h` flag to add a header row for each column.
|
||||
|
||||
Default: `no`
|
||||
|
||||
### `show-group`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'show-group' yes|no
|
||||
```
|
||||
|
||||
If `yes` (default), always add `-g` flag to show the group ownership.
|
||||
|
||||
Default: `yes`
|
||||
|
||||
### `size-prefix`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'size-prefix' (binary|none|si)
|
||||
```
|
||||
|
||||
Choose the prefix to be used in displaying file size:
|
||||
|
||||
- `binary` -- use [binary prefixes](https://en.wikipedia.org/wiki/Binary_prefix) such as "Ki", "Mi", "Gi" and
|
||||
so on
|
||||
- `none` -- don't use any prefix, show size in bytes
|
||||
- `si` (default) -- use [Metric/S.I. prefixes](https://en.wikipedia.org/wiki/Metric_prefix)
|
||||
|
||||
Default: `si`
|
||||
|
||||
### `time-style`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'time-style' $TIME_STYLE
|
||||
```
|
||||
|
||||
Sets the `--time-style` option of `eza`. (See `man eza` for the options)
|
||||
|
||||
Default: Not set, which means the default behavior of `eza` will take place.
|
||||
|
||||
## Aliases
|
||||
|
||||
**Notes:**
|
||||
|
||||
- Aliases may be modified by Configuration
|
||||
- The term "files" without "only" qualifier means both files & directories
|
||||
|
||||
| Alias | Command | Description |
|
||||
| ------ | ----------------- | -------------------------------------------------------------------------- |
|
||||
| `la` | `eza -la` | List all files (except . and ..) as a long list |
|
||||
| `ldot` | `eza -ld .*` | List dotfiles only (directories shown as entries instead of recursed into) |
|
||||
| `lD` | `eza -lD` | List only directories (excluding dotdirs) as a long list |
|
||||
| `lDD` | `eza -laD` | List only directories (including dotdirs) as a long list |
|
||||
| `ll` | `eza -l` | List files as a long list |
|
||||
| `ls` | `eza` | Plain eza call |
|
||||
| `lsd` | `eza -d` | List specified files with directories as entries, in a grid |
|
||||
| `lsdl` | `eza -dl` | List specified files with directories as entries, in a long list |
|
||||
| `lS` | `eza -l -ssize` | List files as a long list, sorted by size |
|
||||
| `lT` | `eza -l -snewest` | List files as a long list, sorted by date (newest last) |
|
62
plugins/eza/eza.plugin.zsh
Normal file
62
plugins/eza/eza.plugin.zsh
Normal file
|
@ -0,0 +1,62 @@
|
|||
if ! (( $+commands[eza] )); then
|
||||
print "zsh eza plugin: eza not found. Please install eza before using this plugin." >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
typeset -a _EZA_HEAD
|
||||
typeset -a _EZA_TAIL
|
||||
|
||||
function _configure_eza() {
|
||||
local _val
|
||||
# Get the head flags
|
||||
if zstyle -T ':omz:plugins:eza' 'show-group'; then
|
||||
_EZA_HEAD+=("g")
|
||||
fi
|
||||
if zstyle -t ':omz:plugins:eza' 'header'; then
|
||||
_EZA_HEAD+=("h")
|
||||
fi
|
||||
zstyle -s ':omz:plugins:eza' 'size-prefix' _val
|
||||
case "${_val:l}" in
|
||||
binary)
|
||||
_EZA_HEAD+=("b")
|
||||
;;
|
||||
none)
|
||||
_EZA_HEAD+=("B")
|
||||
;;
|
||||
esac
|
||||
# Get the tail long-options
|
||||
if zstyle -t ':omz:plugins:eza' 'dirs-first'; then
|
||||
_EZA_TAIL+=("--group-directories-first")
|
||||
fi
|
||||
if zstyle -t ':omz:plugins:eza' 'git-status'; then
|
||||
_EZA_TAIL+=("--git")
|
||||
fi
|
||||
zstyle -s ':omz:plugins:eza' 'time-style' _val
|
||||
if [[ $_val ]]; then
|
||||
_EZA_TAIL+=("--time-style='$_val'")
|
||||
fi
|
||||
}
|
||||
|
||||
_configure_eza
|
||||
|
||||
function _alias_eza() {
|
||||
local _head="${(j::)_EZA_HEAD}$2"
|
||||
local _tail="${(j: :)_EZA_TAIL}"
|
||||
alias "$1"="eza${_head:+ -}${_head}${_tail:+ }${_tail}${3:+ }$3"
|
||||
}
|
||||
|
||||
_alias_eza la la
|
||||
_alias_eza ldot ld ".*"
|
||||
_alias_eza lD lD
|
||||
_alias_eza lDD lDa
|
||||
_alias_eza ll l
|
||||
_alias_eza ls
|
||||
_alias_eza lsd d
|
||||
_alias_eza lsdl dl
|
||||
_alias_eza lS "l -ssize"
|
||||
_alias_eza lT "l -snewest"
|
||||
|
||||
unfunction _alias_eza
|
||||
unfunction _configure_eza
|
||||
unset _EZA_HEAD
|
||||
unset _EZA_TAIL
|
|
@ -9,7 +9,7 @@ function fwl () {
|
|||
zones=("${(@f)$(sudo firewall-cmd --get-active-zones | grep -v 'interfaces\|sources')}")
|
||||
|
||||
for i in $zones; do
|
||||
sudo firewall-cmd --zone $i --list-all
|
||||
sudo firewall-cmd --zone ${i/ \(default\)} --list-all
|
||||
done
|
||||
|
||||
echo 'Direct Rules:'
|
||||
|
|
|
@ -60,12 +60,22 @@ Available search contexts are:
|
|||
| typescript | `https://google.com/search?as_sitesearch=www.typescriptlang.org/docs&as_q=` |
|
||||
| unheap | `http://www.unheap.com/?s=` |
|
||||
| vuejs | `https://www.google.com/search?as_sitesearch=vuejs.org&as_q=` |
|
||||
| nextjs | `https://www.google.com/search?as_sitesearch=nextjs.org&as_q=` |
|
||||
|
||||
If you want to have another context, open an Issue and tell us!
|
||||
|
||||
## Fallback search behaviour
|
||||
|
||||
The plugin will use Google as a fallback if the docs site for a search context does not have a search function. You can set the fallback search engine to DuckDuckGo by setting `FRONTEND_SEARCH_FALLBACK='duckduckgo'` in your `~/.zshrc` file before Oh My Zsh is sourced.
|
||||
The plugin will use Google as a fallback if the docs site for a search context does not have a search
|
||||
function. You can set the fallback search engine to DuckDuckGo by setting
|
||||
`FRONTEND_SEARCH_FALLBACK='duckduckgo'` in your `~/.zshrc` file before Oh My Zsh is sourced.
|
||||
|
||||
## DuckDuckGo Lucky Search
|
||||
|
||||
Enable DuckDuckGo's "ducky" (lucky) search feature to automatically access the top search result. This feature
|
||||
is optimized for DuckDuckGo, as Google redirects to an intermediate page. The FRONTEND_SEARCH_FALLBACK_LUCKY
|
||||
environment variable triggers the use of DuckDuckGo's lucky search, rendering the FRONTEND_SEARCH_FALLBACK
|
||||
setting unnecessary in this context.
|
||||
|
||||
## Author
|
||||
|
||||
|
|
|
@ -27,12 +27,19 @@ alias stackoverflow='frontend stackoverflow'
|
|||
alias typescript='frontend typescript'
|
||||
alias unheap='frontend unheap'
|
||||
alias vuejs='frontend vuejs'
|
||||
alias nextjs='frontend nextjs'
|
||||
|
||||
function _frontend_fallback() {
|
||||
if [[ "$FRONTEND_SEARCH_FALLBACK_LUCKY" == "true" ]]; then
|
||||
case true in
|
||||
*) echo "https://duckduckgo.com/?q=!ducky+site%3A$1+" ;;
|
||||
esac
|
||||
else
|
||||
case "$FRONTEND_SEARCH_FALLBACK" in
|
||||
duckduckgo) echo "https://duckduckgo.com/?sites=$1&q=" ;;
|
||||
*) echo "https://google.com/search?as_sitesearch=$1&as_q=" ;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
function frontend() {
|
||||
|
@ -70,6 +77,7 @@ function frontend() {
|
|||
typescript $(_frontend_fallback 'www.typescriptlang.org/docs')
|
||||
unheap 'http://www.unheap.com/?s='
|
||||
vuejs $(_frontend_fallback 'vuejs.org')
|
||||
nextjs $(_frontend_fallback 'nextjs.org')
|
||||
)
|
||||
|
||||
# show help for command list
|
||||
|
@ -81,7 +89,7 @@ function frontend() {
|
|||
print -P ""
|
||||
print -P " angular, angularjs, bem, bootsnipp, caniuse, codepen, compassdoc, cssflow, packagephobia"
|
||||
print -P " dartlang, emberjs, fontello, flowtype, github, html5please, jestjs, jquery, lodash,"
|
||||
print -P " mdn, npmjs, nodejs, qunit, reactjs, smacss, stackoverflow, unheap, vuejs, bundlephobia"
|
||||
print -P " mdn, npmjs, nodejs, qunit, reactjs, smacss, stackoverflow, unheap, vuejs, bundlephobia, nextjs"
|
||||
print -P ""
|
||||
print -P "For example: frontend npmjs mocha (or just: npmjs mocha)."
|
||||
print -P ""
|
||||
|
@ -96,7 +104,7 @@ function frontend() {
|
|||
echo ""
|
||||
echo " angular, angularjs, bem, bootsnipp, caniuse, codepen, compassdoc, cssflow, packagephobia"
|
||||
echo " dartlang, emberjs, fontello, github, html5please, jest, jquery, lodash,"
|
||||
echo " mdn, npmjs, nodejs, qunit, reactjs, smacss, stackoverflow, unheap, vuejs, bundlephobia"
|
||||
echo " mdn, npmjs, nodejs, qunit, reactjs, smacss, stackoverflow, unheap, vuejs, bundlephobia, nextjs"
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
|
|
@ -8,6 +8,7 @@ function fzf_setup_using_base_dir() {
|
|||
"${HOME}/.fzf"
|
||||
"${HOME}/.nix-profile/share/fzf"
|
||||
"${XDG_DATA_HOME:-$HOME/.local/share}/fzf"
|
||||
"${MSYSTEM_PREFIX}/share/fzf"
|
||||
"/usr/local/opt/fzf"
|
||||
"/opt/homebrew/opt/fzf"
|
||||
"/usr/share/fzf"
|
||||
|
|
|
@ -17,6 +17,7 @@ if [[ -z "${CLOUDSDK_HOME}" ]]; then
|
|||
"/opt/google-cloud-sdk"
|
||||
"/opt/google-cloud-cli"
|
||||
"/opt/local/libexec/google-cloud-sdk"
|
||||
"$HOME/.asdf/installs/gcloud/*/"
|
||||
)
|
||||
|
||||
for gcloud_sdk_location in $search_locations; do
|
||||
|
|
|
@ -29,7 +29,7 @@ function git-fetch-all {
|
|||
date -R &>! "$gitdir/FETCH_LOG"
|
||||
GIT_SSH_COMMAND="command ssh -o BatchMode=yes" \
|
||||
GIT_TERMINAL_PROMPT=0 \
|
||||
command git fetch --all 2>/dev/null &>> "$gitdir/FETCH_LOG"
|
||||
command git fetch --all --recurse-submodules=yes 2>/dev/null &>> "$gitdir/FETCH_LOG"
|
||||
) &|
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# git-commit plugin
|
||||
|
||||
The git-commit plugin adds several [git aliases](https://www.git-scm.com/docs/git-config#Documentation/git-config.txt-alias) for [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/#summary) messages.
|
||||
The git-commit plugin adds several
|
||||
[git aliases](https://www.git-scm.com/docs/git-config#Documentation/git-config.txt-alias) for
|
||||
[conventional commit](https://www.conventionalcommits.org/en/v1.0.0/#summary) messages.
|
||||
|
||||
To use it, add `git-commit` to the plugins array in your zshrc file:
|
||||
|
||||
|
@ -10,12 +12,10 @@ plugins=(... git-commit)
|
|||
|
||||
## Syntax
|
||||
|
||||
```zshrc
|
||||
git <type> [(-s, --scope) "<scope>"] "<message>"
|
||||
```zsh
|
||||
git <type> [(-s, --scope) "<scope>"] [(-a, --attention)] "<message>"
|
||||
```
|
||||
|
||||
> ⚠️ Single/Double quotes around the scope and message are required
|
||||
|
||||
Where `type` is one of the following:
|
||||
|
||||
- `build`
|
||||
|
@ -26,11 +26,22 @@ Where `type` is one of the following:
|
|||
- `fix`
|
||||
- `perf`
|
||||
- `refactor`
|
||||
- `revert`
|
||||
- `rev`
|
||||
- `style`
|
||||
- `test`
|
||||
- `wip`
|
||||
|
||||
> NOTE: the alias for `revert` type is `rev`, as otherwise it conflicts with the git command of the same name.
|
||||
> It will still generate a commit message in the format `revert: <message>`
|
||||
|
||||
> ⚠️ Enabling this plugin will (potentially) overwrite all `alias.<type>` that you manually set. Use with
|
||||
> care!
|
||||
|
||||
## Examples
|
||||
|
||||
`git style "remove trailing whitespace"` -> `git commit -m "style: remove trailing whitespace"`
|
||||
`git fix -s "router" "correct redirect link"` -> `git commit -m "fix(router): correct redirect link"`
|
||||
| Git alias | Command |
|
||||
| --------------------------------------------- | ---------------------------------------------------- |
|
||||
| `git style "remove trailing whitespace"` | `git commit -m "style: remove trailing whitespace"` |
|
||||
| `git wip "work in progress"` | `git commit -m "work in progress"` |
|
||||
| `git fix -s "router" "correct redirect link"` | `git commit -m "fix(router): correct redirect link"` |
|
||||
| `git rev -s "api" "rollback v2"` | `git commit -m "revert(api): rollback v2"` |
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
function _git_commit_register {
|
||||
if ! git config --global --get-all alias.$1 >/dev/null 2>&1; then
|
||||
git config --global alias.$1 '!a() { if [ "$1" = "-s" ] || [ "$1" = "--scope" ]; then local scope="$2"; shift 2; git commit -m "'$1'(${scope}): ${@}"; else git commit -m "'$1': ${@}"; fi }; a'
|
||||
local _rev="$(git -C $ZSH rev-parse HEAD 2> /dev/null)"
|
||||
if [[ $_rev == $(git config --global --get oh-my-zsh.git-commit-alias 2> /dev/null) ]]; then
|
||||
return
|
||||
fi
|
||||
}
|
||||
git config --global oh-my-zsh.git-commit-alias "$_rev"
|
||||
|
||||
local -a _git_commit_aliases
|
||||
_git_commit_aliases=(
|
||||
|
@ -17,11 +17,42 @@ _git_commit_aliases=(
|
|||
'revert'
|
||||
'style'
|
||||
'test'
|
||||
'wip'
|
||||
)
|
||||
|
||||
for _alias in "${_git_commit_aliases[@]}"; do
|
||||
_git_commit_register $_alias
|
||||
done
|
||||
local _alias _type
|
||||
for _type in "${_git_commit_aliases[@]}"; do
|
||||
# an alias can't be named "revert" because the git command takes precedence
|
||||
# https://stackoverflow.com/a/3538791
|
||||
case "$_type" in
|
||||
revert) _alias=rev ;;
|
||||
*) _alias=$_type ;;
|
||||
esac
|
||||
|
||||
unfunction _git_commit_register
|
||||
unset _alias
|
||||
local _func='!a() {
|
||||
local _scope _attention _message
|
||||
while [ $# -ne 0 ]; do
|
||||
case $1 in
|
||||
-s | --scope )
|
||||
if [ -z $2 ]; then
|
||||
echo "Missing scope!"
|
||||
return 1
|
||||
fi
|
||||
_scope="$2"
|
||||
shift 2
|
||||
;;
|
||||
-a | --attention )
|
||||
_attention="!"
|
||||
shift 1
|
||||
;;
|
||||
* )
|
||||
_message="${_message} $1"
|
||||
shift 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
git commit -m "'$_type'${_scope:+(${_scope})}${_attention}:${_message}"
|
||||
}; a'
|
||||
|
||||
git config --global alias.$_alias "$_func"
|
||||
done
|
||||
|
|
|
@ -11,7 +11,7 @@ plugins=(... git)
|
|||
## Aliases
|
||||
|
||||
| Alias | Command |
|
||||
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `grt` | `cd "$(git rev-parse --show-toplevel \|\| echo .)"` |
|
||||
| `ggpnp` | `ggl && ggp` |
|
||||
| `ggpur` | `ggu` |
|
||||
|
@ -41,7 +41,6 @@ plugins=(... git)
|
|||
| `gba` | `git branch --all` |
|
||||
| `gbd` | `git branch --delete` |
|
||||
| `gbD` | `git branch --delete --force` |
|
||||
| `gbda` | `git branch --no-color --merged \| command grep -vE "^([+*]\|\s*($(git_main_branch)\|$(git_develop_branch))\s*$)" \| command xargs git branch --delete 2>/dev/null` |
|
||||
| `gbgd` | `LANG=C git branch --no-color -vv \| grep ": gone\]" \| awk '"'"'{print $1}'"'"' \| xargs git branch -d` |
|
||||
| `gbgD` | `LANG=C git branch --no-color -vv \| grep ": gone\]" \| awk '"'"'{print $1}'"'"' \| xargs git branch -D` |
|
||||
| `gbm` | `git branch --move` |
|
||||
|
@ -52,6 +51,7 @@ plugins=(... git)
|
|||
| `gco` | `git checkout` |
|
||||
| `gcor` | `git checkout --recurse-submodules` |
|
||||
| `gcb` | `git checkout -b` |
|
||||
| `gcB` | `git checkout -B` |
|
||||
| `gcd` | `git checkout $(git_develop_branch)` |
|
||||
| `gcm` | `git checkout $(git_main_branch)` |
|
||||
| `gcp` | `git cherry-pick` |
|
||||
|
@ -70,6 +70,7 @@ plugins=(... git)
|
|||
| `gca!` | `git commit --verbose --all --amend` |
|
||||
| `gcan!` | `git commit --verbose --all --no-edit --amend` |
|
||||
| `gcans!` | `git commit --verbose --all --signoff --no-edit --amend` |
|
||||
| `gcann!` | `git commit --verbose --all --date=now --no-edit --amend` |
|
||||
| `gc!` | `git commit --verbose --amend` |
|
||||
| `gcn!` | `git commit --verbose --no-edit --amend` |
|
||||
| `gcs` | `git commit -S` |
|
||||
|
@ -117,13 +118,11 @@ plugins=(... git)
|
|||
| `gmtlvim` | `git mergetool --no-prompt --tool=vimdiff` |
|
||||
| `gl` | `git pull` |
|
||||
| `gpr` | `git pull --rebase` |
|
||||
| `gup` | `git pull --rebase` |
|
||||
| `gupa` | `git pull --rebase --autostash` |
|
||||
| `gupav` | `git pull --rebase --autostash --verbose` |
|
||||
| `gupv` | `git pull --rebase --verbose` |
|
||||
| `ggu` | `git pull --rebase origin $(current_branch)` |
|
||||
| `gupom` | `git pull --rebase origin $(git_main_branch)` |
|
||||
| `gupomi` | `git pull --rebase=interactive origin $(git_main_branch)` |
|
||||
| `gprv` | `git pull --rebase -v` |
|
||||
| `gpra` | `git pull --rebase --autostash` |
|
||||
| `gprav` | `git pull --rebase --autostash -v` |
|
||||
| `gprom` | `git pull --rebase origin $(git_main_branch)` |
|
||||
| `gpromi` | `git pull --rebase=interactive origin $(git_main_branch)` |
|
||||
| `ggpull` | `git pull origin "$(git_current_branch)"` |
|
||||
| `ggl` | `git pull origin $(current_branch)` |
|
||||
| `gluc` | `git pull upstream $(git_current_branch)` |
|
||||
|
@ -153,6 +152,7 @@ plugins=(... git)
|
|||
| `grbd` | `git rebase $(git_develop_branch)` |
|
||||
| `grbm` | `git rebase $(git_main_branch)` |
|
||||
| `grbom` | `git rebase origin/$(git_main_branch)` |
|
||||
| `grf` | `git reflog` |
|
||||
| `gr` | `git remote` |
|
||||
| `grv` | `git remote --verbose` |
|
||||
| `gra` | `git remote add` |
|
||||
|
@ -165,7 +165,7 @@ plugins=(... git)
|
|||
| `grhh` | `git reset --hard` |
|
||||
| `grhk` | `git reset --keep` |
|
||||
| `grhs` | `git reset --soft` |
|
||||
| `gpristine` | `git reset --hard && git clean -dffx` |
|
||||
| `gpristine` | `git reset --hard && git clean --force -dfx` |
|
||||
| `groh` | `git reset origin/$(git_current_branch) --hard` |
|
||||
| `grs` | `git restore` |
|
||||
| `grss` | `git restore --source` |
|
||||
|
@ -186,7 +186,7 @@ plugins=(... git)
|
|||
| `gstp` | `git stash pop` |
|
||||
| `gsta` | On Git >= 2.13: `git stash push` |
|
||||
| `gsta` | On Git < 2.13: `git stash save` |
|
||||
| `gsts` | `git stash show` |
|
||||
| `gsts` | `git stash show --patch` |
|
||||
| `gst` | `git status` |
|
||||
| `gss` | `git status --short` |
|
||||
| `gsb` | `git status --short -b` |
|
||||
|
@ -226,7 +226,7 @@ These are aliases that have been removed, renamed, or otherwise modified in a wa
|
|||
receive further support.
|
||||
|
||||
| Alias | Command | Modification |
|
||||
| :------- | :----------------------------------------------------- | :-------------------------------------------------------- |
|
||||
| :------- | :-------------------------------------------------------- | :-------------------------------------------------------- |
|
||||
| `gap` | `git add --patch` | New alias: `gapa`. |
|
||||
| `gcl` | `git config --list` | New alias: `gcf`. |
|
||||
| `gdc` | `git diff --cached` | New alias: `gdca`. |
|
||||
|
@ -238,6 +238,12 @@ receive further support.
|
|||
| `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`. |
|
||||
| `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
|
||||
|
||||
|
@ -251,6 +257,8 @@ receive further support.
|
|||
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise. |
|
||||
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise. |
|
||||
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote. |
|
||||
| `gbda` | Deletes all merged branches |
|
||||
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
||||
|
||||
### Work in Progress (WIP)
|
||||
|
||||
|
|
|
@ -20,26 +20,31 @@ function current_branch() {
|
|||
function git_develop_branch() {
|
||||
command git rev-parse --git-dir &>/dev/null || return
|
||||
local branch
|
||||
for branch in dev devel development; do
|
||||
for branch in dev devel develop development; do
|
||||
if command git show-ref -q --verify refs/heads/$branch; then
|
||||
echo $branch
|
||||
return
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
echo develop
|
||||
return 1
|
||||
}
|
||||
|
||||
# Check if main exists and use instead of master
|
||||
function git_main_branch() {
|
||||
command git rev-parse --git-dir &>/dev/null || return
|
||||
local ref
|
||||
for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default}; do
|
||||
for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,master}; do
|
||||
if command git show-ref -q --verify $ref; then
|
||||
echo ${ref:t}
|
||||
return
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
# If no main branch was found, fall back to master but return error
|
||||
echo master
|
||||
return 1
|
||||
}
|
||||
|
||||
function grename() {
|
||||
|
@ -122,7 +127,26 @@ alias gb='git branch'
|
|||
alias gba='git branch --all'
|
||||
alias gbd='git branch --delete'
|
||||
alias gbD='git branch --delete --force'
|
||||
alias gbda='git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null'
|
||||
|
||||
function gbda() {
|
||||
git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null
|
||||
}
|
||||
|
||||
# Copied and modified from James Roeder (jmaroeder) under MIT License
|
||||
# https://github.com/jmaroeder/plugin-git/blob/216723ef4f9e8dde399661c39c80bdf73f4076c4/functions/gbda.fish
|
||||
function gbds() {
|
||||
local default_branch=$(git_main_branch)
|
||||
(( ! $? )) || default_branch=$(git_develop_branch)
|
||||
|
||||
git for-each-ref refs/heads/ "--format=%(refname:short)" | \
|
||||
while read branch; do
|
||||
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
|
||||
git branch -D $branch
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
alias gbgd='LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -d'
|
||||
alias gbgD='LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -D'
|
||||
alias gbm='git branch --move'
|
||||
|
@ -133,6 +157,7 @@ alias gbg='LANG=C git branch -vv | grep ": gone\]"'
|
|||
alias gco='git checkout'
|
||||
alias gcor='git checkout --recurse-submodules'
|
||||
alias gcb='git checkout -b'
|
||||
alias gcB='git checkout -B'
|
||||
alias gcd='git checkout $(git_develop_branch)'
|
||||
alias gcm='git checkout $(git_main_branch)'
|
||||
alias gcp='git cherry-pick'
|
||||
|
@ -142,8 +167,17 @@ alias gclean='git clean --interactive -d'
|
|||
alias gcl='git clone --recurse-submodules'
|
||||
|
||||
function gccd() {
|
||||
command git clone --recurse-submodules "$@"
|
||||
[[ -d "$_" ]] && cd "$_" || cd "${${_:t}%.git}"
|
||||
setopt localoptions extendedglob
|
||||
|
||||
# get repo URI from args based on valid formats: https://git-scm.com/docs/git-clone#URLS
|
||||
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
|
||||
|
||||
|
@ -160,6 +194,7 @@ alias gca='git commit --verbose --all'
|
|||
alias gca!='git commit --verbose --all --amend'
|
||||
alias gcan!='git commit --verbose --all --no-edit --amend'
|
||||
alias gcans!='git commit --verbose --all --signoff --no-edit --amend'
|
||||
alias gcann!='git commit --verbose --all --date=now --no-edit --amend'
|
||||
alias gc!='git commit --verbose --amend'
|
||||
alias gcn!='git commit --verbose --no-edit --amend'
|
||||
alias gcf='git config --list'
|
||||
|
@ -222,12 +257,12 @@ alias gmom='git merge origin/$(git_main_branch)'
|
|||
alias gmum='git merge upstream/$(git_main_branch)'
|
||||
alias gmtl='git mergetool --no-prompt'
|
||||
alias gmtlvim='git mergetool --no-prompt --tool=vimdiff'
|
||||
|
||||
alias gl='git pull'
|
||||
alias gpr='git pull --rebase'
|
||||
alias gup='git pull --rebase'
|
||||
alias gupa='git pull --rebase --autostash'
|
||||
alias gupav='git pull --rebase --autostash --verbose'
|
||||
alias gupv='git pull --rebase --verbose'
|
||||
alias gprv='git pull --rebase -v'
|
||||
alias gpra='git pull --rebase --autostash'
|
||||
alias gprav='git pull --rebase --autostash -v'
|
||||
|
||||
function ggu() {
|
||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
||||
|
@ -235,8 +270,8 @@ function ggu() {
|
|||
}
|
||||
compdef _git ggu=git-checkout
|
||||
|
||||
alias gupom='git pull --rebase origin $(git_main_branch)'
|
||||
alias gupomi='git pull --rebase=interactive origin $(git_main_branch)'
|
||||
alias gprom='git pull --rebase origin $(git_main_branch)'
|
||||
alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
|
||||
alias ggpull='git pull origin "$(git_current_branch)"'
|
||||
|
||||
function ggl() {
|
||||
|
@ -300,6 +335,7 @@ alias grbs='git rebase --skip'
|
|||
alias grbd='git rebase $(git_develop_branch)'
|
||||
alias grbm='git rebase $(git_main_branch)'
|
||||
alias grbom='git rebase origin/$(git_main_branch)'
|
||||
alias grf='git reflog'
|
||||
alias gr='git remote'
|
||||
alias grv='git remote --verbose'
|
||||
alias gra='git remote add'
|
||||
|
@ -319,6 +355,8 @@ alias grss='git restore --source'
|
|||
alias grst='git restore --staged'
|
||||
alias gunwip='git rev-list --max-count=1 --format="%s" HEAD | grep -q "\--wip--" && git reset HEAD~1'
|
||||
alias grev='git revert'
|
||||
alias greva='git revert --abort'
|
||||
alias grevc='git revert --continue'
|
||||
alias grm='git rm'
|
||||
alias grmc='git rm --cached'
|
||||
alias gcount='git shortlog --summary --numbered'
|
||||
|
@ -334,7 +372,7 @@ alias gstp='git stash pop'
|
|||
is-at-least 2.13 "$git_version" \
|
||||
&& alias gsta='git stash push' \
|
||||
|| alias gsta='git stash save'
|
||||
alias gsts='git stash show'
|
||||
alias gsts='git stash show --patch'
|
||||
alias gst='git status'
|
||||
alias gss='git status --short'
|
||||
alias gsb='git status --short --branch'
|
||||
|
@ -364,3 +402,20 @@ alias gk='\gitk --all --branches &!'
|
|||
alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
|
||||
|
||||
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
|
||||
|
|
|
@ -7,9 +7,3 @@ To use it, add `gitfast` to the plugins array in your zshrc file:
|
|||
```zsh
|
||||
plugins=(... gitfast)
|
||||
```
|
||||
|
||||
## Aliases
|
||||
|
||||
An earlier version of the plugin also loaded the git plugin. If you want to keep those
|
||||
aliases enable the [git plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git)
|
||||
as well.
|
||||
|
|
|
@ -58,6 +58,12 @@
|
|||
#
|
||||
# When set to "1" suggest all options, including options which are
|
||||
# typically hidden (e.g. '--allow-empty' for 'git commit').
|
||||
#
|
||||
# GIT_COMPLETION_IGNORE_CASE
|
||||
#
|
||||
# When set, uses for-each-ref '--ignore-case' to find refs that match
|
||||
# case insensitively, even on systems with case sensitive file systems
|
||||
# (e.g., completing tag name "FOO" on "git checkout f<TAB>").
|
||||
|
||||
# The following functions are meant to modify COMPREPLY, which should not be
|
||||
# modified directly. The purpose is to localize the modifications so it's
|
||||
|
@ -320,116 +326,6 @@ else
|
|||
unset $(compgen -v __gitcomp_builtin_)
|
||||
fi
|
||||
|
||||
__gitcomp_builtin_add_default=" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --sparse --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-sparse --no-chmod --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_am_default=" --interactive --3way --quiet --signoff --utf8 --keep --keep-non-patch --message-id --keep-cr --no-keep-cr --scissors --quoted-cr= --whitespace= --ignore-space-change --ignore-whitespace --directory= --exclude= --include= --patch-format= --reject --resolvemsg= --continue --resolved --skip --abort --quit --show-current-patch --allow-empty --committer-date-is-author-date --ignore-date --rerere-autoupdate --gpg-sign --empty= -- --no-interactive --no-3way --no-quiet --no-signoff --no-utf8 --no-keep --no-keep-non-patch --no-message-id --no-scissors --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-directory --no-exclude --no-include --no-patch-format --no-reject --no-resolvemsg --no-committer-date-is-author-date --no-ignore-date --no-rerere-autoupdate --no-gpg-sign"
|
||||
__gitcomp_builtin_apply_default=" --exclude= --include= --no-add --stat --numstat --summary --check --index --intent-to-add --cached --apply --3way --build-fake-ancestor= --whitespace= --ignore-space-change --ignore-whitespace --reverse --unidiff-zero --reject --allow-overlap --verbose --quiet --inaccurate-eof --recount --directory= --allow-empty --add -- --no-stat --no-numstat --no-summary --no-check --no-index --no-intent-to-add --no-cached --no-apply --no-3way --no-build-fake-ancestor --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-reverse --no-unidiff-zero --no-reject --no-allow-overlap --no-verbose --no-quiet --no-inaccurate-eof --no-recount --no-directory --no-allow-empty"
|
||||
__gitcomp_builtin_archive_default=" --output= --remote= --exec= --no-output -- --no-remote --no-exec"
|
||||
__gitcomp_builtin_bisect__helper_default=" --bisect-reset --bisect-next-check --bisect-terms --bisect-start --bisect-next --bisect-state --bisect-log --bisect-replay --bisect-skip --bisect-visualize --bisect-run --no-log --log"
|
||||
__gitcomp_builtin_blame_default=" --incremental --root --show-stats --progress --score-debug --show-name --show-number --porcelain --line-porcelain --show-email --ignore-rev= --ignore-revs-file= --color-lines --color-by-age --minimal --contents= --abbrev --no-incremental -- --no-root --no-show-stats --no-progress --no-score-debug --no-show-name --no-show-number --no-porcelain --no-line-porcelain --no-show-email --no-ignore-rev --no-ignore-revs-file --no-color-lines --no-color-by-age --no-minimal --no-contents --no-abbrev"
|
||||
__gitcomp_builtin_branch_default=" --verbose --quiet --track --set-upstream-to= --unset-upstream --color --remotes --contains --no-contains --abbrev --all --delete --move --copy --list --show-current --create-reflog --edit-description --merged --no-merged --column --sort= --points-at= --ignore-case --recurse-submodules --format= -- --no-verbose --no-quiet --no-track --no-set-upstream-to --no-unset-upstream --no-color --no-remotes --no-abbrev --no-all --no-delete --no-move --no-copy --no-list --no-show-current --no-create-reflog --no-edit-description --no-column --no-sort --no-points-at --no-ignore-case --no-recurse-submodules --no-format"
|
||||
__gitcomp_builtin_bugreport_default=" --output-directory= --suffix= --no-output-directory -- --no-suffix"
|
||||
__gitcomp_builtin_cat_file_default=" --allow-unknown-type --batch --batch-check --batch-command --batch-all-objects --buffer --follow-symlinks --unordered --textconv --filters --path= --no-allow-unknown-type -- --no-buffer --no-follow-symlinks --no-unordered --no-path"
|
||||
__gitcomp_builtin_check_attr_default=" --all --cached --stdin --no-all -- --no-cached --no-stdin"
|
||||
__gitcomp_builtin_check_ignore_default=" --quiet --verbose --stdin --non-matching --no-index --index -- --no-quiet --no-verbose --no-stdin --no-non-matching"
|
||||
__gitcomp_builtin_check_mailmap_default=" --stdin --no-stdin"
|
||||
__gitcomp_builtin_checkout_default=" --guess --overlay --quiet --recurse-submodules --progress --merge --conflict= --detach --track --orphan= --ignore-other-worktrees --ours --theirs --patch --ignore-skip-worktree-bits --pathspec-from-file= --pathspec-file-nul --no-guess -- --no-overlay --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-detach --no-track --no-orphan --no-ignore-other-worktrees --no-patch --no-ignore-skip-worktree-bits --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_checkout__worker_default=" --prefix= --no-prefix"
|
||||
__gitcomp_builtin_checkout_index_default=" --all --ignore-skip-worktree-bits --force --quiet --no-create --index --stdin --temp --prefix= --stage= --create -- --no-all --no-ignore-skip-worktree-bits --no-force --no-quiet --no-index --no-stdin --no-temp --no-prefix"
|
||||
__gitcomp_builtin_cherry_default=" --abbrev --verbose --no-abbrev -- --no-verbose"
|
||||
__gitcomp_builtin_cherry_pick_default=" --quit --continue --abort --skip --cleanup= --no-commit --edit --signoff --mainline= --rerere-autoupdate --strategy= --strategy-option= --gpg-sign --ff --allow-empty --allow-empty-message --keep-redundant-commits --commit -- --no-cleanup --no-edit --no-signoff --no-mainline --no-rerere-autoupdate --no-strategy --no-strategy-option --no-gpg-sign --no-ff --no-allow-empty --no-allow-empty-message --no-keep-redundant-commits"
|
||||
__gitcomp_builtin_clean_default=" --quiet --dry-run --interactive --exclude= --no-quiet -- --no-dry-run --no-interactive"
|
||||
__gitcomp_builtin_clone_default=" --verbose --quiet --progress --reject-shallow --no-checkout --bare --mirror --local --no-hardlinks --shared --recurse-submodules --jobs= --template= --reference= --reference-if-able= --dissociate --origin= --branch= --upload-pack= --depth= --shallow-since= --shallow-exclude= --single-branch --no-tags --shallow-submodules --separate-git-dir= --config= --server-option= --ipv4 --ipv6 --filter= --also-filter-submodules --remote-submodules --sparse --checkout --hardlinks --tags -- --no-verbose --no-quiet --no-progress --no-reject-shallow --no-bare --no-mirror --no-local --no-shared --no-recurse-submodules --no-recursive --no-jobs --no-template --no-reference --no-reference-if-able --no-dissociate --no-origin --no-branch --no-upload-pack --no-depth --no-shallow-since --no-shallow-exclude --no-single-branch --no-shallow-submodules --no-separate-git-dir --no-config --no-server-option --no-ipv4 --no-ipv6 --no-filter --no-also-filter-submodules --no-remote-submodules --no-sparse"
|
||||
__gitcomp_builtin_column_default=" --command= --mode --raw-mode= --width= --indent= --nl= --padding= --no-command -- --no-mode --no-raw-mode --no-width --no-indent --no-nl --no-padding"
|
||||
__gitcomp_builtin_commit_default=" --quiet --verbose --file= --author= --date= --message= --reedit-message= --reuse-message= --fixup= --squash= --reset-author --trailer= --signoff --template= --edit --cleanup= --status --gpg-sign --all --include --interactive --patch --only --no-verify --dry-run --short --branch --ahead-behind --porcelain --long --null --amend --no-post-rewrite --untracked-files --pathspec-from-file= --pathspec-file-nul --verify --post-rewrite -- --no-quiet --no-verbose --no-file --no-author --no-date --no-message --no-reedit-message --no-reuse-message --no-fixup --no-squash --no-reset-author --no-signoff --no-template --no-edit --no-cleanup --no-status --no-gpg-sign --no-all --no-include --no-interactive --no-patch --no-only --no-dry-run --no-short --no-branch --no-ahead-behind --no-porcelain --no-long --no-null --no-amend --no-untracked-files --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_commit_graph_default=" --object-dir= --no-object-dir"
|
||||
__gitcomp_builtin_config_default=" --global --system --local --worktree --file= --blob= --get --get-all --get-regexp --get-urlmatch --replace-all --add --unset --unset-all --rename-section --remove-section --list --fixed-value --edit --get-color --get-colorbool --type= --bool --int --bool-or-int --bool-or-str --path --expiry-date --null --name-only --includes --show-origin --show-scope --default= --no-global -- --no-system --no-local --no-worktree --no-file --no-blob --no-get --no-get-all --no-get-regexp --no-get-urlmatch --no-replace-all --no-add --no-unset --no-unset-all --no-rename-section --no-remove-section --no-list --no-fixed-value --no-edit --no-get-color --no-get-colorbool --no-type --no-null --no-name-only --no-includes --no-show-origin --no-show-scope --no-default"
|
||||
__gitcomp_builtin_count_objects_default=" --verbose --human-readable --no-verbose -- --no-human-readable"
|
||||
__gitcomp_builtin_credential_cache_default=" --timeout= --socket= --no-timeout -- --no-socket"
|
||||
__gitcomp_builtin_credential_cache__daemon_default=" --debug --no-debug"
|
||||
__gitcomp_builtin_credential_store_default=" --file= --no-file"
|
||||
__gitcomp_builtin_describe_default=" --contains --debug --all --tags --long --first-parent --abbrev --exact-match --candidates= --match= --exclude= --always --dirty --broken --no-contains -- --no-debug --no-all --no-tags --no-long --no-first-parent --no-abbrev --no-exact-match --no-candidates --no-match --no-exclude --no-always --no-dirty --no-broken"
|
||||
__gitcomp_builtin_difftool_default=" --gui --dir-diff --no-prompt --symlinks --tool= --tool-help --trust-exit-code --extcmd= --no-index --index -- --no-gui --no-dir-diff --no-symlinks --no-tool --no-tool-help --no-trust-exit-code --no-extcmd"
|
||||
__gitcomp_builtin_env__helper_default=" --type= --default= --exit-code --no-default -- --no-exit-code"
|
||||
__gitcomp_builtin_fast_export_default=" --progress= --signed-tags= --tag-of-filtered-object= --reencode= --export-marks= --import-marks= --import-marks-if-exists= --fake-missing-tagger --full-tree --use-done-feature --no-data --refspec= --anonymize --anonymize-map= --reference-excluded-parents --show-original-ids --mark-tags --data -- --no-progress --no-signed-tags --no-tag-of-filtered-object --no-reencode --no-export-marks --no-import-marks --no-import-marks-if-exists --no-fake-missing-tagger --no-full-tree --no-use-done-feature --no-refspec --no-anonymize --no-reference-excluded-parents --no-show-original-ids --no-mark-tags"
|
||||
__gitcomp_builtin_fetch_default=" --verbose --quiet --all --set-upstream --append --atomic --upload-pack= --force --multiple --tags --jobs= --prefetch --prune --prune-tags --recurse-submodules --dry-run --write-fetch-head --keep --update-head-ok --progress --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --refetch --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --negotiate-only --filter= --auto-maintenance --auto-gc --show-forced-updates --write-commit-graph --stdin --no-verbose -- --no-quiet --no-all --no-set-upstream --no-append --no-atomic --no-upload-pack --no-force --no-multiple --no-tags --no-jobs --no-prefetch --no-prune --no-prune-tags --no-recurse-submodules --no-dry-run --no-write-fetch-head --no-keep --no-update-head-ok --no-progress --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-negotiate-only --no-filter --no-auto-maintenance --no-auto-gc --no-show-forced-updates --no-write-commit-graph --no-stdin"
|
||||
__gitcomp_builtin_fmt_merge_msg_default=" --log --message= --into-name= --file= --no-log -- --no-message --no-into-name --no-file"
|
||||
__gitcomp_builtin_for_each_ref_default=" --shell --perl --python --tcl --count= --format= --color --sort= --points-at= --merged --no-merged --contains --no-contains --ignore-case -- --no-shell --no-perl --no-python --no-tcl --no-count --no-format --no-color --no-sort --no-points-at --no-ignore-case"
|
||||
__gitcomp_builtin_for_each_repo_default=" --config= --no-config"
|
||||
__gitcomp_builtin_format_patch_default=" --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --filename-max-length= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --to= --cc= --from --in-reply-to= --attach --inline --thread --signature= --base= --signature-file= --quiet --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-numbered --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-filename-max-length --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-to --no-cc --no-from --no-in-reply-to --no-attach --no-thread --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor"
|
||||
__gitcomp_builtin_fsck_default=" --verbose --unreachable --dangling --tags --root --cache --reflogs --full --connectivity-only --strict --lost-found --progress --name-objects --no-verbose -- --no-unreachable --no-dangling --no-tags --no-root --no-cache --no-reflogs --no-full --no-connectivity-only --no-strict --no-lost-found --no-progress --no-name-objects"
|
||||
__gitcomp_builtin_fsck_objects_default=" --verbose --unreachable --dangling --tags --root --cache --reflogs --full --connectivity-only --strict --lost-found --progress --name-objects --no-verbose -- --no-unreachable --no-dangling --no-tags --no-root --no-cache --no-reflogs --no-full --no-connectivity-only --no-strict --no-lost-found --no-progress --no-name-objects"
|
||||
__gitcomp_builtin_fsmonitor__daemon_default=""
|
||||
__gitcomp_builtin_gc_default=" --quiet --prune --aggressive --keep-largest-pack --no-quiet -- --no-prune --no-aggressive --no-keep-largest-pack"
|
||||
__gitcomp_builtin_grep_default=" --cached --no-index --untracked --exclude-standard --recurse-submodules --invert-match --ignore-case --word-regexp --text --textconv --recursive --max-depth= --extended-regexp --basic-regexp --fixed-strings --perl-regexp --line-number --column --full-name --files-with-matches --name-only --files-without-match --only-matching --count --color --break --heading --context= --before-context= --after-context= --threads= --show-function --function-context --and --or --not --quiet --all-match --index -- --no-cached --no-untracked --no-exclude-standard --no-recurse-submodules --no-invert-match --no-ignore-case --no-word-regexp --no-text --no-textconv --no-recursive --no-extended-regexp --no-basic-regexp --no-fixed-strings --no-perl-regexp --no-line-number --no-column --no-full-name --no-files-with-matches --no-name-only --no-files-without-match --no-only-matching --no-count --no-color --no-break --no-heading --no-context --no-before-context --no-after-context --no-threads --no-show-function --no-function-context --no-or --no-quiet --no-all-match"
|
||||
__gitcomp_builtin_hash_object_default=" --stdin --stdin-paths --no-filters --literally --path= --filters -- --no-stdin --no-stdin-paths --no-literally --no-path"
|
||||
__gitcomp_builtin_help_default=" --all --external-commands --aliases --man --web --info --verbose --guides --config --no-external-commands -- --no-aliases --no-man --no-web --no-info --no-verbose"
|
||||
__gitcomp_builtin_hook_default=""
|
||||
__gitcomp_builtin_init_default=" --template= --bare --shared --quiet --separate-git-dir= --initial-branch= --object-format= --no-template -- --no-bare --no-quiet --no-separate-git-dir --no-initial-branch --no-object-format"
|
||||
__gitcomp_builtin_init_db_default=" --template= --bare --shared --quiet --separate-git-dir= --initial-branch= --object-format= --no-template -- --no-bare --no-quiet --no-separate-git-dir --no-initial-branch --no-object-format"
|
||||
__gitcomp_builtin_interpret_trailers_default=" --in-place --trim-empty --where= --if-exists= --if-missing= --only-trailers --only-input --unfold --parse --no-divider --trailer= --divider -- --no-in-place --no-trim-empty --no-where --no-if-exists --no-if-missing --no-only-trailers --no-only-input --no-unfold --no-trailer"
|
||||
__gitcomp_builtin_log_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
|
||||
__gitcomp_builtin_ls_files_default=" --cached --deleted --modified --others --ignored --stage --killed --directory --eol --empty-directory --unmerged --resolve-undo --exclude= --exclude-from= --exclude-per-directory= --exclude-standard --full-name --recurse-submodules --error-unmatch --with-tree= --abbrev --debug --deduplicate --sparse --no-cached -- --no-deleted --no-modified --no-others --no-ignored --no-stage --no-killed --no-directory --no-eol --no-empty-directory --no-unmerged --no-resolve-undo --no-exclude-per-directory --no-recurse-submodules --no-error-unmatch --no-with-tree --no-abbrev --no-debug --no-deduplicate --no-sparse"
|
||||
__gitcomp_builtin_ls_remote_default=" --quiet --upload-pack= --tags --heads --refs --get-url --sort= --symref --server-option= --no-quiet -- --no-upload-pack --no-tags --no-heads --no-refs --no-get-url --no-sort --no-symref --no-server-option"
|
||||
__gitcomp_builtin_ls_tree_default=" --long --name-only --name-status --object-only --full-name --full-tree --format= --abbrev --no-full-name -- --no-full-tree --no-abbrev"
|
||||
__gitcomp_builtin_merge_default=" --stat --summary --log --squash --commit --edit --cleanup= --ff --ff-only --rerere-autoupdate --verify-signatures --strategy= --strategy-option= --message= --file --into-name= --verbose --quiet --abort --quit --continue --allow-unrelated-histories --progress --gpg-sign --autostash --overwrite-ignore --signoff --no-verify --verify -- --no-stat --no-summary --no-log --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-rerere-autoupdate --no-verify-signatures --no-strategy --no-strategy-option --no-message --no-into-name --no-verbose --no-quiet --no-abort --no-quit --no-continue --no-allow-unrelated-histories --no-progress --no-gpg-sign --no-autostash --no-overwrite-ignore --no-signoff"
|
||||
__gitcomp_builtin_merge_base_default=" --all --octopus --independent --is-ancestor --fork-point --no-all"
|
||||
__gitcomp_builtin_merge_file_default=" --stdout --diff3 --zdiff3 --ours --theirs --union --marker-size= --quiet --no-stdout -- --no-diff3 --no-zdiff3 --no-ours --no-theirs --no-union --no-marker-size --no-quiet"
|
||||
__gitcomp_builtin_mktree_default=" --missing --batch --no-missing -- --no-batch"
|
||||
__gitcomp_builtin_multi_pack_index_default=" --object-dir= --no-object-dir"
|
||||
__gitcomp_builtin_mv_default=" --verbose --dry-run --sparse --no-verbose -- --no-dry-run --no-sparse"
|
||||
__gitcomp_builtin_name_rev_default=" --name-only --tags --refs= --exclude= --all --stdin --annotate-stdin --undefined --always --no-name-only -- --no-tags --no-refs --no-exclude --no-all --no-stdin --no-annotate-stdin --no-undefined --no-always"
|
||||
__gitcomp_builtin_notes_default=" --ref= --no-ref"
|
||||
__gitcomp_builtin_pack_objects_default=" --quiet --progress --all-progress --all-progress-implied --index-version= --max-pack-size= --local --incremental --window= --window-memory= --depth= --reuse-delta --reuse-object --delta-base-offset --threads= --non-empty --revs --unpacked --all --reflog --indexed-objects --stdin-packs --stdout --include-tag --keep-unreachable --pack-loose-unreachable --unpack-unreachable --sparse --thin --shallow --honor-pack-keep --keep-pack= --compression= --keep-true-parents --use-bitmap-index --write-bitmap-index --filter= --missing= --exclude-promisor-objects --delta-islands --uri-protocol= --no-quiet -- --no-progress --no-all-progress --no-all-progress-implied --no-local --no-incremental --no-window --no-depth --no-reuse-delta --no-reuse-object --no-delta-base-offset --no-threads --no-non-empty --no-revs --no-stdin-packs --no-stdout --no-include-tag --no-keep-unreachable --no-pack-loose-unreachable --no-unpack-unreachable --no-sparse --no-thin --no-shallow --no-honor-pack-keep --no-keep-pack --no-compression --no-keep-true-parents --no-use-bitmap-index --no-write-bitmap-index --no-filter --no-exclude-promisor-objects --no-delta-islands --no-uri-protocol"
|
||||
__gitcomp_builtin_pack_refs_default=" --all --prune --no-all -- --no-prune"
|
||||
__gitcomp_builtin_pickaxe_default=" --incremental --root --show-stats --progress --score-debug --show-name --show-number --porcelain --line-porcelain --show-email --ignore-rev= --ignore-revs-file= --color-lines --color-by-age --minimal --contents= --abbrev --no-incremental -- --no-root --no-show-stats --no-progress --no-score-debug --no-show-name --no-show-number --no-porcelain --no-line-porcelain --no-show-email --no-ignore-rev --no-ignore-revs-file --no-color-lines --no-color-by-age --no-minimal --no-contents --no-abbrev"
|
||||
__gitcomp_builtin_prune_default=" --dry-run --verbose --progress --expire= --exclude-promisor-objects --no-dry-run -- --no-verbose --no-progress --no-expire --no-exclude-promisor-objects"
|
||||
__gitcomp_builtin_prune_packed_default=" --dry-run --quiet --no-dry-run -- --no-quiet"
|
||||
__gitcomp_builtin_pull_default=" --verbose --quiet --progress --recurse-submodules --rebase --stat --log --signoff --squash --commit --edit --cleanup= --ff --ff-only --verify --verify-signatures --autostash --strategy= --strategy-option= --gpg-sign --allow-unrelated-histories --all --append --upload-pack= --force --tags --prune --jobs --dry-run --keep --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --show-forced-updates --set-upstream --no-verbose -- --no-quiet --no-progress --no-recurse-submodules --no-rebase --no-stat --no-log --no-signoff --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-verify --no-verify-signatures --no-autostash --no-strategy --no-strategy-option --no-gpg-sign --no-allow-unrelated-histories --no-all --no-append --no-upload-pack --no-force --no-tags --no-prune --no-jobs --no-dry-run --no-keep --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-show-forced-updates --no-set-upstream"
|
||||
__gitcomp_builtin_push_default=" --verbose --quiet --repo= --all --mirror --delete --tags --dry-run --porcelain --force --force-with-lease --force-if-includes --recurse-submodules= --receive-pack= --exec= --set-upstream --progress --prune --no-verify --follow-tags --signed --atomic --push-option= --ipv4 --ipv6 --verify -- --no-verbose --no-quiet --no-repo --no-all --no-mirror --no-delete --no-tags --no-dry-run --no-porcelain --no-force --no-force-with-lease --no-force-if-includes --no-recurse-submodules --no-receive-pack --no-exec --no-set-upstream --no-progress --no-prune --no-follow-tags --no-signed --no-atomic --no-push-option --no-ipv4 --no-ipv6"
|
||||
__gitcomp_builtin_range_diff_default=" --creation-factor= --no-dual-color --notes --left-only --right-only --patch --no-patch --unified --function-context --raw --patch-with-raw --patch-with-stat --numstat --shortstat --dirstat --cumulative --dirstat-by-file --check --summary --name-only --name-status --stat --stat-width= --stat-name-width= --stat-graph-width= --stat-count= --compact-summary --binary --full-index --color --ws-error-highlight= --abbrev --src-prefix= --dst-prefix= --line-prefix= --no-prefix --inter-hunk-context= --output-indicator-new= --output-indicator-old= --output-indicator-context= --break-rewrites --find-renames --irreversible-delete --find-copies --find-copies-harder --no-renames --rename-empty --follow --minimal --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-cr-at-eol --ignore-blank-lines --ignore-matching-lines= --indent-heuristic --patience --histogram --diff-algorithm= --anchored= --word-diff --word-diff-regex= --color-words --color-moved --color-moved-ws= --relative --text --exit-code --quiet --ext-diff --textconv --ignore-submodules --submodule --ita-invisible-in-index --ita-visible-in-index --pickaxe-all --pickaxe-regex --rotate-to= --skip-to= --find-object= --diff-filter= --output= --dual-color -- --no-creation-factor --no-notes --no-left-only --no-right-only --no-function-context --no-compact-summary --no-full-index --no-color --no-abbrev --no-find-copies-harder --no-rename-empty --no-follow --no-minimal --no-ignore-matching-lines --no-indent-heuristic --no-color-moved --no-color-moved-ws --no-relative --no-text --no-exit-code --no-quiet --no-ext-diff --no-textconv"
|
||||
__gitcomp_builtin_read_tree_default=" --index-output= --empty --verbose --trivial --aggressive --reset --prefix= --exclude-per-directory= --dry-run --no-sparse-checkout --debug-unpack --recurse-submodules --quiet --sparse-checkout -- --no-empty --no-verbose --no-trivial --no-aggressive --no-reset --no-dry-run --no-debug-unpack --no-recurse-submodules --no-quiet"
|
||||
__gitcomp_builtin_rebase_default=" --onto= --keep-base --no-verify --quiet --verbose --no-stat --signoff --committer-date-is-author-date --reset-author-date --ignore-whitespace --whitespace= --force-rebase --no-ff --continue --skip --abort --quit --edit-todo --show-current-patch --apply --merge --interactive --rerere-autoupdate --empty= --autosquash --gpg-sign --autostash --exec= --rebase-merges --fork-point --strategy= --strategy-option= --root --reschedule-failed-exec --reapply-cherry-picks --verify --stat --ff -- --no-onto --no-keep-base --no-quiet --no-verbose --no-signoff --no-committer-date-is-author-date --no-reset-author-date --no-ignore-whitespace --no-whitespace --no-force-rebase --no-rerere-autoupdate --no-autosquash --no-gpg-sign --no-autostash --no-exec --no-rebase-merges --no-fork-point --no-strategy --no-strategy-option --no-root --no-reschedule-failed-exec --no-reapply-cherry-picks"
|
||||
__gitcomp_builtin_receive_pack_default=" --quiet --no-quiet"
|
||||
__gitcomp_builtin_reflog_default=""
|
||||
__gitcomp_builtin_remote_default=" --verbose --no-verbose"
|
||||
__gitcomp_builtin_repack_default=" --quiet --local --write-bitmap-index --delta-islands --unpack-unreachable= --keep-unreachable --window= --window-memory= --depth= --threads= --max-pack-size= --pack-kept-objects --keep-pack= --geometric= --write-midx --no-quiet -- --no-local --no-write-bitmap-index --no-delta-islands --no-unpack-unreachable --no-keep-unreachable --no-window --no-window-memory --no-depth --no-threads --no-max-pack-size --no-pack-kept-objects --no-keep-pack --no-geometric --no-write-midx"
|
||||
__gitcomp_builtin_replace_default=" --list --delete --edit --graft --convert-graft-file --raw --format= --no-raw -- --no-format"
|
||||
__gitcomp_builtin_rerere_default=" --rerere-autoupdate --no-rerere-autoupdate"
|
||||
__gitcomp_builtin_reset_default=" --quiet --no-refresh --mixed --soft --hard --merge --keep --recurse-submodules --patch --intent-to-add --pathspec-from-file= --pathspec-file-nul --refresh -- --no-quiet --no-mixed --no-soft --no-hard --no-merge --no-keep --no-recurse-submodules --no-patch --no-intent-to-add --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_restore_default=" --source= --staged --worktree --ignore-unmerged --overlay --quiet --recurse-submodules --progress --merge --conflict= --ours --theirs --patch --ignore-skip-worktree-bits --pathspec-from-file= --pathspec-file-nul --no-source -- --no-staged --no-worktree --no-ignore-unmerged --no-overlay --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-patch --no-ignore-skip-worktree-bits --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_revert_default=" --quit --continue --abort --skip --cleanup= --no-commit --edit --signoff --mainline= --rerere-autoupdate --strategy= --strategy-option= --gpg-sign --commit -- --no-cleanup --no-edit --no-signoff --no-mainline --no-rerere-autoupdate --no-strategy --no-strategy-option --no-gpg-sign"
|
||||
__gitcomp_builtin_rm_default=" --dry-run --quiet --cached --ignore-unmatch --sparse --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-quiet --no-cached --no-ignore-unmatch --no-sparse --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_send_pack_default=" --verbose --quiet --receive-pack= --exec= --remote= --all --dry-run --mirror --force --signed --push-option= --progress --thin --atomic --stateless-rpc --stdin --helper-status --force-with-lease --force-if-includes --no-verbose -- --no-quiet --no-receive-pack --no-exec --no-remote --no-all --no-dry-run --no-mirror --no-force --no-signed --no-push-option --no-progress --no-thin --no-atomic --no-stateless-rpc --no-stdin --no-helper-status --no-force-with-lease --no-force-if-includes"
|
||||
__gitcomp_builtin_shortlog_default=" --committer --numbered --summary --email --group= --no-committer -- --no-numbered --no-summary --no-email --no-group"
|
||||
__gitcomp_builtin_show_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
|
||||
__gitcomp_builtin_show_branch_default=" --all --remotes --color --more --list --no-name --current --sha1-name --merge-base --independent --topo-order --topics --sparse --date-order --reflog --name -- --no-all --no-remotes --no-color --no-more --no-list --no-current --no-sha1-name --no-merge-base --no-independent --no-topo-order --no-topics --no-sparse --no-date-order"
|
||||
__gitcomp_builtin_show_index_default=" --object-format= --no-object-format"
|
||||
__gitcomp_builtin_show_ref_default=" --tags --heads --verify --head --dereference --hash --abbrev --quiet --exclude-existing --no-tags -- --no-heads --no-verify --no-head --no-dereference --no-hash --no-abbrev --no-quiet"
|
||||
__gitcomp_builtin_sparse_checkout_default=""
|
||||
__gitcomp_builtin_stage_default=" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --sparse --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-sparse --no-chmod --no-pathspec-from-file --no-pathspec-file-nul"
|
||||
__gitcomp_builtin_stash_default=""
|
||||
__gitcomp_builtin_status_default=" --verbose --short --branch --show-stash --ahead-behind --porcelain --long --null --untracked-files --ignored --ignore-submodules --column --no-renames --find-renames --renames -- --no-verbose --no-short --no-branch --no-show-stash --no-ahead-behind --no-porcelain --no-long --no-null --no-untracked-files --no-ignored --no-ignore-submodules --no-column"
|
||||
__gitcomp_builtin_stripspace_default=" --strip-comments --comment-lines"
|
||||
__gitcomp_builtin_switch_default=" --create= --force-create= --guess --discard-changes --quiet --recurse-submodules --progress --merge --conflict= --detach --track --orphan= --ignore-other-worktrees --no-create -- --no-force-create --no-guess --no-discard-changes --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-detach --no-track --no-orphan --no-ignore-other-worktrees"
|
||||
__gitcomp_builtin_symbolic_ref_default=" --quiet --delete --short --no-quiet -- --no-delete --no-short"
|
||||
__gitcomp_builtin_tag_default=" --list --delete --verify --annotate --message= --file= --edit --sign --cleanup= --local-user= --force --create-reflog --column --contains --no-contains --merged --no-merged --sort= --points-at --format= --color --ignore-case -- --no-annotate --no-file --no-edit --no-sign --no-cleanup --no-local-user --no-force --no-create-reflog --no-column --no-sort --no-points-at --no-format --no-color --no-ignore-case"
|
||||
__gitcomp_builtin_update_index_default=" --ignore-submodules --add --replace --remove --unmerged --refresh --really-refresh --cacheinfo --chmod= --assume-unchanged --no-assume-unchanged --skip-worktree --no-skip-worktree --ignore-skip-worktree-entries --info-only --force-remove --stdin --index-info --unresolve --again --ignore-missing --verbose --clear-resolve-undo --index-version= --split-index --untracked-cache --test-untracked-cache --force-untracked-cache --force-write-index --fsmonitor --fsmonitor-valid --no-fsmonitor-valid -- --no-ignore-submodules --no-add --no-replace --no-remove --no-unmerged --no-ignore-skip-worktree-entries --no-info-only --no-force-remove --no-ignore-missing --no-verbose --no-index-version --no-split-index --no-untracked-cache --no-test-untracked-cache --no-force-untracked-cache --no-force-write-index --no-fsmonitor"
|
||||
__gitcomp_builtin_update_ref_default=" --no-deref --stdin --create-reflog --deref -- --no-stdin --no-create-reflog"
|
||||
__gitcomp_builtin_update_server_info_default=" --force --no-force"
|
||||
__gitcomp_builtin_upload_pack_default=" --stateless-rpc --strict --timeout= --no-stateless-rpc -- --no-strict --no-timeout"
|
||||
__gitcomp_builtin_verify_commit_default=" --verbose --raw --no-verbose -- --no-raw"
|
||||
__gitcomp_builtin_verify_pack_default=" --verbose --stat-only --object-format= --no-verbose -- --no-stat-only --no-object-format"
|
||||
__gitcomp_builtin_verify_tag_default=" --verbose --raw --format= --no-verbose -- --no-raw --no-format"
|
||||
__gitcomp_builtin_version_default=" --build-options --no-build-options"
|
||||
__gitcomp_builtin_whatchanged_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate"
|
||||
__gitcomp_builtin_write_tree_default=" --missing-ok --prefix= --no-missing-ok -- --no-prefix"
|
||||
__gitcomp_builtin_send_email_default="--sender= --from= --smtp-auth= --8bit-encoding= --no-format-patch --no-bcc --no-suppress-from --no-annotate --relogin-delay= --no-cc --no-signed-off-cc --no-signed-off-by-cc --no-chain-reply-to --smtp-debug= --smtp-domain= --chain-reply-to --dry-run --compose --bcc= --smtp-user= --thread --cc-cover --identity= --to= --reply-to= --no-cc-cover --suppress-cc= --to-cmd= --smtp-server= --smtp-ssl-cert-path= --no-thread --smtp-server-option= --quiet --batch-size= --envelope-sender= --smtp-ssl --no-to --validate --format-patch --suppress-from --cc= --compose-encoding= --to-cover --in-reply-to= --annotate --smtp-encryption= --cc-cmd= --smtp-server-port= --smtp-pass= --signed-off-cc --signed-off-by-cc --no-xmailer --subject= --no-to-cover --confirm= --transfer-encoding= --no-smtp-auth --sendmail-cmd= --no-validate --no-identity --dump-aliases --xmailer --force --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --filename-max-length= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --from --attach --inline --signature= --base= --signature-file= --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-filename-max-length --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-from --no-in-reply-to --no-attach --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor"
|
||||
|
||||
__gitcomp_builtin_get_default ()
|
||||
{
|
||||
eval "test -n \"\$${1}_default\" && echo \"\$${1}_default\""
|
||||
}
|
||||
|
||||
# This function is equivalent to
|
||||
#
|
||||
# __gitcomp_opts "$(git xxx --git-completion-helper) ..."
|
||||
|
@ -457,11 +353,9 @@ __gitcomp_builtin ()
|
|||
else
|
||||
completion_helper="--git-completion-helper"
|
||||
fi
|
||||
completion="$(__git ${cmd/_/ } $completion_helper ||
|
||||
__gitcomp_builtin_get_default $var)" || return
|
||||
# leading and trailing spaces are significant to make
|
||||
# option removal work correctly.
|
||||
options=" $incl $completion "
|
||||
options=" $incl $(__git ${cmd/_/ } $completion_helper) " || return
|
||||
|
||||
for i in $excl; do
|
||||
options="${options/ $i / }"
|
||||
|
@ -604,6 +498,7 @@ __git_heads ()
|
|||
local pfx="${1-}" cur_="${2-}" sfx="${3-}"
|
||||
|
||||
__git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \
|
||||
${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \
|
||||
"refs/heads/$cur_*" "refs/heads/$cur_*/**"
|
||||
}
|
||||
|
||||
|
@ -617,6 +512,7 @@ __git_remote_heads ()
|
|||
local pfx="${1-}" cur_="${2-}" sfx="${3-}"
|
||||
|
||||
__git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \
|
||||
${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \
|
||||
"refs/remotes/$cur_*" "refs/remotes/$cur_*/**"
|
||||
}
|
||||
|
||||
|
@ -627,6 +523,7 @@ __git_tags ()
|
|||
local pfx="${1-}" cur_="${2-}" sfx="${3-}"
|
||||
|
||||
__git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \
|
||||
${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \
|
||||
"refs/tags/$cur_*" "refs/tags/$cur_*/**"
|
||||
}
|
||||
|
||||
|
@ -646,6 +543,7 @@ __git_dwim_remote_heads ()
|
|||
# but only output if the branch name is unique
|
||||
__git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \
|
||||
--sort="refname:strip=3" \
|
||||
${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \
|
||||
"refs/remotes/*/$cur_*" "refs/remotes/*/$cur_*/**" | \
|
||||
uniq -u
|
||||
}
|
||||
|
@ -670,6 +568,7 @@ __git_refs ()
|
|||
local format refs
|
||||
local pfx="${3-}" cur_="${4-$cur}" sfx="${5-}"
|
||||
local match="${4-}"
|
||||
local umatch="${4-}"
|
||||
local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers
|
||||
|
||||
__git_find_repo_path
|
||||
|
@ -693,12 +592,19 @@ __git_refs ()
|
|||
fi
|
||||
fi
|
||||
|
||||
if test "${GIT_COMPLETION_IGNORE_CASE:+1}" = "1"
|
||||
then
|
||||
# uppercase with tr instead of ${match,^^} for bash 3.2 compatibility
|
||||
umatch=$(echo "$match" | tr a-z A-Z 2>/dev/null || echo "$match")
|
||||
fi
|
||||
|
||||
if [ "$list_refs_from" = path ]; then
|
||||
if [[ "$cur_" == ^* ]]; then
|
||||
pfx="$pfx^"
|
||||
fer_pfx="$fer_pfx^"
|
||||
cur_=${cur_#^}
|
||||
match=${match#^}
|
||||
umatch=${umatch#^}
|
||||
fi
|
||||
case "$cur_" in
|
||||
refs|refs/*)
|
||||
|
@ -709,7 +615,7 @@ __git_refs ()
|
|||
*)
|
||||
for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD; do
|
||||
case "$i" in
|
||||
$match*)
|
||||
$match*|$umatch*)
|
||||
if [ -e "$dir/$i" ]; then
|
||||
echo "$pfx$i$sfx"
|
||||
fi
|
||||
|
@ -723,6 +629,7 @@ __git_refs ()
|
|||
;;
|
||||
esac
|
||||
__git_dir="$dir" __git for-each-ref --format="$fer_pfx%($format)$sfx" \
|
||||
${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \
|
||||
"${refs[@]}"
|
||||
if [ -n "$track" ]; then
|
||||
__git_dwim_remote_heads "$pfx" "$match" "$sfx"
|
||||
|
@ -742,15 +649,16 @@ __git_refs ()
|
|||
*)
|
||||
if [ "$list_refs_from" = remote ]; then
|
||||
case "HEAD" in
|
||||
$match*) echo "${pfx}HEAD$sfx" ;;
|
||||
$match*|$umatch*) echo "${pfx}HEAD$sfx" ;;
|
||||
esac
|
||||
__git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \
|
||||
${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \
|
||||
"refs/remotes/$remote/$match*" \
|
||||
"refs/remotes/$remote/$match*/**"
|
||||
else
|
||||
local query_symref
|
||||
case "HEAD" in
|
||||
$match*) query_symref="HEAD" ;;
|
||||
$match*|$umatch*) query_symref="HEAD" ;;
|
||||
esac
|
||||
__git ls-remote "$remote" $query_symref \
|
||||
"refs/tags/$match*" "refs/heads/$match*" \
|
||||
|
@ -888,7 +796,6 @@ __git_list_merge_strategies ()
|
|||
}'
|
||||
}
|
||||
|
||||
__git_merge_strategies_default='octopus ours recursive resolve subtree'
|
||||
__git_merge_strategies=
|
||||
# 'git merge -s help' (and thus detection of the merge strategy
|
||||
# list) fails, unfortunately, if run outside of any git working
|
||||
|
@ -898,8 +805,7 @@ __git_merge_strategies=
|
|||
__git_compute_merge_strategies ()
|
||||
{
|
||||
test -n "$__git_merge_strategies" ||
|
||||
{ __git_merge_strategies=$(__git_list_merge_strategies);
|
||||
__git_merge_strategies="${__git_merge_strategies:-__git_merge_strategies_default}"; }
|
||||
__git_merge_strategies=$(__git_list_merge_strategies)
|
||||
}
|
||||
|
||||
__git_merge_strategy_options="ours theirs subtree subtree= patience
|
||||
|
@ -2281,7 +2187,7 @@ _git_reflog ()
|
|||
fi
|
||||
}
|
||||
|
||||
__git_send_email_options="--no-cc-cover --cc= --no-bcc --force --relogin-delay= --to= --suppress-cc= --no-annotate --no-chain-reply-to --sendmail-cmd= --no-identity --transfer-encoding= --validate --no-smtp-auth --confirm= --no-format-patch --reply-to= --smtp-pass= --smtp-server= --annotate --envelope-sender= --no-validate --dry-run --no-thread --smtp-debug= --no-to --thread --no-xmailer --identity= --no-signed-off-cc --no-signed-off-by-cc --smtp-domain= --to-cover --8bit-encoding= --bcc= --smtp-ssl-cert-path= --smtp-user= --cc-cmd= --to-cmd= --no-cc --smtp-server-option= --in-reply-to= --subject= --batch-size= --smtp-auth= --compose --smtp-server-port= --xmailer --no-to-cover --chain-reply-to --smtp-encryption= --dump-aliases --quiet --smtp-ssl --signed-off-cc --signed-off-by-cc --suppress-from --compose-encoding= --no-suppress-from --sender= --from= --format-patch --cc-cover --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --filename-max-length= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --from --attach --inline --signature= --base= --signature-file= --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-filename-max-length --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-from --no-in-reply-to --no-attach --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor"
|
||||
__gitcomp_builtin_send_email_default="--8bit-encoding= --add-header= --annotate --attach --base= --batch-size= --bcc= --binary --cc-cmd= --cc-cover --cc= --chain-reply-to --compose --compose-encoding= --confirm= --cover-from-description= --cover-letter --creation-factor= --dry-run --dump-aliases --envelope-sender= --filename-max-length= --force --force-in-body-from --format-patch --from --from= --identity= --ignore-if-in-upstream --in-reply-to= --inline --interdiff= --keep-subject --numbered --numbered-files --output-directory= --progress --quiet --range-diff= --relogin-delay= --reply-to= --reroll-count= --rfc --sender= --sendmail-cmd= --signature-file= --signature= --signed-off-by-cc --signed-off-cc --signoff --smtp-auth= --smtp-debug= --smtp-domain= --smtp-encryption= --smtp-pass= --smtp-server-option= --smtp-server-port= --smtp-server= --smtp-ssl --smtp-ssl-cert-path= --smtp-user= --start-number= --stdout --subject-prefix= --subject= --suffix= --suppress-cc= --suppress-from --thread --to-cmd= --to-cover --to= --transfer-encoding= --v= --validate --xmailer --zero-commit -- --no-add-header --no-annotate --no-attach --no-base --no-bcc --no-binary --no-cc --no-cc-cover --no-chain-reply-to --no-cover-from-description --no-cover-letter --no-creation-factor --no-filename-max-length --no-force-in-body-from --no-format-patch --no-from --no-identity --no-ignore-if-in-upstream --no-in-reply-to --no-interdiff --no-numbered --no-numbered-files --no-progress --no-quiet --no-range-diff --no-reroll-count --no-signature --no-signature-file --no-signed-off-by-cc --no-signed-off-cc --no-signoff --no-smtp-auth --no-start-number --no-stat --no-stdout --no-suffix --no-suppress-from --no-thread --no-to --no-to-cover --no-validate --no-xmailer --no-zero-commit"
|
||||
__git_send_email_confirm_options="always never auto cc compose"
|
||||
__git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
|
||||
|
||||
|
@ -2321,7 +2227,11 @@ _git_send_email ()
|
|||
return
|
||||
;;
|
||||
--*)
|
||||
__gitcomp_builtin send-email "$__git_send_email_options $__git_format_patch_extra_options"
|
||||
# Older versions of git send-email don't have all the options
|
||||
git send-email --git-completion-helper | grep -q annotate ||
|
||||
__gitcomp_builtin_send_email=$__gitcomp_builtin_send_email_default
|
||||
|
||||
__gitcomp_builtin send-email "$__git_format_patch_extra_options"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
@ -2456,7 +2366,25 @@ __git_config_vars=
|
|||
__git_compute_config_vars ()
|
||||
{
|
||||
test -n "$__git_config_vars" ||
|
||||
__git_config_vars="$(git help --config-for-completion | sort -u)"
|
||||
__git_config_vars="$(git help --config-for-completion)"
|
||||
}
|
||||
|
||||
__git_compute_config_sections_old ()
|
||||
{
|
||||
__git_compute_config_vars
|
||||
echo "$__git_config_vars" |
|
||||
awk -F . '{ dict[$1] = 1 } END { for (e in dict) print e }'
|
||||
}
|
||||
|
||||
__git_config_sections=
|
||||
__git_compute_config_sections ()
|
||||
{
|
||||
test -n "$__git_config_sections" ||
|
||||
__git_config_sections="$(
|
||||
git help --config-sections-for-completion > /dev/null 2>&1 &&
|
||||
git help --config-sections-for-completion ||
|
||||
__git_compute_config_sections_old
|
||||
)"
|
||||
}
|
||||
|
||||
# Completes possible values of various configuration variables.
|
||||
|
@ -2670,16 +2598,8 @@ __git_complete_config_variable_name ()
|
|||
__gitcomp "$__git_config_vars" "" "$cur_" "$sfx"
|
||||
;;
|
||||
*)
|
||||
__git_compute_config_vars
|
||||
__gitcomp_nl "$(echo "$__git_config_vars" |
|
||||
awk -F . '{
|
||||
sections[$1] = 1
|
||||
}
|
||||
END {
|
||||
for (s in sections)
|
||||
print s "."
|
||||
}
|
||||
')" "" "$cur_" ""
|
||||
__git_compute_config_sections
|
||||
__gitcomp_nl "$__git_config_sections" "" "$cur_" "."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
@ -3628,43 +3548,6 @@ __git_complete ()
|
|||
___git_complete $1 $func
|
||||
}
|
||||
|
||||
if ! git --list-cmds=main >/dev/null 2>&1; then
|
||||
|
||||
declare -A __git_cmds
|
||||
__git_cmds[list-complete]="apply blame cherry config difftool fsck help instaweb mergetool prune reflog remote repack replace request-pull send-email show-branch stage whatchanged"
|
||||
__git_cmds[list-guide]="attributes cli core-tutorial credentials cvs-migration diffcore everyday faq glossary hooks ignore mailmap modules namespaces remote-helpers repository-layout revisions submodules tutorial tutorial-2 workflows"
|
||||
__git_cmds[list-mainporcelain]="add am archive bisect branch bundle checkout cherry-pick citool clean clone commit describe diff fetch format-patch gc grep gui init log maintenance merge mv notes pull push range-diff rebase reset restore revert rm shortlog show sparse-checkout stash status submodule switch tag worktree gitk"
|
||||
__git_cmds[main]="add add--interactive am annotate apply archimport archive bisect bisect--helper blame branch bugreport bundle cat-file check-attr check-ignore check-mailmap check-ref-format checkout checkout--worker checkout-index cherry cherry-pick citool clean clone column commit commit-graph commit-tree config count-objects credential credential-cache credential-cache--daemon credential-store cvsexportcommit cvsimport cvsserver daemon describe diff diff-files diff-index diff-tree difftool difftool--helper env--helper fast-export fast-import fetch fetch-pack filter-branch fmt-merge-msg for-each-ref for-each-repo format-patch fsck fsck-objects fsmonitor--daemon gc get-tar-commit-id grep gui gui--askpass hash-object help hook http-backend http-fetch http-push imap-send index-pack init init-db instaweb interpret-trailers legacy-rebase legacy-stash log ls-files ls-remote ls-tree mailinfo mailsplit maintenance merge merge-base merge-file merge-index merge-octopus merge-one-file merge-ours merge-recursive merge-recursive-ours merge-recursive-theirs merge-resolve merge-subtree merge-tree mergetool mktag mktree multi-pack-index mv name-rev notes p4 pack-objects pack-redundant pack-refs patch-id pickaxe prune prune-packed pull push quiltimport range-diff read-tree rebase rebase--helper receive-pack reflog relink remote remote-ext remote-fd remote-ftp remote-ftps remote-http remote-https remote-testsvn repack replace request-pull rerere reset restore rev-list rev-parse revert rm send-email send-pack serve sh-i18n--envsubst shell shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace submodule submodule--helper svn switch symbolic-ref tag unpack-file unpack-objects update-index update-ref update-server-info upload-archive upload-archive--writer upload-pack var verify-commit verify-pack verify-tag version web--browse whatchanged worktree write-tree"
|
||||
__git_cmds[others]=""
|
||||
__git_cmds[parseopt]="add am apply archive bisect--helper blame branch bugreport cat-file check-attr check-ignore check-mailmap checkout checkout--worker checkout-index cherry cherry-pick clean clone column commit commit-graph config count-objects credential-cache credential-cache--daemon credential-store describe difftool env--helper fast-export fetch fmt-merge-msg for-each-ref for-each-repo format-patch fsck fsck-objects fsmonitor--daemon gc grep hash-object help hook init init-db interpret-trailers log ls-files ls-remote ls-tree merge merge-base merge-file mktree multi-pack-index mv name-rev notes pack-objects pack-refs pickaxe prune prune-packed pull push range-diff read-tree rebase receive-pack reflog remote repack replace rerere reset restore revert rm send-pack shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace switch symbolic-ref tag update-index update-ref update-server-info upload-pack verify-commit verify-pack verify-tag version whatchanged write-tree "
|
||||
|
||||
# Override __git
|
||||
__git ()
|
||||
{
|
||||
case "$1" in
|
||||
--list-cmds=*)
|
||||
while read -r -d ',' x; do
|
||||
case "$x" in
|
||||
nohelpers)
|
||||
;;
|
||||
alias)
|
||||
;;
|
||||
config)
|
||||
;;
|
||||
*)
|
||||
echo ${__git_cmds[$x]}
|
||||
;;
|
||||
esac
|
||||
done <<< "${1##--list-cmds=},"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
git ${__git_C_args:+"${__git_C_args[@]}"} \
|
||||
${__git_dir:+--git-dir="$__git_dir"} "$@" 2>/dev/null
|
||||
}
|
||||
|
||||
fi
|
||||
|
||||
___git_complete git __git_main
|
||||
___git_complete gitk __gitk_main
|
||||
|
||||
|
|
|
@ -84,6 +84,10 @@
|
|||
# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
|
||||
# by setting GIT_PS1_OMITSPARSESTATE.
|
||||
#
|
||||
# If you would like to see a notification on the prompt when there are
|
||||
# unresolved conflicts, set GIT_PS1_SHOWCONFLICTSTATE to "yes". The
|
||||
# prompt will include "|CONFLICT".
|
||||
#
|
||||
# If you would like to see more information about the identity of
|
||||
# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
|
||||
# to one of these values:
|
||||
|
@ -96,9 +100,7 @@
|
|||
#
|
||||
# If you would like a colored hint about the current dirty state, set
|
||||
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
|
||||
# the colored output of "git status -sb" and are available only when
|
||||
# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
|
||||
# but always available in Zsh.
|
||||
# the colored output of "git status -sb".
|
||||
#
|
||||
# If you would like __git_ps1 to do nothing in the case when the current
|
||||
# directory is set up to be ignored by git, then set
|
||||
|
@ -255,12 +257,12 @@ __git_ps1_colorize_gitstring ()
|
|||
local c_lblue='%F{blue}'
|
||||
local c_clear='%f'
|
||||
else
|
||||
# Using \[ and \] around colors is necessary to prevent
|
||||
# Using \001 and \002 around colors is necessary to prevent
|
||||
# issues with command line editing/browsing/completion!
|
||||
local c_red='\[\e[31m\]'
|
||||
local c_green='\[\e[32m\]'
|
||||
local c_lblue='\[\e[1;34m\]'
|
||||
local c_clear='\[\e[0m\]'
|
||||
local c_red=$'\001\e[31m\002'
|
||||
local c_green=$'\001\e[32m\002'
|
||||
local c_lblue=$'\001\e[1;34m\002'
|
||||
local c_clear=$'\001\e[0m\002'
|
||||
fi
|
||||
local bad_color=$c_red
|
||||
local ok_color=$c_green
|
||||
|
@ -508,6 +510,12 @@ __git_ps1 ()
|
|||
r="$r $step/$total"
|
||||
fi
|
||||
|
||||
local conflict="" # state indicator for unresolved conflicts
|
||||
if [[ "${GIT_PS1_SHOWCONFLICTSTATE}" == "yes" ]] &&
|
||||
[[ $(git ls-files --unmerged 2>/dev/null) ]]; then
|
||||
conflict="|CONFLICT"
|
||||
fi
|
||||
|
||||
local w=""
|
||||
local i=""
|
||||
local s=""
|
||||
|
@ -564,15 +572,12 @@ __git_ps1 ()
|
|||
b="\${__git_ps1_branch_name}"
|
||||
fi
|
||||
|
||||
# NO color option unless in PROMPT_COMMAND mode or it's Zsh
|
||||
if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
|
||||
if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
|
||||
__git_ps1_colorize_gitstring
|
||||
fi
|
||||
fi
|
||||
|
||||
local f="$h$w$i$s$u$p"
|
||||
local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}"
|
||||
local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}${conflict}"
|
||||
|
||||
if [ $pcmode = yes ]; then
|
||||
if [ "${__git_printf_supports_v-}" != yes ]; then
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Handle $0 according to the standard:
|
||||
# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
|
||||
0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
|
||||
0="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
|
||||
0="${${(M)0:#/*}:-$PWD/$0}"
|
||||
|
||||
source "${0:A:h}/git-prompt.sh"
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
url="https://raw.githubusercontent.com/felipec/git-completion"
|
||||
version="1.3.7"
|
||||
|
||||
curl -s -o _git "${url}/v${version}/git-completion.zsh" &&
|
||||
curl -s -o git-completion.bash "${url}/v${version}/git-completion.bash" &&
|
||||
curl -s -o git-prompt.sh "${url}/v${version}/git-prompt.sh"
|
19
plugins/gradle/LICENSE
Normal file
19
plugins/gradle/LICENSE
Normal file
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2017 Eric Wendelin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -1,28 +1,4 @@
|
|||
#compdef gradle gradlew gw
|
||||
# THE LINE ABOVE MUST BE THE FIRST LINE OF THIS FILE IN ORDER FOR COMPLETION TO WORK
|
||||
|
||||
#
|
||||
# Taken from https://github.com/gradle/gradle-completion
|
||||
# Copyright (c) 2017 Eric Wendelin
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
# this software and associated documentation files (the "Software"), to deal in
|
||||
# the Software without restriction, including without limitation the rights to
|
||||
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
# of the Software, and to permit persons to whom the Software is furnished to do
|
||||
# so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# Terms
|
||||
|
||||
__gradle-set-project-root-dir() {
|
||||
local dir=`pwd`
|
||||
|
@ -38,7 +14,7 @@ __gradle-set-project-root-dir() {
|
|||
}
|
||||
|
||||
__gradle-init-cache-dir() {
|
||||
cache_dir="$HOME/.gradle/completion"
|
||||
cache_dir="${GRADLE_USER_HOME:-$HOME/.gradle}/completion"
|
||||
mkdir -p $cache_dir
|
||||
}
|
||||
|
||||
|
@ -98,7 +74,7 @@ __gradle-generate-script-cache() {
|
|||
zle -R "Generating Gradle build script cache"
|
||||
# Cache all Gradle scripts
|
||||
local -a gradle_build_scripts
|
||||
gradle_build_scripts=( $(find $project_root_dir -type f -name "*.gradle" -o -name "*.gradle.kts" 2>/dev/null | egrep -v "$script_exclude_pattern") )
|
||||
gradle_build_scripts=( $(find $project_root_dir -type f -name "*.gradle" -o -name "*.gradle.kts" 2>/dev/null | grep -E -v "$script_exclude_pattern") )
|
||||
printf "%s\n" "${gradle_build_scripts[@]}" >| $cache_dir/$cache_name
|
||||
fi
|
||||
}
|
||||
|
@ -125,7 +101,7 @@ __gradle-generate-tasks-cache() {
|
|||
local gradle_all_tasks="" root_tasks="" subproject_tasks="" output_line
|
||||
local -a match
|
||||
for output_line in ${(f)"$(printf "%s\n" "${gradle_tasks_output[@]}")"}; do
|
||||
if [[ $output_line =~ ^([[:lower:]][[:alnum:][:punct:]]*)([[:space:]]-[[:space:]]([[:print:]]*))? ]]; then
|
||||
if [[ $output_line =~ ^([[:alpha:]][[:alnum:][:punct:]]*)([[:space:]]-[[:space:]]([[:print:]]*))? ]]; then
|
||||
local task_name="${match[1]}"
|
||||
local task_description="${match[3]}"
|
||||
# Completion for subproject tasks with ':' prefix
|
||||
|
|
|
@ -5,6 +5,7 @@ files=(
|
|||
/etc/grc.zsh # default
|
||||
/usr/local/etc/grc.zsh # homebrew darwin-x64
|
||||
/opt/homebrew/etc/grc.zsh # homebrew darwin-arm64
|
||||
/usr/share/grc/grc.zsh # Gentoo Linux (app-misc/grc)
|
||||
)
|
||||
|
||||
# verify the file is readable and source it
|
||||
|
|
|
@ -11,8 +11,9 @@ plugins=(... helm)
|
|||
## Aliases
|
||||
|
||||
| Alias | Full command |
|
||||
| ----- | ------------ |
|
||||
| ----- | -------------- |
|
||||
| h | helm |
|
||||
| hin | helm install |
|
||||
| hun | helm uninstall |
|
||||
| hse | helm search |
|
||||
| hup | helm upgrade |
|
||||
|
|
|
@ -14,5 +14,6 @@ fi
|
|||
|
||||
alias h='helm'
|
||||
alias hin='helm install'
|
||||
alias hun='helm uninstall'
|
||||
alias hse='helm search'
|
||||
alias hup='helm upgrade'
|
||||
|
|
|
@ -23,7 +23,15 @@ Install
|
|||
Using the [Homebrew]( https://brew.sh ) package manager:
|
||||
|
||||
brew install zsh-history-substring-search
|
||||
echo 'source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh' >> ~/.zshrc
|
||||
echo 'source $(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh' >> ~/.zshrc
|
||||
|
||||
Using [Fig](https://fig.io):
|
||||
|
||||
Fig adds apps, shortcuts, and autocomplete to your existing terminal.
|
||||
|
||||
Install `zsh-history-substring-search` in just one click.
|
||||
|
||||
<a href="https://fig.io/plugins/other/zsh-history-substring-search" target="_blank"><img src="https://fig.io/badges/install-with-fig.svg" /></a>
|
||||
|
||||
Using [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh):
|
||||
|
||||
|
@ -33,24 +41,63 @@ Using [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh):
|
|||
|
||||
2. Activate the plugin in `~/.zshrc`:
|
||||
|
||||
plugins=( [plugins...] history-substring-search)
|
||||
plugins=( [plugins...] zsh-history-substring-search)
|
||||
|
||||
3. Source `~/.zshrc` to take changes into account:
|
||||
3. Run `exec zsh` to take changes into account:
|
||||
|
||||
source ~/.zshrc
|
||||
exec zsh
|
||||
|
||||
Using [zplug](https://github.com/zplug/zplug):
|
||||
|
||||
1. Add this repo to `~/.zshrc`:
|
||||
|
||||
zplug "zsh-users/zsh-history-substring-search", as: plugin
|
||||
|
||||
Using [antigen](https://github.com/zsh-users/antigen):
|
||||
|
||||
1. Add the `antigen bundle` command just before `antigen apply`, like this:
|
||||
|
||||
```
|
||||
antigen bundle zsh-users/zsh-history-substring-search
|
||||
antigen apply
|
||||
```
|
||||
|
||||
2. Then, **after** `antigen apply`, add the key binding configurations, like this:
|
||||
|
||||
```
|
||||
# zsh-history-substring-search configuration
|
||||
bindkey '^[[A' history-substring-search-up # or '\eOA'
|
||||
bindkey '^[[B' history-substring-search-down # or '\eOB'
|
||||
HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=1
|
||||
```
|
||||
|
||||
Using [Zinit](https://github.com/zdharma-continuum/zinit):
|
||||
|
||||
1. Use the `Oh-my-zsh` Zinit snippet in `~/.zshrc`:
|
||||
|
||||
zinit snippet OMZ::plugins/git/git.plugin.zsh`
|
||||
|
||||
2. Load the plugin in `~/.zshrc`:
|
||||
|
||||
zinit load 'zsh-users/zsh-history-substring-search
|
||||
zinit ice wait atload'_history_substring_search_config'
|
||||
|
||||
3. Run `exec zsh` to take changes into account:
|
||||
|
||||
exec zsh
|
||||
|
||||
Usage
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
1. Load this script into your interactive ZSH session:
|
||||
|
||||
% source zsh-history-substring-search.zsh
|
||||
source zsh-history-substring-search.zsh
|
||||
|
||||
If you want to use [zsh-syntax-highlighting][6] along with this script,
|
||||
then make sure that you load it *before* you load this script:
|
||||
|
||||
% source zsh-syntax-highlighting.zsh
|
||||
% source zsh-history-substring-search.zsh
|
||||
source zsh-syntax-highlighting.zsh
|
||||
source zsh-history-substring-search.zsh
|
||||
|
||||
2. Bind keyboard shortcuts to this script's functions.
|
||||
|
||||
|
@ -73,6 +120,10 @@ Usage
|
|||
bindkey "$terminfo[kcuu1]" history-substring-search-up
|
||||
bindkey "$terminfo[kcud1]" history-substring-search-down
|
||||
|
||||
Users have also observed that `[OA` and `[OB` are correct values,
|
||||
_even if_ these were not the observed values. If you are having trouble
|
||||
with the observed values, give these a try.
|
||||
|
||||
You might also want to bind the Control-P/N keys for use in EMACS mode:
|
||||
|
||||
bindkey -M emacs '^P' history-substring-search-up
|
||||
|
@ -115,7 +166,7 @@ Configuration
|
|||
------------------------------------------------------------------------------
|
||||
|
||||
This script defines the following global variables. You may override their
|
||||
default values only after having loaded this script into your ZSH session.
|
||||
default values.
|
||||
|
||||
* `HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND` is a global variable that defines
|
||||
how the query should be highlighted inside a matching command. Its default
|
||||
|
@ -141,6 +192,12 @@ default values only after having loaded this script into your ZSH session.
|
|||
value, causes this script to perform a fuzzy search by words, matching in
|
||||
given order e.g. `ab c` will match `*ab*c*`
|
||||
|
||||
* `HISTORY_SUBSTRING_SEARCH_PREFIXED` is a global variable that defines how
|
||||
the command history will be searched for your query. If set to a non-empty
|
||||
value, your query will be matched against the start of each history entry.
|
||||
For example, if this variable is empty, `ls` will match `ls -l` and `echo
|
||||
ls`; if it is non-empty, `ls` will only match `ls -l`.
|
||||
|
||||
* `HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE` is a global variable that defines
|
||||
whether all search results returned are _unique_. If set to a non-empty
|
||||
value, then only unique search results are presented. This behaviour is off
|
||||
|
@ -155,6 +212,9 @@ default values only after having loaded this script into your ZSH session.
|
|||
receive globally unique search results only once, then use this
|
||||
configuration variable, or use `setopt HIST_IGNORE_ALL_DUPS`.
|
||||
|
||||
* `HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_TIMEOUT` is a global variable that
|
||||
defines a timeout in seconds for clearing the search highlight.
|
||||
|
||||
|
||||
History
|
||||
------------------------------------------------------------------------------
|
||||
|
@ -175,24 +235,17 @@ History
|
|||
|
||||
* March 2016: Geza Lore (@gezalore) greatly refactored it in pull request #55.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Oh My Zsh Distribution Notes
|
||||
------------------------------------------------------------------------------
|
||||
---
|
||||
|
||||
What you are looking at now is Oh My Zsh's repackaging of zsh-history-substring-search
|
||||
as an OMZ module inside the Oh My Zsh distribution.
|
||||
## Oh My Zsh Distribution Notes
|
||||
|
||||
What you are looking at now is Oh My Zsh's repackaging of zsh-history-substring-search as an OMZ module inside
|
||||
the Oh My Zsh distribution.
|
||||
|
||||
The upstream repo, zsh-users/zsh-history-substring-search, can be found on GitHub at
|
||||
https://github.com/zsh-users/zsh-history-substring-search.
|
||||
|
||||
This downstream copy was last updated from the following upstream commit:
|
||||
|
||||
SHA: 0f80b8eb3368b46e5e573c1d91ae69eb095db3fb
|
||||
Commit date: 2019-05-12 17:35:54 -0700
|
||||
|
||||
Everything above this section is a copy of the original upstream's README, so things
|
||||
may differ slightly when you're using this inside OMZ. In particular, you do not
|
||||
need to set up key bindings for the up and down arrows yourself in `~/.zshrc`; the OMZ
|
||||
plugin does that for you. You may still want to set up additional emacs- or vi-specific
|
||||
bindings as mentioned above.
|
||||
|
||||
Everything above this section is a copy of the original upstream's README, so things may differ slightly when
|
||||
you're using this inside OMZ. In particular, you do not need to set up key bindings for the up and down arrows
|
||||
yourself in `~/.zshrc`; the OMZ plugin does that for you. You may still want to set up additional emacs- or
|
||||
vi-specific bindings as mentioned above.
|
||||
|
|
15
plugins/history-substring-search/dependencies/OMZ-README.md
Normal file
15
plugins/history-substring-search/dependencies/OMZ-README.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
|
||||
---
|
||||
|
||||
## Oh My Zsh Distribution Notes
|
||||
|
||||
What you are looking at now is Oh My Zsh's repackaging of zsh-history-substring-search as an OMZ module inside
|
||||
the Oh My Zsh distribution.
|
||||
|
||||
The upstream repo, zsh-users/zsh-history-substring-search, can be found on GitHub at
|
||||
https://github.com/zsh-users/zsh-history-substring-search.
|
||||
|
||||
Everything above this section is a copy of the original upstream's README, so things may differ slightly when
|
||||
you're using this inside OMZ. In particular, you do not need to set up key bindings for the up and down arrows
|
||||
yourself in `~/.zshrc`; the OMZ plugin does that for you. You may still want to set up additional emacs- or
|
||||
vi-specific bindings as mentioned above.
|
|
@ -43,11 +43,12 @@
|
|||
# declare global configuration variables
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'
|
||||
typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'
|
||||
typeset -g HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'
|
||||
typeset -g HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''
|
||||
typeset -g HISTORY_SUBSTRING_SEARCH_FUZZY=''
|
||||
: ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'}
|
||||
: ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'}
|
||||
: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'}
|
||||
: ${HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''}
|
||||
: ${HISTORY_SUBSTRING_SEARCH_FUZZY=''}
|
||||
: ${HISTORY_SUBSTRING_SEARCH_PREFIXED=''}
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# declare internal global variables
|
||||
|
@ -64,6 +65,7 @@ typeset -g -i _history_substring_search_raw_match_index
|
|||
typeset -g -a _history_substring_search_matches
|
||||
typeset -g -i _history_substring_search_match_index
|
||||
typeset -g -A _history_substring_search_unique_filter
|
||||
typeset -g -i _history_substring_search_zsh_5_9
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# the main ZLE widgets
|
||||
|
@ -97,6 +99,11 @@ zle -N history-substring-search-down
|
|||
#-----------------------------------------------------------------------------
|
||||
|
||||
zmodload -F zsh/parameter
|
||||
autoload -Uz is-at-least
|
||||
|
||||
if is-at-least 5.9 $ZSH_VERSION; then
|
||||
_history_substring_search_zsh_5_9=1
|
||||
fi
|
||||
|
||||
#
|
||||
# We have to "override" some keys and widgets if the
|
||||
|
@ -117,40 +124,81 @@ if [[ $+functions[_zsh_highlight] -eq 0 ]]; then
|
|||
}
|
||||
|
||||
#
|
||||
# The following snippet was taken from the zsh-syntax-highlighting project:
|
||||
# Check if $1 denotes the name of a callable function, i.e. it is fully
|
||||
# defined or it is marked for autoloading and autoloading it at the first
|
||||
# call to it will succeed. In particular, if $1 has been marked for
|
||||
# autoloading but is not available in $fpath, then it will return 1 (false).
|
||||
#
|
||||
# This is based on the zsh-syntax-highlighting plugin.
|
||||
#
|
||||
_history-substring-search-function-callable() {
|
||||
if (( ${+functions[$1]} )) && ! [[ "$functions[$1]" == *"builtin autoload -X"* ]]; then
|
||||
return 0 # already fully loaded
|
||||
else
|
||||
# "$1" is either an autoload stub, or not a function at all.
|
||||
# We expect 'autoload +X' to return non-zero if it fails to fully load
|
||||
# the function.
|
||||
( autoload -U +X -- "$1" 2>/dev/null )
|
||||
return $?
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# The zsh-syntax-highlighting plugin uses zle-line-pre-redraw hook instead
|
||||
# of the legacy "bind all widgets" if 1) zsh has the memo= feature (added in
|
||||
# version 5.9) and 2) add-zle-hook-widget is available.
|
||||
#
|
||||
if [[ $_history_substring_search_zsh_5_9 -eq 1 ]] && _history-substring-search-function-callable add-zle-hook-widget; then
|
||||
#
|
||||
# The following code is based on the zsh-syntax-highlighting plugin.
|
||||
#
|
||||
autoload -U add-zle-hook-widget
|
||||
|
||||
_history-substring-search-zle-line-finish() {
|
||||
#
|
||||
# Reset $WIDGET since the 'main' highlighter depends on it.
|
||||
#
|
||||
# Since $WIDGET is declared by zle as read-only in this function's scope,
|
||||
# a nested function is required in order to shadow its built-in value;
|
||||
# see "User-defined widgets" in zshall.
|
||||
#
|
||||
() {
|
||||
local -h -r WIDGET=zle-line-finish
|
||||
_zsh_highlight
|
||||
}
|
||||
}
|
||||
|
||||
_history-substring-search-zle-line-pre-redraw() {
|
||||
#
|
||||
# If the zsh-syntax-highlighting plugin has been loaded (after our plugin
|
||||
# plugin, otherwise this hook wouldn't be called), remove our hooks.
|
||||
#
|
||||
if [[ $+ZSH_HIGHLIGHT_VERSION -eq 1 ]]; then
|
||||
autoload -U add-zle-hook-widget
|
||||
add-zle-hook-widget -d zle-line-pre-redraw _history-substring-search-zle-line-pre-redraw
|
||||
add-zle-hook-widget -d zle-line-finish _history-substring-search-zle-line-finish
|
||||
return 0
|
||||
fi
|
||||
#
|
||||
# Set $? to 0 for _zsh_highlight. Without this, subsequent
|
||||
# zle-line-pre-redraw hooks won't run, since add-zle-hook-widget happens to
|
||||
# call us with $? == 1 in the common case.
|
||||
#
|
||||
true && _zsh_highlight "$@"
|
||||
}
|
||||
|
||||
if [[ -o zle ]]; then
|
||||
add-zle-hook-widget zle-line-pre-redraw _history-substring-search-zle-line-pre-redraw
|
||||
add-zle-hook-widget zle-line-finish _history-substring-search-zle-line-finish
|
||||
fi
|
||||
else
|
||||
#
|
||||
# The following snippet was taken from the zsh-syntax-highlighting project:
|
||||
# https://github.com/zsh-users/zsh-syntax-highlighting/blob/56b134f5d62ae3d4e66c7f52bd0cc2595f9b305b/zsh-syntax-highlighting.zsh#L126-161
|
||||
#
|
||||
# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the name of the zsh-syntax-highlighting contributors nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# SPDX-SnippetBegin
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# SPDX-SnippetCopyrightText: 2010-2011 zsh-syntax-highlighting contributors
|
||||
#--------------8<-------------------8<-------------------8<-----------------
|
||||
# Rebind all ZLE widgets to make them invoke _zsh_highlights.
|
||||
_zsh_highlight_bind_widgets()
|
||||
|
@ -189,10 +237,14 @@ if [[ $+functions[_zsh_highlight] -eq 0 ]]; then
|
|||
done
|
||||
}
|
||||
#-------------->8------------------->8------------------->8-----------------
|
||||
# SPDX-SnippetEnd
|
||||
|
||||
_zsh_highlight_bind_widgets
|
||||
fi
|
||||
|
||||
unfunction _history-substring-search-function-callable
|
||||
fi
|
||||
|
||||
_history-substring-search-begin() {
|
||||
setopt localoptions extendedglob
|
||||
|
||||
|
@ -243,10 +295,17 @@ _history-substring-search-begin() {
|
|||
fi
|
||||
|
||||
#
|
||||
# Escape and join query parts with wildcard character '*' as separator
|
||||
# `(j:CHAR:)` join array to string with CHAR as separator
|
||||
# Escape and join query parts with wildcard character '*' as seperator
|
||||
# `(j:CHAR:)` join array to string with CHAR as seperator
|
||||
#
|
||||
local search_pattern="*${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
|
||||
local search_pattern="${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
|
||||
|
||||
#
|
||||
# Support anchoring history search to the beginning of the command
|
||||
#
|
||||
if [[ -z $HISTORY_SUBSTRING_SEARCH_PREFIXED ]]; then
|
||||
search_pattern="*${search_pattern}"
|
||||
fi
|
||||
|
||||
#
|
||||
# Find all occurrences of the search pattern in the history file.
|
||||
|
@ -304,12 +363,21 @@ _history-substring-search-begin() {
|
|||
_history-substring-search-end() {
|
||||
setopt localoptions extendedglob
|
||||
|
||||
local highlight_memo=
|
||||
_history_substring_search_result=$BUFFER
|
||||
|
||||
if [[ $_history_substring_search_zsh_5_9 -eq 1 ]]; then
|
||||
highlight_memo='memo=history-substring-search'
|
||||
fi
|
||||
|
||||
# the search was successful so display the result properly by clearing away
|
||||
# existing highlights and moving the cursor to the end of the result buffer
|
||||
if [[ $_history_substring_search_refresh_display -eq 1 ]]; then
|
||||
if [[ -n $highlight_memo ]]; then
|
||||
region_highlight=( "${(@)region_highlight:#*${highlight_memo}*}" )
|
||||
else
|
||||
region_highlight=()
|
||||
fi
|
||||
CURSOR=${#BUFFER}
|
||||
fi
|
||||
|
||||
|
@ -329,7 +397,9 @@ _history-substring-search-end() {
|
|||
if [[ $query_part_match_index -le ${#BUFFER:$highlight_start_index} ]]; then
|
||||
highlight_start_index=$(( $highlight_start_index + $query_part_match_index ))
|
||||
highlight_end_index=$(( $highlight_start_index + ${#query_part} ))
|
||||
region_highlight+=("$(($highlight_start_index - 1)) $(($highlight_end_index - 1)) $_history_substring_search_query_highlight")
|
||||
region_highlight+=(
|
||||
"$(($highlight_start_index - 1)) $(($highlight_end_index - 1)) ${_history_substring_search_query_highlight}${highlight_memo:+,$highlight_memo}"
|
||||
)
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
@ -338,6 +408,23 @@ _history-substring-search-end() {
|
|||
# zle -R "mn: "$_history_substring_search_match_index" m#: "${#_history_substring_search_matches}
|
||||
# read -k -t 200 && zle -U $REPLY
|
||||
|
||||
#
|
||||
# When this function returns, z-sy-h runs its line-pre-redraw hook. It has no
|
||||
# logic for determining highlight priority, when two different memo= marked
|
||||
# region highlights overlap; instead, it always prioritises itself. Below is
|
||||
# a workaround for dealing with it.
|
||||
#
|
||||
if [[ $_history_substring_search_zsh_5_9 -eq 1 ]]; then
|
||||
zle -R
|
||||
#
|
||||
# After line redraw with desired highlight, wait for timeout or user input
|
||||
# before removing search highlight and exiting. This ensures no highlights
|
||||
# are left lingering after search is finished.
|
||||
#
|
||||
read -k -t ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_TIMEOUT:-1} && zle -U $REPLY
|
||||
region_highlight=( "${(@)region_highlight:#*${highlight_memo}*}" )
|
||||
fi
|
||||
|
||||
# Exit successfully from the history-substring-search-* widgets.
|
||||
return 0
|
||||
}
|
||||
|
|
|
@ -1,129 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
#
|
||||
# update-from-upstream.zsh
|
||||
#
|
||||
# This script updates the Oh My Zsh version of the zsh-history-substring-search
|
||||
# plugin from the independent upstream repo. This is to be run by OMZ developers
|
||||
# when they want to pull in new changes from upstream to OMZ. It is not run
|
||||
# during normal use of the plugin.
|
||||
#
|
||||
# The official upstream repo is zsh-users/zsh-history-substring-search
|
||||
# https://github.com/zsh-users/zsh-history-substring-search
|
||||
#
|
||||
# This is a zsh script, not a function. Call it with `zsh update-from-upstream.zsh`
|
||||
# from the command line, running it from within the plugin directory.
|
||||
#
|
||||
# You can set the environment variable REPO_PATH to point it at an upstream
|
||||
# repo you have already prepared. Otherwise, it will do a clean checkout of
|
||||
# upstream's HEAD to a temporary local repo and use that.
|
||||
|
||||
|
||||
# Just bail on any error so we don't have to do extra checking.
|
||||
# This is a developer-use script, so terse output like that should
|
||||
# be fine.
|
||||
set -e
|
||||
|
||||
|
||||
upstream_basename=zsh-history-substring-search
|
||||
plugin_basename=history-substring-search
|
||||
UPSTREAM_REPO=zsh-users/$upstream_basename
|
||||
need_repo_cleanup=false
|
||||
upstream_github_url="https://github.com/$UPSTREAM_REPO"
|
||||
|
||||
if [[ -z "$UPSTREAM_REPO_PATH" ]]; then
|
||||
# Do a clean checkout
|
||||
my_tempdir=$(mktemp -d -t omz-update-histsubstrsrch)
|
||||
UPSTREAM_REPO_PATH="$my_tempdir/$upstream_basename"
|
||||
git clone "$upstream_github_url" "$UPSTREAM_REPO_PATH"
|
||||
need_repo_cleanup=true
|
||||
print "Checked out upstream repo to $UPSTREAM_REPO_PATH"
|
||||
else
|
||||
print "Using existing $upstream_basename repo at $UPSTREAM_REPO_PATH"
|
||||
fi
|
||||
|
||||
upstream="$UPSTREAM_REPO_PATH"
|
||||
|
||||
# Figure out what we're pulling in
|
||||
upstream_sha=$(cd $upstream && git rev-parse HEAD)
|
||||
upstream_commit_date=$(cd $upstream && git log -1 --pretty=format:%ci)
|
||||
upstream_just_date=${${=upstream_commit_date}[1]}
|
||||
print "upstream SHA: $upstream_sha"
|
||||
print "upstream commit time: $upstream_commit_date"
|
||||
print "upstream commit date: $upstream_just_date"
|
||||
print
|
||||
|
||||
# Copy the files over, using the OMZ plugin's names where needed
|
||||
cp -v "$upstream"/* .
|
||||
mv -v zsh-history-substring-search.zsh $plugin_basename.zsh
|
||||
mv -v zsh-history-substring-search.plugin.zsh $plugin_basename.plugin.zsh
|
||||
|
||||
if [[ $need_repo_cleanup == true ]]; then
|
||||
print "Removing temporary repo at $my_tempdir"
|
||||
rm -rf "$my_tempdir"
|
||||
fi
|
||||
|
||||
# Do OMZ-specific edits
|
||||
|
||||
print
|
||||
print "Updating files with OMZ-specific stuff"
|
||||
print
|
||||
|
||||
# OMZ binds the keys as part of the plugin loading
|
||||
|
||||
cat >> $plugin_basename.plugin.zsh <<EOF
|
||||
|
||||
|
||||
# Bind terminal-specific up and down keys
|
||||
|
||||
if [[ -n "\$terminfo[kcuu1]" ]]; then
|
||||
bindkey -M emacs "\$terminfo[kcuu1]" history-substring-search-up
|
||||
bindkey -M viins "\$terminfo[kcuu1]" history-substring-search-up
|
||||
fi
|
||||
if [[ -n "\$terminfo[kcud1]" ]]; then
|
||||
bindkey -M emacs "\$terminfo[kcud1]" history-substring-search-down
|
||||
bindkey -M viins "\$terminfo[kcud1]" history-substring-search-down
|
||||
fi
|
||||
|
||||
EOF
|
||||
|
||||
# Tack OMZ-specific notes on to readme
|
||||
|
||||
thin_line="------------------------------------------------------------------------------"
|
||||
cat >> README.md <<EOF
|
||||
|
||||
$thin_line
|
||||
Oh My Zsh Distribution Notes
|
||||
$thin_line
|
||||
|
||||
What you are looking at now is Oh My Zsh's repackaging of zsh-history-substring-search
|
||||
as an OMZ module inside the Oh My Zsh distribution.
|
||||
|
||||
The upstream repo, $UPSTREAM_REPO, can be found on GitHub at
|
||||
$upstream_github_url.
|
||||
|
||||
This downstream copy was last updated from the following upstream commit:
|
||||
|
||||
SHA: $upstream_sha
|
||||
Commit date: $upstream_commit_date
|
||||
|
||||
Everything above this section is a copy of the original upstream's README, so things
|
||||
may differ slightly when you're using this inside OMZ. In particular, you do not
|
||||
need to set up key bindings for the up and down arrows yourself in \`~/.zshrc\`; the OMZ
|
||||
plugin does that for you. You may still want to set up additional emacs- or vi-specific
|
||||
bindings as mentioned above.
|
||||
|
||||
EOF
|
||||
|
||||
# Announce success and generate git commit messages
|
||||
|
||||
cat <<EOF
|
||||
Done OK
|
||||
|
||||
Now you can check the results and commit like this:
|
||||
|
||||
git add *
|
||||
git commit -m "history-substring-search: update to upstream version $upstream_just_date" \\
|
||||
-m "Updates OMZ's copy to commit $upstream_sha from $UPSTREAM_REPO"
|
||||
|
||||
EOF
|
||||
|
|
@ -13,5 +13,6 @@ plugins=(... history)
|
|||
| Alias | Command | Description |
|
||||
|-------|----------------------|------------------------------------------------------------------|
|
||||
| `h` | `history` | Prints your command history |
|
||||
| `hl` | `history \| less` | Pipe history output to less to search and navigate it easily |
|
||||
| `hs` | `history \| grep` | Use grep to search your command history |
|
||||
| `hsi` | `history \| grep -i` | Use grep to do a case-insensitive search of your command history |
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
alias h='history'
|
||||
alias hl='history | less'
|
||||
alias hs='history | grep'
|
||||
alias hsi='history | grep -i'
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
%
|
||||
"The fronting for the eighty-yard-long marble-topped bar had been made by stitching together nearly twenty thousand Antarean Mosaic Lizard skins, despite the fact that the twenty thousand lizards concerned had needed them to keep their insides in."
|
||||
|
||||
- The Book decribing Milliways' politically incorrect decor.
|
||||
- The Book describing Milliways' politically incorrect decor.
|
||||
%
|
||||
"`...and the Universe,' continued the waiter, determined not to be deflected on his home stretch, `will explode later for your pleasure.' Ford's head swivelled slowly towards him. He spoke with feeling. `Wow,' he said, `What sort of drinks do you serve in this place?' The waiter laughed a polite little waiter's laugh. `Ah,' he said, `I think sir has perhaps misunderstood me.' `Oh, I hope not,' breathed Ford."
|
||||
|
||||
|
@ -104,7 +104,7 @@
|
|||
%
|
||||
"`The first ten million years were the worst,' said Marvin, `and the second ten million, they were the worst too. The third ten million I didn't enjoy at all. After that I went into a bit of a decline.'"
|
||||
|
||||
- Marvin reflecting back on his 576,000,003,579 year career as Milliways' car park attendent.
|
||||
- Marvin reflecting back on his 576,000,003,579 year career as Milliways' car park attendant.
|
||||
%
|
||||
"`Incidentally,' he said, `what does teleport mean?' Another moment passed. Slowly, the others turned to face him. `Probably the wrong moment to ask,' said Arthur, `It's just I remember you use the word a short while ago and I only bring it up because...' `Where,' said Ford quietly, `does it say teleport?' `Well, just over here in fact,' said Arthur, pointing at a dark control box in the rear of the cabin, `Just under the word "emergency", above the word "system" and beside the sign saying "out of order".'"
|
||||
|
||||
|
@ -122,7 +122,7 @@
|
|||
|
||||
- Ford "debating" what to do with fire with a marketing girl.
|
||||
%
|
||||
"The story goes that I first had the idea for THHGTTG while lying drunk in a field in Innsbruck (or `Spain' as the BBC TV publicity department authoritatively has it, probably because it's easier to spell)." - Foreward by DNA.
|
||||
"The story goes that I first had the idea for THHGTTG while lying drunk in a field in Innsbruck (or `Spain' as the BBC TV publicity department authoritatively has it, probably because it's easier to spell)." - Foreword by DNA.
|
||||
|
||||
FORD Six pints of bitter. And quickly please, the world's about to end. BARMAN Oh yes, sir? Nice weather for it.
|
||||
%
|
||||
|
@ -162,7 +162,7 @@ ARTHUR It probably seems a terrible thing to say, but you know what I sometimes
|
|||
|
||||
- Arthur discovering a way of coping with life on Prehistoric Earth.
|
||||
%
|
||||
"`... then I decided that I was a lemon for a couple of weeks. I kept myself amused all that time jumping in and out of a gin and tonic.' Arthur cleared his throat, and then did it again. `Where,' he said, `did you...?' `Find a gin and tonic?' said Ford brightly. `I found a small lake that thought it was a gin and tonic, and jumped in and out of that. At least, I think it thought it was a gin and tonic.' `I may,' he addded with a grin which would have sent sane men scampering into the trees, `have been imagining it.'"
|
||||
"`... then I decided that I was a lemon for a couple of weeks. I kept myself amused all that time jumping in and out of a gin and tonic.' Arthur cleared his throat, and then did it again. `Where,' he said, `did you...?' `Find a gin and tonic?' said Ford brightly. `I found a small lake that thought it was a gin and tonic, and jumped in and out of that. At least, I think it thought it was a gin and tonic.' `I may,' he added with a grin which would have sent sane men scampering into the trees, `have been imagining it.'"
|
||||
|
||||
- Ford updating Arthur about what he's been doing for the past four years.
|
||||
%
|
||||
|
|
|
@ -202,7 +202,7 @@ _ipfs_subcommand(){
|
|||
_arguments \
|
||||
'--resolve[Check if the given path can be resolved before publishing. Default: true.]' \
|
||||
'(-t --lifetime)'{-t,--lifetime}'[Time duration that the record will be valid for. Default: 24h.]' \
|
||||
'--allow-offline[When offline, save the IPNS record to the the local datastore without broadcasting to the network instead of simply failing.]' \
|
||||
'--allow-offline[When offline, save the IPNS record to the local datastore without broadcasting to the network instead of simply failing.]' \
|
||||
'--ttl[Time duration this record should be cached for. Uses the same syntax as the lifetime option. (caution: experimental).]' \
|
||||
'(-k --key)'{-k,--key}"[Name of the key to be used or a valid PeerID, as listed by 'ipfs key list -l'. Default: self.]" \
|
||||
'(-Q --quieter)'{-Q,--quieter}'[Write only final hash.]' \
|
||||
|
|
|
@ -98,7 +98,7 @@ jaddr() {
|
|||
elif [[ $# -eq 2 ]]; then
|
||||
# Get unit address
|
||||
juju status "$1/$2" --format=json \
|
||||
| jq -r ".applications.\"$1\".units.\"$1/$2\".address"
|
||||
| jq -r ".applications.\"$1\".units.\"$1/$2\" | .address // .\"public-address\""
|
||||
else
|
||||
echo "Invalid number of arguments."
|
||||
echo "Usage: jaddr <app-name> [<unit-number>]"
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
#
|
||||
export MARKPATH=$HOME/.marks
|
||||
|
||||
|
||||
jump() {
|
||||
builtin cd -P "$MARKPATH/$1" 2>/dev/null || {echo "No such mark: $1"; return 1}
|
||||
local markpath="$(readlink $MARKPATH/$1)" || {echo "No such mark: $1"; return 1}
|
||||
builtin cd "$markpath" 2>/dev/null || {echo "Destination does not exist for mark [$1]: $markpath"; return 2}
|
||||
}
|
||||
|
||||
mark() {
|
||||
|
|
22
plugins/kind/README.md
Normal file
22
plugins/kind/README.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Kind plugin
|
||||
|
||||
This plugin adds completion for the [Kind](https://kind.sigs.k8s.io/) tool, as well
|
||||
as a few aliases for easier use.
|
||||
|
||||
To use it, add `kind` to the plugins array in your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... kind)
|
||||
```
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command |
|
||||
| ------- | ---------------------------- |
|
||||
| `kicc` | `kind create cluster` |
|
||||
| `kiccn` | `kind create cluster --name` |
|
||||
| `kigc` | `kind get clusters` |
|
||||
| `kidc` | `kind delete cluster` |
|
||||
| `kidcn` | `kind delete cluster --name` |
|
||||
| `kidca` | `kind delete clusters -A` |
|
||||
| `kigk` | `kind get kubeconfig` |
|
23
plugins/kind/kind.plugin.zsh
Normal file
23
plugins/kind/kind.plugin.zsh
Normal file
|
@ -0,0 +1,23 @@
|
|||
if (( ! $+commands[kind] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `kind`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_kind" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _kind
|
||||
_comps[kind]=_kind
|
||||
fi
|
||||
|
||||
# Generate and load kind completion
|
||||
kind completion zsh >! "$ZSH_CACHE_DIR/completions/_kind" &|
|
||||
|
||||
# Register aliases
|
||||
alias kicc="kind create cluster"
|
||||
alias kiccn="kind create cluster --name"
|
||||
alias kigc="kind get clusters"
|
||||
alias kidc="kind delete cluster"
|
||||
alias kidcn="kind delete cluster --name"
|
||||
alias kidca="kind delete clusters -A"
|
||||
alias kigk="kind get kubeconfig"
|
|
@ -136,6 +136,7 @@ the following environment variables:
|
|||
| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
|
||||
| `KUBE_PS1_CLUSTER_FUNCTION` | No default, must be user supplied | Function to customize how cluster is displayed |
|
||||
| `KUBE_PS1_NAMESPACE_FUNCTION` | No default, must be user supplied | Function to customize how namespace is displayed |
|
||||
| `KUBE_PS1_KUBECONFIG_SYMLINK` | `false` | Treat `KUBECONFIG` and `~/.kube/config` files as symbolic links |
|
||||
|
||||
For terminals that do not support UTF-8, the symbol will be replaced with the
|
||||
string `k8s`.
|
||||
|
|
|
@ -40,6 +40,7 @@ KUBE_PS1_NS_COLOR="${KUBE_PS1_NS_COLOR-cyan}"
|
|||
KUBE_PS1_BG_COLOR="${KUBE_PS1_BG_COLOR}"
|
||||
|
||||
KUBE_PS1_KUBECONFIG_CACHE="${KUBECONFIG}"
|
||||
KUBE_PS1_KUBECONFIG_SYMLINK="${KUBE_PS1_KUBECONFIG_SYMLINK:-false}"
|
||||
KUBE_PS1_DISABLE_PATH="${HOME}/.kube/kube-ps1/disabled"
|
||||
KUBE_PS1_LAST_TIME=0
|
||||
KUBE_PS1_CLUSTER_FUNCTION="${KUBE_PS1_CLUSTER_FUNCTION}"
|
||||
|
@ -190,6 +191,17 @@ _kube_ps1_file_newer_than() {
|
|||
local file=$1
|
||||
local check_time=$2
|
||||
|
||||
if [[ "${KUBE_PS1_KUBECONFIG_SYMLINK}" == "true" ]]; then
|
||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
mtime=$(zstat -L +mtime "${file}")
|
||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
||||
# GNU stat
|
||||
mtime=$(stat -c %Y "${file}")
|
||||
else
|
||||
# BSD stat
|
||||
mtime=$(stat -f %m "$file")
|
||||
fi
|
||||
else
|
||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
mtime=$(zstat +mtime "${file}")
|
||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
||||
|
@ -199,6 +211,7 @@ _kube_ps1_file_newer_than() {
|
|||
# BSD stat
|
||||
mtime=$(stat -L -f %m "$file")
|
||||
fi
|
||||
fi
|
||||
|
||||
[[ "${mtime}" -gt "${check_time}" ]]
|
||||
}
|
||||
|
|
|
@ -162,6 +162,7 @@ alias kdelsa="kubectl delete sa"
|
|||
|
||||
# DaemonSet management.
|
||||
alias kgds='kubectl get daemonset'
|
||||
alias kgdsa='kubectl get daemonset --all-namespaces'
|
||||
alias kgdsw='kgds --watch'
|
||||
alias keds='kubectl edit daemonset'
|
||||
alias kdds='kubectl describe daemonset'
|
||||
|
|
|
@ -17,9 +17,9 @@ One can rename default context name for better readability.
|
|||
|
||||
_Example_. Add to **.zshrc**:
|
||||
```
|
||||
kubectx_mapping[minikube]="mini"
|
||||
kubectx_mapping[context_name_from_kubeconfig]="$emoji[wolf_face]"
|
||||
kubectx_mapping[production_cluster]="%{$fg[yellow]%}prod!%{$reset_color%}"
|
||||
kubectx_mapping["minikube"]="mini"
|
||||
kubectx_mapping["context_name_from_kubeconfig"]="$emoji[wolf_face]"
|
||||
kubectx_mapping["production_cluster"]="%{$fg[yellow]%}prod!%{$reset_color%}"
|
||||
```
|
||||
|
||||
![staging](stage.png)
|
||||
|
|
|
@ -9,5 +9,5 @@ function kubectx_prompt_info() {
|
|||
|
||||
# use value in associative array if it exists
|
||||
# otherwise fall back to the context name
|
||||
echo "${kubectx_mapping[$current_ctx]:-${current_ctx:gs/%/%%}}"
|
||||
echo "${kubectx_mapping[\"$current_ctx\"]:-${current_ctx:gs/%/%%}}"
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ To use it, add `lando` to the plugins array in your zshrc file:
|
|||
plugins=(... lando)
|
||||
```
|
||||
|
||||
## ALIASES:
|
||||
## Wrapped Commands
|
||||
|
||||
| Alias | Description |
|
||||
|:----------:|:----------------:|
|
||||
|
@ -21,16 +21,34 @@ plugins=(... lando)
|
|||
| `wp` | `lando wp` |
|
||||
| `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:
|
||||
|
||||
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 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:
|
||||
|
||||
- `LANDO_ZSH_SITES_DIRECTORY`: The plugin will stop searching through parents for `CONFIG_FILE` once it hits this directory.
|
||||
- `LANDO_ZSH_CONFIG_FILE`: The plugin will check to see if this provided file exists to check for presence of Lando.
|
||||
> 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_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:
|
||||
|
||||
|
|
|
@ -1,25 +1,36 @@
|
|||
# Settings
|
||||
: ${LANDO_ZSH_SITES_DIRECTORY:="$HOME/Sites"}
|
||||
: ${LANDO_ZSH_CONFIG_FILE:=.lando.yml}
|
||||
: ${LANDO_ZSH_WRAPPED_COMMANDS:="
|
||||
artisan
|
||||
composer
|
||||
drush
|
||||
gulp
|
||||
npm
|
||||
php
|
||||
wp
|
||||
yarn
|
||||
"}
|
||||
|
||||
# Enable multiple commands with lando.
|
||||
function artisan \
|
||||
composer \
|
||||
drush \
|
||||
gulp \
|
||||
npm \
|
||||
php \
|
||||
wp \
|
||||
yarn {
|
||||
if checkForLandoFile; then
|
||||
lando "$0" "$@"
|
||||
function ${=LANDO_ZSH_WRAPPED_COMMANDS} {
|
||||
# If the lando task is available in `lando --help`, then it means:
|
||||
#
|
||||
# 1. `lando` is in a project with a `.lando.yml` file.
|
||||
# 2. The lando task is available for lando, based on the .lando.yml config file.
|
||||
#
|
||||
# This has a penalty of about 250ms, so we still want to check if the lando file
|
||||
# exists before, which is the fast path. If it exists, checking help output is
|
||||
# still faster than running the command and failing.
|
||||
if _lando_file_exists && lando --help 2>&1 | command grep -Eq "^ +lando $0 "; then
|
||||
command lando "$0" "$@"
|
||||
else
|
||||
command "$0" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check for the file in the current and parent directories.
|
||||
checkForLandoFile() {
|
||||
_lando_file_exists() {
|
||||
# Only bother checking for lando within the Sites directory.
|
||||
if [[ "$PWD/" != "$LANDO_ZSH_SITES_DIRECTORY"/* ]]; then
|
||||
# Not within $LANDO_ZSH_SITES_DIRECTORY
|
||||
|
|
|
@ -224,6 +224,8 @@ function quick-look() {
|
|||
}
|
||||
|
||||
function man-preview() {
|
||||
[[ $# -eq 0 ]] && >&2 echo "Usage: $0 command1 [command2 ...]" && return 1
|
||||
|
||||
local page
|
||||
for page in "${(@f)"$(man -w $@)"}"; do
|
||||
command mandoc -Tpdf $page | open -f -a Preview
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# Autocompletion for Minikube.
|
||||
#
|
||||
if (( $+commands[minikube] )); then
|
||||
__MINIKUBE_COMPLETION_FILE="${ZSH_CACHE_DIR}/minikube_completion"
|
||||
|
||||
if [[ ! -f $__MINIKUBE_COMPLETION_FILE ]]; then
|
||||
minikube completion zsh >! $__MINIKUBE_COMPLETION_FILE
|
||||
if (( ! $+commands[minikube] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
[[ -f $__MINIKUBE_COMPLETION_FILE ]] && source $__MINIKUBE_COMPLETION_FILE
|
||||
|
||||
unset __MINIKUBE_COMPLETION_FILE
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `minikube`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_minikube" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _minikube
|
||||
_comps[minikube]=_minikube
|
||||
fi
|
||||
|
||||
minikube completion zsh >| "$ZSH_CACHE_DIR/completions/_minikube" &|
|
||||
|
|
32
plugins/mise/README.md
Normal file
32
plugins/mise/README.md
Normal file
|
@ -0,0 +1,32 @@
|
|||
# mise
|
||||
|
||||
Adds integration with [mise](https://github.com/jdx/mise) (formerly `rtx`), a runtime executor compatible with
|
||||
npm, nodenv, pyenv, etc. mise is written in rust and is very fast. 20x-200x faster than asdf. With that being
|
||||
said, mise is compatible with asdf plugins and .tool-versions files. It can be used as a drop-in replacement.
|
||||
|
||||
## Installation
|
||||
|
||||
1. [Download & install mise](https://github.com/jdx/mise#installation) by running the following:
|
||||
|
||||
```bash
|
||||
curl https://mise.jdx.dev/install.sh | sh
|
||||
```
|
||||
|
||||
2. [Enable mise](https://github.com/jdx/mise#quickstart) by adding it to your `plugins` definition in
|
||||
`~/.zshrc`.
|
||||
|
||||
```bash
|
||||
plugins=(mise)
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
See the [mise readme](https://github.com/jdx/mise#table-of-contents) for information on how to use mise. Here
|
||||
are a few examples:
|
||||
|
||||
```bash
|
||||
mise install node Install the current version specified in .tool-versions/.mise.toml
|
||||
mise use -g node@system Use system node as global default
|
||||
mise install node@20.0.0 Install a specific version number
|
||||
mise use -g node@20 Use node-20.x as global default
|
||||
```
|
23
plugins/mise/mise.plugin.zsh
Normal file
23
plugins/mise/mise.plugin.zsh
Normal file
|
@ -0,0 +1,23 @@
|
|||
# TODO: 2024-01-03 remove rtx support
|
||||
local __mise=mise
|
||||
if (( ! $+commands[mise] )); then
|
||||
if (( $+commands[rtx] )); then
|
||||
__mise=rtx
|
||||
else
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
# Load mise hooks
|
||||
eval "$($__mise activate zsh)"
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `mise`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_$__mise" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _$__mise
|
||||
_comps[$__mise]=_$__mise
|
||||
fi
|
||||
|
||||
# Generate and load mise completion
|
||||
$__mise completion zsh >| "$ZSH_CACHE_DIR/completions/_$__mise" &|
|
|
@ -97,7 +97,7 @@ __run() {
|
|||
'-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
|
||||
'-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
|
||||
'-no-color[Disables colored command output.]' \
|
||||
'-check-index[If set, the job is only registered or updated if the the passed job modify index matches the server side version. If a check-index value of zero is passed, the job is only registered if it does not yet exist. If a non-zero value is passed, it ensures that the job is being updated from a known state. The use of this flag is most common in conjunction with plan command.]' \
|
||||
'-check-index[If set, the job is only registered or updated if the passed job modify index matches the server side version. If a check-index value of zero is passed, the job is only registered if it does not yet exist. If a non-zero value is passed, it ensures that the job is being updated from a known state. The use of this flag is most common in conjunction with plan command.]' \
|
||||
'-detach[Return immediately instead of entering monitor mode. After job submission, the evaluation ID will be printed to the screen, which can be used to examine the evaluation using the eval-status command.]' \
|
||||
'-output[Output the JSON that would be submitted to the HTTP API without submitting the job.]' \
|
||||
'-verbose[Show full information.]'
|
||||
|
|
|
@ -30,6 +30,7 @@ plugins=(... npm)
|
|||
| `npmi` | `npm info` | Run npm info |
|
||||
| `npmSe` | `npm search` | Run npm search |
|
||||
| `npmrd` | `npm run dev` | Run npm run dev |
|
||||
| `npmrb` | `npm run build` | Run npm run build |
|
||||
|
||||
## `npm install` / `npm uninstall` toggle
|
||||
|
||||
|
|
|
@ -73,6 +73,9 @@ alias npmSe="npm search"
|
|||
# Run npm run dev
|
||||
alias npmrd="npm run dev"
|
||||
|
||||
# Run npm run build
|
||||
alias npmrb="npm run build"
|
||||
|
||||
npm_toggle_install_uninstall() {
|
||||
# Look up to the previous 2 history commands
|
||||
local line
|
||||
|
|
|
@ -43,8 +43,7 @@ zstyle ':omz:plugins:nvm' lazy-cmd eslint prettier typescript ...
|
|||
|
||||
#### `.nvmrc` autoload
|
||||
|
||||
Note: _this option cannot be used at the same time as `lazy`. `autoload` will override it and load `nvm` at
|
||||
startup._
|
||||
Note: _if used at the same time as `lazy`, `autoload` will start working only after nvm has been lazy-loaded_
|
||||
|
||||
If set, the plugin will automatically load a node version when if finds a
|
||||
[`.nvmrc` file](https://github.com/nvm-sh/nvm#nvmrc) in the current working directory indicating which node
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
#compdef nvm
|
||||
#autoload
|
||||
|
||||
[[ -f "$NVM_DIR/nvm.sh" ]] || return 0
|
||||
|
||||
local -a _1st_arguments
|
||||
_1st_arguments=(
|
||||
'help:show help'
|
||||
'--version:print out the latest released version of nvm'
|
||||
'install:download and install a version in <node|iojs|node version number>'
|
||||
'install-latest-npm:download and install the latest npm version'
|
||||
'uninstall:uninstall a version'
|
||||
'use:modify PATH to use <version>. Uses .nvmrc if available'
|
||||
'exec:run <command> on <version>. Uses .nvmrc if available'
|
||||
'run:run `node` on <version> with <args> as arguments. Uses .nvmrc if available'
|
||||
'current:list installed versions'
|
||||
'ls:list installed versions or versions matching a given description'
|
||||
'version:resolve the given description to a single local version'
|
||||
'version-remote:resolve the given description to a single remote version'
|
||||
'ls-remote:list remote versions available for install'
|
||||
'deactivate:undo effects of `nvm` on current shell'
|
||||
'alias:show or set aliases'
|
||||
'unalias:deletes an alias'
|
||||
'reinstall-packages:reinstall global `npm` packages contained in <version> to current version'
|
||||
'unload:unload `nvm` from shell'
|
||||
'which:display path to installed node version. Uses .nvmrc if available'
|
||||
)
|
||||
|
||||
_arguments -C '*:: :->subcmds' && return 0
|
||||
|
||||
if (( CURRENT == 1 )); then
|
||||
_describe -t commands "nvm subcommand" _1st_arguments
|
||||
return
|
||||
fi
|
|
@ -1,3 +1,7 @@
|
|||
# Don't try to load nvm if command already available
|
||||
# Note: nvm is a function so we need to use `which`
|
||||
which nvm &>/dev/null && return
|
||||
|
||||
# See https://github.com/nvm-sh/nvm#installation-and-update
|
||||
if [[ -z "$NVM_DIR" ]]; then
|
||||
if [[ -d "$HOME/.nvm" ]]; then
|
||||
|
@ -12,36 +16,35 @@ if [[ -z "$NVM_DIR" ]]; then
|
|||
fi
|
||||
fi
|
||||
|
||||
# Don't try to load nvm if command already available
|
||||
# Note: nvm is a function so we need to use `which`
|
||||
which nvm &>/dev/null && return
|
||||
|
||||
if [[ -z "$NVM_DIR" ]] || [[ ! -f "$NVM_DIR/nvm.sh" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if zstyle -t ':omz:plugins:nvm' lazy && \
|
||||
! zstyle -t ':omz:plugins:nvm' autoload; then
|
||||
# Call nvm when first using nvm, node, npm, pnpm, yarn or other commands in lazy-cmd
|
||||
zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd
|
||||
eval "
|
||||
function nvm node npm npx pnpm yarn $nvm_lazy_cmd {
|
||||
unfunction nvm node npm npx pnpm yarn $nvm_lazy_cmd
|
||||
# Load nvm if it exists in \$NVM_DIR
|
||||
[[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\"
|
||||
\"\$0\" \"\$@\"
|
||||
function _omz_load_nvm_completion {
|
||||
local _nvm_completion
|
||||
# Load nvm bash completion
|
||||
for _nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_completion.d/nvm"; do
|
||||
if [[ -f "$_nvm_completion" ]]; then
|
||||
# Load bashcompinit
|
||||
autoload -U +X bashcompinit && bashcompinit
|
||||
# Bypass compinit call in nvm bash completion script. See:
|
||||
# https://github.com/nvm-sh/nvm/blob/4436638/bash_completion#L86-L93
|
||||
ZSH_VERSION= source "$_nvm_completion"
|
||||
break
|
||||
fi
|
||||
done
|
||||
unfunction _omz_load_nvm_completion
|
||||
}
|
||||
"
|
||||
unset nvm_lazy_cmd
|
||||
else
|
||||
source "$NVM_DIR/nvm.sh"
|
||||
|
||||
function _omz_setup_autoload {
|
||||
if ! zstyle -t ':omz:plugins:nvm' autoload; then
|
||||
unfunction _omz_setup_autoload
|
||||
return
|
||||
fi
|
||||
|
||||
# Autoload nvm when finding a .nvmrc file in the current directory
|
||||
# Adapted from: https://github.com/nvm-sh/nvm#zsh
|
||||
if zstyle -t ':omz:plugins:nvm' autoload; then
|
||||
function load-nvmrc {
|
||||
local node_version="$(nvm version)"
|
||||
local nvmrc_path="$(nvm_find_nvmrc)"
|
||||
local nvm_silent=""
|
||||
zstyle -t ':omz:plugins:nvm' silent-autoload && nvm_silent="--silent"
|
||||
|
@ -54,10 +57,8 @@ if zstyle -t ':omz:plugins:nvm' autoload; then
|
|||
elif [[ "$nvmrc_node_version" != "$node_version" ]]; then
|
||||
nvm use $nvm_silent
|
||||
fi
|
||||
elif [[ "$node_version" != "$(nvm version default)" ]]; then
|
||||
if [[ -z $nvm_silent ]]; then
|
||||
echo "Reverting to nvm default version"
|
||||
fi
|
||||
elif [[ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ]] && [[ "$(nvm version)" != "$(nvm version default)" ]]; then
|
||||
[[ -z $nvm_silent ]] && echo "Reverting to nvm default version"
|
||||
|
||||
nvm use default $nvm_silent
|
||||
fi
|
||||
|
@ -67,18 +68,30 @@ if zstyle -t ':omz:plugins:nvm' autoload; then
|
|||
add-zsh-hook chpwd load-nvmrc
|
||||
|
||||
load-nvmrc
|
||||
fi
|
||||
unfunction _omz_setup_autoload
|
||||
}
|
||||
|
||||
# Load nvm bash completion
|
||||
for nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_completion.d/nvm"; do
|
||||
if [[ -f "$nvm_completion" ]]; then
|
||||
# Load bashcompinit
|
||||
autoload -U +X bashcompinit && bashcompinit
|
||||
# Bypass compinit call in nvm bash completion script. See:
|
||||
# https://github.com/nvm-sh/nvm/blob/4436638/bash_completion#L86-L93
|
||||
ZSH_VERSION= source "$nvm_completion"
|
||||
break
|
||||
if zstyle -t ':omz:plugins:nvm' lazy; then
|
||||
# Call nvm when first using nvm, node, npm, pnpm, yarn or other commands in lazy-cmd
|
||||
zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd
|
||||
nvm_lazy_cmd=(nvm node npm npx pnpm yarn $nvm_lazy_cmd) # default values
|
||||
eval "
|
||||
function $nvm_lazy_cmd {
|
||||
for func in $nvm_lazy_cmd; do
|
||||
if (( \$+functions[\$func] )); then
|
||||
unfunction \$func
|
||||
fi
|
||||
done
|
||||
|
||||
unset NVM_HOMEBREW nvm_completion
|
||||
# Load nvm if it exists in \$NVM_DIR
|
||||
[[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\"
|
||||
_omz_load_nvm_completion
|
||||
_omz_setup_autoload
|
||||
\"\$0\" \"\$@\"
|
||||
}
|
||||
"
|
||||
unset nvm_lazy_cmd
|
||||
else
|
||||
source "$NVM_DIR/nvm.sh"
|
||||
_omz_load_nvm_completion
|
||||
_omz_setup_autoload
|
||||
fi
|
||||
|
|
|
@ -34,6 +34,8 @@ toggle set the `PER_DIRECTORY_HISTORY_TOGGLE` environment variable.
|
|||
and global histories.
|
||||
* `PER_DIRECTORY_HISTORY_TOGGLE` is the key binding used to run the toggle-history
|
||||
function above (default `^G`)
|
||||
* `PER_DIRECTORY_HISTORY_PRINT_MODE_CHANGE` is a variable which toggles whether
|
||||
the current mode is printed to the screen following a mode change (default `true`)
|
||||
|
||||
## History
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# The idea/inspiration for a per directory history is from Stewart MacArthur[1]
|
||||
# and Dieter[2], the implementation idea is from Bart Schaefer on the the zsh
|
||||
# and Dieter[2], the implementation idea is from Bart Schaefer on the zsh
|
||||
# mailing list[3]. The implementation is by Jim Hester in September 2012.
|
||||
#
|
||||
# [1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
|
||||
|
@ -59,6 +59,7 @@
|
|||
[[ -z $HISTORY_BASE ]] && HISTORY_BASE="$HOME/.directory_history"
|
||||
[[ -z $HISTORY_START_WITH_GLOBAL ]] && HISTORY_START_WITH_GLOBAL=false
|
||||
[[ -z $PER_DIRECTORY_HISTORY_TOGGLE ]] && PER_DIRECTORY_HISTORY_TOGGLE='^G'
|
||||
[[ -z $PER_DIRECTORY_HISTORY_PRINT_MODE_CHANGE ]] && PER_DIRECTORY_HISTORY_PRINT_MODE_CHANGE=true
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# toggle global/directory history used for searching - ctrl-G by default
|
||||
|
@ -68,14 +69,16 @@ function per-directory-history-toggle-history() {
|
|||
if [[ $_per_directory_history_is_global == true ]]; then
|
||||
_per-directory-history-set-directory-history
|
||||
_per_directory_history_is_global=false
|
||||
print -n "\nusing local history"
|
||||
if [[ $PER_DIRECTORY_HISTORY_PRINT_MODE_CHANGE == true ]]; then
|
||||
zle -M "using local history"
|
||||
fi
|
||||
else
|
||||
_per-directory-history-set-global-history
|
||||
_per_directory_history_is_global=true
|
||||
print -n "\nusing global history"
|
||||
if [[ $PER_DIRECTORY_HISTORY_PRINT_MODE_CHANGE == true ]]; then
|
||||
zle -M "using global history"
|
||||
fi
|
||||
fi
|
||||
zle .push-line
|
||||
zle .accept-line
|
||||
}
|
||||
|
||||
autoload per-directory-history-toggle-history
|
||||
|
|
|
@ -19,4 +19,4 @@ plugins=(... postgres)
|
|||
| stoppost | `pg_ctl -D /usr/local/var/postgres stop -s -m fast` | Stop postgres server |
|
||||
| restartpost | `stoppost && sleep 1 && startpost` | Restart (calls stop, then start) |
|
||||
| reloadpost | `pg_ctl reload -D /usr/local/var/postgres -s` | Reload postgres configuration (some setting require restart)|
|
||||
| statuspost | `pg_ctl status -D /usr/local/var/postgres -s` | Check startus of postgres server (running, stopped) |
|
||||
| statuspost | `pg_ctl status -D /usr/local/var/postgres -s` | Check status of postgres server (running, stopped) |
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue